@klippa/ngx-enhancy-forms 16.21.0 → 16.22.13
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/esm2022/lib/elements/text-input/text-input.component.mjs +15 -3
- package/esm2022/lib/elements/toggle/toggle.component.mjs +11 -5
- package/esm2022/lib/form/form-element/form-element.component.mjs +57 -16
- package/esm2022/lib/form/form.component.mjs +2 -2
- package/esm2022/lib/withTooltip.component.mjs +75 -15
- package/fesm2022/klippa-ngx-enhancy-forms.mjs +163 -43
- package/fesm2022/klippa-ngx-enhancy-forms.mjs.map +1 -1
- package/lib/elements/text-input/text-input.component.d.ts +6 -2
- package/lib/elements/toggle/toggle.component.d.ts +2 -1
- package/lib/form/form-element/form-element.component.d.ts +6 -2
- package/lib/withTooltip.component.d.ts +10 -4
- package/package.json +1 -1
|
@@ -89,15 +89,6 @@ function isArrayOf(arr, kind) {
|
|
|
89
89
|
return arr.reduce((acc, val) => acc && val instanceof kind, true);
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
function runNextRenderCycle(fn) {
|
|
93
|
-
setTimeout(fn);
|
|
94
|
-
}
|
|
95
|
-
function awaitableForNextCycle() {
|
|
96
|
-
return new Promise((resolve) => {
|
|
97
|
-
setTimeout(resolve);
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
|
|
101
92
|
function getAllLimitingContainers(element) {
|
|
102
93
|
const result = [];
|
|
103
94
|
let current = element;
|
|
@@ -390,7 +381,7 @@ class FormComponent {
|
|
|
390
381
|
}
|
|
391
382
|
handleSubmission(originalDisabledStates, renderedAndEnabledValues, renderedButDisabledValues, formGroupValue) {
|
|
392
383
|
if (this.formGroup.invalid) {
|
|
393
|
-
this.activeControls.find((e) =>
|
|
384
|
+
this.activeControls.find((e) => e.formControl.invalid)?.formElement?.scrollTo();
|
|
394
385
|
this.setDisabledStatesForAllControls(originalDisabledStates);
|
|
395
386
|
return Promise.reject(invalidFieldsSymbol);
|
|
396
387
|
}
|
|
@@ -473,6 +464,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
473
464
|
type: Output
|
|
474
465
|
}] } });
|
|
475
466
|
|
|
467
|
+
function runNextRenderCycle(fn) {
|
|
468
|
+
setTimeout(fn);
|
|
469
|
+
}
|
|
470
|
+
function awaitableForNextCycle() {
|
|
471
|
+
return new Promise((resolve) => {
|
|
472
|
+
setTimeout(resolve);
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
|
|
476
476
|
class OnRenderDirective {
|
|
477
477
|
ngAfterViewInit() {
|
|
478
478
|
runNextRenderCycle(() => this.onRenderFn());
|
|
@@ -574,6 +574,7 @@ class FormElementComponent {
|
|
|
574
574
|
this.errorMessages = DEFAULT_ERROR_MESSAGES;
|
|
575
575
|
this.customErrorHandlers = [];
|
|
576
576
|
this.popupState = 'onHover';
|
|
577
|
+
this.subscriptions = [];
|
|
577
578
|
this.setErrorMessageIsTruncated = (isTruncated) => {
|
|
578
579
|
this.errorFullyVisible = !isTruncated;
|
|
579
580
|
};
|
|
@@ -588,12 +589,12 @@ class FormElementComponent {
|
|
|
588
589
|
};
|
|
589
590
|
}
|
|
590
591
|
async ngAfterViewInit() {
|
|
591
|
-
|
|
592
|
-
this.fieldInput?.setTailTpl(this.tailTpl);
|
|
593
|
-
this.fieldInput?.onTouch.asObservable().subscribe((e) => {
|
|
592
|
+
const subscription = this.fieldInput?.onTouch.asObservable().subscribe(() => {
|
|
594
593
|
this.determinePopupState();
|
|
595
594
|
});
|
|
596
|
-
|
|
595
|
+
if (isValueSet(subscription)) {
|
|
596
|
+
this.subscriptions.push(subscription);
|
|
597
|
+
}
|
|
597
598
|
}
|
|
598
599
|
shouldShowErrorMessages() {
|
|
599
600
|
return this.parent?.showErrorMessages !== false;
|
|
@@ -607,21 +608,41 @@ class FormElementComponent {
|
|
|
607
608
|
this.attachedControl = formControl;
|
|
608
609
|
this.parent.registerControl(formControl, this);
|
|
609
610
|
this.input = input;
|
|
610
|
-
this.attachedControl.statusChanges.subscribe((
|
|
611
|
+
const subscription = this.attachedControl.statusChanges.subscribe(() => {
|
|
611
612
|
this.determinePopupState();
|
|
612
613
|
});
|
|
614
|
+
this.subscriptions.push(subscription);
|
|
613
615
|
this.determinePopupState();
|
|
614
616
|
}
|
|
615
617
|
determinePopupState() {
|
|
618
|
+
const prevState = this.popupState;
|
|
619
|
+
this.initializeTailTpl();
|
|
616
620
|
if (stringIsSetAndFilled(this.getErrorToShow())) {
|
|
617
621
|
this.popupState = 'onHover';
|
|
618
|
-
return;
|
|
619
622
|
}
|
|
620
|
-
if (isValueSet(this.getWarningToShow())) {
|
|
623
|
+
else if (isValueSet(this.getWarningToShow())) {
|
|
621
624
|
this.popupState = 'lockedOpen';
|
|
625
|
+
}
|
|
626
|
+
else {
|
|
627
|
+
this.popupState = 'onHover';
|
|
628
|
+
}
|
|
629
|
+
this.setUpErrorTooltipListeners(prevState, this.popupState);
|
|
630
|
+
}
|
|
631
|
+
setUpErrorTooltipListeners(prev, current) {
|
|
632
|
+
if (prev === current) {
|
|
622
633
|
return;
|
|
623
634
|
}
|
|
624
|
-
this.
|
|
635
|
+
const containers = [...getAllLimitingContainers(this.elRef.nativeElement), window];
|
|
636
|
+
if (current === 'lockedOpen') {
|
|
637
|
+
containers.forEach(e => {
|
|
638
|
+
e.addEventListener('scroll', this.setErrorTooltipOffset);
|
|
639
|
+
});
|
|
640
|
+
}
|
|
641
|
+
else {
|
|
642
|
+
containers.forEach(e => {
|
|
643
|
+
e.removeEventListener('scroll', this.setErrorTooltipOffset);
|
|
644
|
+
});
|
|
645
|
+
}
|
|
625
646
|
}
|
|
626
647
|
unregisterControl(formControl) {
|
|
627
648
|
this.attachedControl = null;
|
|
@@ -668,10 +689,11 @@ class FormElementComponent {
|
|
|
668
689
|
return this.getErrorToShow() === error && !this.customErrorHandlers.some((e) => e.error === error);
|
|
669
690
|
}
|
|
670
691
|
getScrollableParent(node) {
|
|
671
|
-
if (node
|
|
672
|
-
return
|
|
692
|
+
if (node === window.document.documentElement) {
|
|
693
|
+
return window.document.documentElement;
|
|
673
694
|
}
|
|
674
|
-
|
|
695
|
+
const overflowY = getComputedStyle(node).overflowY;
|
|
696
|
+
if (node.clientHeight < node.scrollHeight && (overflowY === 'auto' || overflowY === 'scroll')) {
|
|
675
697
|
return node;
|
|
676
698
|
}
|
|
677
699
|
else {
|
|
@@ -679,9 +701,15 @@ class FormElementComponent {
|
|
|
679
701
|
}
|
|
680
702
|
}
|
|
681
703
|
scrollTo() {
|
|
682
|
-
this.internalComponentRef.nativeElement
|
|
683
|
-
|
|
684
|
-
this.
|
|
704
|
+
const parent = this.getScrollableParent(this.internalComponentRef.nativeElement);
|
|
705
|
+
const parentTop = parent === window.document.documentElement ? 0 : parent.getBoundingClientRect().top;
|
|
706
|
+
const elementTop = this.internalComponentRef.nativeElement.getBoundingClientRect().top;
|
|
707
|
+
const parentScrollTop = parent.scrollTop;
|
|
708
|
+
const answer = elementTop - parentTop + parentScrollTop;
|
|
709
|
+
parent.scrollTo({
|
|
710
|
+
top: answer - 30,
|
|
711
|
+
behavior: 'smooth'
|
|
712
|
+
});
|
|
685
713
|
}
|
|
686
714
|
isRequired() {
|
|
687
715
|
if (isValueSet(this.input)) {
|
|
@@ -729,7 +757,9 @@ class FormElementComponent {
|
|
|
729
757
|
return isValueSet(this.getWarningToShow());
|
|
730
758
|
}
|
|
731
759
|
closePopup() {
|
|
760
|
+
const prevState = this.popupState;
|
|
732
761
|
this.popupState = 'onHover';
|
|
762
|
+
this.setUpErrorTooltipListeners(prevState, this.popupState);
|
|
733
763
|
}
|
|
734
764
|
togglePopup() {
|
|
735
765
|
if (!this.errorMessageAsTooltip && !this.hasRightOfCaptionError()) {
|
|
@@ -738,12 +768,24 @@ class FormElementComponent {
|
|
|
738
768
|
if (this.errorFullyVisible) {
|
|
739
769
|
return;
|
|
740
770
|
}
|
|
771
|
+
const prevState = this.popupState;
|
|
741
772
|
if (this.popupState === 'lockedOpen') {
|
|
742
773
|
this.popupState = 'onHover';
|
|
743
774
|
}
|
|
744
775
|
else {
|
|
745
776
|
this.popupState = 'lockedOpen';
|
|
746
777
|
}
|
|
778
|
+
this.setUpErrorTooltipListeners(prevState, this.popupState);
|
|
779
|
+
}
|
|
780
|
+
ngOnDestroy() {
|
|
781
|
+
this.subscriptions.forEach(e => e.unsubscribe());
|
|
782
|
+
}
|
|
783
|
+
initializeTailTpl() {
|
|
784
|
+
if (stringIsSetAndFilled(this.getErrorToShow()) || isValueSet(this.getWarningToShow())) {
|
|
785
|
+
if (!isValueSet(this.fieldInput?.getTailTpl())) {
|
|
786
|
+
this.fieldInput?.setTailTpl(this.tailTpl);
|
|
787
|
+
}
|
|
788
|
+
}
|
|
747
789
|
}
|
|
748
790
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormElementComponent, deps: [{ token: FormComponent, optional: true }, { token: FORM_ERROR_MESSAGES, optional: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
749
791
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormElementComponent, selector: "klp-form-element", inputs: { caption: "caption", direction: "direction", captionSpacing: "captionSpacing", verticalAlignment: "verticalAlignment", spaceDistribution: "spaceDistribution", swapInputAndCaption: "swapInputAndCaption", errorMessageAsTooltip: "errorMessageAsTooltip" }, queries: [{ propertyName: "fieldInput", first: true, predicate: NG_VALUE_ACCESSOR, descendants: true }], viewQueries: [{ propertyName: "internalComponentRef", first: true, predicate: ["internalComponentRef"], descendants: true }, { propertyName: "tailTpl", first: true, predicate: ["tailTpl"], descendants: true }, { propertyName: "captionDummyForSpaceCalculation", first: true, predicate: ["captionDummyForSpaceCalculation"], descendants: true }, { propertyName: "absoluteAnchor", first: true, predicate: ["absoluteAnchor"], descendants: true }, { propertyName: "fixedAnchor", first: true, predicate: ["fixedAnchor"], descendants: true }, { propertyName: "fixedWrapper", first: true, predicate: ["fixedWrapper"], descendants: true }], ngImport: i0, template: "<div\n\tclass=\"componentContainer\"\n\t[ngClass]=\"{\n\t\thasCaption: caption || captionRef,\n\t\tvertical: direction === 'vertical',\n\t\thorizontal: direction === 'horizontal',\n\t\ttopAlignment: verticalAlignment === 'top',\n\t\treverseOrder: swapInputAndCaption,\n\t\thasErrors: getErrorToShow() && attachedControl.touched,\n\t\tpercentageSpacing: captionSpacing === 'percentages' && spaceDistribution !== 'fixedInputWidth',\n\t\t'd40-60': spaceDistribution === '40-60',\n\t\t'd30-70': spaceDistribution === '30-70',\n\t\t'd34-66': spaceDistribution === '34-66',\n\t\t'fixedInputWidth': spaceDistribution === 'fixedInputWidth'\n\t}\"\n>\n\t<div class=\"errorAboveInputContainer\" *ngIf=\"direction === 'horizontal' && !errorMessageAsTooltip\">\n\t\t<div class=\"spacer\"></div>\n\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t</div>\n\n\t<div class=\"captionInputAndError\" #internalComponentRef>\n\t\t<div class=\"captionDummyForSpaceCalculation\" #captionDummyForSpaceCalculation *ngIf=\"hasRightOfCaptionError()\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\" [ngTemplateOutletContext]=\"{forCalculation: true}\"></ng-container>\n\t\t</div>\n\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\"></ng-container>\n\t\t<ng-container *ngIf=\"direction === 'vertical' && getErrorLocation() === 'belowCaption' && !errorMessageAsTooltip\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t<div class=\"inputContainer\" (mouseenter)=\"setErrorTooltipOffset()\">\n\t\t\t<ng-container *ngIf=\"errorMessageAsTooltip && shouldShowErrorMessages() && getErrorToShow()\">\n\t\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\t\t\t\t<div class=\"errorTooltip\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t</div>\n</div>\n\n<ng-template #captionTpl let-forCalculation=\"forCalculation\">\n\t<div class=\"caption\"\n\t\t*ngIf=\"caption || captionRef\"\n\t\t[ngClass]=\"{\n\t\t\twithErrorRightOfCaption: getErrorLocation() === 'rightOfCaption'\n\t\t}\"\n\t>\n\t\t<div *ngIf=\"captionRef\" class=\"captionRefContainer\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionRef\"></ng-container>\n\t\t\t<div *ngIf=\"isRequired()\"> *</div>\n\t\t</div>\n\t\t<div *ngIf=\"!captionRef\" class=\"captionText\">{{caption}}<span *ngIf=\"isRequired()\"> *</span></div>\n\t\t<div class=\"rightOfCaptionError\" *ngIf=\"hasRightOfCaptionError()\" [ngClass]=\"{errorFullyVisible: errorFullyVisible}\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\" [ngTemplateOutletContext]=\"{forCalculation: forCalculation}\"></ng-container>\n\t\t</div>\n\t</div>\n</ng-template>\n\n<ng-template #errorRef let-forCalculation=\"forCalculation\">\n\t<div *ngIf=\"shouldShowErrorMessages() && getErrorToShow()\" class=\"errorContainer\" [elementIsTruncatedCb]=\"forCalculation ? setErrorMessageIsTruncated : null\" [ngClass]=\"{horizontal: direction === 'horizontal', hasCaption: caption || captionRef, 'd30-70': spaceDistribution === '30-70', 'd34-66': spaceDistribution === '34-66'}\">\n\t\t<div *ngIf=\"showDefaultError('min')\">{{substituteParameters(getErrorMessage(\"min\"), {min: attachedControl.errors.min.min})}}</div>\n\t\t<div *ngIf=\"showDefaultError('max')\">{{substituteParameters(getErrorMessage(\"max\"), {max: attachedControl.errors.max.max})}}</div>\n\t\t<div *ngIf=\"showDefaultError('required')\">{{getErrorMessage(\"required\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('email')\">{{getErrorMessage(\"email\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('minlength')\">{{substituteParameters(getErrorMessage(\"minLength\"), {minLength: attachedControl.errors.minlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('maxlength')\">{{substituteParameters(getErrorMessage(\"maxLength\"), {maxLength: attachedControl.errors.maxlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('pattern')\">{{getErrorMessage(\"pattern\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('MatchPassword')\">{{getErrorMessage(\"matchPassword\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('date')\">{{getErrorMessage(\"date\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('message')\">{{attachedControl.errors.message.value}}</div>\n\t\t<div *ngIf=\"showDefaultError('formLevel')\">{{getErrorMessage(\"formLevel\")}}</div>\n\t\t<div [ngTemplateOutlet]=\"getCustomErrorHandler(getErrorToShow())?.templateRef\"></div>\n\t</div>\n</ng-template>\n\n<ng-template #tailTpl>\n\t<div class=\"errorTooltipContainer\" [ngClass]=\"{alwaysOpen: shouldShowErrorTooltipOpened()}\">\n\t\t<ng-container *ngIf=\"hasHoverableErrorTooltip() || shouldShowErrorTooltipOpened()\">\n\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\n\t\t\t<div class=\"absoluteAnchor\" #absoluteAnchor></div>\n\t\t\t<div class=\"fixedAnchor\" #fixedAnchor [onRenderFn]=\"setErrorTooltipOffset\"></div>\n\t\t\t<div class=\"fixedWrapper\" #fixedWrapper>\n\t\t\t\t<div class=\"errorTooltip\" [ngClass]=\"{noPointerEvents: !shouldShowErrorTooltipOpened()}\">\n\t\t\t\t\t<div class=\"errorTooltipInner\">\n\t\t\t\t\t\t<i class=\"closeBtn\" (click)=\"closePopup();\">\u00D7</i>\n\t\t\t\t\t\t<ng-container *ngIf=\"getErrorToShow()\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t\t\t<div *ngIf=\"!getErrorToShow() && shouldShowWarningPopup()\">\n\t\t\t\t\t\t\t<ng-container *ngIf=\"getWarningToShowIsTemplateRef()\" [ngTemplateOutlet]=\"getWarningToShowAsTemplateRef()\"></ng-container>\n\t\t\t\t\t\t\t<span *ngIf=\"!getWarningToShowIsTemplateRef()\">{{getWarningToShow()}}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</ng-container>\n\t\t<klp-form-warning-icon variant=\"fill\" *ngIf=\"getErrorToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t\t<klp-form-warning-icon variant=\"line\" *ngIf=\"!getErrorToShow() && getWarningToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t</div>\n</ng-template>\n", styles: [":host{display:block}.componentContainer:not(.hasCaption) .captionInputAndError{display:block}.componentContainer:not(.hasCaption) .captionInputAndError .inputContainer{margin-top:0;padding-left:0;max-width:initial}.componentContainer:not(.hasCaption) .errorContainer{padding-left:0}.componentContainer.hasCaption .errorAboveInputContainer .spacer{display:block}.componentContainer.reverseOrder .captionInputAndError{flex-direction:row-reverse;justify-content:flex-end}.componentContainer.vertical .captionInputAndError{display:block}.componentContainer.vertical .captionInputAndError .inputContainer{margin-top:.3125rem}.componentContainer.vertical .captionInputAndError .errorContainer{margin-left:0}.componentContainer.topAlignment .captionInputAndError{align-items:flex-start}.componentContainer.horizontal.hasCaption .inputContainer,.componentContainer.horizontal.hasCaption .errorAboveInputContainer .errorContainer{padding-left:1rem}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .spacer{flex:0 1 40%}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .errorContainer{flex:60 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .caption{max-width:40%;flex:40 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .inputContainer{max-width:60%;flex:60 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .spacer{flex:0 1 34%}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .errorContainer{flex:66 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .caption{max-width:34%;flex:34 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .inputContainer{max-width:66%;flex:66 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .spacer{flex:0 1 30%}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .errorContainer{flex:70 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .caption{max-width:30%;flex:30 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .inputContainer{max-width:70%;flex:70 1 0px}.componentContainer.fixedInputWidth .caption{flex:1 1 0px;overflow:hidden}.componentContainer.fixedInputWidth .inputContainer{flex:0 0 auto}.captionInputAndError{display:flex;align-items:center;min-height:42px}.errorAboveInputContainer{display:flex}.errorAboveInputContainer .spacer{display:none}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption{height:0px;overflow:hidden}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption .rightOfCaptionError{display:block}.captionRefContainer{display:flex}.caption{font-weight:700;flex:0 0 auto;color:#515365}.caption.percentageSpacing{max-width:40%;flex:40 1 0px}.caption.percentageSpacing.d30-70{max-width:30%;flex:30 1 0px}.caption.percentageSpacing.d34-66{max-width:34%;flex:34 1 0px}.caption.withErrorRightOfCaption{display:flex;justify-content:space-between;gap:1rem}.caption.withErrorRightOfCaption .captionText{flex:1 2 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.caption.withErrorRightOfCaption .rightOfCaptionError{display:none;max-width:40%;font-weight:400;overflow:hidden;flex:1 0 auto;text-align:right}.caption.withErrorRightOfCaption .rightOfCaptionError.errorFullyVisible{display:block}.caption.withErrorRightOfCaption .rightOfCaptionError ::ng-deep *{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inputContainer{position:relative;flex:1}.inputContainer .errorTooltipContainer{position:relative}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangle,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangleWhite,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltip{display:flex}.inputContainer .errorTooltipContainer.alwaysOpen .closeBtn{display:block}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipInner{padding-right:1.4rem}.inputContainer .errorTooltipContainer klp-form-warning-icon{cursor:pointer}.inputContainer .errorTooltipContainer .absoluteAnchor{position:absolute}.inputContainer .errorTooltipContainer .fixedAnchor,.inputContainer .errorTooltipContainer .fixedWrapper{position:fixed}.inputContainer .errorTooltipTriangle{display:none;z-index:1;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid rgba(0,0,0,.13)}.inputContainer .errorTooltipTriangleWhite{display:none;z-index:3;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem - 2px)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid white}.inputContainer .errorTooltip{display:none;justify-content:flex-end;position:absolute;top:-.6rem;right:-1.875rem;transform:translateY(-100%);width:20rem}.inputContainer .errorTooltip.noPointerEvents{pointer-events:none}.inputContainer .errorTooltip .closeBtn{display:none;position:absolute;top:.2rem;right:.2rem;padding:.2rem .4rem;cursor:pointer;color:#666;font-size:1rem}.inputContainer .errorTooltip .closeBtn:hover{color:#515365}.inputContainer .errorTooltipInner{background:#fff;padding:.4rem .6rem;border-radius:.4rem;border:1px solid rgba(0,0,0,.13);box-shadow:#00000021 2px 3px 10px}.inputContainer:hover .errorTooltipContainer .errorTooltip,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangle,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangleWhite{display:flex}.errorContainer{color:#ff8000}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: OnRenderDirective, selector: "[onRenderFn]", inputs: ["onRenderFn"] }, { kind: "component", type: WarningIconComponent, selector: "klp-form-warning-icon", inputs: ["variant"] }, { kind: "directive", type: ElementIsTruncatedCbComponent, selector: "[elementIsTruncatedCb]", inputs: ["elementIsTruncatedCb"] }] }); }
|
|
@@ -1516,18 +1558,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1516
1558
|
class TextInputComponent extends ValueAccessorBase {
|
|
1517
1559
|
constructor() {
|
|
1518
1560
|
super(...arguments);
|
|
1561
|
+
this.isPeekingPassword = false;
|
|
1519
1562
|
this.type = 'text';
|
|
1520
1563
|
this.clearable = false;
|
|
1521
1564
|
this.hasBorderLeft = true;
|
|
1522
1565
|
this.hasBorderRight = true;
|
|
1523
1566
|
this.onBlur = new EventEmitter();
|
|
1524
1567
|
}
|
|
1568
|
+
togglePeakPassword() {
|
|
1569
|
+
this.isPeekingPassword = !this.isPeekingPassword;
|
|
1570
|
+
}
|
|
1571
|
+
getType() {
|
|
1572
|
+
if (this.type === 'text') {
|
|
1573
|
+
return 'text';
|
|
1574
|
+
}
|
|
1575
|
+
return this.isPeekingPassword ? 'text' : 'password';
|
|
1576
|
+
}
|
|
1525
1577
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TextInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1526
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TextInputComponent, selector: "klp-form-text-input", inputs: { placeholder: "placeholder", type: "type", clearable: "clearable", icon: "icon", hasBorderLeft: "hasBorderLeft", hasBorderRight: "hasBorderRight" }, outputs: { onBlur: "onBlur" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: TextInputComponent, multi: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"componentContainer\">\n\t<ng-container *ngIf=\"icon?.length > 0\">\n\t\t<i class=\"ti-search\" *ngIf=\"icon === 'search'\"></i>\n\t</ng-container>\n\t<input\n\t\t[type]=\"
|
|
1578
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TextInputComponent, selector: "klp-form-text-input", inputs: { placeholder: "placeholder", type: "type", clearable: "clearable", icon: "icon", hasBorderLeft: "hasBorderLeft", hasBorderRight: "hasBorderRight", passwordPeekIcon: "passwordPeekIcon" }, outputs: { onBlur: "onBlur" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: TextInputComponent, multi: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"componentContainer\">\n\t<ng-container *ngIf=\"icon?.length > 0\">\n\t\t<i class=\"ti-search\" *ngIf=\"icon === 'search'\"></i>\n\t</ng-container>\n\t<input\n\t\t[type]=\"getType()\"\n\t\t[(ngModel)]=\"innerValue\"\n\t\t[ngClass]=\"{showErrors: isInErrorState(), hasIcon: icon?.length > 0, hasClearButton: clearable, noBorderLeft: !hasBorderLeft, noBorderRight: !hasBorderRight}\"\n\t\t(input)=\"setInnerValueAndNotify($event.target.value)\"\n\t\t[placeholder]=\"placeholder ? placeholder : ''\"\n\t\t(blur)=\"touch(); onBlur.emit()\"\n\t\t[disabled]='disabled'\n\t\t#nativeInputRef\n\t/>\n\t<div class=\"tail\">\n\t\t<ng-container [ngTemplateOutlet]=\"getTailTpl()\"></ng-container>\n\t\t<div class=\"clearIcon\" *ngIf=\"clearable && innerValue?.length > 0\" (click)=\"resetToNull()\">\u00D7</div>\n\t\t<button class=\"peakBtn\" (click)=\"togglePeakPassword()\" *ngIf=\"passwordPeekIcon && type === 'password'\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"passwordPeekIcon\"></ng-container>\n\t\t</button>\n\t</div>\n</div>\n", styles: [":host{display:block}:host input:disabled{cursor:not-allowed}.componentContainer{position:relative}i{position:absolute;left:.625rem;top:14px}input{outline:none;display:block;border:1px solid #e6ecf5;border-radius:2px;box-shadow:none;height:42px;width:100%;padding:.375rem .625rem;font-size:14px;color:#888da8;transition:all .2s ease-in;-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;-o-transition:all .2s ease-in;-ms-transition:all .2s ease-in}input::-webkit-input-placeholder{color:#adadad}input:-moz-placeholder{color:#adadad}input::-moz-placeholder{color:#adadad}input:-ms-input-placeholder{color:#adadad}input:focus{outline:0 none;box-shadow:none;border-color:#3ed778}input.input-sm{height:30px}input.input-lg{height:50px}input.error{border-color:#dc3545;background-color:#f6cdd1}input.valid{border-color:#37c936;background-color:#ebfaeb;color:#278d26}input.hasIcon{padding-left:1.875rem}input.hasClearButton{padding-right:1.875rem}input.noBorderLeft{border-left:none}input.noBorderRight{border-right:none}.tail{position:absolute;right:.625rem;display:flex;align-items:center;top:0;bottom:0;gap:.625rem}.tail .clearIcon{transform:translateY(-2px);font-size:18px;cursor:pointer}.peakBtn{border:none;background:transparent;height:100%;padding:0}.showErrors{border-color:#ff8000}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
1527
1579
|
}
|
|
1528
1580
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TextInputComponent, decorators: [{
|
|
1529
1581
|
type: Component,
|
|
1530
|
-
args: [{ selector: 'klp-form-text-input', providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: TextInputComponent, multi: true }], template: "<div class=\"componentContainer\">\n\t<ng-container *ngIf=\"icon?.length > 0\">\n\t\t<i class=\"ti-search\" *ngIf=\"icon === 'search'\"></i>\n\t</ng-container>\n\t<input\n\t\t[type]=\"
|
|
1582
|
+
args: [{ selector: 'klp-form-text-input', providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: TextInputComponent, multi: true }], template: "<div class=\"componentContainer\">\n\t<ng-container *ngIf=\"icon?.length > 0\">\n\t\t<i class=\"ti-search\" *ngIf=\"icon === 'search'\"></i>\n\t</ng-container>\n\t<input\n\t\t[type]=\"getType()\"\n\t\t[(ngModel)]=\"innerValue\"\n\t\t[ngClass]=\"{showErrors: isInErrorState(), hasIcon: icon?.length > 0, hasClearButton: clearable, noBorderLeft: !hasBorderLeft, noBorderRight: !hasBorderRight}\"\n\t\t(input)=\"setInnerValueAndNotify($event.target.value)\"\n\t\t[placeholder]=\"placeholder ? placeholder : ''\"\n\t\t(blur)=\"touch(); onBlur.emit()\"\n\t\t[disabled]='disabled'\n\t\t#nativeInputRef\n\t/>\n\t<div class=\"tail\">\n\t\t<ng-container [ngTemplateOutlet]=\"getTailTpl()\"></ng-container>\n\t\t<div class=\"clearIcon\" *ngIf=\"clearable && innerValue?.length > 0\" (click)=\"resetToNull()\">\u00D7</div>\n\t\t<button class=\"peakBtn\" (click)=\"togglePeakPassword()\" *ngIf=\"passwordPeekIcon && type === 'password'\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"passwordPeekIcon\"></ng-container>\n\t\t</button>\n\t</div>\n</div>\n", styles: [":host{display:block}:host input:disabled{cursor:not-allowed}.componentContainer{position:relative}i{position:absolute;left:.625rem;top:14px}input{outline:none;display:block;border:1px solid #e6ecf5;border-radius:2px;box-shadow:none;height:42px;width:100%;padding:.375rem .625rem;font-size:14px;color:#888da8;transition:all .2s ease-in;-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;-o-transition:all .2s ease-in;-ms-transition:all .2s ease-in}input::-webkit-input-placeholder{color:#adadad}input:-moz-placeholder{color:#adadad}input::-moz-placeholder{color:#adadad}input:-ms-input-placeholder{color:#adadad}input:focus{outline:0 none;box-shadow:none;border-color:#3ed778}input.input-sm{height:30px}input.input-lg{height:50px}input.error{border-color:#dc3545;background-color:#f6cdd1}input.valid{border-color:#37c936;background-color:#ebfaeb;color:#278d26}input.hasIcon{padding-left:1.875rem}input.hasClearButton{padding-right:1.875rem}input.noBorderLeft{border-left:none}input.noBorderRight{border-right:none}.tail{position:absolute;right:.625rem;display:flex;align-items:center;top:0;bottom:0;gap:.625rem}.tail .clearIcon{transform:translateY(-2px);font-size:18px;cursor:pointer}.peakBtn{border:none;background:transparent;height:100%;padding:0}.showErrors{border-color:#ff8000}\n"] }]
|
|
1531
1583
|
}], propDecorators: { placeholder: [{
|
|
1532
1584
|
type: Input
|
|
1533
1585
|
}], type: [{
|
|
@@ -1540,18 +1592,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1540
1592
|
type: Input
|
|
1541
1593
|
}], hasBorderRight: [{
|
|
1542
1594
|
type: Input
|
|
1595
|
+
}], passwordPeekIcon: [{
|
|
1596
|
+
type: Input
|
|
1543
1597
|
}], onBlur: [{
|
|
1544
1598
|
type: Output
|
|
1545
1599
|
}] } });
|
|
1546
1600
|
|
|
1547
1601
|
class ToggleComponent extends ValueAccessorBase {
|
|
1602
|
+
constructor() {
|
|
1603
|
+
super(...arguments);
|
|
1604
|
+
this.transparentBackground = true;
|
|
1605
|
+
}
|
|
1548
1606
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToggleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1549
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ToggleComponent, selector: "klp-form-toggle", providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: ToggleComponent, multi: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"componentContainer\" [ngClass]=\"{disabled: disabled}\">\n\t<input type=\"checkbox\" class=\"nativeCheckbox\"\n\t\t[(ngModel)]=\"innerValue\"\n\t\t(input)=\"setInnerValueAndNotify($event.target.checked); touch()\"\n\t\t[disabled]=\"disabled\"\n\t\t[ngClass]=\"{showErrors: isInErrorState()}\"\n\t #nativeInputRef\n\t/>\n\t<div class=\"toggleVisual\"></div>\n</div>\n", styles: [":host{display:block}.componentContainer{position:relative;padding-right:6px}.nativeCheckbox{position:absolute;opacity:0;top:0;left:0;width:35px;height:20px;cursor:pointer;margin:0}.toggleVisual{pointer-events:none;position:relative;display:block;transition:.4s ease;-webkit-transition:.4s ease;-moz-transition:.4s ease;-o-transition:.4s ease;-ms-transition:.4s ease;width:35px;height:20px;border:1px solid #e6ecf5;border-radius:35px}.toggleVisual:before{content:\"\";position:absolute;display:block;transition:.2s cubic-bezier(.24,0,.5,1);-webkit-transition:.2s cubic-bezier(.24,0,.5,1);-moz-transition:.2s cubic-bezier(.24,0,.5,1);-o-transition:.2s cubic-bezier(.24,0,.5,1);-ms-transition:.2s cubic-bezier(.24,0,.5,1);margin:1px;width:33px;height:18px;top:-1px;left:-1px;border-radius:30px}.toggleVisual:after{content:\"\";position:absolute;display:block;box-shadow:0 0 0 1px #0000001a,0 4px #0000000a,0 4px 9px #00000021,0 3px 3px #0000000d;transition:.35s cubic-bezier(.54,1.6,.5,1);-webkit-transition:.35s cubic-bezier(.54,1.6,.5,1);-moz-transition:.35s cubic-bezier(.54,1.6,.5,1);-o-transition:.35s cubic-bezier(.54,1.6,.5,1);-ms-transition:.35s cubic-bezier(.54,1.6,.5,1);background:#f7f7f7;height:20px;width:20px;top:-1px;left:0;border-radius:60px}.nativeCheckbox:checked+.toggleVisual:before{background:#37c936;transition:width .2s cubic-bezier(0,0,0,.1);-webkit-transition:width .2s cubic-bezier(0,0,0,.1);-moz-transition:width .2s cubic-bezier(0,0,0,.1);-o-transition:width .2s cubic-bezier(0,0,0,.1);-ms-transition:width .2s cubic-bezier(0,0,0,.1)}.nativeCheckbox:checked+.toggleVisual:after{left:18px}.disabled{opacity:.6}.showErrors+.toggleVisual:before{border:1px solid #ff8000}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
1607
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ToggleComponent, selector: "klp-form-toggle", inputs: { transparentBackground: "transparentBackground" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: ToggleComponent, multi: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"componentContainer\" [ngClass]=\"{disabled: disabled}\">\n\t<input type=\"checkbox\" class=\"nativeCheckbox\"\n\t\t[(ngModel)]=\"innerValue\"\n\t\t(input)=\"setInnerValueAndNotify($event.target.checked); touch()\"\n\t\t[disabled]=\"disabled\"\n\t\t[ngClass]=\"{showErrors: isInErrorState()}\"\n\t #nativeInputRef\n\t/>\n\t<div class=\"toggleVisual\" [ngClass]=\"{transparentBackground: transparentBackground}\"></div>\n</div>\n", styles: [":host{display:block}.componentContainer{position:relative;padding-right:6px}.nativeCheckbox{position:absolute;opacity:0;top:0;left:0;width:35px;height:20px;cursor:pointer;margin:0}.toggleVisual{pointer-events:none;position:relative;display:block;transition:.4s ease;-webkit-transition:.4s ease;-moz-transition:.4s ease;-o-transition:.4s ease;-ms-transition:.4s ease;width:35px;height:20px;border:1px solid #e6ecf5;border-radius:35px;background:#eaecf0}.toggleVisual.transparentBackground{background:transparent}.toggleVisual:before{content:\"\";position:absolute;display:block;transition:.2s cubic-bezier(.24,0,.5,1);-webkit-transition:.2s cubic-bezier(.24,0,.5,1);-moz-transition:.2s cubic-bezier(.24,0,.5,1);-o-transition:.2s cubic-bezier(.24,0,.5,1);-ms-transition:.2s cubic-bezier(.24,0,.5,1);margin:1px;width:33px;height:18px;top:-1px;left:-1px;border-radius:30px}.toggleVisual:after{content:\"\";position:absolute;display:block;box-shadow:0 0 0 1px #0000001a,0 4px #0000000a,0 4px 9px #00000021,0 3px 3px #0000000d;transition:.35s cubic-bezier(.54,1.6,.5,1);-webkit-transition:.35s cubic-bezier(.54,1.6,.5,1);-moz-transition:.35s cubic-bezier(.54,1.6,.5,1);-o-transition:.35s cubic-bezier(.54,1.6,.5,1);-ms-transition:.35s cubic-bezier(.54,1.6,.5,1);background:#f7f7f7;height:20px;width:20px;top:-1px;left:0;border-radius:60px}.nativeCheckbox:checked+.toggleVisual:before{background:#37c936;transition:width .2s cubic-bezier(0,0,0,.1);-webkit-transition:width .2s cubic-bezier(0,0,0,.1);-moz-transition:width .2s cubic-bezier(0,0,0,.1);-o-transition:width .2s cubic-bezier(0,0,0,.1);-ms-transition:width .2s cubic-bezier(0,0,0,.1)}.nativeCheckbox:checked+.toggleVisual:after{left:18px}.disabled{opacity:.6}.showErrors+.toggleVisual:before{border:1px solid #ff8000}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
1550
1608
|
}
|
|
1551
1609
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToggleComponent, decorators: [{
|
|
1552
1610
|
type: Component,
|
|
1553
|
-
args: [{ selector: 'klp-form-toggle', providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: ToggleComponent, multi: true }], template: "<div class=\"componentContainer\" [ngClass]=\"{disabled: disabled}\">\n\t<input type=\"checkbox\" class=\"nativeCheckbox\"\n\t\t[(ngModel)]=\"innerValue\"\n\t\t(input)=\"setInnerValueAndNotify($event.target.checked); touch()\"\n\t\t[disabled]=\"disabled\"\n\t\t[ngClass]=\"{showErrors: isInErrorState()}\"\n\t #nativeInputRef\n\t/>\n\t<div class=\"toggleVisual\"></div>\n</div>\n", styles: [":host{display:block}.componentContainer{position:relative;padding-right:6px}.nativeCheckbox{position:absolute;opacity:0;top:0;left:0;width:35px;height:20px;cursor:pointer;margin:0}.toggleVisual{pointer-events:none;position:relative;display:block;transition:.4s ease;-webkit-transition:.4s ease;-moz-transition:.4s ease;-o-transition:.4s ease;-ms-transition:.4s ease;width:35px;height:20px;border:1px solid #e6ecf5;border-radius:35px}.toggleVisual:before{content:\"\";position:absolute;display:block;transition:.2s cubic-bezier(.24,0,.5,1);-webkit-transition:.2s cubic-bezier(.24,0,.5,1);-moz-transition:.2s cubic-bezier(.24,0,.5,1);-o-transition:.2s cubic-bezier(.24,0,.5,1);-ms-transition:.2s cubic-bezier(.24,0,.5,1);margin:1px;width:33px;height:18px;top:-1px;left:-1px;border-radius:30px}.toggleVisual:after{content:\"\";position:absolute;display:block;box-shadow:0 0 0 1px #0000001a,0 4px #0000000a,0 4px 9px #00000021,0 3px 3px #0000000d;transition:.35s cubic-bezier(.54,1.6,.5,1);-webkit-transition:.35s cubic-bezier(.54,1.6,.5,1);-moz-transition:.35s cubic-bezier(.54,1.6,.5,1);-o-transition:.35s cubic-bezier(.54,1.6,.5,1);-ms-transition:.35s cubic-bezier(.54,1.6,.5,1);background:#f7f7f7;height:20px;width:20px;top:-1px;left:0;border-radius:60px}.nativeCheckbox:checked+.toggleVisual:before{background:#37c936;transition:width .2s cubic-bezier(0,0,0,.1);-webkit-transition:width .2s cubic-bezier(0,0,0,.1);-moz-transition:width .2s cubic-bezier(0,0,0,.1);-o-transition:width .2s cubic-bezier(0,0,0,.1);-ms-transition:width .2s cubic-bezier(0,0,0,.1)}.nativeCheckbox:checked+.toggleVisual:after{left:18px}.disabled{opacity:.6}.showErrors+.toggleVisual:before{border:1px solid #ff8000}\n"] }]
|
|
1554
|
-
}]
|
|
1611
|
+
args: [{ selector: 'klp-form-toggle', providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: ToggleComponent, multi: true }], template: "<div class=\"componentContainer\" [ngClass]=\"{disabled: disabled}\">\n\t<input type=\"checkbox\" class=\"nativeCheckbox\"\n\t\t[(ngModel)]=\"innerValue\"\n\t\t(input)=\"setInnerValueAndNotify($event.target.checked); touch()\"\n\t\t[disabled]=\"disabled\"\n\t\t[ngClass]=\"{showErrors: isInErrorState()}\"\n\t #nativeInputRef\n\t/>\n\t<div class=\"toggleVisual\" [ngClass]=\"{transparentBackground: transparentBackground}\"></div>\n</div>\n", styles: [":host{display:block}.componentContainer{position:relative;padding-right:6px}.nativeCheckbox{position:absolute;opacity:0;top:0;left:0;width:35px;height:20px;cursor:pointer;margin:0}.toggleVisual{pointer-events:none;position:relative;display:block;transition:.4s ease;-webkit-transition:.4s ease;-moz-transition:.4s ease;-o-transition:.4s ease;-ms-transition:.4s ease;width:35px;height:20px;border:1px solid #e6ecf5;border-radius:35px;background:#eaecf0}.toggleVisual.transparentBackground{background:transparent}.toggleVisual:before{content:\"\";position:absolute;display:block;transition:.2s cubic-bezier(.24,0,.5,1);-webkit-transition:.2s cubic-bezier(.24,0,.5,1);-moz-transition:.2s cubic-bezier(.24,0,.5,1);-o-transition:.2s cubic-bezier(.24,0,.5,1);-ms-transition:.2s cubic-bezier(.24,0,.5,1);margin:1px;width:33px;height:18px;top:-1px;left:-1px;border-radius:30px}.toggleVisual:after{content:\"\";position:absolute;display:block;box-shadow:0 0 0 1px #0000001a,0 4px #0000000a,0 4px 9px #00000021,0 3px 3px #0000000d;transition:.35s cubic-bezier(.54,1.6,.5,1);-webkit-transition:.35s cubic-bezier(.54,1.6,.5,1);-moz-transition:.35s cubic-bezier(.54,1.6,.5,1);-o-transition:.35s cubic-bezier(.54,1.6,.5,1);-ms-transition:.35s cubic-bezier(.54,1.6,.5,1);background:#f7f7f7;height:20px;width:20px;top:-1px;left:0;border-radius:60px}.nativeCheckbox:checked+.toggleVisual:before{background:#37c936;transition:width .2s cubic-bezier(0,0,0,.1);-webkit-transition:width .2s cubic-bezier(0,0,0,.1);-moz-transition:width .2s cubic-bezier(0,0,0,.1);-o-transition:width .2s cubic-bezier(0,0,0,.1);-ms-transition:width .2s cubic-bezier(0,0,0,.1)}.nativeCheckbox:checked+.toggleVisual:after{left:18px}.disabled{opacity:.6}.showErrors+.toggleVisual:before{border:1px solid #ff8000}\n"] }]
|
|
1612
|
+
}], propDecorators: { transparentBackground: [{
|
|
1613
|
+
type: Input
|
|
1614
|
+
}] } });
|
|
1555
1615
|
|
|
1556
1616
|
class FormCaptionComponent {
|
|
1557
1617
|
constructor(parent) {
|
|
@@ -2441,14 +2501,20 @@ const colors = {
|
|
|
2441
2501
|
black: { noAlpha: 'rgb(40, 40, 40)', withAlpha: 'rgba(40, 40, 40, 0.1254901961)' },
|
|
2442
2502
|
};
|
|
2443
2503
|
class WithTooltipDirective {
|
|
2444
|
-
constructor(el) {
|
|
2504
|
+
constructor(el, appRef) {
|
|
2505
|
+
this.el = el;
|
|
2506
|
+
this.appRef = appRef;
|
|
2445
2507
|
this.klpWithTooltip = 'orange';
|
|
2508
|
+
this.position = 'top';
|
|
2446
2509
|
el.nativeElement.addEventListener('mouseenter', () => {
|
|
2447
|
-
|
|
2510
|
+
let textToDisplay;
|
|
2511
|
+
if (!this.templateInstance) {
|
|
2512
|
+
textToDisplay = this.tooltipText || el.nativeElement.innerText.trim();
|
|
2513
|
+
}
|
|
2448
2514
|
if (!stringIsSetAndFilled(this.klpWithTooltip)) {
|
|
2449
2515
|
return;
|
|
2450
2516
|
}
|
|
2451
|
-
if (textToDisplay
|
|
2517
|
+
if (!stringIsSetAndFilled(textToDisplay) && !this.tooltipTemplate) {
|
|
2452
2518
|
return;
|
|
2453
2519
|
}
|
|
2454
2520
|
if (stringIsSetAndFilled(this.tooltipText)) {
|
|
@@ -2456,6 +2522,9 @@ class WithTooltipDirective {
|
|
|
2456
2522
|
return;
|
|
2457
2523
|
}
|
|
2458
2524
|
}
|
|
2525
|
+
else if (this.tooltipTemplate) {
|
|
2526
|
+
// no need to check here, just render the template
|
|
2527
|
+
}
|
|
2459
2528
|
else {
|
|
2460
2529
|
if (el.nativeElement.offsetWidth >= el.nativeElement.scrollWidth) {
|
|
2461
2530
|
return;
|
|
@@ -2469,8 +2538,14 @@ class WithTooltipDirective {
|
|
|
2469
2538
|
this.div.style.color = `${colors[this.klpWithTooltip].noAlpha}`;
|
|
2470
2539
|
this.div.style.position = 'fixed';
|
|
2471
2540
|
this.div.style.left = `${el.nativeElement.getBoundingClientRect().x}px`;
|
|
2472
|
-
this.
|
|
2473
|
-
|
|
2541
|
+
if (this.position === 'top') {
|
|
2542
|
+
this.div.style.top = `${el.nativeElement.getBoundingClientRect().y}px`;
|
|
2543
|
+
this.div.style.transform = `translate(calc(-100% + ${el.nativeElement.getBoundingClientRect().width}px), calc(-100% - 0.3rem))`;
|
|
2544
|
+
}
|
|
2545
|
+
else if (this.position === 'bottom') {
|
|
2546
|
+
this.div.style.top = `${el.nativeElement.getBoundingClientRect().y + el.nativeElement.getBoundingClientRect().height}px`;
|
|
2547
|
+
this.div.style.transform = `translate(calc(-100% + ${el.nativeElement.getBoundingClientRect().width}px), calc(0% + 0.3rem))`;
|
|
2548
|
+
}
|
|
2474
2549
|
this.div.style.maxWidth = '200px';
|
|
2475
2550
|
this.div.style.whiteSpace = 'break-spaces';
|
|
2476
2551
|
this.div.style.backgroundColor = 'white';
|
|
@@ -2479,14 +2554,32 @@ class WithTooltipDirective {
|
|
|
2479
2554
|
this.div.style.padding = '0.3rem 0.5rem';
|
|
2480
2555
|
this.div.style.boxSizing = 'border-box';
|
|
2481
2556
|
this.div.style.borderRadius = '3px';
|
|
2482
|
-
|
|
2557
|
+
if (stringIsSetAndFilled(textToDisplay)) {
|
|
2558
|
+
this.div.textContent = textToDisplay;
|
|
2559
|
+
}
|
|
2560
|
+
else if (this.templateInstance) {
|
|
2561
|
+
this.div.style.maxWidth = 'none';
|
|
2562
|
+
this.div.style.visibility = 'hidden';
|
|
2563
|
+
this.div.appendChild(this.templateInstance);
|
|
2564
|
+
setTimeout(() => {
|
|
2565
|
+
const color = getComputedStyle(this.templateInstance).backgroundColor || getComputedStyle(this.templateInstance).background;
|
|
2566
|
+
this.div.style.backgroundColor = color;
|
|
2567
|
+
this.div.style.visibility = 'visible';
|
|
2568
|
+
});
|
|
2569
|
+
}
|
|
2483
2570
|
el.nativeElement.prepend(this.div);
|
|
2484
2571
|
this.triangle = document.createElement('div');
|
|
2485
2572
|
this.triangle.style.zIndex = `${zIndexStart + 1}`;
|
|
2486
2573
|
this.triangle.style.position = 'fixed';
|
|
2487
2574
|
this.triangle.style.left = `calc(${el.nativeElement.getBoundingClientRect().x + el.nativeElement.getBoundingClientRect().width}px - 2rem)`;
|
|
2488
|
-
this.
|
|
2489
|
-
|
|
2575
|
+
if (this.position === 'top') {
|
|
2576
|
+
this.triangle.style.top = `${el.nativeElement.getBoundingClientRect().y}px`;
|
|
2577
|
+
this.triangle.style.transform = `translate(-50%, calc(-100% + 0.1rem))`;
|
|
2578
|
+
}
|
|
2579
|
+
else if (this.position === 'bottom') {
|
|
2580
|
+
this.triangle.style.top = `${el.nativeElement.getBoundingClientRect().y + el.nativeElement.getBoundingClientRect().height}px`;
|
|
2581
|
+
this.triangle.style.transform = `translate(-50%, 0rem) rotate(180deg)`;
|
|
2582
|
+
}
|
|
2490
2583
|
this.triangle.style.width = '0';
|
|
2491
2584
|
this.triangle.style.height = '0';
|
|
2492
2585
|
this.triangle.style.borderLeft = `${triangleSize} solid transparent`;
|
|
@@ -2497,13 +2590,29 @@ class WithTooltipDirective {
|
|
|
2497
2590
|
this.triangleWhite.style.zIndex = `${zIndexStart + 3}`;
|
|
2498
2591
|
this.triangleWhite.style.position = 'fixed';
|
|
2499
2592
|
this.triangleWhite.style.left = `calc(${el.nativeElement.getBoundingClientRect().x + el.nativeElement.getBoundingClientRect().width}px - 2rem)`;
|
|
2500
|
-
this.
|
|
2501
|
-
|
|
2593
|
+
if (this.position === 'top') {
|
|
2594
|
+
this.triangleWhite.style.top = `${el.nativeElement.getBoundingClientRect().y}px`;
|
|
2595
|
+
this.triangleWhite.style.transform = `translate(-50%, calc(-100% + 0.1rem - 2px))`;
|
|
2596
|
+
}
|
|
2597
|
+
else if (this.position === 'bottom') {
|
|
2598
|
+
this.triangleWhite.style.top = `${el.nativeElement.getBoundingClientRect().y + el.nativeElement.getBoundingClientRect().height}px`;
|
|
2599
|
+
this.triangleWhite.style.transform = `translate(-50%, -2px) rotate(180deg)`;
|
|
2600
|
+
}
|
|
2502
2601
|
this.triangleWhite.style.width = '0';
|
|
2503
2602
|
this.triangleWhite.style.height = '0';
|
|
2504
2603
|
this.triangleWhite.style.borderLeft = `${triangleSize} solid transparent`;
|
|
2505
2604
|
this.triangleWhite.style.borderRight = `${triangleSize} solid transparent`;
|
|
2506
|
-
|
|
2605
|
+
if (stringIsSetAndFilled(textToDisplay)) {
|
|
2606
|
+
this.triangleWhite.style.borderTop = `${triangleSize} solid white`;
|
|
2607
|
+
}
|
|
2608
|
+
else if (this.templateInstance) {
|
|
2609
|
+
this.div.style.visibility = 'hidden';
|
|
2610
|
+
setTimeout(() => {
|
|
2611
|
+
const color = getComputedStyle(this.templateInstance).backgroundColor || getComputedStyle(this.templateInstance).background;
|
|
2612
|
+
this.triangleWhite.style.borderTop = `${triangleSize} solid ${color}`;
|
|
2613
|
+
this.div.style.visibility = 'visible';
|
|
2614
|
+
});
|
|
2615
|
+
}
|
|
2507
2616
|
el.nativeElement.prepend(this.triangleWhite);
|
|
2508
2617
|
});
|
|
2509
2618
|
el.nativeElement.addEventListener('mouseleave', () => {
|
|
@@ -2521,18 +2630,29 @@ class WithTooltipDirective {
|
|
|
2521
2630
|
catch (ex) { }
|
|
2522
2631
|
});
|
|
2523
2632
|
}
|
|
2524
|
-
|
|
2525
|
-
|
|
2633
|
+
ngOnChanges(simpleChanges) {
|
|
2634
|
+
if (simpleChanges.tooltipTemplate?.currentValue) {
|
|
2635
|
+
const viewRef = this.tooltipTemplate.createEmbeddedView(null);
|
|
2636
|
+
this.appRef.attachView(viewRef);
|
|
2637
|
+
this.templateInstance = viewRef.rootNodes[0];
|
|
2638
|
+
}
|
|
2639
|
+
}
|
|
2640
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WithTooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2641
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: WithTooltipDirective, selector: "[klpWithTooltip]", inputs: { klpWithTooltip: "klpWithTooltip", tooltipText: "tooltipText", tooltipTemplate: "tooltipTemplate", position: "position" }, usesOnChanges: true, ngImport: i0 }); }
|
|
2526
2642
|
}
|
|
2527
2643
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WithTooltipDirective, decorators: [{
|
|
2528
2644
|
type: Directive,
|
|
2529
2645
|
args: [{
|
|
2530
2646
|
selector: '[klpWithTooltip]'
|
|
2531
2647
|
}]
|
|
2532
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { klpWithTooltip: [{
|
|
2648
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ApplicationRef }]; }, propDecorators: { klpWithTooltip: [{
|
|
2533
2649
|
type: Input
|
|
2534
2650
|
}], tooltipText: [{
|
|
2535
2651
|
type: Input
|
|
2652
|
+
}], tooltipTemplate: [{
|
|
2653
|
+
type: Input
|
|
2654
|
+
}], position: [{
|
|
2655
|
+
type: Input
|
|
2536
2656
|
}] } });
|
|
2537
2657
|
|
|
2538
2658
|
class NgxEnhancyFormsModule {
|