@quadrel-enterprise-ui/framework 20.11.0 → 20.11.2-beta.150.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/quadrel-enterprise-ui-framework.mjs +612 -320
- package/fesm2022/quadrel-enterprise-ui-framework.mjs.map +1 -1
- package/index.d.ts +237 -86
- package/package.json +1 -1
- package/src/assets/i18n/de.json +4 -0
- package/src/assets/i18n/en.json +6 -0
- package/src/assets/i18n/fr.json +7 -0
- package/src/assets/i18n/it.json +6 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ElementRef, Directive, InjectionToken, HostBinding, Input, ViewEncapsulation, Component, Injectable, Injector, HostListener, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild, NgModule, EventEmitter, Output, Renderer2, Pipe, ViewContainerRef, NO_ERRORS_SCHEMA, SecurityContext, NgZone, ViewChildren, forwardRef,
|
|
2
|
+
import { inject, ElementRef, Directive, InjectionToken, HostBinding, Input, ViewEncapsulation, Component, Injectable, Injector, HostListener, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild, NgModule, EventEmitter, Output, Renderer2, Pipe, ViewContainerRef, NO_ERRORS_SCHEMA, DestroyRef, SecurityContext, NgZone, ViewChildren, forwardRef, ContentChildren, ContentChild, isDevMode, QueryList, CUSTOM_ELEMENTS_SCHEMA, provideAppInitializer, TemplateRef } from '@angular/core';
|
|
3
3
|
import { Dialog, DialogRef, DialogModule } from '@angular/cdk/dialog';
|
|
4
4
|
import * as i1 from '@angular/common';
|
|
5
5
|
import { CommonModule, NgFor, NgIf, NgClass, NgTemplateOutlet, AsyncPipe } from '@angular/common';
|
|
@@ -18,6 +18,7 @@ import { NG_VALUE_ACCESSOR, FormsModule, UntypedFormControl, UntypedFormArray, U
|
|
|
18
18
|
import { ComponentPortal } from '@angular/cdk/portal';
|
|
19
19
|
import { OverlayPositionBuilder, Overlay } from '@angular/cdk/overlay';
|
|
20
20
|
import isNumber from 'lodash/isNumber';
|
|
21
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
21
22
|
import { EventSourcePolyfill } from 'event-source-polyfill';
|
|
22
23
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
23
24
|
import * as i3$1 from 'ngx-editor';
|
|
@@ -31,7 +32,6 @@ import 'moment/locale/fr';
|
|
|
31
32
|
import 'moment/locale/it';
|
|
32
33
|
import moment$1 from 'moment/moment';
|
|
33
34
|
import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
|
|
34
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
35
35
|
import * as i1$1 from '@ngrx/store';
|
|
36
36
|
import { createAction, props, createReducer, on, createSelector, createFeatureSelector, Store, StoreModule } from '@ngrx/store';
|
|
37
37
|
import { diff } from 'deep-object-diff';
|
|
@@ -52,7 +52,7 @@ class QdButtonLinkDirective {
|
|
|
52
52
|
ngOnInit() {
|
|
53
53
|
// TODO: Delete directive "qd-button-link" in Version 21
|
|
54
54
|
if (this._elementRef.nativeElement.attributes.hasOwnProperty('qd-button-link')) {
|
|
55
|
-
console.warn('
|
|
55
|
+
console.warn('Quadrel Framework | QdButtonLink - The directive "qd-button-link" is deprecated. Please use "qdButtonLink" instead.');
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdButtonLinkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
@@ -649,7 +649,7 @@ class QdIconComponent {
|
|
|
649
649
|
this.iconCode = icon.htmlEntity;
|
|
650
650
|
}
|
|
651
651
|
if (!icon) {
|
|
652
|
-
console.error(`
|
|
652
|
+
console.error(`Quadrel Framework | QdIcon - "${this.icon}" does not appear to be a valid Quadrel Icon. Please check documentation for available icons.`);
|
|
653
653
|
}
|
|
654
654
|
}
|
|
655
655
|
insertIconSvgOnce() {
|
|
@@ -698,7 +698,7 @@ class QdSnackbarService {
|
|
|
698
698
|
if (this.isPausing)
|
|
699
699
|
return;
|
|
700
700
|
if (!this._overlayRef) {
|
|
701
|
-
console.error('
|
|
701
|
+
console.error('Quadrel Framework | QdNotifications - You are trying to open a notification as snackbar but there is no Snackbar Listener initialized.');
|
|
702
702
|
return;
|
|
703
703
|
}
|
|
704
704
|
this._notificationsSubject.next([...this._notificationsSubject.value, notification]);
|
|
@@ -916,7 +916,7 @@ class QdNotificationsService {
|
|
|
916
916
|
return;
|
|
917
917
|
if (this.zeroToInfinity(snackbarNotificationLifeTime) >
|
|
918
918
|
this.zeroToInfinity(this.getNotificationLifeTime(notification))) {
|
|
919
|
-
console.warn('The life time of the snackbar notification must be shorter than the life time of the main notification.');
|
|
919
|
+
console.warn('Quadrel Framework | QdNotifications - The life time of the snackbar notification must be shorter than the life time of the main notification.');
|
|
920
920
|
return;
|
|
921
921
|
}
|
|
922
922
|
setTimeout(() => this.snackbarService.close(notification.uuid), snackbarNotificationLifeTime * 1000);
|
|
@@ -926,7 +926,7 @@ class QdNotificationsService {
|
|
|
926
926
|
if (osNotificationLifeTime === undefined)
|
|
927
927
|
return;
|
|
928
928
|
if (this.zeroToInfinity(osNotificationLifeTime) > this.zeroToInfinity(this.getNotificationLifeTime(notification))) {
|
|
929
|
-
console.warn('The life time of the OS notification must be shorter than the life time of the main notification.');
|
|
929
|
+
console.warn('Quadrel Framework | QdNotifications - The life time of the OS notification must be shorter than the life time of the main notification.');
|
|
930
930
|
return;
|
|
931
931
|
}
|
|
932
932
|
setTimeout(() => this.osNotificationsService.close(notification.uuid), osNotificationLifeTime * 1000);
|
|
@@ -1046,7 +1046,7 @@ class QdButtonComponent {
|
|
|
1046
1046
|
ngOnInit() {
|
|
1047
1047
|
// TODO: Delete directive "qd-button" in Version 20
|
|
1048
1048
|
if (this._elementRef.nativeElement.attributes.hasOwnProperty('qd-button')) {
|
|
1049
|
-
console.warn('
|
|
1049
|
+
console.warn('Quadrel Framework | QdButton - The directive "qd-button" is deprecated. Please use "qdButton" instead.');
|
|
1050
1050
|
}
|
|
1051
1051
|
}
|
|
1052
1052
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -1265,7 +1265,7 @@ class QdDialogService {
|
|
|
1265
1265
|
this.clearPageDialogCanCloseForce();
|
|
1266
1266
|
this.updateDialogData(data);
|
|
1267
1267
|
if (!this.pageDialogHost)
|
|
1268
|
-
throw new Error('
|
|
1268
|
+
throw new Error('Quadrel Framework | QdDialog - Page dialog host component is not provided.');
|
|
1269
1269
|
this.open(this.pageDialogHost, { dialogSize: QdDialogSize.FullWidth });
|
|
1270
1270
|
this.navigateInsideDialog(routePath || this.getFirstDialogOutletRoutePathOrThrow());
|
|
1271
1271
|
}
|
|
@@ -1326,7 +1326,7 @@ class QdDialogService {
|
|
|
1326
1326
|
getFirstDialogOutletRoutePathOrThrow() {
|
|
1327
1327
|
const firstDialogOutletRoutePath = this.router.config.find(route => route.outlet === 'dialog')?.path;
|
|
1328
1328
|
if (!firstDialogOutletRoutePath || this.hasRoutePathParameters(firstDialogOutletRoutePath)) {
|
|
1329
|
-
throw new Error('
|
|
1329
|
+
throw new Error('Quadrel Framework | QdDialog - Please provide a route for the openPageDialogWithBreadcrumbs method. ' +
|
|
1330
1330
|
'The main dialog route could not be determined automatically.');
|
|
1331
1331
|
}
|
|
1332
1332
|
return firstDialogOutletRoutePath;
|
|
@@ -1368,7 +1368,7 @@ class QdIconButtonComponent {
|
|
|
1368
1368
|
ngOnInit() {
|
|
1369
1369
|
// TODO: Delete directive "qd-icon-button" in Version 15
|
|
1370
1370
|
if (this._elementRef.nativeElement.attributes.hasOwnProperty('qd-icon-button')) {
|
|
1371
|
-
console.warn('
|
|
1371
|
+
console.warn('Quadrel Framework | QdIconButton - The directive "qd-icon-button" is deprecated. Please use "qdIconButton" instead.');
|
|
1372
1372
|
}
|
|
1373
1373
|
}
|
|
1374
1374
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdIconButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -1604,6 +1604,24 @@ const updateHtmlLang = (lang) => {
|
|
|
1604
1604
|
const htmlNode = document.documentElement;
|
|
1605
1605
|
htmlNode.setAttribute('lang', lang);
|
|
1606
1606
|
};
|
|
1607
|
+
const SERVICE_NAV_LOCALE_DEFAULTS = {
|
|
1608
|
+
DE: 'de-CH',
|
|
1609
|
+
IT: 'it-CH',
|
|
1610
|
+
FR: 'fr-CH',
|
|
1611
|
+
EN: 'en-GB'
|
|
1612
|
+
};
|
|
1613
|
+
const determineLocale = (serviceNavLanguage, browserLocales) => {
|
|
1614
|
+
const browserLocale = browserLocales?.[0] ?? navigator.language;
|
|
1615
|
+
if (!serviceNavLanguage) {
|
|
1616
|
+
const browserLocaleUpper = browserLocale.toUpperCase();
|
|
1617
|
+
return SERVICE_NAV_LOCALE_DEFAULTS[browserLocaleUpper] ?? browserLocale;
|
|
1618
|
+
}
|
|
1619
|
+
const serviceNavLangUpper = serviceNavLanguage.toUpperCase();
|
|
1620
|
+
const browserLanguage = browserLocale.split('-')[0].toUpperCase();
|
|
1621
|
+
if (browserLanguage === serviceNavLangUpper)
|
|
1622
|
+
return browserLocale;
|
|
1623
|
+
return SERVICE_NAV_LOCALE_DEFAULTS[serviceNavLangUpper] ?? browserLocale;
|
|
1624
|
+
};
|
|
1607
1625
|
|
|
1608
1626
|
const constantCase = (str) => upperCase(str).replace(/ /g, '_');
|
|
1609
1627
|
|
|
@@ -6636,6 +6654,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
6636
6654
|
}]
|
|
6637
6655
|
}] });
|
|
6638
6656
|
|
|
6657
|
+
const QD_SAFE_BOTTOM_OFFSET = new InjectionToken('QD_SAFE_BOTTOM_OFFSET');
|
|
6658
|
+
|
|
6639
6659
|
let QdFileSizePipe$1 = class QdFileSizePipe {
|
|
6640
6660
|
translate = inject(TranslateService, { optional: true });
|
|
6641
6661
|
transform(bytes) {
|
|
@@ -6687,10 +6707,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
6687
6707
|
}]
|
|
6688
6708
|
}] });
|
|
6689
6709
|
|
|
6710
|
+
const QD_POPOVER_TOP_FIRST = new InjectionToken('QD_POPOVER_TOP_FIRST');
|
|
6711
|
+
|
|
6690
6712
|
class QdProjectionGuardComponent {
|
|
6691
6713
|
elementRef = inject(ElementRef);
|
|
6692
6714
|
isDisabled = false;
|
|
6693
|
-
warningMessage = '
|
|
6715
|
+
warningMessage = 'Quadrel Framework | QdProjectionGuard - This content is not supported and cannot be displayed:';
|
|
6694
6716
|
wildcardSlot;
|
|
6695
6717
|
ngAfterContentInit() {
|
|
6696
6718
|
if (this.isDisabled)
|
|
@@ -6728,156 +6750,123 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
6728
6750
|
}]
|
|
6729
6751
|
}] });
|
|
6730
6752
|
|
|
6731
|
-
|
|
6732
|
-
|
|
6733
|
-
|
|
6734
|
-
|
|
6735
|
-
|
|
6736
|
-
|
|
6737
|
-
|
|
6738
|
-
};
|
|
6739
|
-
var panel = {
|
|
6740
|
-
sm: 432,
|
|
6741
|
-
md: 588,
|
|
6742
|
-
lg: 720
|
|
6743
|
-
};
|
|
6744
|
-
var base = {
|
|
6745
|
-
fontsize: 16
|
|
6746
|
-
};
|
|
6747
|
-
var globalVars = {
|
|
6748
|
-
breakpoints: breakpoints$1,
|
|
6749
|
-
panel: panel,
|
|
6750
|
-
base: base
|
|
6751
|
-
};
|
|
6752
|
-
|
|
6753
|
-
const convertPxToRem = (pixel) => `${parseFloat((pixel / globalVars.base.fontsize).toFixed(3))}rem`;
|
|
6754
|
-
|
|
6755
|
-
class QdTooltipComponent {
|
|
6756
|
-
content;
|
|
6757
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6758
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdTooltipComponent, isStandalone: false, selector: "qd-tooltip", inputs: { content: "content" }, ngImport: i0, template: "<ng-container *ngIf=\"content?.headline\">\n <strong>{{ content.headline }}</strong>\n</ng-container>\n\n<ng-container *ngFor=\"let paragraph of content.paragraphs\">\n <p>{{ paragraph }}</p>\n</ng-container>\n", styles: [":host{box-shadow:0 0 .625rem #979797;display:block;width:100%;max-width:16rem;padding:.5rem;border-radius:.5rem;background-color:#000;color:#fff;font-size:.75rem;line-height:1rem}:host strong,:host p{display:block}:host p{margin:0 0 .5rem}:host p:last-child{margin-bottom:0}\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"] }] });
|
|
6753
|
+
class QdLocaleService {
|
|
6754
|
+
_serviceNavLanguage$ = new BehaviorSubject(null);
|
|
6755
|
+
locale$ = this._serviceNavLanguage$.pipe(map(serviceNavLanguage => determineLocale(serviceNavLanguage, navigator.languages)));
|
|
6756
|
+
setServiceNavigationLanguage(language) {
|
|
6757
|
+
this._serviceNavLanguage$.next(language);
|
|
6758
|
+
}
|
|
6759
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdLocaleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6760
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdLocaleService, providedIn: 'root' });
|
|
6759
6761
|
}
|
|
6760
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type:
|
|
6761
|
-
type:
|
|
6762
|
-
args: [{
|
|
6763
|
-
}]
|
|
6764
|
-
type: Input
|
|
6765
|
-
}] } });
|
|
6762
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdLocaleService, decorators: [{
|
|
6763
|
+
type: Injectable,
|
|
6764
|
+
args: [{ providedIn: 'root' }]
|
|
6765
|
+
}] });
|
|
6766
6766
|
|
|
6767
|
-
|
|
6768
|
-
|
|
6769
|
-
|
|
6770
|
-
|
|
6771
|
-
|
|
6772
|
-
|
|
6773
|
-
|
|
6774
|
-
|
|
6775
|
-
|
|
6776
|
-
|
|
6777
|
-
|
|
6778
|
-
|
|
6779
|
-
*
|
|
6780
|
-
* The IntersectionObserver API is used for the implementation.
|
|
6781
|
-
* * @see https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver
|
|
6782
|
-
*
|
|
6783
|
-
* * Note: The intersection of the target is calculated by the IntersectionObserver only once, initially (can be extended later if required). After that it will be unsubscribed immediately.
|
|
6784
|
-
* */
|
|
6785
|
-
class QdTooltipAtIntersectionDirective {
|
|
6786
|
-
_host = inject(ElementRef);
|
|
6787
|
-
_positionBuilder = inject(OverlayPositionBuilder);
|
|
6788
|
-
_overlay = inject(Overlay);
|
|
6789
|
-
_overlayRef;
|
|
6790
|
-
_target;
|
|
6791
|
-
_observer$;
|
|
6792
|
-
_isIntersected = false;
|
|
6793
|
-
_destroyed$ = new Subject();
|
|
6794
|
-
ngAfterViewInit() {
|
|
6795
|
-
this.setTarget();
|
|
6796
|
-
this.observeTarget();
|
|
6797
|
-
this.createOverlay();
|
|
6798
|
-
this.subscribeShow();
|
|
6799
|
-
this.subscribeHide();
|
|
6767
|
+
class QdNumberInputService {
|
|
6768
|
+
_locale;
|
|
6769
|
+
_decimalSeparator;
|
|
6770
|
+
_groupSeparator;
|
|
6771
|
+
localeService = inject(QdLocaleService, { optional: true });
|
|
6772
|
+
destroyRef = inject(DestroyRef);
|
|
6773
|
+
ambiguityHintKeyDot = 'i18n.qd.input.number.ambiguousHint.dot';
|
|
6774
|
+
ambiguityHintKeyComma = 'i18n.qd.input.number.ambiguousHint.comma';
|
|
6775
|
+
invalidCharactersErrorKeyComma = 'i18n.qd.input.number.invalidCharacters.comma';
|
|
6776
|
+
invalidCharactersErrorKeyDot = 'i18n.qd.input.number.invalidCharacters.dot';
|
|
6777
|
+
get invalidCharactersErrorKey() {
|
|
6778
|
+
return this._decimalSeparator === ',' ? this.invalidCharactersErrorKeyComma : this.invalidCharactersErrorKeyDot;
|
|
6800
6779
|
}
|
|
6801
|
-
|
|
6802
|
-
this.
|
|
6803
|
-
this._destroyed$.next();
|
|
6804
|
-
this._destroyed$.complete();
|
|
6780
|
+
get decimalSeparator() {
|
|
6781
|
+
return this._decimalSeparator;
|
|
6805
6782
|
}
|
|
6806
|
-
|
|
6807
|
-
|
|
6783
|
+
get groupSeparator() {
|
|
6784
|
+
return this._groupSeparator;
|
|
6808
6785
|
}
|
|
6809
|
-
|
|
6810
|
-
|
|
6811
|
-
|
|
6812
|
-
|
|
6813
|
-
|
|
6814
|
-
|
|
6815
|
-
|
|
6816
|
-
|
|
6817
|
-
|
|
6818
|
-
if (UNSUBSCRIBE_IMMEDIATELY)
|
|
6819
|
-
this._observer$.unobserve(this._target);
|
|
6820
|
-
}
|
|
6821
|
-
}, options);
|
|
6822
|
-
this._observer$.observe(this._target);
|
|
6786
|
+
constructor() {
|
|
6787
|
+
if (this.localeService) {
|
|
6788
|
+
this.localeService.locale$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(locale => {
|
|
6789
|
+
this.detectSeparatorsForLocale(locale);
|
|
6790
|
+
});
|
|
6791
|
+
}
|
|
6792
|
+
else {
|
|
6793
|
+
this.detectSeparators();
|
|
6794
|
+
}
|
|
6823
6795
|
}
|
|
6824
|
-
|
|
6825
|
-
|
|
6826
|
-
this.
|
|
6827
|
-
this._target.style.cursor = 'help';
|
|
6796
|
+
detectSeparators() {
|
|
6797
|
+
const locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;
|
|
6798
|
+
this.detectSeparatorsForLocale(locale);
|
|
6828
6799
|
}
|
|
6829
|
-
|
|
6830
|
-
|
|
6831
|
-
|
|
6832
|
-
|
|
6833
|
-
|
|
6834
|
-
|
|
6835
|
-
|
|
6800
|
+
isValidNumber(value) {
|
|
6801
|
+
if (!value)
|
|
6802
|
+
return false;
|
|
6803
|
+
const escaped = this._decimalSeparator.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
6804
|
+
return new RegExp(`^-?\\d+(${escaped}\\d+)?$`).test(value);
|
|
6805
|
+
}
|
|
6806
|
+
detectSeparatorsForLocale(locale) {
|
|
6807
|
+
this._locale = locale;
|
|
6808
|
+
const parts = new Intl.NumberFormat(locale).formatToParts(1234567.89);
|
|
6809
|
+
this._decimalSeparator = parts.find(p => p.type === 'decimal')?.value ?? '.';
|
|
6810
|
+
this._groupSeparator = parts.find(p => p.type === 'group')?.value ?? ',';
|
|
6811
|
+
}
|
|
6812
|
+
filterValue(value) {
|
|
6813
|
+
let result = '';
|
|
6814
|
+
let hasDecimal = false;
|
|
6815
|
+
for (let i = 0; i < value.length; i++) {
|
|
6816
|
+
const char = value[i];
|
|
6817
|
+
if (char >= '0' && char <= '9') {
|
|
6818
|
+
result += char;
|
|
6819
|
+
}
|
|
6820
|
+
else if (char === this._decimalSeparator && !hasDecimal) {
|
|
6821
|
+
result += char;
|
|
6822
|
+
hasDecimal = true;
|
|
6823
|
+
}
|
|
6824
|
+
else if (char === '-' && i === 0) {
|
|
6825
|
+
result += char;
|
|
6826
|
+
}
|
|
6827
|
+
}
|
|
6828
|
+
return result;
|
|
6836
6829
|
}
|
|
6837
|
-
|
|
6838
|
-
|
|
6839
|
-
|
|
6840
|
-
|
|
6841
|
-
|
|
6842
|
-
|
|
6843
|
-
const tooltipRef = this._overlayRef.attach(tooltipPortal);
|
|
6844
|
-
tooltipRef.instance.content = content;
|
|
6845
|
-
});
|
|
6830
|
+
parseValue(value) {
|
|
6831
|
+
if (!value)
|
|
6832
|
+
return value;
|
|
6833
|
+
const normalized = value.split(this._groupSeparator).join('').replace(this._decimalSeparator, '.');
|
|
6834
|
+
const parsed = parseFloat(normalized);
|
|
6835
|
+
return isNaN(parsed) ? value : parsed;
|
|
6846
6836
|
}
|
|
6847
|
-
|
|
6848
|
-
|
|
6849
|
-
|
|
6850
|
-
|
|
6837
|
+
isAmbiguous(value) {
|
|
6838
|
+
if (typeof value !== 'string' || !value)
|
|
6839
|
+
return false;
|
|
6840
|
+
return /^-?[1-9]\d*[.,]\d{3}$/.test(value);
|
|
6851
6841
|
}
|
|
6852
|
-
|
|
6853
|
-
|
|
6854
|
-
|
|
6855
|
-
|
|
6856
|
-
};
|
|
6842
|
+
getAmbiguityHintKey(value) {
|
|
6843
|
+
if (typeof value === 'string' && value.includes('.'))
|
|
6844
|
+
return this.ambiguityHintKeyDot;
|
|
6845
|
+
return this.ambiguityHintKeyComma;
|
|
6857
6846
|
}
|
|
6858
|
-
|
|
6859
|
-
|
|
6860
|
-
|
|
6861
|
-
|
|
6862
|
-
|
|
6863
|
-
|
|
6864
|
-
|
|
6865
|
-
|
|
6866
|
-
|
|
6867
|
-
|
|
6868
|
-
|
|
6869
|
-
|
|
6870
|
-
|
|
6871
|
-
|
|
6847
|
+
formatNumberForViewonly(value) {
|
|
6848
|
+
if (value == null || value === '')
|
|
6849
|
+
return '';
|
|
6850
|
+
const str = String(value);
|
|
6851
|
+
const parsed = typeof value === 'number' ? value : this.parseValue(str);
|
|
6852
|
+
if (typeof parsed !== 'number')
|
|
6853
|
+
return str;
|
|
6854
|
+
return new Intl.NumberFormat(this._locale).format(parsed);
|
|
6855
|
+
}
|
|
6856
|
+
formatValueForDisplay(value) {
|
|
6857
|
+
if (value == null || value === '')
|
|
6858
|
+
return '';
|
|
6859
|
+
const str = String(value);
|
|
6860
|
+
if (this._decimalSeparator === '.')
|
|
6861
|
+
return str;
|
|
6862
|
+
return str.replace('.', this._decimalSeparator);
|
|
6863
|
+
}
|
|
6864
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdNumberInputService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6865
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdNumberInputService });
|
|
6872
6866
|
}
|
|
6873
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type:
|
|
6874
|
-
type:
|
|
6875
|
-
|
|
6876
|
-
selector: '[qdVisuallyHidden]',
|
|
6877
|
-
host: { class: 'qd-visually-hidden' },
|
|
6878
|
-
standalone: false
|
|
6879
|
-
}]
|
|
6880
|
-
}] });
|
|
6867
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdNumberInputService, decorators: [{
|
|
6868
|
+
type: Injectable
|
|
6869
|
+
}], ctorParameters: () => [] });
|
|
6881
6870
|
|
|
6882
6871
|
/**
|
|
6883
6872
|
* Manages a server-sent event (SSE) connection with automatic reconnection and heartbeat monitoring.
|
|
@@ -7100,10 +7089,10 @@ class QdPushEventsService {
|
|
|
7100
7089
|
this._listeners = [];
|
|
7101
7090
|
}
|
|
7102
7091
|
logWarn(message) {
|
|
7103
|
-
console.warn(`
|
|
7092
|
+
console.warn(`Quadrel Framework | QdPushEvents - ${message}`);
|
|
7104
7093
|
}
|
|
7105
7094
|
logError(message, err) {
|
|
7106
|
-
console.error(`
|
|
7095
|
+
console.error(`Quadrel Framework | QdPushEvents - ${message}`, err);
|
|
7107
7096
|
}
|
|
7108
7097
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPushEventsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7109
7098
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPushEventsService, providedIn: 'root' });
|
|
@@ -7115,6 +7104,144 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
7115
7104
|
}]
|
|
7116
7105
|
}] });
|
|
7117
7106
|
|
|
7107
|
+
var breakpoints$1 = {
|
|
7108
|
+
xs: 320,
|
|
7109
|
+
sm: 600,
|
|
7110
|
+
md: 960,
|
|
7111
|
+
lg: 1280,
|
|
7112
|
+
xl: 1600,
|
|
7113
|
+
xxl: 1800
|
|
7114
|
+
};
|
|
7115
|
+
var panel = {
|
|
7116
|
+
sm: 432,
|
|
7117
|
+
md: 588,
|
|
7118
|
+
lg: 720
|
|
7119
|
+
};
|
|
7120
|
+
var base = {
|
|
7121
|
+
fontsize: 16
|
|
7122
|
+
};
|
|
7123
|
+
var globalVars = {
|
|
7124
|
+
breakpoints: breakpoints$1,
|
|
7125
|
+
panel: panel,
|
|
7126
|
+
base: base
|
|
7127
|
+
};
|
|
7128
|
+
|
|
7129
|
+
const convertPxToRem = (pixel) => `${parseFloat((pixel / globalVars.base.fontsize).toFixed(3))}rem`;
|
|
7130
|
+
|
|
7131
|
+
class QdTooltipComponent {
|
|
7132
|
+
content;
|
|
7133
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7134
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdTooltipComponent, isStandalone: false, selector: "qd-tooltip", inputs: { content: "content" }, ngImport: i0, template: "<ng-container *ngIf=\"content?.headline\">\n <strong>{{ content.headline }}</strong>\n</ng-container>\n\n<ng-container *ngFor=\"let paragraph of content.paragraphs\">\n <p>{{ paragraph }}</p>\n</ng-container>\n", styles: [":host{box-shadow:0 0 .625rem #979797;display:block;width:100%;max-width:16rem;padding:.5rem;border-radius:.5rem;background-color:#000;color:#fff;font-size:.75rem;line-height:1rem}:host strong,:host p{display:block}:host p{margin:0 0 .5rem}:host p:last-child{margin-bottom:0}\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"] }] });
|
|
7135
|
+
}
|
|
7136
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdTooltipComponent, decorators: [{
|
|
7137
|
+
type: Component,
|
|
7138
|
+
args: [{ selector: 'qd-tooltip', standalone: false, template: "<ng-container *ngIf=\"content?.headline\">\n <strong>{{ content.headline }}</strong>\n</ng-container>\n\n<ng-container *ngFor=\"let paragraph of content.paragraphs\">\n <p>{{ paragraph }}</p>\n</ng-container>\n", styles: [":host{box-shadow:0 0 .625rem #979797;display:block;width:100%;max-width:16rem;padding:.5rem;border-radius:.5rem;background-color:#000;color:#fff;font-size:.75rem;line-height:1rem}:host strong,:host p{display:block}:host p{margin:0 0 .5rem}:host p:last-child{margin-bottom:0}\n"] }]
|
|
7139
|
+
}], propDecorators: { content: [{
|
|
7140
|
+
type: Input
|
|
7141
|
+
}] } });
|
|
7142
|
+
|
|
7143
|
+
const TARGET_SELECTOR = '.qd-intersection-target';
|
|
7144
|
+
const SHOW_EVENTS = ['mouseenter', 'mousemove'];
|
|
7145
|
+
const HIDE_EVENTS = ['mouseleave', 'click'];
|
|
7146
|
+
const HIDE_DELAY = 300;
|
|
7147
|
+
const OVERLAY_WIDTH = 280;
|
|
7148
|
+
const UNSUBSCRIBE_IMMEDIATELY = true;
|
|
7149
|
+
const THRESHOLD = 1;
|
|
7150
|
+
/**
|
|
7151
|
+
* QdTooltipAtIntersectionDirective provides a tooltip. This will be triggered if the content is intersected.
|
|
7152
|
+
*
|
|
7153
|
+
* * Selector: [qdTooltipAtIntersection]
|
|
7154
|
+
* * Target Selector: .qd-intersection-target
|
|
7155
|
+
*
|
|
7156
|
+
* The IntersectionObserver API is used for the implementation.
|
|
7157
|
+
* * @see https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver
|
|
7158
|
+
*
|
|
7159
|
+
* * Note: The intersection of the target is calculated by the IntersectionObserver only once, initially (can be extended later if required). After that it will be unsubscribed immediately.
|
|
7160
|
+
* */
|
|
7161
|
+
class QdTooltipAtIntersectionDirective {
|
|
7162
|
+
_host = inject(ElementRef);
|
|
7163
|
+
_positionBuilder = inject(OverlayPositionBuilder);
|
|
7164
|
+
_overlay = inject(Overlay);
|
|
7165
|
+
_overlayRef;
|
|
7166
|
+
_target;
|
|
7167
|
+
_observer$;
|
|
7168
|
+
_isIntersected = false;
|
|
7169
|
+
_destroyed$ = new Subject();
|
|
7170
|
+
ngAfterViewInit() {
|
|
7171
|
+
this.setTarget();
|
|
7172
|
+
this.observeTarget();
|
|
7173
|
+
this.createOverlay();
|
|
7174
|
+
this.subscribeShow();
|
|
7175
|
+
this.subscribeHide();
|
|
7176
|
+
}
|
|
7177
|
+
ngOnDestroy() {
|
|
7178
|
+
this._observer$.unobserve(this._target);
|
|
7179
|
+
this._destroyed$.next();
|
|
7180
|
+
this._destroyed$.complete();
|
|
7181
|
+
}
|
|
7182
|
+
setTarget() {
|
|
7183
|
+
this._target = this._host.nativeElement.querySelector(TARGET_SELECTOR);
|
|
7184
|
+
}
|
|
7185
|
+
observeTarget() {
|
|
7186
|
+
const options = {
|
|
7187
|
+
root: this._host.nativeElement,
|
|
7188
|
+
threshold: THRESHOLD
|
|
7189
|
+
};
|
|
7190
|
+
this._observer$ = new IntersectionObserver(entries => {
|
|
7191
|
+
this._isIntersected = entries[0].intersectionRatio < 1;
|
|
7192
|
+
if (this._isIntersected) {
|
|
7193
|
+
this._setStyles();
|
|
7194
|
+
if (UNSUBSCRIBE_IMMEDIATELY)
|
|
7195
|
+
this._observer$.unobserve(this._target);
|
|
7196
|
+
}
|
|
7197
|
+
}, options);
|
|
7198
|
+
this._observer$.observe(this._target);
|
|
7199
|
+
}
|
|
7200
|
+
_setStyles() {
|
|
7201
|
+
this._target.style.overflow = 'hidden';
|
|
7202
|
+
this._target.style.textOverflow = 'ellipsis';
|
|
7203
|
+
this._target.style.cursor = 'help';
|
|
7204
|
+
}
|
|
7205
|
+
createOverlay() {
|
|
7206
|
+
this._overlayRef = this._overlay.create({
|
|
7207
|
+
positionStrategy: this._positionBuilder
|
|
7208
|
+
.flexibleConnectedTo(this._host)
|
|
7209
|
+
.withPositions([{ originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' }]),
|
|
7210
|
+
width: convertPxToRem(OVERLAY_WIDTH)
|
|
7211
|
+
});
|
|
7212
|
+
}
|
|
7213
|
+
subscribeShow() {
|
|
7214
|
+
merge(...SHOW_EVENTS.map(event => fromEvent(this._host.nativeElement, event)))
|
|
7215
|
+
.pipe(takeUntil(this._destroyed$), filter(() => !this._overlayRef.hasAttached() && this._isIntersected))
|
|
7216
|
+
.subscribe(() => {
|
|
7217
|
+
const content = this.getContent();
|
|
7218
|
+
const tooltipPortal = new ComponentPortal(QdTooltipComponent);
|
|
7219
|
+
const tooltipRef = this._overlayRef.attach(tooltipPortal);
|
|
7220
|
+
tooltipRef.instance.content = content;
|
|
7221
|
+
});
|
|
7222
|
+
}
|
|
7223
|
+
subscribeHide() {
|
|
7224
|
+
merge(...HIDE_EVENTS.map(event => fromEvent(this._host.nativeElement, event)))
|
|
7225
|
+
.pipe(takeUntil(this._destroyed$), filter(() => this._overlayRef.hasAttached()), debounceTime(HIDE_DELAY))
|
|
7226
|
+
.subscribe(() => this._overlayRef.detach());
|
|
7227
|
+
}
|
|
7228
|
+
getContent() {
|
|
7229
|
+
return {
|
|
7230
|
+
headline: this._target.getAttribute('data-tooltip-headline') || undefined,
|
|
7231
|
+
paragraphs: [this._target.textContent?.trim() || '']
|
|
7232
|
+
};
|
|
7233
|
+
}
|
|
7234
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdTooltipAtIntersectionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
7235
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: QdTooltipAtIntersectionDirective, isStandalone: false, selector: "[qdTooltipAtIntersection]", ngImport: i0 });
|
|
7236
|
+
}
|
|
7237
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdTooltipAtIntersectionDirective, decorators: [{
|
|
7238
|
+
type: Directive,
|
|
7239
|
+
args: [{
|
|
7240
|
+
selector: '[qdTooltipAtIntersection]',
|
|
7241
|
+
standalone: false
|
|
7242
|
+
}]
|
|
7243
|
+
}] });
|
|
7244
|
+
|
|
7118
7245
|
const MAX_TOOLTIP_CHARACTER = 512;
|
|
7119
7246
|
const TOOLTIP_POSITIONS = [
|
|
7120
7247
|
{ originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' },
|
|
@@ -7180,7 +7307,7 @@ class QdTooltipOnClickDirective {
|
|
|
7180
7307
|
truncateText(text) {
|
|
7181
7308
|
if (text.length <= MAX_TOOLTIP_CHARACTER)
|
|
7182
7309
|
return text.trim();
|
|
7183
|
-
console.warn(`
|
|
7310
|
+
console.warn(`Quadrel Framework | QdTooltip - Tooltip content exceeds ${MAX_TOOLTIP_CHARACTER} characters. It will be truncated.`);
|
|
7184
7311
|
return `${text.substring(0, MAX_TOOLTIP_CHARACTER).trim()}...`;
|
|
7185
7312
|
}
|
|
7186
7313
|
translate(key) {
|
|
@@ -7220,9 +7347,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
7220
7347
|
type: Input
|
|
7221
7348
|
}] } });
|
|
7222
7349
|
|
|
7223
|
-
|
|
7224
|
-
|
|
7225
|
-
|
|
7350
|
+
class QdVisuallyHiddenDirective {
|
|
7351
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdVisuallyHiddenDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
7352
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: QdVisuallyHiddenDirective, isStandalone: false, selector: "[qdVisuallyHidden]", host: { classAttribute: "qd-visually-hidden" }, ngImport: i0 });
|
|
7353
|
+
}
|
|
7354
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdVisuallyHiddenDirective, decorators: [{
|
|
7355
|
+
type: Directive,
|
|
7356
|
+
args: [{
|
|
7357
|
+
selector: '[qdVisuallyHidden]',
|
|
7358
|
+
host: { class: 'qd-visually-hidden' },
|
|
7359
|
+
standalone: false
|
|
7360
|
+
}]
|
|
7361
|
+
}] });
|
|
7226
7362
|
|
|
7227
7363
|
class QdCoreModule {
|
|
7228
7364
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
@@ -7871,7 +8007,7 @@ class QdAutofocusDirective {
|
|
|
7871
8007
|
if (!this.qdAutofocus)
|
|
7872
8008
|
return;
|
|
7873
8009
|
if (this.autofocusService.isAutofocusActivated) {
|
|
7874
|
-
console.warn('
|
|
8010
|
+
console.warn('Quadrel Framework | QdAutofocus - "hasAutofocus" can be used only once.');
|
|
7875
8011
|
return;
|
|
7876
8012
|
}
|
|
7877
8013
|
this.autofocusService.isAutofocusActivated = true;
|
|
@@ -8194,7 +8330,7 @@ class QdEventBrokerService {
|
|
|
8194
8330
|
}
|
|
8195
8331
|
consume(topic) {
|
|
8196
8332
|
if (!this._topics.has(topic)) {
|
|
8197
|
-
console.warn(`
|
|
8333
|
+
console.warn(`Quadrel Framework | QdEventBroker - Topic "${topic}" does not exist.`);
|
|
8198
8334
|
return EMPTY;
|
|
8199
8335
|
}
|
|
8200
8336
|
return this._topics.get(topic).pipe(filter(event => event.payload != null), distinctUntilChanged((prev, curr) => isEqual(prev, curr)), shareReplay(1));
|
|
@@ -8300,11 +8436,11 @@ class QdFormHintComponent {
|
|
|
8300
8436
|
this.actionEmitterService.hintEventEmitterSubject.next(null);
|
|
8301
8437
|
}
|
|
8302
8438
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFormHintComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8303
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", 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;min-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: i3.TranslatePipe, name: "translate" }] });
|
|
8439
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", 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;min-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}.qd-input-ambiguous :host{color:#069}: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: i3.TranslatePipe, name: "translate" }] });
|
|
8304
8440
|
}
|
|
8305
8441
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFormHintComponent, decorators: [{
|
|
8306
8442
|
type: Component,
|
|
8307
|
-
args: [{ selector: 'qd-form-hint', host: { class: 'qd-form-hint' }, standalone: false, 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;min-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"] }]
|
|
8443
|
+
args: [{ selector: 'qd-form-hint', host: { class: 'qd-form-hint' }, standalone: false, 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;min-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}.qd-input-ambiguous :host{color:#069}: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"] }]
|
|
8308
8444
|
}], propDecorators: { hint: [{
|
|
8309
8445
|
type: Input
|
|
8310
8446
|
}], control: [{
|
|
@@ -8558,11 +8694,11 @@ class QdCheckboxChipsComponent {
|
|
|
8558
8694
|
if (this.formControlName) {
|
|
8559
8695
|
this.control = this.controlContainer.control.get(this.formControlName);
|
|
8560
8696
|
if (!(this.control instanceof QdFormControl)) {
|
|
8561
|
-
console.warn('
|
|
8697
|
+
console.warn('Quadrel Framework | QdCheckboxChips - Please use the QdFormControl instead of the Angular FormControl.');
|
|
8562
8698
|
}
|
|
8563
8699
|
}
|
|
8564
8700
|
else {
|
|
8565
|
-
console.warn('
|
|
8701
|
+
console.warn('Quadrel Framework | QdCheckboxChips - Missing FormControlName directive from host element of the component.');
|
|
8566
8702
|
}
|
|
8567
8703
|
}
|
|
8568
8704
|
this._subs.add(this.actionEmitterService.hintEventEmitter$.subscribe(() => this.clickHint.emit()));
|
|
@@ -9010,7 +9146,7 @@ class QdCheckboxesComponent {
|
|
|
9010
9146
|
this.control = this.controlContainer.control.get(this.formControlName);
|
|
9011
9147
|
}
|
|
9012
9148
|
else {
|
|
9013
|
-
console.warn('
|
|
9149
|
+
console.warn('Quadrel Framework | QdCheckboxGroup - Missing FormControlName directive from host element of the component.');
|
|
9014
9150
|
}
|
|
9015
9151
|
}
|
|
9016
9152
|
this.setInitialValues();
|
|
@@ -9604,7 +9740,7 @@ class QdFormOptionsResolverRegistry {
|
|
|
9604
9740
|
return null;
|
|
9605
9741
|
const matches = this.resolvers.filter(r => r?.name === this.resolverName);
|
|
9606
9742
|
if (matches.length > 1)
|
|
9607
|
-
throw new Error(`
|
|
9743
|
+
throw new Error(`Quadrel Framework | QdForms - Multiple QdFormOptionsResolvers with the name "${this.resolverName}" found. Resolver names must be unique.`);
|
|
9608
9744
|
return matches[0] ?? null;
|
|
9609
9745
|
}
|
|
9610
9746
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFormOptionsResolverRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -9704,9 +9840,9 @@ class QdFormOptionsService {
|
|
|
9704
9840
|
}
|
|
9705
9841
|
validateOptionsSetup(componentName) {
|
|
9706
9842
|
if (!this.hasOptions())
|
|
9707
|
-
console.warn(`
|
|
9843
|
+
console.warn(`Quadrel Framework | ${componentName} - No options defined. Either provide "options" or configure a resolver via "optionsResolverName".`);
|
|
9708
9844
|
if (this._config?.options?.length && this._resolver)
|
|
9709
|
-
console.warn(`
|
|
9845
|
+
console.warn(`Quadrel Framework | ${componentName} - Config key "options" ignored because QD_FORM_OPTIONS_RESOLVER is configured.`);
|
|
9710
9846
|
}
|
|
9711
9847
|
load(value) {
|
|
9712
9848
|
if (value === this._lastLoadedValue)
|
|
@@ -10203,7 +10339,7 @@ class QdDropdownComponent {
|
|
|
10203
10339
|
this.control = directive.control;
|
|
10204
10340
|
return;
|
|
10205
10341
|
}
|
|
10206
|
-
console.warn('
|
|
10342
|
+
console.warn('Quadrel Framework | QdDropdown - Missing FormControlName directive from host element of the component.');
|
|
10207
10343
|
}
|
|
10208
10344
|
updateConfiguration() {
|
|
10209
10345
|
this.label = getLabel(this.config);
|
|
@@ -10612,8 +10748,8 @@ class QdInputOptionsDirective extends QdPopoverOnClickDirective {
|
|
|
10612
10748
|
}
|
|
10613
10749
|
logWarningIfBothOptionsAndResolverAreUsed() {
|
|
10614
10750
|
if (this.config?.options && this.config.options.length > 0 && !!this._optionsResolver) {
|
|
10615
|
-
console.warn('
|
|
10616
|
-
'the options will be ignored
|
|
10751
|
+
console.warn('Quadrel Framework | QdInput - If both options and QD_FORM_OPTIONS_RESOLVER are used, ' +
|
|
10752
|
+
'the options will be ignored.');
|
|
10617
10753
|
}
|
|
10618
10754
|
}
|
|
10619
10755
|
closePopover() {
|
|
@@ -10929,6 +11065,7 @@ class QdInputComponent {
|
|
|
10929
11065
|
resolverRegistry = inject(QdFormOptionsResolverRegistry);
|
|
10930
11066
|
controlContainer = inject(ControlContainer, { optional: true, host: true, skipSelf: true });
|
|
10931
11067
|
eventBrokerService = inject(QdEventBrokerService, { optional: true });
|
|
11068
|
+
numberInputService = inject(QdNumberInputService);
|
|
10932
11069
|
/**
|
|
10933
11070
|
* The form control name can be assigned here if you want to use Reactive Forms.
|
|
10934
11071
|
*/
|
|
@@ -11003,9 +11140,13 @@ class QdInputComponent {
|
|
|
11003
11140
|
get isErrorFromOutside() {
|
|
11004
11141
|
return this.isError;
|
|
11005
11142
|
}
|
|
11143
|
+
get isAmbiguousState() {
|
|
11144
|
+
return this.isAmbiguousInput;
|
|
11145
|
+
}
|
|
11006
11146
|
inputElement;
|
|
11007
11147
|
inputType;
|
|
11008
11148
|
inputMode;
|
|
11149
|
+
htmlInputType;
|
|
11009
11150
|
placeholder;
|
|
11010
11151
|
label;
|
|
11011
11152
|
hint;
|
|
@@ -11017,6 +11158,7 @@ class QdInputComponent {
|
|
|
11017
11158
|
control;
|
|
11018
11159
|
_optionsResolver;
|
|
11019
11160
|
_subs = new Subscription();
|
|
11161
|
+
_isUserTyped = false;
|
|
11020
11162
|
_onChange = () => { };
|
|
11021
11163
|
_onTouch = () => { };
|
|
11022
11164
|
get hasOnlyUnitsError() {
|
|
@@ -11025,6 +11167,15 @@ class QdInputComponent {
|
|
|
11025
11167
|
get hasUnits() {
|
|
11026
11168
|
return this.config?.units?.length > 0;
|
|
11027
11169
|
}
|
|
11170
|
+
get ambiguityHintKey() {
|
|
11171
|
+
return this.numberInputService.getAmbiguityHintKey(this._value.value);
|
|
11172
|
+
}
|
|
11173
|
+
get isAmbiguousInput() {
|
|
11174
|
+
return (this.inputType === 'number' &&
|
|
11175
|
+
!this.hasError &&
|
|
11176
|
+
this._isUserTyped &&
|
|
11177
|
+
this.numberInputService.isAmbiguous(this._value.value));
|
|
11178
|
+
}
|
|
11028
11179
|
get numberOfCharacters() {
|
|
11029
11180
|
if (!this._value.value)
|
|
11030
11181
|
return 0;
|
|
@@ -11041,7 +11192,10 @@ class QdInputComponent {
|
|
|
11041
11192
|
return this.control.getMaxLengthOrUndefined();
|
|
11042
11193
|
}
|
|
11043
11194
|
get valueAsList() {
|
|
11044
|
-
|
|
11195
|
+
const displayValue = this.inputType === 'number'
|
|
11196
|
+
? this.numberInputService.formatNumberForViewonly(this._value.value)
|
|
11197
|
+
: this._value.value;
|
|
11198
|
+
return [`${displayValue}${this._value.unit ? ' ' + this._value.unit : ''}`];
|
|
11045
11199
|
}
|
|
11046
11200
|
ngOnInit() {
|
|
11047
11201
|
this.initializeOptionsResolver();
|
|
@@ -11051,9 +11205,14 @@ class QdInputComponent {
|
|
|
11051
11205
|
this.control = this.controlContainer.control.get(this.formControlName);
|
|
11052
11206
|
// TODO remove logic for support of angular FormControl with angular 20 update
|
|
11053
11207
|
if (!(this.control instanceof QdFormControl))
|
|
11054
|
-
console.warn('
|
|
11208
|
+
console.warn('Quadrel Framework | QdInput - Please use the QdFormControl instead of the Angular FormControl.');
|
|
11055
11209
|
}
|
|
11056
11210
|
}
|
|
11211
|
+
if (this.config.inputType === 'number' &&
|
|
11212
|
+
this.config.inputMode !== 'numeric' &&
|
|
11213
|
+
this.config.inputMode !== 'decimal' &&
|
|
11214
|
+
this.config.inputMode != null)
|
|
11215
|
+
console.error('QD-UI | QdInputComponent - Please use either decimal or numeric when using QdInputType number');
|
|
11057
11216
|
this.writeValue(this.value ?? getValue(this.config));
|
|
11058
11217
|
this.normalizeInitialControlValueIfNeeded();
|
|
11059
11218
|
this._subs.add(this.actionEmitterService.hintEventEmitter$.subscribe(() => this.clickHint.emit()));
|
|
@@ -11084,6 +11243,10 @@ class QdInputComponent {
|
|
|
11084
11243
|
writeValue(value) {
|
|
11085
11244
|
this._value = getValueWithUnit(value, this.config);
|
|
11086
11245
|
this._displayValue = String(this._value.value ?? '');
|
|
11246
|
+
this._isUserTyped = false;
|
|
11247
|
+
if (this.inputType === 'number') {
|
|
11248
|
+
this._value = { ...this._value, value: this.numberInputService.formatValueForDisplay(this._value.value) };
|
|
11249
|
+
}
|
|
11087
11250
|
}
|
|
11088
11251
|
setDisabledState(disabled) {
|
|
11089
11252
|
this.disabled = disabled;
|
|
@@ -11095,6 +11258,36 @@ class QdInputComponent {
|
|
|
11095
11258
|
if (input?.validity?.badInput)
|
|
11096
11259
|
return;
|
|
11097
11260
|
const value = event.target.value;
|
|
11261
|
+
if (this.inputType === 'number' && value && !this.numberInputService.isValidNumber(value)) {
|
|
11262
|
+
this.control?.setErrors({
|
|
11263
|
+
...this.control.errors,
|
|
11264
|
+
invalidCharacters: this.numberInputService.invalidCharactersErrorKey
|
|
11265
|
+
});
|
|
11266
|
+
return;
|
|
11267
|
+
}
|
|
11268
|
+
if (this.inputType === 'number' && value) {
|
|
11269
|
+
const valueWithoutGroups = value.split(this.numberInputService.groupSeparator).join('');
|
|
11270
|
+
const filtered = this.numberInputService.filterValue(valueWithoutGroups);
|
|
11271
|
+
const hasInvalidChars = filtered !== valueWithoutGroups;
|
|
11272
|
+
if (hasInvalidChars) {
|
|
11273
|
+
this._value = { ...this._value, value: filtered };
|
|
11274
|
+
if (this.control) {
|
|
11275
|
+
this.control.setErrors({
|
|
11276
|
+
...this.control.errors,
|
|
11277
|
+
invalidCharacters: this.numberInputService.invalidCharactersErrorKey
|
|
11278
|
+
});
|
|
11279
|
+
}
|
|
11280
|
+
this._isUserTyped = true;
|
|
11281
|
+
this._onTouch();
|
|
11282
|
+
this.emitValue();
|
|
11283
|
+
return;
|
|
11284
|
+
}
|
|
11285
|
+
if (this.control?.errors?.['invalidCharacters']) {
|
|
11286
|
+
const remainingErrors = Object.fromEntries(Object.entries(this.control.errors).filter(([key]) => key !== 'invalidCharacters'));
|
|
11287
|
+
this.control.setErrors(Object.keys(remainingErrors).length ? remainingErrors : null);
|
|
11288
|
+
}
|
|
11289
|
+
}
|
|
11290
|
+
this._isUserTyped = true;
|
|
11098
11291
|
this._value = { ...this._value, value };
|
|
11099
11292
|
this.emitValue();
|
|
11100
11293
|
this._onTouch();
|
|
@@ -11151,6 +11344,15 @@ class QdInputComponent {
|
|
|
11151
11344
|
updateConfig() {
|
|
11152
11345
|
this.inputType = getInputType(this.config);
|
|
11153
11346
|
this.inputMode = getInputMode(this.config);
|
|
11347
|
+
if (this.inputType === 'number') {
|
|
11348
|
+
this.htmlInputType = 'text';
|
|
11349
|
+
if (!this.inputMode) {
|
|
11350
|
+
this.inputMode = this.inputMode ?? 'decimal';
|
|
11351
|
+
}
|
|
11352
|
+
}
|
|
11353
|
+
else {
|
|
11354
|
+
this.htmlInputType = this.inputType;
|
|
11355
|
+
}
|
|
11154
11356
|
this.placeholder = getPlaceholder(this.config);
|
|
11155
11357
|
this.label = getLabel(this.config);
|
|
11156
11358
|
this.hint = getHint(this.config);
|
|
@@ -11169,13 +11371,15 @@ class QdInputComponent {
|
|
|
11169
11371
|
this._optionsResolver = this.resolverRegistry.findResolver();
|
|
11170
11372
|
}
|
|
11171
11373
|
emitValue() {
|
|
11374
|
+
const emittable = this.inputType === 'number' ? this.numberInputService.parseValue(this._value.value) : this._value.value;
|
|
11172
11375
|
if (this.hasUnits) {
|
|
11173
|
-
this.
|
|
11174
|
-
this.
|
|
11376
|
+
const emittableWithUnit = { ...this._value, value: emittable };
|
|
11377
|
+
this.valueChange.emit(emittableWithUnit);
|
|
11378
|
+
this._onChange(emittableWithUnit);
|
|
11175
11379
|
}
|
|
11176
11380
|
else {
|
|
11177
|
-
this.valueChange.emit(
|
|
11178
|
-
this._onChange(
|
|
11381
|
+
this.valueChange.emit(emittable);
|
|
11382
|
+
this._onChange(emittable);
|
|
11179
11383
|
}
|
|
11180
11384
|
}
|
|
11181
11385
|
initOpModeSubscription() {
|
|
@@ -11198,9 +11402,12 @@ class QdInputComponent {
|
|
|
11198
11402
|
if (!isEqual(modelValue, target))
|
|
11199
11403
|
this.control.setValue(target, { emitEvent: false });
|
|
11200
11404
|
this._value = normalized;
|
|
11405
|
+
if (this.inputType === 'number') {
|
|
11406
|
+
this._value = { ...this._value, value: this.numberInputService.formatValueForDisplay(this._value.value) };
|
|
11407
|
+
}
|
|
11201
11408
|
}
|
|
11202
11409
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11203
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdInputComponent, isStandalone: false, selector: "qd-input", inputs: { formControlName: "formControlName", value: "value", config: "config", isError: "isError", testId: ["data-test-id", "testId"] }, outputs: { valueChange: "valueChange", enterClick: "enterClick", clickClear: "clickClear", clickHint: "clickHint", clickReadonly: "clickReadonly", clickViewonly: "clickViewonly" }, host: { properties: { "class.qd-input-readonly": "this.readonly", "class.qd-input--readonly-action": "this.readonlyAction", "class.qd-input-viewonly": "this.viewonly", "class.qd-input--viewonly-action": "this.viewonlyAction", "class.qd-form-hint-action": "this.hintAction", "class.qd-input-hint-action": "this.hintAction", "class.qd-form-disabled": "this.disabled", "class.qd-input-disabled": "this.disabled", "class.qd-input-focus": "this.isInputFocused", "class.qd-form-error": "this.hasError", "class.qd-input-error": "this.hasError", "class.qd-input-error-from-outside": "this.isErrorFromOutside" } }, providers: [
|
|
11410
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdInputComponent, isStandalone: false, selector: "qd-input", inputs: { formControlName: "formControlName", value: "value", config: "config", isError: "isError", testId: ["data-test-id", "testId"] }, outputs: { valueChange: "valueChange", enterClick: "enterClick", clickClear: "clickClear", clickHint: "clickHint", clickReadonly: "clickReadonly", clickViewonly: "clickViewonly" }, host: { properties: { "class.qd-input-readonly": "this.readonly", "class.qd-input--readonly-action": "this.readonlyAction", "class.qd-input-viewonly": "this.viewonly", "class.qd-input--viewonly-action": "this.viewonlyAction", "class.qd-form-hint-action": "this.hintAction", "class.qd-input-hint-action": "this.hintAction", "class.qd-form-disabled": "this.disabled", "class.qd-input-disabled": "this.disabled", "class.qd-input-focus": "this.isInputFocused", "class.qd-form-error": "this.hasError", "class.qd-input-error": "this.hasError", "class.qd-input-error-from-outside": "this.isErrorFromOutside", "class.qd-input-ambiguous": "this.isAmbiguousState" } }, providers: [
|
|
11204
11411
|
{
|
|
11205
11412
|
provide: NG_VALUE_ACCESSOR,
|
|
11206
11413
|
useExisting: QdInputComponent,
|
|
@@ -11208,13 +11415,14 @@ class QdInputComponent {
|
|
|
11208
11415
|
},
|
|
11209
11416
|
QdFormsActionEmitterService,
|
|
11210
11417
|
QdFormOptionsResolverRegistry,
|
|
11418
|
+
QdNumberInputService,
|
|
11211
11419
|
// TODO: Remove when removing derived directive
|
|
11212
11420
|
QdPopoverSizingService,
|
|
11213
11421
|
{
|
|
11214
11422
|
provide: QD_FOCUSABLE_TOKEN,
|
|
11215
11423
|
useExisting: QdInputComponent
|
|
11216
11424
|
}
|
|
11217
|
-
], 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 *ngIf=\"hint || hasError\"\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 *ngIf=\"hint || hasError\"\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) : _displayValue\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur()\"\n [disabled]=\"disabled || readonly\"\n [type]=\"
|
|
11425
|
+
], 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 *ngIf=\"hint || hasError\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n <qd-form-hint *ngIf=\"isAmbiguousInput\" [hint]=\"ambiguityHintKey\" [data-test-id]=\"testId\"></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 *ngIf=\"hint || hasError\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n <qd-form-hint *ngIf=\"isAmbiguousInput\" [hint]=\"ambiguityHintKey\" [data-test-id]=\"testId\"></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) : _displayValue\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur()\"\n [disabled]=\"disabled || readonly\"\n [type]=\"htmlInputType\"\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=\"isAmbiguousInput\" class=\"qd-input-ambiguous-icon\" icon=\"circleInfoSolid\"></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-ambiguous .qd-input-input{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(0,102,153)}:host.qd-input-ambiguous .qd-input-input:hover,:host.qd-input-ambiguous .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(0,102,153)}:host.qd-input-ambiguous.qd-input-focus .qd-input-input{border-color:#069}:host.qd-input-ambiguous .qd-input-suffix ::ng-deep .qd-input-ambiguous-icon{padding-right:.5rem;color:#069}: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: i3.TranslatePipe, name: "translate" }] });
|
|
11218
11426
|
}
|
|
11219
11427
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdInputComponent, decorators: [{
|
|
11220
11428
|
type: Component,
|
|
@@ -11226,13 +11434,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
11226
11434
|
},
|
|
11227
11435
|
QdFormsActionEmitterService,
|
|
11228
11436
|
QdFormOptionsResolverRegistry,
|
|
11437
|
+
QdNumberInputService,
|
|
11229
11438
|
// TODO: Remove when removing derived directive
|
|
11230
11439
|
QdPopoverSizingService,
|
|
11231
11440
|
{
|
|
11232
11441
|
provide: QD_FOCUSABLE_TOKEN,
|
|
11233
11442
|
useExisting: QdInputComponent
|
|
11234
11443
|
}
|
|
11235
|
-
], 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<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 *ngIf=\"hint || hasError\"\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 *ngIf=\"hint || hasError\"\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) : _displayValue\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur()\"\n [disabled]=\"disabled || readonly\"\n [type]=\"
|
|
11444
|
+
], 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<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 *ngIf=\"hint || hasError\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n <qd-form-hint *ngIf=\"isAmbiguousInput\" [hint]=\"ambiguityHintKey\" [data-test-id]=\"testId\"></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 *ngIf=\"hint || hasError\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n <qd-form-hint *ngIf=\"isAmbiguousInput\" [hint]=\"ambiguityHintKey\" [data-test-id]=\"testId\"></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) : _displayValue\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur()\"\n [disabled]=\"disabled || readonly\"\n [type]=\"htmlInputType\"\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=\"isAmbiguousInput\" class=\"qd-input-ambiguous-icon\" icon=\"circleInfoSolid\"></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-ambiguous .qd-input-input{padding:0 .0625rem 0 .5rem;border:.0625rem solid rgb(0,102,153)}:host.qd-input-ambiguous .qd-input-input:hover,:host.qd-input-ambiguous .qd-input-input:active{padding:.0625rem 0 .0625rem .4375rem;border:.125rem solid rgb(0,102,153)}:host.qd-input-ambiguous.qd-input-focus .qd-input-input{border-color:#069}:host.qd-input-ambiguous .qd-input-suffix ::ng-deep .qd-input-ambiguous-icon{padding-right:.5rem;color:#069}: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"] }]
|
|
11236
11445
|
}], propDecorators: { formControlName: [{
|
|
11237
11446
|
type: Input
|
|
11238
11447
|
}], value: [{
|
|
@@ -11292,6 +11501,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
11292
11501
|
}], isErrorFromOutside: [{
|
|
11293
11502
|
type: HostBinding,
|
|
11294
11503
|
args: ['class.qd-input-error-from-outside']
|
|
11504
|
+
}], isAmbiguousState: [{
|
|
11505
|
+
type: HostBinding,
|
|
11506
|
+
args: ['class.qd-input-ambiguous']
|
|
11295
11507
|
}], inputElement: [{
|
|
11296
11508
|
type: ViewChild,
|
|
11297
11509
|
args: ['input']
|
|
@@ -11418,6 +11630,8 @@ class QdDatepickerComponent {
|
|
|
11418
11630
|
timePicker;
|
|
11419
11631
|
_disabledDatesValidator;
|
|
11420
11632
|
_disabledTimesValidator;
|
|
11633
|
+
_boundDisabledDates;
|
|
11634
|
+
_boundDisabledTimes;
|
|
11421
11635
|
_subs = new Subscription();
|
|
11422
11636
|
_onChange = () => { };
|
|
11423
11637
|
_onTouched = () => { };
|
|
@@ -11429,17 +11643,17 @@ class QdDatepickerComponent {
|
|
|
11429
11643
|
this.updateConfiguration();
|
|
11430
11644
|
this.updateDisplayedDate();
|
|
11431
11645
|
this.updateDisplayedDateTime();
|
|
11432
|
-
this.validateDisabledDates();
|
|
11433
|
-
this.validateDisabledTimes();
|
|
11434
11646
|
this._subs.add(this.initOpModeSubscription());
|
|
11435
11647
|
}
|
|
11436
11648
|
ngOnChanges(changes) {
|
|
11437
11649
|
if (changes.config) {
|
|
11438
11650
|
this.updateConfiguration();
|
|
11439
|
-
this.validateDisabledDates();
|
|
11440
|
-
this.validateDisabledTimes();
|
|
11441
11651
|
}
|
|
11442
11652
|
}
|
|
11653
|
+
ngDoCheck() {
|
|
11654
|
+
this.rebindDisabledDatesValidatorIfChanged();
|
|
11655
|
+
this.rebindDisabledTimesValidatorIfChanged();
|
|
11656
|
+
}
|
|
11443
11657
|
ngOnDestroy() {
|
|
11444
11658
|
this._subs.unsubscribe();
|
|
11445
11659
|
}
|
|
@@ -11576,7 +11790,7 @@ class QdDatepickerComponent {
|
|
|
11576
11790
|
this.control = this.controlContainer.control.get(this.formControlName);
|
|
11577
11791
|
}
|
|
11578
11792
|
else {
|
|
11579
|
-
console.warn('
|
|
11793
|
+
console.warn('Quadrel Framework | QdDatepicker - Missing FormControlName directive from host element of the component.');
|
|
11580
11794
|
}
|
|
11581
11795
|
}
|
|
11582
11796
|
initInnerControl() {
|
|
@@ -11610,6 +11824,20 @@ class QdDatepickerComponent {
|
|
|
11610
11824
|
this.displayedDateTime = QdDateAdapter.formatToDateTimeLocaleString(currentValue, this.config?.enableSeconds);
|
|
11611
11825
|
this.displayedTime = QdDateAdapter.formatToTimeLocaleString(currentValue, this.config?.enableSeconds);
|
|
11612
11826
|
}
|
|
11827
|
+
rebindDisabledDatesValidatorIfChanged() {
|
|
11828
|
+
const current = this.config?.disabledDates;
|
|
11829
|
+
if (current === this._boundDisabledDates)
|
|
11830
|
+
return;
|
|
11831
|
+
this._boundDisabledDates = current;
|
|
11832
|
+
this.validateDisabledDates();
|
|
11833
|
+
}
|
|
11834
|
+
rebindDisabledTimesValidatorIfChanged() {
|
|
11835
|
+
const current = this.config?.timePicker?.disabledTimes;
|
|
11836
|
+
if (current === this._boundDisabledTimes)
|
|
11837
|
+
return;
|
|
11838
|
+
this._boundDisabledTimes = current;
|
|
11839
|
+
this.validateDisabledTimes();
|
|
11840
|
+
}
|
|
11613
11841
|
validateDisabledDates() {
|
|
11614
11842
|
if (!this.control)
|
|
11615
11843
|
return;
|
|
@@ -12147,7 +12375,7 @@ class QdTranslateService {
|
|
|
12147
12375
|
else if (translatable.translation) {
|
|
12148
12376
|
translation = translatable.translation[this.translateService.currentLang || 'de'];
|
|
12149
12377
|
if (translation === undefined) {
|
|
12150
|
-
console.error(`Language "${this.translateService.currentLang}" is not implemented
|
|
12378
|
+
console.error(`Quadrel Framework | QdTranslate - Language "${this.translateService.currentLang}" is not implemented.`);
|
|
12151
12379
|
}
|
|
12152
12380
|
}
|
|
12153
12381
|
return translation || '';
|
|
@@ -12732,21 +12960,7 @@ function removeListItem(list, el) {
|
|
|
12732
12960
|
if (index > -1)
|
|
12733
12961
|
list.splice(index, 1);
|
|
12734
12962
|
}
|
|
12735
|
-
const validatorsDroppedWithOptsWarning =
|
|
12736
|
-
It looks like you're constructing using a QdFormControl with both an options argument and an
|
|
12737
|
-
validators argument. Mixing these arguments will cause your validators in the argument to be dropped.
|
|
12738
|
-
You should either put all your validators in the options object, or in separate validators
|
|
12739
|
-
arguments. For example:
|
|
12740
|
-
|
|
12741
|
-
// Using validators arguments
|
|
12742
|
-
fc = new QdFormControl(42, Validators.required, myAsyncValidator);
|
|
12743
|
-
|
|
12744
|
-
// Using AbstractControlOptions
|
|
12745
|
-
fc = new QdFormControl(42, {validators: Validators.required, asyncValidators: myAV});
|
|
12746
|
-
|
|
12747
|
-
// Do NOT mix them: validators in additional argument will be dropped!
|
|
12748
|
-
fc = new QdFormControl(42, {validators: Validators.required}, /* Oops! */ myAsyncValidator);
|
|
12749
|
-
`;
|
|
12963
|
+
const validatorsDroppedWithOptsWarning = 'Quadrel Framework | QdForms - QdFormControl received both an options object and a separate validators argument. The standalone validators argument is dropped. Pass all validators inside the options object or via the separate arguments, not both.';
|
|
12750
12964
|
|
|
12751
12965
|
function hasUnit(control) {
|
|
12752
12966
|
return control.value?.value != null && control.value?.unit != null;
|
|
@@ -13113,7 +13327,7 @@ class QdMultiInputComponent {
|
|
|
13113
13327
|
* TODO remove logic for support of [formControlName] directive and FormControl with angular 14 update
|
|
13114
13328
|
*/
|
|
13115
13329
|
set formControlName(formControlName) {
|
|
13116
|
-
console.warn('
|
|
13330
|
+
console.warn('Quadrel Framework | QdMultiInput - Please use <qd-multi-input> with the QdFormArray form control and the [formArrayName] directive.');
|
|
13117
13331
|
this._formControlName = formControlName;
|
|
13118
13332
|
}
|
|
13119
13333
|
get formControlName() {
|
|
@@ -13223,7 +13437,7 @@ class QdMultiInputComponent {
|
|
|
13223
13437
|
if (this.formArrayName) {
|
|
13224
13438
|
const formArray = this.controlContainer.control.get(this.formArrayName);
|
|
13225
13439
|
if (!formArray) {
|
|
13226
|
-
console.warn('
|
|
13440
|
+
console.warn('Quadrel Framework | QdMultiInput - No form control found for the provided [formArrayName]', this.formArrayName);
|
|
13227
13441
|
return;
|
|
13228
13442
|
}
|
|
13229
13443
|
// Updating form array programmatically from outside
|
|
@@ -13242,7 +13456,7 @@ class QdMultiInputComponent {
|
|
|
13242
13456
|
else {
|
|
13243
13457
|
// TODO remove logic for support of Angular FormControl with angular 19 update
|
|
13244
13458
|
this.formArray = this.qdFormArrayFactoryService.createQdFormArrayFromFormControl(formArray);
|
|
13245
|
-
console.warn('
|
|
13459
|
+
console.warn('Quadrel Framework | QdMultiInput - Please use <qd-multi-input> with the QdFormArray form control.');
|
|
13246
13460
|
}
|
|
13247
13461
|
this.disabled = formArray.disabled;
|
|
13248
13462
|
this._onDisabledChange = (disabled) => {
|
|
@@ -13251,7 +13465,7 @@ class QdMultiInputComponent {
|
|
|
13251
13465
|
this.formArray.registerOnDisabledChange(this._onDisabledChange);
|
|
13252
13466
|
}
|
|
13253
13467
|
else {
|
|
13254
|
-
console.warn('
|
|
13468
|
+
console.warn('Quadrel Framework | QdMultiInput - Missing [formArrayName] directive from host element of the component.');
|
|
13255
13469
|
}
|
|
13256
13470
|
}
|
|
13257
13471
|
ngOnChanges(changes) {
|
|
@@ -13777,7 +13991,7 @@ class QdPinCodeComponent {
|
|
|
13777
13991
|
this.control = this.controlContainer.control.get(this.formControlName);
|
|
13778
13992
|
}
|
|
13779
13993
|
else {
|
|
13780
|
-
console.warn('
|
|
13994
|
+
console.warn('Quadrel Framework | QdPinCode - Missing FormControlName directive from host element of the component.');
|
|
13781
13995
|
}
|
|
13782
13996
|
}
|
|
13783
13997
|
this._subs.add(this.actionEmitterService.hintEventEmitter$.subscribe(() => this.clickHint.emit()));
|
|
@@ -14237,7 +14451,7 @@ class QdRadioButtonsComponent {
|
|
|
14237
14451
|
this.control = this.controlContainer.control.get(this.formControlName);
|
|
14238
14452
|
}
|
|
14239
14453
|
else {
|
|
14240
|
-
console.warn('
|
|
14454
|
+
console.warn('Quadrel Framework | QdRadioButtons - Missing FormControlName directive from host element of the component.');
|
|
14241
14455
|
}
|
|
14242
14456
|
}
|
|
14243
14457
|
this.initRadioButtonList();
|
|
@@ -14642,7 +14856,7 @@ class QdRichtextComponent {
|
|
|
14642
14856
|
this.control = this.controlContainer.control?.get(this.formControlName) ?? undefined;
|
|
14643
14857
|
}
|
|
14644
14858
|
else {
|
|
14645
|
-
console.warn('
|
|
14859
|
+
console.warn('Quadrel Framework | QdSwitches - Missing FormControlName directive from host element of the component.');
|
|
14646
14860
|
}
|
|
14647
14861
|
}
|
|
14648
14862
|
this._subs.add(this.actionEmitterService.hintEventEmitter$.subscribe(() => this.clickHint.emit()));
|
|
@@ -14967,7 +15181,7 @@ class QdSwitchesComponent {
|
|
|
14967
15181
|
this.control = this.controlContainer.control.get(this.formControlName);
|
|
14968
15182
|
}
|
|
14969
15183
|
else {
|
|
14970
|
-
console.warn('
|
|
15184
|
+
console.warn('Quadrel Framework | QdSwitches - Missing FormControlName directive from host element of the component.');
|
|
14971
15185
|
}
|
|
14972
15186
|
}
|
|
14973
15187
|
this.switchesService.setList(this.options);
|
|
@@ -15235,11 +15449,11 @@ class QdTextareaComponent {
|
|
|
15235
15449
|
this.control = this.controlContainer.control.get(this.formControlName);
|
|
15236
15450
|
// TODO remove logic for support of angular FormControl with angular 18 update
|
|
15237
15451
|
if (!(this.control instanceof QdFormControl)) {
|
|
15238
|
-
console.warn('
|
|
15452
|
+
console.warn('Quadrel Framework | QdTextarea - Please use the QdFormControl instead of the Angular FormControl.');
|
|
15239
15453
|
}
|
|
15240
15454
|
}
|
|
15241
15455
|
else {
|
|
15242
|
-
console.warn('
|
|
15456
|
+
console.warn('Quadrel Framework | QdTextarea - Missing FormControlName directive from host element of the component.');
|
|
15243
15457
|
}
|
|
15244
15458
|
}
|
|
15245
15459
|
this.valueForView = this.value || getValue(this.config);
|
|
@@ -16296,7 +16510,7 @@ class QdButtonStackButtonComponent {
|
|
|
16296
16510
|
ngOnInit() {
|
|
16297
16511
|
// TODO: Delete directive "qd-button-stack" in Version 15
|
|
16298
16512
|
if (this._elementRef.nativeElement.attributes.hasOwnProperty('qd-button-stack')) {
|
|
16299
|
-
console.warn('
|
|
16513
|
+
console.warn('Quadrel Framework | QdButtonStack - The directive "qd-button-stack" is deprecated. Please use "qdButtonStack" instead.');
|
|
16300
16514
|
}
|
|
16301
16515
|
}
|
|
16302
16516
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdButtonStackButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -16389,7 +16603,7 @@ class QdMenuButtonComponent {
|
|
|
16389
16603
|
}
|
|
16390
16604
|
ngOnInit() {
|
|
16391
16605
|
if (!this.config)
|
|
16392
|
-
console.error('
|
|
16606
|
+
console.error('Quadrel Framework | QdMenuButton - Please provide a valid config.');
|
|
16393
16607
|
}
|
|
16394
16608
|
hasUnhiddenActions() {
|
|
16395
16609
|
return this.config?.actions?.some(action => !action.isHidden) ?? false;
|
|
@@ -16648,7 +16862,7 @@ class QdColumnAutoFillDirective {
|
|
|
16648
16862
|
}
|
|
16649
16863
|
}
|
|
16650
16864
|
logErrorMessage(message) {
|
|
16651
|
-
console.error(
|
|
16865
|
+
console.error(`Quadrel Framework | QdColumnAutoFill - ${message}`);
|
|
16652
16866
|
}
|
|
16653
16867
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdColumnAutoFillDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
16654
16868
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: QdColumnAutoFillDirective, isStandalone: false, selector: "[qdColumnAutoFill]", ngImport: i0 });
|
|
@@ -16697,7 +16911,7 @@ class QdColumnsDisableAutoFillDirective {
|
|
|
16697
16911
|
}
|
|
16698
16912
|
}
|
|
16699
16913
|
logErrorMessage(message) {
|
|
16700
|
-
console.error(
|
|
16914
|
+
console.error(`Quadrel Framework | QdColumnsDisableAutoFill - ${message}`);
|
|
16701
16915
|
}
|
|
16702
16916
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdColumnsDisableAutoFillDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
16703
16917
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: QdColumnsDisableAutoFillDirective, isStandalone: false, selector: "[qdColumnsDisableAutoFill]", ngImport: i0 });
|
|
@@ -16971,7 +17185,7 @@ class QdColumnDisableResponsiveColspansDirective {
|
|
|
16971
17185
|
}
|
|
16972
17186
|
}
|
|
16973
17187
|
logErrorMessage(message) {
|
|
16974
|
-
console.error(
|
|
17188
|
+
console.error(`Quadrel Framework | QdColumnDisableResponsiveColspans - ${message}`);
|
|
16975
17189
|
}
|
|
16976
17190
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdColumnDisableResponsiveColspansDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
16977
17191
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: QdColumnDisableResponsiveColspansDirective, isStandalone: false, selector: "[qdColumnDisableResponsiveColspans]", ngImport: i0 });
|
|
@@ -17030,7 +17244,7 @@ class QdColumnsMaxDirective {
|
|
|
17030
17244
|
}
|
|
17031
17245
|
}
|
|
17032
17246
|
logErrorMessage(message) {
|
|
17033
|
-
console.error(
|
|
17247
|
+
console.error(`Quadrel Framework | QdColumnsMax - ${message}`);
|
|
17034
17248
|
}
|
|
17035
17249
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdColumnsMaxDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
17036
17250
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: QdColumnsMaxDirective, isStandalone: false, selector: "[qdColumnsMax]", inputs: { qdColumnsMax: "qdColumnsMax" }, ngImport: i0 });
|
|
@@ -17197,7 +17411,7 @@ class QdColumnBreakBeforeDirective {
|
|
|
17197
17411
|
}
|
|
17198
17412
|
}
|
|
17199
17413
|
logErrorMessage(message) {
|
|
17200
|
-
console.error(
|
|
17414
|
+
console.error(`Quadrel Framework | QdColumnBreakBefore - ${message}`);
|
|
17201
17415
|
}
|
|
17202
17416
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdColumnBreakBeforeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
17203
17417
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: QdColumnBreakBeforeDirective, isStandalone: false, selector: "[qdColumnBreakBefore]", ngImport: i0 });
|
|
@@ -17248,7 +17462,7 @@ class QdColumnNextInSameRowDirective {
|
|
|
17248
17462
|
}
|
|
17249
17463
|
if (!nextSiblingColspan) {
|
|
17250
17464
|
this.logErrorMessage('The next sibling of the element marked with qdColumnNextInSameRow ' +
|
|
17251
|
-
'has to be an element with a qdColumn directive
|
|
17465
|
+
'has to be an element with a qdColumn directive.');
|
|
17252
17466
|
}
|
|
17253
17467
|
if (nextSiblingColspan) {
|
|
17254
17468
|
this._renderer.addClass(this.element, QdColumnNextInSameRowDirective.className);
|
|
@@ -17270,7 +17484,7 @@ class QdColumnNextInSameRowDirective {
|
|
|
17270
17484
|
return QdColumnDirective.getQdColumnColspan(nextSibling);
|
|
17271
17485
|
}
|
|
17272
17486
|
logErrorMessage(message) {
|
|
17273
|
-
console.error(
|
|
17487
|
+
console.error(`Quadrel Framework | QdColumnNextInSameRow - ${message}`);
|
|
17274
17488
|
}
|
|
17275
17489
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdColumnNextInSameRowDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
17276
17490
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: QdColumnNextInSameRowDirective, isStandalone: false, selector: "[qdColumnNextInSameRow]", ngImport: i0 });
|
|
@@ -17320,7 +17534,7 @@ class QdColumnFullGridWidthDirective {
|
|
|
17320
17534
|
}
|
|
17321
17535
|
}
|
|
17322
17536
|
logErrorMessage(message) {
|
|
17323
|
-
console.error(
|
|
17537
|
+
console.error(`Quadrel Framework | QdColumnFullGridWidth - ${message}`);
|
|
17324
17538
|
}
|
|
17325
17539
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdColumnFullGridWidthDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
17326
17540
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: QdColumnFullGridWidthDirective, isStandalone: false, selector: "[qdColumnFullGridWidth]", ngImport: i0 });
|
|
@@ -17368,7 +17582,7 @@ class QdColumnsDisableResponsiveColspansDirective {
|
|
|
17368
17582
|
}
|
|
17369
17583
|
}
|
|
17370
17584
|
logErrorMessage(message) {
|
|
17371
|
-
console.error(
|
|
17585
|
+
console.error(`Quadrel Framework | QdColumnsDisableResponsiveColspans - ${message}`);
|
|
17372
17586
|
}
|
|
17373
17587
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdColumnsDisableResponsiveColspansDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
17374
17588
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: QdColumnsDisableResponsiveColspansDirective, isStandalone: false, selector: "[qdColumnsDisableResponsiveColspans]", ngImport: i0 });
|
|
@@ -18166,7 +18380,7 @@ class QdPendingChangesGuardDirective {
|
|
|
18166
18380
|
formGroup;
|
|
18167
18381
|
constructor() {
|
|
18168
18382
|
if (!this.ngForm && !this.formGroupDirective) {
|
|
18169
|
-
console.error('
|
|
18383
|
+
console.error('Quadrel Framework | QdPendingChangesGuard - requires NgForm or FormGroupDirective to be present on the host element.');
|
|
18170
18384
|
}
|
|
18171
18385
|
}
|
|
18172
18386
|
ngOnInit() {
|
|
@@ -19341,7 +19555,7 @@ class QdFileCollectorComponent {
|
|
|
19341
19555
|
isEqual$1(config.allowedFileNamePattern, this.fileTypeService.getFileNamePattern(config.allowedFileTypes)));
|
|
19342
19556
|
}
|
|
19343
19557
|
logError(message) {
|
|
19344
|
-
console.error(`
|
|
19558
|
+
console.error(`Quadrel Framework | QdFileCollector - ${message}`);
|
|
19345
19559
|
}
|
|
19346
19560
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFileCollectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
19347
19561
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", 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 [attr.data-test-id]=\"testId + '-allowed-files-description'\"\n></qd-file-collector-allowed-files-description>\n\n<ng-container *ngFor=\"let fileUpload of this.fileUploads; let i = index\">\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 [data-test-id]=\"testId + '-item-' + i\"\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", "data-test-id"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
|
@@ -19582,7 +19796,7 @@ function resetCategoryFilter$1(state, categoryIndex) {
|
|
|
19582
19796
|
const isIsoTimestampValid = (isoTimestamp) => {
|
|
19583
19797
|
const valid = new RegExp(/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d((:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|([+-][0-2]\d:[0-5]\d|Z))/).test(isoTimestamp);
|
|
19584
19798
|
if (!valid && isoTimestamp !== '') {
|
|
19585
|
-
console.warn('
|
|
19799
|
+
console.warn('Quadrel Framework | QdFilter - The given ISO 8601 date string is not valid.');
|
|
19586
19800
|
}
|
|
19587
19801
|
return valid;
|
|
19588
19802
|
};
|
|
@@ -19694,7 +19908,7 @@ function validateFilterSelection(filterSelection, filterCategories, selectionSou
|
|
|
19694
19908
|
Object.keys(filterSelection).forEach(selectionCategory => {
|
|
19695
19909
|
const categoryInFilter = filterCategories.find(category => category.category === selectionCategory);
|
|
19696
19910
|
if (!categoryInFilter) {
|
|
19697
|
-
console.warn(`The category "${selectionCategory}" that is given in the ${selectionSource} is not part of the filter
|
|
19911
|
+
console.warn(`Quadrel Framework | QdFilter - The category "${selectionCategory}" that is given in the ${selectionSource} is not part of the filter.`);
|
|
19698
19912
|
return;
|
|
19699
19913
|
}
|
|
19700
19914
|
switch (categoryInFilter.type) {
|
|
@@ -19704,8 +19918,8 @@ function validateFilterSelection(filterSelection, filterCategories, selectionSou
|
|
|
19704
19918
|
const items = categoryInFilter.items;
|
|
19705
19919
|
filterSelection[selectionCategory].forEach(selectionItem => {
|
|
19706
19920
|
if (!items.some(item => item.item === selectionItem)) {
|
|
19707
|
-
console.warn(`The item "${selectionItem}" that is given in the ${selectionSource} ` +
|
|
19708
|
-
`is not contained in the filter category "${selectionCategory}"
|
|
19921
|
+
console.warn(`Quadrel Framework | QdFilter - The item "${selectionItem}" that is given in the ${selectionSource} ` +
|
|
19922
|
+
`is not contained in the filter category "${selectionCategory}".`);
|
|
19709
19923
|
}
|
|
19710
19924
|
});
|
|
19711
19925
|
break;
|
|
@@ -19715,7 +19929,7 @@ function validateFilterSelection(filterSelection, filterCategories, selectionSou
|
|
|
19715
19929
|
case 'dateTimeRange':
|
|
19716
19930
|
filterSelection[selectionCategory].forEach((selectionItem, itemIndex) => {
|
|
19717
19931
|
if (selectionItem !== '' && isNaN(Date.parse(selectionItem))) {
|
|
19718
|
-
console.error(`The given ${selectionSource} contains an invalid date for the category "${selectionCategory}"
|
|
19932
|
+
console.error(`Quadrel Framework | QdFilter - The given ${selectionSource} contains an invalid date for the category "${selectionCategory}".`);
|
|
19719
19933
|
filterSelection[selectionCategory][itemIndex] = '';
|
|
19720
19934
|
}
|
|
19721
19935
|
});
|
|
@@ -19727,7 +19941,7 @@ function validateFilterSelection(filterSelection, filterCategories, selectionSou
|
|
|
19727
19941
|
const initialState$2 = {};
|
|
19728
19942
|
const _filterReducer = createReducer(initialState$2, on(QdFilterActions.initFilterState, (state, { filterId, filterData }) => {
|
|
19729
19943
|
if (filterData === undefined || filterData.categories.length === 0) {
|
|
19730
|
-
console.warn('
|
|
19944
|
+
console.warn('Quadrel Framework | QdFilter - The "filterData" input is invalid. To use this input, please read the documentation.');
|
|
19731
19945
|
return state;
|
|
19732
19946
|
}
|
|
19733
19947
|
return updateStateWithNewFilter(state, filterId, createFilterState(filterData));
|
|
@@ -19767,7 +19981,7 @@ const _filterReducer = createReducer(initialState$2, on(QdFilterActions.initFilt
|
|
|
19767
19981
|
}), on(QdFilterActions.updateCategoryTranslation, (state, { filterId, filterData }) => {
|
|
19768
19982
|
const newFilter = getNewFilter(state, filterId);
|
|
19769
19983
|
if (filterData === undefined || filterData.categories.length === 0) {
|
|
19770
|
-
console.warn('
|
|
19984
|
+
console.warn('Quadrel Framework | QdFilter - The "filterData" input is invalid. To use this input, please read the documentation.');
|
|
19771
19985
|
return state;
|
|
19772
19986
|
}
|
|
19773
19987
|
newFilter.categories.forEach((_category, i) => {
|
|
@@ -20963,7 +21177,7 @@ class QdFilterRouterConnectorService {
|
|
|
20963
21177
|
return of(false);
|
|
20964
21178
|
}
|
|
20965
21179
|
if (this._connectedFilter) {
|
|
20966
|
-
console.error('
|
|
21180
|
+
console.error('Quadrel Framework | QdFilter - More than one filter with enabled "connectWithRouter" config is not allowed. ' +
|
|
20967
21181
|
'Please set connectWithRouter to false except for one filter.');
|
|
20968
21182
|
return of(false);
|
|
20969
21183
|
}
|
|
@@ -21251,7 +21465,7 @@ class QdFilterComponent {
|
|
|
21251
21465
|
}
|
|
21252
21466
|
validateConfig() {
|
|
21253
21467
|
if (this.filterData?.outputLegacyQueryStringFormat !== false && this.queryStringOutput.observers.length > 0) {
|
|
21254
|
-
console.warn('
|
|
21468
|
+
console.warn('Quadrel Framework | QdFilter - You use the "queryStringOutput" with the legacy format. To use the new format please set "outputLegacyQueryStringFormat" to false. The legacy format will be removed in future releases.');
|
|
21255
21469
|
}
|
|
21256
21470
|
}
|
|
21257
21471
|
init() {
|
|
@@ -21938,9 +22152,9 @@ class NavigationTileComponent {
|
|
|
21938
22152
|
}
|
|
21939
22153
|
validate() {
|
|
21940
22154
|
if (!this.title)
|
|
21941
|
-
console.error('
|
|
22155
|
+
console.error('Quadrel Framework | QdNavigationTile - You should provide a title.');
|
|
21942
22156
|
if (!this.icon)
|
|
21943
|
-
console.error('
|
|
22157
|
+
console.error('Quadrel Framework | QdNavigationTile - You should provide an icon.');
|
|
21944
22158
|
}
|
|
21945
22159
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: NavigationTileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21946
22160
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", 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: [":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: i3.TranslatePipe, name: "translate" }] });
|
|
@@ -22038,7 +22252,7 @@ class QdSearchRouterConnectorService {
|
|
|
22038
22252
|
return of(false);
|
|
22039
22253
|
}
|
|
22040
22254
|
if (this._connectedSearch) {
|
|
22041
|
-
console.error('
|
|
22255
|
+
console.error('Quadrel Framework | QdSearch - More than one search with enabled "connectWithRouter" config is not allowed. ' +
|
|
22042
22256
|
'Please set connectWithRouter to false except for one search.');
|
|
22043
22257
|
return of(false);
|
|
22044
22258
|
}
|
|
@@ -22493,7 +22707,7 @@ class QdContextService {
|
|
|
22493
22707
|
setValue(contextId, selection) {
|
|
22494
22708
|
const index = this._configuredContexts.value.findIndex(context => context.id === contextId);
|
|
22495
22709
|
if (index < 0)
|
|
22496
|
-
throw new Error(`
|
|
22710
|
+
throw new Error(`Quadrel Framework | QdContext - Cannot set value of unconfigured context ${contextId}`);
|
|
22497
22711
|
this._values.next([
|
|
22498
22712
|
...this._values.value.filter(value => value.contextId !== contextId),
|
|
22499
22713
|
{ contextId, value: selection }
|
|
@@ -23131,7 +23345,7 @@ class QdTableResolverService {
|
|
|
23131
23345
|
refresh(resolverOptions = {}) {
|
|
23132
23346
|
const resolver = this.tableDataResolver;
|
|
23133
23347
|
if (!resolver)
|
|
23134
|
-
return console.warn('
|
|
23348
|
+
return console.warn('Quadrel Framework | QdTable - Refresh skipped: resolver not provided.');
|
|
23135
23349
|
const { pageIndex } = resolverOptions;
|
|
23136
23350
|
if (this._refreshSubscription)
|
|
23137
23351
|
this._refreshSubscription.unsubscribe();
|
|
@@ -23255,7 +23469,7 @@ class QdTableResponsiveRowService {
|
|
|
23255
23469
|
const maxCurrentColumns = this.columnMapping[this._currentBreakpoint];
|
|
23256
23470
|
let columnsDefinitions = this._config.columns.map(column => column.column);
|
|
23257
23471
|
if (this.mainColumnIndex >= maxCurrentColumns) {
|
|
23258
|
-
console.warn('
|
|
23472
|
+
console.warn('Quadrel Framework | QdTable - The index of the "mainColumn" cannot be equal or greater than maximum columns for this breakpoint.');
|
|
23259
23473
|
return columnsDefinitions;
|
|
23260
23474
|
}
|
|
23261
23475
|
if (maxCurrentColumns >= columnsLength)
|
|
@@ -23655,10 +23869,10 @@ class QdTablePaginatorComponent {
|
|
|
23655
23869
|
}
|
|
23656
23870
|
isConfigValid() {
|
|
23657
23871
|
if (this.config?.hasPagination) {
|
|
23658
|
-
console.warn('
|
|
23872
|
+
console.warn('Quadrel Framework | QdTable Pagination - The config "hasPagination" is deprecated. Please use "pagination" instead.');
|
|
23659
23873
|
}
|
|
23660
23874
|
if (!this.tableDataResolver) {
|
|
23661
|
-
console.error('
|
|
23875
|
+
console.error('Quadrel Framework | QdTable Pagination - Provide a resolver for pagination. Please use the "QD_TABLE_DATA_RESOLVER_TOKEN" injection token.');
|
|
23662
23876
|
return false;
|
|
23663
23877
|
}
|
|
23664
23878
|
return true;
|
|
@@ -23952,7 +24166,7 @@ class QdTableBodyComponent {
|
|
|
23952
24166
|
}
|
|
23953
24167
|
primaryAction(rowData, index) {
|
|
23954
24168
|
if (!this.config.primaryAction?.handler)
|
|
23955
|
-
return console.warn('
|
|
24169
|
+
return console.warn('Quadrel Framework | QdTable - No handler defined for primary action.');
|
|
23956
24170
|
if (this.config.primaryAction?.highlightOnRevisit) {
|
|
23957
24171
|
this.tableStoreService.setLastVisitedRow(resolveRowIdentifier(rowData, index, this.config.trackRowBy));
|
|
23958
24172
|
}
|
|
@@ -24014,7 +24228,7 @@ class QdTableEmptyStateComponent {
|
|
|
24014
24228
|
}
|
|
24015
24229
|
getI18n() {
|
|
24016
24230
|
if (!this.emptyStateService.i18ns)
|
|
24017
|
-
console.warn('
|
|
24231
|
+
console.warn('Quadrel Framework | QdTable - No translations available.');
|
|
24018
24232
|
return this.emptyStateService.i18ns;
|
|
24019
24233
|
}
|
|
24020
24234
|
handleClick() {
|
|
@@ -24473,7 +24687,7 @@ class QdTableComponent {
|
|
|
24473
24687
|
}
|
|
24474
24688
|
registerConnector(connectorName) {
|
|
24475
24689
|
if (!this.tableDataResolver) {
|
|
24476
|
-
console.warn('
|
|
24690
|
+
console.warn('Quadrel Framework | QdTable - qdConnectToFilter only works with a resolver. Please inject the resolver using QD_TABLE_DATA_RESOLVER_TOKEN.');
|
|
24477
24691
|
return;
|
|
24478
24692
|
}
|
|
24479
24693
|
this._connectors.push({ connectorName, connectorState: QdTableConnectorState.AWAITING });
|
|
@@ -24522,7 +24736,7 @@ class QdTableComponent {
|
|
|
24522
24736
|
this.secondaryActionOutput.emit(recentAction);
|
|
24523
24737
|
const action = this.config.secondaryActions?.find(a => a.type === recentAction.type);
|
|
24524
24738
|
if (!action?.handler)
|
|
24525
|
-
return console.warn('
|
|
24739
|
+
return console.warn('Quadrel Framework | QdTable - No handler defined for secondary action:', recentAction.type);
|
|
24526
24740
|
if (action.highlightOnRevisit) {
|
|
24527
24741
|
this.tableStoreService.setLastVisitedRow(resolveRowIdentifier(recentAction.rowData, recentAction.index, this.config.trackRowBy));
|
|
24528
24742
|
}
|
|
@@ -24546,13 +24760,13 @@ class QdTableComponent {
|
|
|
24546
24760
|
if (!this.config.refreshOnPushEvent)
|
|
24547
24761
|
return;
|
|
24548
24762
|
if (!this.config.uid) {
|
|
24549
|
-
console.error('
|
|
24550
|
-
'The table uid has to match the path of the server side event.');
|
|
24763
|
+
console.error('Quadrel Framework | QdTable - A "uid" has to be defined when "refreshOnPushEvent" is enabled. ' +
|
|
24764
|
+
'The table "uid" has to match the path of the server side event.');
|
|
24551
24765
|
return;
|
|
24552
24766
|
}
|
|
24553
24767
|
if (!this.pushEventsService || !this.pushEventsService.isConnectedOrConnecting()) {
|
|
24554
|
-
console.error('
|
|
24555
|
-
'if you enable the refreshOnPushEvent flag in the table.');
|
|
24768
|
+
console.error('Quadrel Framework | QdTable - You have to connect the QdPushEventsService on your own ' +
|
|
24769
|
+
'if you enable the "refreshOnPushEvent" flag in the table.');
|
|
24556
24770
|
return;
|
|
24557
24771
|
}
|
|
24558
24772
|
const pushEventsService = this.pushEventsService;
|
|
@@ -24565,11 +24779,11 @@ class QdTableComponent {
|
|
|
24565
24779
|
return data.path.includes(this.config.uid);
|
|
24566
24780
|
}
|
|
24567
24781
|
catch (error) {
|
|
24568
|
-
console.warn('Failed to process messageEvent:', error);
|
|
24782
|
+
console.warn('Quadrel Framework | QdTable - Failed to process messageEvent:', error);
|
|
24569
24783
|
return false;
|
|
24570
24784
|
}
|
|
24571
24785
|
}), catchError(error => {
|
|
24572
|
-
console.error('Error in event stream:', error);
|
|
24786
|
+
console.error('Quadrel Framework | QdTable - Error in event stream:', error);
|
|
24573
24787
|
return NEVER;
|
|
24574
24788
|
}))
|
|
24575
24789
|
.subscribe(() => this.triggerRefresh());
|
|
@@ -24589,14 +24803,14 @@ class QdTableComponent {
|
|
|
24589
24803
|
}
|
|
24590
24804
|
validateConfig() {
|
|
24591
24805
|
if (!this.config.i18ns) {
|
|
24592
|
-
console.warn('
|
|
24806
|
+
console.warn('Quadrel Framework | QdTable - No translations available for the secondaryActions.');
|
|
24593
24807
|
}
|
|
24594
24808
|
if (this.hasHighlightOnRevisit() && !this.config.uid) {
|
|
24595
|
-
console.warn('
|
|
24809
|
+
console.warn('Quadrel Framework | QdTable - A "uid" has to be defined when "highlightOnRevisit" is enabled. ' +
|
|
24596
24810
|
'Without a uid, the table state does not persist across navigation.');
|
|
24597
24811
|
}
|
|
24598
24812
|
if (this.config.selection?.type === 'multiSelect' && this.hasPagination && !this.config.trackRowBy) {
|
|
24599
|
-
throw new Error('
|
|
24813
|
+
throw new Error('Quadrel Framework | QdTable - "trackRowBy" is required when combining "selection: multiSelect" with pagination. ' +
|
|
24600
24814
|
'Provide a trackRowBy function (e.g. `trackRowBy: row => row.uid`) that returns a unique identifier ' +
|
|
24601
24815
|
'per row, otherwise selections cannot be persisted across pages, page-size or sort changes.');
|
|
24602
24816
|
}
|
|
@@ -24612,7 +24826,7 @@ class QdTableComponent {
|
|
|
24612
24826
|
mapColumnFillsWidth() {
|
|
24613
24827
|
if (!this.config.mainColumnNotFillingWidth)
|
|
24614
24828
|
return;
|
|
24615
|
-
console.warn('
|
|
24829
|
+
console.warn('Quadrel Framework | QdTable - The config key "mainColumnNotFillingWidth" is deprecated. Please use "whichColumnFillsWidth" instead.');
|
|
24616
24830
|
if (this.config.whichColumnFillsWidth)
|
|
24617
24831
|
return;
|
|
24618
24832
|
this.config.whichColumnFillsWidth = 'none';
|
|
@@ -24865,7 +25079,7 @@ class QdConnectorTableFilterDirective {
|
|
|
24865
25079
|
constructor() {
|
|
24866
25080
|
const toolbarComponentsService = this.toolbarComponentsService;
|
|
24867
25081
|
if (!toolbarComponentsService)
|
|
24868
|
-
throw new Error('
|
|
25082
|
+
throw new Error('Quadrel Framework | QdConnectorTableFilter - Please use this directive only within <qd-section>.');
|
|
24869
25083
|
this.tableComponent.registerConnector('filter');
|
|
24870
25084
|
}
|
|
24871
25085
|
ngAfterViewInit() {
|
|
@@ -24887,7 +25101,7 @@ class QdConnectorTableFilterDirective {
|
|
|
24887
25101
|
}
|
|
24888
25102
|
validateAndApplyConfig() {
|
|
24889
25103
|
if (this.filterComponent.hasFilterData())
|
|
24890
|
-
console.error('
|
|
25104
|
+
console.error('Quadrel Framework | QdConnectorTableFilter - Please remove the redundant "filterConfig" in the "sectionConfig". Will be overridden by this directive.');
|
|
24891
25105
|
this.filterComponent.setFilterConfig({ ...this.qdConnectToFilter, emitOutputsInitially: true });
|
|
24892
25106
|
}
|
|
24893
25107
|
subscribeToFilterChanges() {
|
|
@@ -24951,7 +25165,7 @@ class QdConnectorTableSearchDirective {
|
|
|
24951
25165
|
constructor() {
|
|
24952
25166
|
const toolbarComponentsService = this.toolbarComponentsService;
|
|
24953
25167
|
if (!toolbarComponentsService)
|
|
24954
|
-
throw new Error('
|
|
25168
|
+
throw new Error('Quadrel Framework | QdConnectorTableSearch - Please use this directive only within <qd-section>.');
|
|
24955
25169
|
this.tableComponent.registerConnector('search');
|
|
24956
25170
|
}
|
|
24957
25171
|
ngAfterViewInit() {
|
|
@@ -24969,7 +25183,7 @@ class QdConnectorTableSearchDirective {
|
|
|
24969
25183
|
}
|
|
24970
25184
|
validateAndApplyConfig() {
|
|
24971
25185
|
if (this.searchComponent.hasConfigData())
|
|
24972
|
-
console.warn('
|
|
25186
|
+
console.warn('Quadrel Framework | QdConnectorTableSearch - Please remove the redundant "searchConfig" in the "sectionConfig". Will be overridden by this directive.');
|
|
24973
25187
|
this.searchComponent.configData = { emitEmptySearch: true, ...this.qdConnectToSearch };
|
|
24974
25188
|
}
|
|
24975
25189
|
subscribeToSearchChanges() {
|
|
@@ -25038,7 +25252,7 @@ class QdSectionAdapterDirective {
|
|
|
25038
25252
|
const toRemove = Array.from(host.children).filter(child => child.tagName !== 'QD-SECTION');
|
|
25039
25253
|
toRemove.forEach(el => {
|
|
25040
25254
|
this.renderer.removeChild(host, el);
|
|
25041
|
-
console.warn('
|
|
25255
|
+
console.warn('Quadrel Framework | QdSectionAdapter - Only "qd-section" is supported. The following content is not rendered:', el);
|
|
25042
25256
|
});
|
|
25043
25257
|
}
|
|
25044
25258
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdSectionAdapterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
@@ -25158,13 +25372,13 @@ class QdSectionToolbarActionComponent {
|
|
|
25158
25372
|
}
|
|
25159
25373
|
validateConfig() {
|
|
25160
25374
|
if (this._config.action) {
|
|
25161
|
-
console.warn('
|
|
25375
|
+
console.warn('Quadrel Framework | QdSection - The "action" key is deprecated and will be removed in v18. Use "actions" instead.');
|
|
25162
25376
|
}
|
|
25163
25377
|
if (this._config.action && this._config.actions) {
|
|
25164
|
-
console.error('
|
|
25378
|
+
console.error('Quadrel Framework | QdSection - Both "action" and "actions" are defined in the configuration. Please use only "actions".');
|
|
25165
25379
|
}
|
|
25166
25380
|
if (this._config.actions && this._config.actions.filter(action => action.type === 'addNew').length > 1) {
|
|
25167
|
-
console.error('
|
|
25381
|
+
console.error('Quadrel Framework | QdSection - The action type "addNew" is used multiple times in "actions". Please use "addNew" only once.');
|
|
25168
25382
|
}
|
|
25169
25383
|
}
|
|
25170
25384
|
// TODO: Remove in v19
|
|
@@ -26182,7 +26396,7 @@ class QdTreeEmptyStateComponent {
|
|
|
26182
26396
|
config;
|
|
26183
26397
|
getI18n() {
|
|
26184
26398
|
if (!this.emptyStateService.i18ns)
|
|
26185
|
-
console.warn('
|
|
26399
|
+
console.warn('Quadrel Framework | QdTree - No translations available.');
|
|
26186
26400
|
return this.emptyStateService.i18ns;
|
|
26187
26401
|
}
|
|
26188
26402
|
handleClick() {
|
|
@@ -26371,7 +26585,7 @@ class QdTreeComponent {
|
|
|
26371
26585
|
}
|
|
26372
26586
|
validateConfig() {
|
|
26373
26587
|
if (!this.config.i18ns) {
|
|
26374
|
-
console.warn('
|
|
26588
|
+
console.warn('Quadrel Framework | QdTree - No translations available for the secondaryActions.');
|
|
26375
26589
|
}
|
|
26376
26590
|
}
|
|
26377
26591
|
initializeGroupService() {
|
|
@@ -26380,7 +26594,7 @@ class QdTreeComponent {
|
|
|
26380
26594
|
}
|
|
26381
26595
|
catch (err) {
|
|
26382
26596
|
if (err instanceof QdGroupedIndicesNotConsecutiveError) {
|
|
26383
|
-
console.error('
|
|
26597
|
+
console.error('Quadrel Framework | QdTree - Non-sequential "tree" content types are not allowed.');
|
|
26384
26598
|
}
|
|
26385
26599
|
}
|
|
26386
26600
|
}
|
|
@@ -26414,7 +26628,7 @@ class QdTreeComponent {
|
|
|
26414
26628
|
this.secondaryActionOutput.emit(recentAction);
|
|
26415
26629
|
const action = this.config.secondaryActions?.find(a => a.type === recentAction.type);
|
|
26416
26630
|
if (!action?.handler)
|
|
26417
|
-
return console.warn('
|
|
26631
|
+
return console.warn('Quadrel Framework | QdTree - No handler defined for secondary action:', recentAction.type);
|
|
26418
26632
|
action.handler(recentAction);
|
|
26419
26633
|
});
|
|
26420
26634
|
}
|
|
@@ -26665,7 +26879,7 @@ class QdPageFooterService {
|
|
|
26665
26879
|
updates.forEach(({ actionKey, partialAction }) => {
|
|
26666
26880
|
const action = currentActionsMap.get(actionKey);
|
|
26667
26881
|
if (!action)
|
|
26668
|
-
return console.warn(`
|
|
26882
|
+
return console.warn(`Quadrel Framework | QdPageFooter - Action with key "${actionKey}" not found.`);
|
|
26669
26883
|
updatedActionsMap.set(actionKey, { ...action, ...partialAction });
|
|
26670
26884
|
});
|
|
26671
26885
|
this._pageFooterActions.next(updatedActionsMap);
|
|
@@ -26856,6 +27070,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
26856
27070
|
args: ['attr.class']
|
|
26857
27071
|
}] } });
|
|
26858
27072
|
|
|
27073
|
+
/**
|
|
27074
|
+
* @description Creates a replay-backed stream for pushing partial header-facet
|
|
27075
|
+
* updates into `QdPageConfig.metadata$`.
|
|
27076
|
+
*
|
|
27077
|
+
* The returned `ReplaySubject<Partial<T>>(1)` buffers the most recent emission
|
|
27078
|
+
* so late subscribers still receive the latest value. The page-header component
|
|
27079
|
+
* subscribes to `metadata$` inside its own `ngOnInit`, which runs AFTER the
|
|
27080
|
+
* consuming page component's `ngOnInit`. Consumers that emit synchronously
|
|
27081
|
+
* during their `ngOnInit` (e.g. from a `combineLatest` over already-populated
|
|
27082
|
+
* store selectors) would otherwise lose that first emission if `metadata$` were
|
|
27083
|
+
* a plain `Subject`.
|
|
27084
|
+
*
|
|
27085
|
+
* @example
|
|
27086
|
+
* ```ts
|
|
27087
|
+
* class MyPageComponent {
|
|
27088
|
+
* private metadataUpdates$ = createMetadataStream<MyObject>();
|
|
27089
|
+
*
|
|
27090
|
+
* pageConfig: QdPageConfig<MyObject> = {
|
|
27091
|
+
* // ...
|
|
27092
|
+
* metadata$: this.metadataUpdates$
|
|
27093
|
+
* };
|
|
27094
|
+
*
|
|
27095
|
+
* ngOnInit(): void {
|
|
27096
|
+
* combineLatest([this.state$, this.data$])
|
|
27097
|
+
* .pipe(map(([state, data]) => this.mapHeader(state, data)))
|
|
27098
|
+
* .subscribe(header => this.metadataUpdates$.next(header));
|
|
27099
|
+
* }
|
|
27100
|
+
* }
|
|
27101
|
+
* ```
|
|
27102
|
+
*/
|
|
27103
|
+
function createMetadataStream() {
|
|
27104
|
+
return new ReplaySubject(1);
|
|
27105
|
+
}
|
|
27106
|
+
|
|
26859
27107
|
/**
|
|
26860
27108
|
* Token for resolving page object data
|
|
26861
27109
|
*/
|
|
@@ -27151,7 +27399,7 @@ class QdDynamicFacetComponent {
|
|
|
27151
27399
|
ngOnInit() {
|
|
27152
27400
|
const facet = this.dynamicFacetsService.getFacet(this.facet.options.type);
|
|
27153
27401
|
if (!facet) {
|
|
27154
|
-
console.error('
|
|
27402
|
+
console.error('Quadrel Framework | QdPage - Facet could not be found.');
|
|
27155
27403
|
return;
|
|
27156
27404
|
}
|
|
27157
27405
|
const viewContainerRef = this.dynamicFacet.viewContainerRef;
|
|
@@ -27200,13 +27448,13 @@ class QdPageCommitActionExecutor {
|
|
|
27200
27448
|
onAfterSnapshot?.();
|
|
27201
27449
|
}
|
|
27202
27450
|
catch (err) {
|
|
27203
|
-
console.error('
|
|
27451
|
+
console.error('Quadrel Framework | QdPage - internal onAfterSnapshot hook threw after form was marked as saved.', err);
|
|
27204
27452
|
}
|
|
27205
27453
|
try {
|
|
27206
27454
|
action.onSuccess?.();
|
|
27207
27455
|
}
|
|
27208
27456
|
catch (err) {
|
|
27209
|
-
console.error('
|
|
27457
|
+
console.error('Quadrel Framework | QdPage - onSuccess callback threw after form was marked as saved.', err);
|
|
27210
27458
|
}
|
|
27211
27459
|
});
|
|
27212
27460
|
};
|
|
@@ -27225,14 +27473,14 @@ class QdPageCommitActionExecutor {
|
|
|
27225
27473
|
}
|
|
27226
27474
|
static handleError(action, err) {
|
|
27227
27475
|
if (!action.onError) {
|
|
27228
|
-
console.error('
|
|
27476
|
+
console.error('Quadrel Framework | QdPage - Commit action observable errored — form was not marked as saved. Provide an `onError` hook on the action, or handle errors in the handler.', err);
|
|
27229
27477
|
return;
|
|
27230
27478
|
}
|
|
27231
27479
|
try {
|
|
27232
27480
|
action.onError(err);
|
|
27233
27481
|
}
|
|
27234
27482
|
catch (callbackErr) {
|
|
27235
|
-
console.error('
|
|
27483
|
+
console.error('Quadrel Framework | QdPage - onError callback threw.', callbackErr);
|
|
27236
27484
|
}
|
|
27237
27485
|
}
|
|
27238
27486
|
}
|
|
@@ -27367,7 +27615,7 @@ class QdFormGroupManagerService {
|
|
|
27367
27615
|
captured.set(key, structuredClone(fg.getRawValue()));
|
|
27368
27616
|
}
|
|
27369
27617
|
catch (err) {
|
|
27370
|
-
throw new Error(`
|
|
27618
|
+
throw new Error(`Quadrel Framework | QdFormGroupManager - captureFormValues() failed for group "${key}". ` +
|
|
27371
27619
|
`Form values must be structured-cloneable. Non-cloneable values like functions, ` +
|
|
27372
27620
|
`symbols, or DOM nodes are not supported. Original error: ${String(err)}`);
|
|
27373
27621
|
}
|
|
@@ -27461,7 +27709,7 @@ class QdFormGroupManagerService {
|
|
|
27461
27709
|
initFormArrayFromValues(array, values) {
|
|
27462
27710
|
const protoValue = values[0];
|
|
27463
27711
|
if (!protoValue || typeof protoValue !== 'object') {
|
|
27464
|
-
console.warn('
|
|
27712
|
+
console.warn('Quadrel Framework | QdFormGroupManager - Cannot restore FormArray: no prototype and value is not object-like.');
|
|
27465
27713
|
return;
|
|
27466
27714
|
}
|
|
27467
27715
|
for (let i = 0; i < values.length; i++) {
|
|
@@ -27483,7 +27731,7 @@ class QdFormGroupManagerService {
|
|
|
27483
27731
|
const arrControls = control.controls.map(c => this.deepCloneControl(c));
|
|
27484
27732
|
return new FormArray(arrControls, control.validator, control.asyncValidator);
|
|
27485
27733
|
}
|
|
27486
|
-
throw new Error('
|
|
27734
|
+
throw new Error('Quadrel Framework | QdFormGroupManager - Unsupported control type.');
|
|
27487
27735
|
}
|
|
27488
27736
|
areFormGroupsValid(fg) {
|
|
27489
27737
|
return Object.values(fg.controls).every(c => (c.disabled && !c.validator && !c.asyncValidator ? true : c.valid));
|
|
@@ -27685,6 +27933,9 @@ class QdPageObjectHeaderComponent {
|
|
|
27685
27933
|
_isLoadingSubject = new BehaviorSubject(false);
|
|
27686
27934
|
_customActionsSubject = new BehaviorSubject({ actions: [] });
|
|
27687
27935
|
_customActionsSub;
|
|
27936
|
+
_metadataSub;
|
|
27937
|
+
_pendingMetadata = {};
|
|
27938
|
+
_metadataStreamTypeWarned = false;
|
|
27688
27939
|
_destroyed$ = new Subject();
|
|
27689
27940
|
_availableContexts = 0;
|
|
27690
27941
|
pageObjectData$ = this._pageObjectDataSubject.asObservable();
|
|
@@ -27775,19 +28026,21 @@ class QdPageObjectHeaderComponent {
|
|
|
27775
28026
|
if (originalUpdateMetadata)
|
|
27776
28027
|
originalUpdateMetadata(props);
|
|
27777
28028
|
};
|
|
27778
|
-
this.setupResolverTrigger();
|
|
27779
28029
|
}
|
|
27780
28030
|
}
|
|
27781
28031
|
ngOnInit() {
|
|
27782
28032
|
if (this.pageObjectResolver)
|
|
27783
28033
|
this.setupResolverTrigger();
|
|
27784
28034
|
this.updateCustomActions();
|
|
28035
|
+
this.subscribeToMetadataStream();
|
|
27785
28036
|
this.formGroupManagerService.takeFormGroupsSnapshot();
|
|
27786
28037
|
this.initContexts();
|
|
27787
28038
|
}
|
|
27788
28039
|
ngOnChanges(changes) {
|
|
27789
|
-
if (changes['config'] && !changes['config'].firstChange)
|
|
28040
|
+
if (changes['config'] && !changes['config'].firstChange) {
|
|
27790
28041
|
this.updateCustomActions();
|
|
28042
|
+
this.subscribeToMetadataStream();
|
|
28043
|
+
}
|
|
27791
28044
|
}
|
|
27792
28045
|
ngOnDestroy() {
|
|
27793
28046
|
this.pageStoreService.toggleViewonly(false);
|
|
@@ -27795,8 +28048,8 @@ class QdPageObjectHeaderComponent {
|
|
|
27795
28048
|
this._destroyed$.complete();
|
|
27796
28049
|
}
|
|
27797
28050
|
updateMetadata(metadata) {
|
|
27798
|
-
|
|
27799
|
-
this._pageObjectDataSubject.next(
|
|
28051
|
+
this._pendingMetadata = { ...this._pendingMetadata, ...metadata };
|
|
28052
|
+
this._pageObjectDataSubject.next({ ...this._pageObjectDataSubject.value, ...metadata });
|
|
27800
28053
|
}
|
|
27801
28054
|
handleAction(facet) {
|
|
27802
28055
|
facet?.action?.handler();
|
|
@@ -27860,7 +28113,10 @@ class QdPageObjectHeaderComponent {
|
|
|
27860
28113
|
setupResolverTrigger() {
|
|
27861
28114
|
this.resolverTriggerService
|
|
27862
28115
|
.shouldTriggerResolver(this.pageObjectResolver.config?.triggerOn ?? 'pathParamsChange')
|
|
27863
|
-
.pipe(takeUntil(this._destroyed$), filter(shouldTrigger => shouldTrigger), tap(() => this._isLoadingSubject.next(true)), switchMap(() => this.pageObjectResolver.resolve()), tap(objectData =>
|
|
28116
|
+
.pipe(takeUntil(this._destroyed$), filter(shouldTrigger => shouldTrigger), tap(() => this._isLoadingSubject.next(true)), switchMap(() => this.pageObjectResolver.resolve()), tap(objectData => {
|
|
28117
|
+
this._pageObjectDataSubject.next({ ...objectData, ...this._pendingMetadata });
|
|
28118
|
+
this._pendingMetadata = {};
|
|
28119
|
+
}), tap(() => this._isLoadingSubject.next(false)), tap(() => this.formGroupManagerService.takeFormGroupsSnapshot()))
|
|
27864
28120
|
.subscribe();
|
|
27865
28121
|
}
|
|
27866
28122
|
initContexts() {
|
|
@@ -27892,6 +28148,26 @@ class QdPageObjectHeaderComponent {
|
|
|
27892
28148
|
}
|
|
27893
28149
|
this.subscribeToViewOnlyMode();
|
|
27894
28150
|
}
|
|
28151
|
+
subscribeToMetadataStream() {
|
|
28152
|
+
this._metadataSub?.unsubscribe();
|
|
28153
|
+
const metadata$ = this.config.metadata$;
|
|
28154
|
+
if (!metadata$)
|
|
28155
|
+
return;
|
|
28156
|
+
this.warnOnNonReplayMetadataStream(metadata$);
|
|
28157
|
+
this._metadataSub = metadata$.pipe(takeUntil(this._destroyed$)).subscribe(partial => this.updateMetadata(partial));
|
|
28158
|
+
}
|
|
28159
|
+
warnOnNonReplayMetadataStream(metadata$) {
|
|
28160
|
+
if (!isDevMode() || this._metadataStreamTypeWarned)
|
|
28161
|
+
return;
|
|
28162
|
+
if (metadata$ instanceof Subject &&
|
|
28163
|
+
!(metadata$ instanceof ReplaySubject) &&
|
|
28164
|
+
!(metadata$ instanceof BehaviorSubject)) {
|
|
28165
|
+
this._metadataStreamTypeWarned = true;
|
|
28166
|
+
console.warn('Quadrel Framework | QdPageObjectHeader - metadata$ is a plain Subject. Emissions fired before the ' +
|
|
28167
|
+
"header subscribes (e.g. during the consuming component's ngOnInit) will be lost. " +
|
|
28168
|
+
'Use createMetadataStream() or pass a ReplaySubject(1)/BehaviorSubject instead.');
|
|
28169
|
+
}
|
|
28170
|
+
}
|
|
27895
28171
|
subscribeToViewOnlyMode() {
|
|
27896
28172
|
this._customActionsSub?.unsubscribe();
|
|
27897
28173
|
this._customActionsSub = this.pageStoreService.isViewonly$
|
|
@@ -27999,7 +28275,7 @@ class QdPageStepperAdapterDirective {
|
|
|
27999
28275
|
const toRemove = Array.from(host.children).filter(child => child.tagName !== 'QD-PAGE-STEPPER');
|
|
28000
28276
|
toRemove.forEach(el => {
|
|
28001
28277
|
this.renderer.removeChild(host, el);
|
|
28002
|
-
console.warn('
|
|
28278
|
+
console.warn('Quadrel Framework | QdPageStepperAdapter - Only "qd-page-stepper" is supported. The following content is not rendered:', el);
|
|
28003
28279
|
});
|
|
28004
28280
|
}
|
|
28005
28281
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageStepperAdapterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
@@ -28149,7 +28425,7 @@ class QdPageStepperComponent extends CdkStepper {
|
|
|
28149
28425
|
ngOnInit() {
|
|
28150
28426
|
this.linear = true;
|
|
28151
28427
|
if (this.footerService && (this.config?.submit || this.config?.cancel)) {
|
|
28152
|
-
throw new Error('
|
|
28428
|
+
throw new Error('Quadrel Framework | QdPageStepper - When using <qd-page-stepper> inside <qd-page>, don\'t use the "submit" and "cancel" attributes. Instead, use the QdPageConfig.');
|
|
28153
28429
|
}
|
|
28154
28430
|
if (this.footerService) {
|
|
28155
28431
|
this.selectedIndexChange.pipe(takeUntil(this._destroyed$)).subscribe(() => this.updateFooterActionsVisibility());
|
|
@@ -28355,7 +28631,7 @@ class QdPageStepperComponent extends CdkStepper {
|
|
|
28355
28631
|
.subscribe(isValid => this.footerService.updateActions([{ actionKey: 'submit', partialAction: { isDisabled: !isValid } }]));
|
|
28356
28632
|
}
|
|
28357
28633
|
blockCdkInput(inputName) {
|
|
28358
|
-
throw new Error(`
|
|
28634
|
+
throw new Error(`Quadrel Framework | QdPageStepper - The "${inputName}" attribute is not allowed. Please use QdPageStepperConfig instead.`);
|
|
28359
28635
|
}
|
|
28360
28636
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageStepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
28361
28637
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", 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: "component", type: QdPageStepHeaderComponent, selector: "qd-page-step-header", inputs: ["state", "label", "index", "selected", "active", "optional", "locked"] }, { kind: "ngmodule", type: TranslateModule }, { 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]" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
@@ -28430,7 +28706,7 @@ class QdPageTabsAdapterDirective {
|
|
|
28430
28706
|
const toRemove = Array.from(host.children).filter(child => child.tagName !== 'QD-PAGE-TABS');
|
|
28431
28707
|
toRemove.forEach(el => {
|
|
28432
28708
|
this.renderer.removeChild(host, el);
|
|
28433
|
-
console.warn('
|
|
28709
|
+
console.warn('Quadrel Framework | QdPageTabsAdapter - Only "qd-page-tabs" is supported. The following content is not rendered:', el);
|
|
28434
28710
|
});
|
|
28435
28711
|
}
|
|
28436
28712
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabsAdapterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
@@ -28779,7 +29055,7 @@ class QdPageTabsComponent extends CdkStepper {
|
|
|
28779
29055
|
pageTab.select();
|
|
28780
29056
|
}
|
|
28781
29057
|
else {
|
|
28782
|
-
console.warn('
|
|
29058
|
+
console.warn('Quadrel Framework | QdPageTabs - No tab found with name "' + tabNameFromParams + '".');
|
|
28783
29059
|
this.selectFirstNotDisabledTab(true);
|
|
28784
29060
|
}
|
|
28785
29061
|
});
|
|
@@ -28803,7 +29079,7 @@ class QdPageTabsComponent extends CdkStepper {
|
|
|
28803
29079
|
});
|
|
28804
29080
|
}
|
|
28805
29081
|
else {
|
|
28806
|
-
console.warn('
|
|
29082
|
+
console.warn('Quadrel Framework | QdPageTabs - "connectedWithRouter" is active, however <qd-page-tab> has no "name" attribute.');
|
|
28807
29083
|
}
|
|
28808
29084
|
}
|
|
28809
29085
|
});
|
|
@@ -28867,7 +29143,7 @@ class QdPageTabsComponent extends CdkStepper {
|
|
|
28867
29143
|
return this._getStepLabelId(i);
|
|
28868
29144
|
}
|
|
28869
29145
|
blockCdkInput(inputName) {
|
|
28870
|
-
throw new Error(`
|
|
29146
|
+
throw new Error(`Quadrel Framework | QdPageTabs - The use of the "${inputName}" attribute is not permitted. Please use QdPageTabsConfig instead.`);
|
|
28871
29147
|
}
|
|
28872
29148
|
mapSelectionChangeToTabSelectionOutput() {
|
|
28873
29149
|
this.selectionChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(selectionEvent => {
|
|
@@ -29114,19 +29390,44 @@ const SAFE_BOTTOM_OFFSET_PX = 64;
|
|
|
29114
29390
|
*
|
|
29115
29391
|
* #### **Updating Facets**
|
|
29116
29392
|
*
|
|
29117
|
-
* Typically, the values of the facets on a create or inspect page are set to read-only.
|
|
29393
|
+
* Typically, the values of the facets on a create or inspect page are set to read-only. If a facet value needs to change at runtime — for instance after a status update from a dialog — push the partial update through `QdPageConfig.metadata$`. The header subscribes to this observable and shallow-merges every emission into the current object data.
|
|
29394
|
+
*
|
|
29395
|
+
* Create the stream with `createMetadataStream<T>()`. The factory returns a `ReplaySubject<Partial<T>>(1)` that buffers the latest emission, so a value pushed during your component's `ngOnInit` still reaches the header, which subscribes a lifecycle step later. Plain `Subject` silently drops that first emission; dev mode warns when it detects one.
|
|
29118
29396
|
*
|
|
29119
29397
|
* **Please note: These values should not be modified directly within a QdPage.**
|
|
29120
29398
|
*
|
|
29121
29399
|
* ```ts
|
|
29122
|
-
* @
|
|
29123
|
-
*
|
|
29124
|
-
*
|
|
29125
|
-
*
|
|
29400
|
+
* @Component({
|
|
29401
|
+
* // ...
|
|
29402
|
+
* providers: [
|
|
29403
|
+
* {
|
|
29404
|
+
* provide: QD_PAGE_OBJECT_RESOLVER_TOKEN,
|
|
29405
|
+
* useClass: MyObjectModelResolver
|
|
29406
|
+
* }
|
|
29407
|
+
* ]
|
|
29408
|
+
* })
|
|
29409
|
+
* class MyPageComponent {
|
|
29410
|
+
* private metadataUpdates$ = createMetadataStream<MyObjectModel>();
|
|
29411
|
+
*
|
|
29412
|
+
* pageConfig: QdPageConfig<MyObjectModel> = {
|
|
29413
|
+
* title: { i18n: 'i18n.page.title' },
|
|
29414
|
+
* pageType: 'inspect',
|
|
29415
|
+
* headerFacets: [ /* ... *\/ ],
|
|
29416
|
+
* metadata$: this.metadataUpdates$,
|
|
29417
|
+
* pageTypeConfig: { /* ... *\/ }
|
|
29418
|
+
* };
|
|
29419
|
+
*
|
|
29420
|
+
* updateStatus() {
|
|
29421
|
+
* this.metadataUpdates$.next({ state: 'Updated' });
|
|
29126
29422
|
* }
|
|
29423
|
+
* }
|
|
29424
|
+
* ```
|
|
29127
29425
|
*
|
|
29128
|
-
*
|
|
29426
|
+
* Legacy approach (`@deprecated`): the resolver-level `updateMetadata` method is still wired up for backward compatibility, but prefer `metadata$` on the config for new code.
|
|
29129
29427
|
*
|
|
29428
|
+
* ```ts
|
|
29429
|
+
* @Injectable()
|
|
29430
|
+
* class MyObjectModelResolver implements QdPageObjectResolver<MyObjectModel> {
|
|
29130
29431
|
* resolve(): Observable<MyObjectModel> {
|
|
29131
29432
|
* // your implementation here
|
|
29132
29433
|
* }
|
|
@@ -29136,15 +29437,6 @@ const SAFE_BOTTOM_OFFSET_PX = 64;
|
|
|
29136
29437
|
* }
|
|
29137
29438
|
* }
|
|
29138
29439
|
*
|
|
29139
|
-
* @Component({
|
|
29140
|
-
* // ...
|
|
29141
|
-
* providers: [
|
|
29142
|
-
* {
|
|
29143
|
-
* provide: QD_PAGE_OBJECT_RESOLVER_TOKEN,
|
|
29144
|
-
* useClass: MyObjectModelResolver
|
|
29145
|
-
* }
|
|
29146
|
-
* ]
|
|
29147
|
-
* })
|
|
29148
29440
|
* class MyPageComponent {
|
|
29149
29441
|
* constructor(@Inject(QD_PAGE_OBJECT_RESOLVER_TOKEN) private objectResolver: MyObjectModelResolver) {}
|
|
29150
29442
|
*
|
|
@@ -29417,7 +29709,7 @@ class QdPageComponent {
|
|
|
29417
29709
|
infoBanners;
|
|
29418
29710
|
footerHasContent$;
|
|
29419
29711
|
isFooterVisible;
|
|
29420
|
-
projectionGuardMessage = '
|
|
29712
|
+
projectionGuardMessage = 'Quadrel Framework | QdPage - This content is not supported. Please use the [qdSectionAdapter] directive for custom content projection.';
|
|
29421
29713
|
_isInitialized = false;
|
|
29422
29714
|
_destroyed$ = new Subject();
|
|
29423
29715
|
_cancelSubmitValidation$ = new Subject();
|
|
@@ -29512,7 +29804,7 @@ class QdPageComponent {
|
|
|
29512
29804
|
}
|
|
29513
29805
|
checkConfigValidity() {
|
|
29514
29806
|
if (!this.config)
|
|
29515
|
-
console.warn('
|
|
29807
|
+
console.warn('Quadrel Framework | QdPage - To configure the page you should provide a valid config.');
|
|
29516
29808
|
}
|
|
29517
29809
|
setupCreatePageFooterActions() {
|
|
29518
29810
|
const pageTypeConfig = this.config?.pageTypeConfig;
|
|
@@ -29758,15 +30050,15 @@ class QdConnectFormStateToPageDirective {
|
|
|
29758
30050
|
isValid() {
|
|
29759
30051
|
const hasFormGroup = this.formGroupDirective?.control;
|
|
29760
30052
|
if (!hasFormGroup) {
|
|
29761
|
-
console.error('
|
|
30053
|
+
console.error('Quadrel Framework | QdConnectFormStateToPage - Either a [formGroup] binding or <qd-quick-edit> with a FormGroup is required.');
|
|
29762
30054
|
return false;
|
|
29763
30055
|
}
|
|
29764
30056
|
if (!this.formGroupManagerService) {
|
|
29765
|
-
console.error('
|
|
30057
|
+
console.error('Quadrel Framework | QdConnectFormStateToPage - The connector must be used within <qd-page>.');
|
|
29766
30058
|
return false;
|
|
29767
30059
|
}
|
|
29768
30060
|
if (!this.formGroupManagerService.isFormGroupKeyUnique(this.qdConnectFormStateToPage)) {
|
|
29769
|
-
console.error(`
|
|
30061
|
+
console.error(`Quadrel Framework | QdConnectFormStateToPage - The FormGroup key "${this.qdConnectFormStateToPage}" is not unique.`);
|
|
29770
30062
|
return false;
|
|
29771
30063
|
}
|
|
29772
30064
|
return true;
|
|
@@ -30766,6 +31058,7 @@ class QdShellServiceNavigationComponent {
|
|
|
30766
31058
|
_config;
|
|
30767
31059
|
_destroyed$ = new Subject();
|
|
30768
31060
|
_attributesHaveBeenSet$ = new ReplaySubject(1);
|
|
31061
|
+
localeService = inject(QdLocaleService);
|
|
30769
31062
|
ngOnInit() {
|
|
30770
31063
|
loadJavascriptAsset(this.config?.javascriptAssetPath ?? DEFAULT_JAVASCRIPT_ASSET_PATH$1, {
|
|
30771
31064
|
defer: '',
|
|
@@ -30780,9 +31073,7 @@ class QdShellServiceNavigationComponent {
|
|
|
30780
31073
|
this.logPamsEnvironmentMissingError();
|
|
30781
31074
|
}
|
|
30782
31075
|
logPamsEnvironmentMissingError() {
|
|
30783
|
-
console.error('
|
|
30784
|
-
'pamsEnvrionment is missing. The pamsEnvironment has to be given in the shell service navigation config or ' +
|
|
30785
|
-
'has to be provided in the backend auth config!');
|
|
31076
|
+
console.error('Quadrel Framework | QdShell - Config key "pamsEnvironment" is required to render <qd-shell-service-navigation>. Provide it in the service-navigation config or via the backend auth config.');
|
|
30786
31077
|
}
|
|
30787
31078
|
setLanguageFromUrlAfterNavigation() {
|
|
30788
31079
|
this.languageFromUrlService
|
|
@@ -30810,6 +31101,7 @@ class QdShellServiceNavigationComponent {
|
|
|
30810
31101
|
this._destroyed$.complete();
|
|
30811
31102
|
}
|
|
30812
31103
|
handleLanguageChange($event) {
|
|
31104
|
+
this.localeService.setServiceNavigationLanguage($event.detail);
|
|
30813
31105
|
this.useLanguage($event.detail);
|
|
30814
31106
|
}
|
|
30815
31107
|
handleLoginStatusChange($event) {
|
|
@@ -31328,7 +31620,7 @@ class QdShellHeaderComponent {
|
|
|
31328
31620
|
}
|
|
31329
31621
|
validateTitle() {
|
|
31330
31622
|
if (this.config.title && typeof this.config.title === 'string') {
|
|
31331
|
-
console.warn('
|
|
31623
|
+
console.warn('Quadrel Framework | QdShell - "title" as a plain string is deprecated and will be removed in the next major release. Please use an i18n key instead.');
|
|
31332
31624
|
}
|
|
31333
31625
|
}
|
|
31334
31626
|
async = async;
|
|
@@ -31364,7 +31656,7 @@ class QdShellNavigationLinkComponent {
|
|
|
31364
31656
|
config;
|
|
31365
31657
|
handleClick() {
|
|
31366
31658
|
if (!this.config.handler) {
|
|
31367
|
-
console.error('
|
|
31659
|
+
console.error('Quadrel Framework | QdShell - Please provide a handler function for the navigation element.');
|
|
31368
31660
|
return;
|
|
31369
31661
|
}
|
|
31370
31662
|
if (this.config.handler && !this.config.isCurrent)
|
|
@@ -31877,7 +32169,7 @@ class QdShellComponent {
|
|
|
31877
32169
|
ngAfterViewInit() {
|
|
31878
32170
|
// TODO: Remove in v17! The comments will be integrated in the QdPage.
|
|
31879
32171
|
if (this.commentsComponent.length > 0)
|
|
31880
|
-
console.warn('
|
|
32172
|
+
console.warn('Quadrel Framework | QdShell - Using comments inside <qd-shell> is deprecated and will be removed in v17. Use <qd-page> instead.');
|
|
31881
32173
|
this.closeShellRightIfCommentsDisappear();
|
|
31882
32174
|
}
|
|
31883
32175
|
closeShellRightIfCommentsDisappear() {
|
|
@@ -32386,11 +32678,11 @@ class QdPageStepComponent extends CdkStep {
|
|
|
32386
32678
|
this._destroyed$.complete();
|
|
32387
32679
|
}
|
|
32388
32680
|
blockCdkInput(inputName) {
|
|
32389
|
-
throw new Error(`
|
|
32681
|
+
throw new Error(`Quadrel Framework | QdPageStep - The use of the "${inputName}" attribute is not permitted. Please use QdPageStepConfig instead.`);
|
|
32390
32682
|
}
|
|
32391
32683
|
validateLabel() {
|
|
32392
32684
|
if (!this.config?.label?.i18n)
|
|
32393
|
-
console.error('
|
|
32685
|
+
console.error('Quadrel Framework | QdPageStep - Please provide a label for the step.');
|
|
32394
32686
|
}
|
|
32395
32687
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageStepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
32396
32688
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdPageStepComponent, isStandalone: true, selector: "qd-page-step", inputs: { config: "config", control: "control" }, host: { classAttribute: "qd-stepper" }, providers: [
|
|
@@ -32496,11 +32788,11 @@ class QdPageTabComponent extends CdkStep {
|
|
|
32496
32788
|
this._destroyed$.complete();
|
|
32497
32789
|
}
|
|
32498
32790
|
blockCdkInput(inputName) {
|
|
32499
|
-
throw new Error(`
|
|
32791
|
+
throw new Error(`Quadrel Framework | QdPageTab - The use of the "${inputName}" attribute is not permitted. Please use QdPageTabConfig instead.`);
|
|
32500
32792
|
}
|
|
32501
32793
|
validateLabel() {
|
|
32502
32794
|
if (!this.config?.label?.i18n)
|
|
32503
|
-
console.error('
|
|
32795
|
+
console.error('Quadrel Framework | QdPageTab - Please provide a label for the tab.');
|
|
32504
32796
|
}
|
|
32505
32797
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
32506
32798
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdPageTabComponent, isStandalone: true, selector: "qd-page-tab", inputs: { config: "config", tabControl: "tabControl" }, providers: [
|
|
@@ -32948,11 +33240,11 @@ class QdQuickEditComponent {
|
|
|
32948
33240
|
}
|
|
32949
33241
|
validateSetup() {
|
|
32950
33242
|
if (this.data != null && this.controlContainer != null)
|
|
32951
|
-
console.warn('
|
|
33243
|
+
console.warn('Quadrel Framework | QdQuickEdit - Data is being ignored when used as FormArray.');
|
|
32952
33244
|
if (!this.data && !this.controlContainer)
|
|
32953
|
-
console.warn('
|
|
33245
|
+
console.warn('Quadrel Framework | QdQuickEdit - Either use <qd-quick-edit> as a FormControl with formArrayName binding or provide data via input.');
|
|
32954
33246
|
if (this.controlContainer && this.config.columns.some(column => column.validators != null))
|
|
32955
|
-
console.warn('
|
|
33247
|
+
console.warn('Quadrel Framework | QdQuickEdit - Please provide validators in the specific FormControls directly for default validators to be added.');
|
|
32956
33248
|
}
|
|
32957
33249
|
redrawOnNextChange() {
|
|
32958
33250
|
this.togglerDrawing = !this.togglerDrawing;
|
|
@@ -33205,5 +33497,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
33205
33497
|
* Generated bundle index. Do not edit.
|
|
33206
33498
|
*/
|
|
33207
33499
|
|
|
33208
|
-
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, QdTooltipIconComponent, QdTreeComponent, QdTreeModule, QdTreeRowExpanderService, QdUiMockModule, QdUiModule, QdUploadErrorType, QdValidators, QdViewportAdaptiveDirective, QdVisuallyHiddenDirective, chipColorDefault, updateHtmlLang };
|
|
33500
|
+
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, QdNumberInputService, 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, QdTooltipIconComponent, QdTreeComponent, QdTreeModule, QdTreeRowExpanderService, QdUiMockModule, QdUiModule, QdUploadErrorType, QdValidators, QdViewportAdaptiveDirective, QdVisuallyHiddenDirective, chipColorDefault, createMetadataStream, updateHtmlLang };
|
|
33209
33501
|
//# sourceMappingURL=quadrel-enterprise-ui-framework.mjs.map
|