@quadrel-enterprise-ui/framework 20.11.1 → 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 +515 -301
- package/fesm2022/quadrel-enterprise-ui-framework.mjs.map +1 -1
- package/index.d.ts +110 -71
- 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);
|
|
@@ -27185,7 +27399,7 @@ class QdDynamicFacetComponent {
|
|
|
27185
27399
|
ngOnInit() {
|
|
27186
27400
|
const facet = this.dynamicFacetsService.getFacet(this.facet.options.type);
|
|
27187
27401
|
if (!facet) {
|
|
27188
|
-
console.error('
|
|
27402
|
+
console.error('Quadrel Framework | QdPage - Facet could not be found.');
|
|
27189
27403
|
return;
|
|
27190
27404
|
}
|
|
27191
27405
|
const viewContainerRef = this.dynamicFacet.viewContainerRef;
|
|
@@ -27234,13 +27448,13 @@ class QdPageCommitActionExecutor {
|
|
|
27234
27448
|
onAfterSnapshot?.();
|
|
27235
27449
|
}
|
|
27236
27450
|
catch (err) {
|
|
27237
|
-
console.error('
|
|
27451
|
+
console.error('Quadrel Framework | QdPage - internal onAfterSnapshot hook threw after form was marked as saved.', err);
|
|
27238
27452
|
}
|
|
27239
27453
|
try {
|
|
27240
27454
|
action.onSuccess?.();
|
|
27241
27455
|
}
|
|
27242
27456
|
catch (err) {
|
|
27243
|
-
console.error('
|
|
27457
|
+
console.error('Quadrel Framework | QdPage - onSuccess callback threw after form was marked as saved.', err);
|
|
27244
27458
|
}
|
|
27245
27459
|
});
|
|
27246
27460
|
};
|
|
@@ -27259,14 +27473,14 @@ class QdPageCommitActionExecutor {
|
|
|
27259
27473
|
}
|
|
27260
27474
|
static handleError(action, err) {
|
|
27261
27475
|
if (!action.onError) {
|
|
27262
|
-
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);
|
|
27263
27477
|
return;
|
|
27264
27478
|
}
|
|
27265
27479
|
try {
|
|
27266
27480
|
action.onError(err);
|
|
27267
27481
|
}
|
|
27268
27482
|
catch (callbackErr) {
|
|
27269
|
-
console.error('
|
|
27483
|
+
console.error('Quadrel Framework | QdPage - onError callback threw.', callbackErr);
|
|
27270
27484
|
}
|
|
27271
27485
|
}
|
|
27272
27486
|
}
|
|
@@ -27401,7 +27615,7 @@ class QdFormGroupManagerService {
|
|
|
27401
27615
|
captured.set(key, structuredClone(fg.getRawValue()));
|
|
27402
27616
|
}
|
|
27403
27617
|
catch (err) {
|
|
27404
|
-
throw new Error(`
|
|
27618
|
+
throw new Error(`Quadrel Framework | QdFormGroupManager - captureFormValues() failed for group "${key}". ` +
|
|
27405
27619
|
`Form values must be structured-cloneable. Non-cloneable values like functions, ` +
|
|
27406
27620
|
`symbols, or DOM nodes are not supported. Original error: ${String(err)}`);
|
|
27407
27621
|
}
|
|
@@ -27495,7 +27709,7 @@ class QdFormGroupManagerService {
|
|
|
27495
27709
|
initFormArrayFromValues(array, values) {
|
|
27496
27710
|
const protoValue = values[0];
|
|
27497
27711
|
if (!protoValue || typeof protoValue !== 'object') {
|
|
27498
|
-
console.warn('
|
|
27712
|
+
console.warn('Quadrel Framework | QdFormGroupManager - Cannot restore FormArray: no prototype and value is not object-like.');
|
|
27499
27713
|
return;
|
|
27500
27714
|
}
|
|
27501
27715
|
for (let i = 0; i < values.length; i++) {
|
|
@@ -27517,7 +27731,7 @@ class QdFormGroupManagerService {
|
|
|
27517
27731
|
const arrControls = control.controls.map(c => this.deepCloneControl(c));
|
|
27518
27732
|
return new FormArray(arrControls, control.validator, control.asyncValidator);
|
|
27519
27733
|
}
|
|
27520
|
-
throw new Error('
|
|
27734
|
+
throw new Error('Quadrel Framework | QdFormGroupManager - Unsupported control type.');
|
|
27521
27735
|
}
|
|
27522
27736
|
areFormGroupsValid(fg) {
|
|
27523
27737
|
return Object.values(fg.controls).every(c => (c.disabled && !c.validator && !c.asyncValidator ? true : c.valid));
|
|
@@ -27949,7 +28163,7 @@ class QdPageObjectHeaderComponent {
|
|
|
27949
28163
|
!(metadata$ instanceof ReplaySubject) &&
|
|
27950
28164
|
!(metadata$ instanceof BehaviorSubject)) {
|
|
27951
28165
|
this._metadataStreamTypeWarned = true;
|
|
27952
|
-
console.warn('
|
|
28166
|
+
console.warn('Quadrel Framework | QdPageObjectHeader - metadata$ is a plain Subject. Emissions fired before the ' +
|
|
27953
28167
|
"header subscribes (e.g. during the consuming component's ngOnInit) will be lost. " +
|
|
27954
28168
|
'Use createMetadataStream() or pass a ReplaySubject(1)/BehaviorSubject instead.');
|
|
27955
28169
|
}
|
|
@@ -28061,7 +28275,7 @@ class QdPageStepperAdapterDirective {
|
|
|
28061
28275
|
const toRemove = Array.from(host.children).filter(child => child.tagName !== 'QD-PAGE-STEPPER');
|
|
28062
28276
|
toRemove.forEach(el => {
|
|
28063
28277
|
this.renderer.removeChild(host, el);
|
|
28064
|
-
console.warn('
|
|
28278
|
+
console.warn('Quadrel Framework | QdPageStepperAdapter - Only "qd-page-stepper" is supported. The following content is not rendered:', el);
|
|
28065
28279
|
});
|
|
28066
28280
|
}
|
|
28067
28281
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageStepperAdapterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
@@ -28211,7 +28425,7 @@ class QdPageStepperComponent extends CdkStepper {
|
|
|
28211
28425
|
ngOnInit() {
|
|
28212
28426
|
this.linear = true;
|
|
28213
28427
|
if (this.footerService && (this.config?.submit || this.config?.cancel)) {
|
|
28214
|
-
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.');
|
|
28215
28429
|
}
|
|
28216
28430
|
if (this.footerService) {
|
|
28217
28431
|
this.selectedIndexChange.pipe(takeUntil(this._destroyed$)).subscribe(() => this.updateFooterActionsVisibility());
|
|
@@ -28417,7 +28631,7 @@ class QdPageStepperComponent extends CdkStepper {
|
|
|
28417
28631
|
.subscribe(isValid => this.footerService.updateActions([{ actionKey: 'submit', partialAction: { isDisabled: !isValid } }]));
|
|
28418
28632
|
}
|
|
28419
28633
|
blockCdkInput(inputName) {
|
|
28420
|
-
throw new Error(`
|
|
28634
|
+
throw new Error(`Quadrel Framework | QdPageStepper - The "${inputName}" attribute is not allowed. Please use QdPageStepperConfig instead.`);
|
|
28421
28635
|
}
|
|
28422
28636
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageStepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
28423
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 });
|
|
@@ -28492,7 +28706,7 @@ class QdPageTabsAdapterDirective {
|
|
|
28492
28706
|
const toRemove = Array.from(host.children).filter(child => child.tagName !== 'QD-PAGE-TABS');
|
|
28493
28707
|
toRemove.forEach(el => {
|
|
28494
28708
|
this.renderer.removeChild(host, el);
|
|
28495
|
-
console.warn('
|
|
28709
|
+
console.warn('Quadrel Framework | QdPageTabsAdapter - Only "qd-page-tabs" is supported. The following content is not rendered:', el);
|
|
28496
28710
|
});
|
|
28497
28711
|
}
|
|
28498
28712
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabsAdapterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
@@ -28841,7 +29055,7 @@ class QdPageTabsComponent extends CdkStepper {
|
|
|
28841
29055
|
pageTab.select();
|
|
28842
29056
|
}
|
|
28843
29057
|
else {
|
|
28844
|
-
console.warn('
|
|
29058
|
+
console.warn('Quadrel Framework | QdPageTabs - No tab found with name "' + tabNameFromParams + '".');
|
|
28845
29059
|
this.selectFirstNotDisabledTab(true);
|
|
28846
29060
|
}
|
|
28847
29061
|
});
|
|
@@ -28865,7 +29079,7 @@ class QdPageTabsComponent extends CdkStepper {
|
|
|
28865
29079
|
});
|
|
28866
29080
|
}
|
|
28867
29081
|
else {
|
|
28868
|
-
console.warn('
|
|
29082
|
+
console.warn('Quadrel Framework | QdPageTabs - "connectedWithRouter" is active, however <qd-page-tab> has no "name" attribute.');
|
|
28869
29083
|
}
|
|
28870
29084
|
}
|
|
28871
29085
|
});
|
|
@@ -28929,7 +29143,7 @@ class QdPageTabsComponent extends CdkStepper {
|
|
|
28929
29143
|
return this._getStepLabelId(i);
|
|
28930
29144
|
}
|
|
28931
29145
|
blockCdkInput(inputName) {
|
|
28932
|
-
throw new Error(`
|
|
29146
|
+
throw new Error(`Quadrel Framework | QdPageTabs - The use of the "${inputName}" attribute is not permitted. Please use QdPageTabsConfig instead.`);
|
|
28933
29147
|
}
|
|
28934
29148
|
mapSelectionChangeToTabSelectionOutput() {
|
|
28935
29149
|
this.selectionChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(selectionEvent => {
|
|
@@ -29495,7 +29709,7 @@ class QdPageComponent {
|
|
|
29495
29709
|
infoBanners;
|
|
29496
29710
|
footerHasContent$;
|
|
29497
29711
|
isFooterVisible;
|
|
29498
|
-
projectionGuardMessage = '
|
|
29712
|
+
projectionGuardMessage = 'Quadrel Framework | QdPage - This content is not supported. Please use the [qdSectionAdapter] directive for custom content projection.';
|
|
29499
29713
|
_isInitialized = false;
|
|
29500
29714
|
_destroyed$ = new Subject();
|
|
29501
29715
|
_cancelSubmitValidation$ = new Subject();
|
|
@@ -29590,7 +29804,7 @@ class QdPageComponent {
|
|
|
29590
29804
|
}
|
|
29591
29805
|
checkConfigValidity() {
|
|
29592
29806
|
if (!this.config)
|
|
29593
|
-
console.warn('
|
|
29807
|
+
console.warn('Quadrel Framework | QdPage - To configure the page you should provide a valid config.');
|
|
29594
29808
|
}
|
|
29595
29809
|
setupCreatePageFooterActions() {
|
|
29596
29810
|
const pageTypeConfig = this.config?.pageTypeConfig;
|
|
@@ -29836,15 +30050,15 @@ class QdConnectFormStateToPageDirective {
|
|
|
29836
30050
|
isValid() {
|
|
29837
30051
|
const hasFormGroup = this.formGroupDirective?.control;
|
|
29838
30052
|
if (!hasFormGroup) {
|
|
29839
|
-
console.error('
|
|
30053
|
+
console.error('Quadrel Framework | QdConnectFormStateToPage - Either a [formGroup] binding or <qd-quick-edit> with a FormGroup is required.');
|
|
29840
30054
|
return false;
|
|
29841
30055
|
}
|
|
29842
30056
|
if (!this.formGroupManagerService) {
|
|
29843
|
-
console.error('
|
|
30057
|
+
console.error('Quadrel Framework | QdConnectFormStateToPage - The connector must be used within <qd-page>.');
|
|
29844
30058
|
return false;
|
|
29845
30059
|
}
|
|
29846
30060
|
if (!this.formGroupManagerService.isFormGroupKeyUnique(this.qdConnectFormStateToPage)) {
|
|
29847
|
-
console.error(`
|
|
30061
|
+
console.error(`Quadrel Framework | QdConnectFormStateToPage - The FormGroup key "${this.qdConnectFormStateToPage}" is not unique.`);
|
|
29848
30062
|
return false;
|
|
29849
30063
|
}
|
|
29850
30064
|
return true;
|
|
@@ -30844,6 +31058,7 @@ class QdShellServiceNavigationComponent {
|
|
|
30844
31058
|
_config;
|
|
30845
31059
|
_destroyed$ = new Subject();
|
|
30846
31060
|
_attributesHaveBeenSet$ = new ReplaySubject(1);
|
|
31061
|
+
localeService = inject(QdLocaleService);
|
|
30847
31062
|
ngOnInit() {
|
|
30848
31063
|
loadJavascriptAsset(this.config?.javascriptAssetPath ?? DEFAULT_JAVASCRIPT_ASSET_PATH$1, {
|
|
30849
31064
|
defer: '',
|
|
@@ -30858,9 +31073,7 @@ class QdShellServiceNavigationComponent {
|
|
|
30858
31073
|
this.logPamsEnvironmentMissingError();
|
|
30859
31074
|
}
|
|
30860
31075
|
logPamsEnvironmentMissingError() {
|
|
30861
|
-
console.error('
|
|
30862
|
-
'pamsEnvrionment is missing. The pamsEnvironment has to be given in the shell service navigation config or ' +
|
|
30863
|
-
'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.');
|
|
30864
31077
|
}
|
|
30865
31078
|
setLanguageFromUrlAfterNavigation() {
|
|
30866
31079
|
this.languageFromUrlService
|
|
@@ -30888,6 +31101,7 @@ class QdShellServiceNavigationComponent {
|
|
|
30888
31101
|
this._destroyed$.complete();
|
|
30889
31102
|
}
|
|
30890
31103
|
handleLanguageChange($event) {
|
|
31104
|
+
this.localeService.setServiceNavigationLanguage($event.detail);
|
|
30891
31105
|
this.useLanguage($event.detail);
|
|
30892
31106
|
}
|
|
30893
31107
|
handleLoginStatusChange($event) {
|
|
@@ -31406,7 +31620,7 @@ class QdShellHeaderComponent {
|
|
|
31406
31620
|
}
|
|
31407
31621
|
validateTitle() {
|
|
31408
31622
|
if (this.config.title && typeof this.config.title === 'string') {
|
|
31409
|
-
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.');
|
|
31410
31624
|
}
|
|
31411
31625
|
}
|
|
31412
31626
|
async = async;
|
|
@@ -31442,7 +31656,7 @@ class QdShellNavigationLinkComponent {
|
|
|
31442
31656
|
config;
|
|
31443
31657
|
handleClick() {
|
|
31444
31658
|
if (!this.config.handler) {
|
|
31445
|
-
console.error('
|
|
31659
|
+
console.error('Quadrel Framework | QdShell - Please provide a handler function for the navigation element.');
|
|
31446
31660
|
return;
|
|
31447
31661
|
}
|
|
31448
31662
|
if (this.config.handler && !this.config.isCurrent)
|
|
@@ -31955,7 +32169,7 @@ class QdShellComponent {
|
|
|
31955
32169
|
ngAfterViewInit() {
|
|
31956
32170
|
// TODO: Remove in v17! The comments will be integrated in the QdPage.
|
|
31957
32171
|
if (this.commentsComponent.length > 0)
|
|
31958
|
-
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.');
|
|
31959
32173
|
this.closeShellRightIfCommentsDisappear();
|
|
31960
32174
|
}
|
|
31961
32175
|
closeShellRightIfCommentsDisappear() {
|
|
@@ -32464,11 +32678,11 @@ class QdPageStepComponent extends CdkStep {
|
|
|
32464
32678
|
this._destroyed$.complete();
|
|
32465
32679
|
}
|
|
32466
32680
|
blockCdkInput(inputName) {
|
|
32467
|
-
throw new Error(`
|
|
32681
|
+
throw new Error(`Quadrel Framework | QdPageStep - The use of the "${inputName}" attribute is not permitted. Please use QdPageStepConfig instead.`);
|
|
32468
32682
|
}
|
|
32469
32683
|
validateLabel() {
|
|
32470
32684
|
if (!this.config?.label?.i18n)
|
|
32471
|
-
console.error('
|
|
32685
|
+
console.error('Quadrel Framework | QdPageStep - Please provide a label for the step.');
|
|
32472
32686
|
}
|
|
32473
32687
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageStepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
32474
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: [
|
|
@@ -32574,11 +32788,11 @@ class QdPageTabComponent extends CdkStep {
|
|
|
32574
32788
|
this._destroyed$.complete();
|
|
32575
32789
|
}
|
|
32576
32790
|
blockCdkInput(inputName) {
|
|
32577
|
-
throw new Error(`
|
|
32791
|
+
throw new Error(`Quadrel Framework | QdPageTab - The use of the "${inputName}" attribute is not permitted. Please use QdPageTabConfig instead.`);
|
|
32578
32792
|
}
|
|
32579
32793
|
validateLabel() {
|
|
32580
32794
|
if (!this.config?.label?.i18n)
|
|
32581
|
-
console.error('
|
|
32795
|
+
console.error('Quadrel Framework | QdPageTab - Please provide a label for the tab.');
|
|
32582
32796
|
}
|
|
32583
32797
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
32584
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: [
|
|
@@ -33026,11 +33240,11 @@ class QdQuickEditComponent {
|
|
|
33026
33240
|
}
|
|
33027
33241
|
validateSetup() {
|
|
33028
33242
|
if (this.data != null && this.controlContainer != null)
|
|
33029
|
-
console.warn('
|
|
33243
|
+
console.warn('Quadrel Framework | QdQuickEdit - Data is being ignored when used as FormArray.');
|
|
33030
33244
|
if (!this.data && !this.controlContainer)
|
|
33031
|
-
console.warn('
|
|
33245
|
+
console.warn('Quadrel Framework | QdQuickEdit - Either use <qd-quick-edit> as a FormControl with formArrayName binding or provide data via input.');
|
|
33032
33246
|
if (this.controlContainer && this.config.columns.some(column => column.validators != null))
|
|
33033
|
-
console.warn('
|
|
33247
|
+
console.warn('Quadrel Framework | QdQuickEdit - Please provide validators in the specific FormControls directly for default validators to be added.');
|
|
33034
33248
|
}
|
|
33035
33249
|
redrawOnNextChange() {
|
|
33036
33250
|
this.togglerDrawing = !this.togglerDrawing;
|
|
@@ -33283,5 +33497,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
33283
33497
|
* Generated bundle index. Do not edit.
|
|
33284
33498
|
*/
|
|
33285
33499
|
|
|
33286
|
-
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, createMetadataStream, 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 };
|
|
33287
33501
|
//# sourceMappingURL=quadrel-enterprise-ui-framework.mjs.map
|