@klippa/ngx-enhancy-forms 18.34.0 → 20.0.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/klippa-ngx-enhancy-forms.mjs +145 -140
- package/fesm2022/klippa-ngx-enhancy-forms.mjs.map +1 -1
- package/index.d.ts +707 -3
- package/package.json +5 -7
- package/esm2022/klippa-ngx-enhancy-forms.mjs +0 -5
- package/esm2022/lib/elementIsTruncatedCb.component.mjs +0 -58
- package/esm2022/lib/elements/button/button.component.mjs +0 -57
- package/esm2022/lib/elements/checkbox/checkbox.component.mjs +0 -23
- package/esm2022/lib/elements/date-picker/date-picker.component.mjs +0 -108
- package/esm2022/lib/elements/date-time-picker/date-time-picker.component.mjs +0 -436
- package/esm2022/lib/elements/email/email-input.component.mjs +0 -21
- package/esm2022/lib/elements/file-input/file-input.component.mjs +0 -76
- package/esm2022/lib/elements/hour-minute-input/hour-minute-input.component.mjs +0 -90
- package/esm2022/lib/elements/loading-indicator/loading-indicator.component.mjs +0 -20
- package/esm2022/lib/elements/number-input/number-input.component.mjs +0 -31
- package/esm2022/lib/elements/password-field/password-field.component.mjs +0 -21
- package/esm2022/lib/elements/radio/radio.component.mjs +0 -34
- package/esm2022/lib/elements/select/select-footer/select-footer.component.mjs +0 -15
- package/esm2022/lib/elements/select/select.component.mjs +0 -385
- package/esm2022/lib/elements/sortable-grouped-items/sortable-grouped-items.component.mjs +0 -54
- package/esm2022/lib/elements/sortable-items/sortable-items.component.mjs +0 -189
- package/esm2022/lib/elements/text-area/text-area.component.mjs +0 -23
- package/esm2022/lib/elements/text-input/text-input.component.mjs +0 -52
- package/esm2022/lib/elements/toggle/toggle.component.mjs +0 -21
- package/esm2022/lib/elements/value-accessor-base/multiple-value-accessor-base.component.mjs +0 -61
- package/esm2022/lib/elements/value-accessor-base/value-accessor-base.component.mjs +0 -167
- package/esm2022/lib/form/form-caption/form-caption.component.mjs +0 -31
- package/esm2022/lib/form/form-caption-end/form-caption-end.component.mjs +0 -34
- package/esm2022/lib/form/form-element/form-element.component.mjs +0 -317
- package/esm2022/lib/form/form-error/form-error.component.mjs +0 -40
- package/esm2022/lib/form/form-submit-button/form-submit-button.component.mjs +0 -71
- package/esm2022/lib/form/form-validation-error/form-validation-error.mjs +0 -22
- package/esm2022/lib/form/form.component.mjs +0 -456
- package/esm2022/lib/material.module.mjs +0 -22
- package/esm2022/lib/ngx-enhancy-forms.module.mjs +0 -191
- package/esm2022/lib/onRender.component.mjs +0 -19
- package/esm2022/lib/types.mjs +0 -2
- package/esm2022/lib/util/angular.mjs +0 -9
- package/esm2022/lib/util/arrays.mjs +0 -48
- package/esm2022/lib/util/classes.mjs +0 -2
- package/esm2022/lib/util/dom.mjs +0 -15
- package/esm2022/lib/util/objects.mjs +0 -38
- package/esm2022/lib/util/values.mjs +0 -23
- package/esm2022/lib/validators/dateValidator.mjs +0 -6
- package/esm2022/lib/validators/timeValidator.mjs +0 -6
- package/esm2022/lib/warning-icon/warning-icon.component.mjs +0 -17
- package/esm2022/lib/withTooltip.component.mjs +0 -185
- package/esm2022/public-api.mjs +0 -38
- package/lib/elementIsTruncatedCb.component.d.ts +0 -14
- package/lib/elements/button/button.component.d.ts +0 -16
- package/lib/elements/checkbox/checkbox.component.d.ts +0 -8
- package/lib/elements/date-picker/date-picker.component.d.ts +0 -26
- package/lib/elements/date-time-picker/date-time-picker.component.d.ts +0 -83
- package/lib/elements/email/email-input.component.d.ts +0 -7
- package/lib/elements/file-input/file-input.component.d.ts +0 -18
- package/lib/elements/hour-minute-input/hour-minute-input.component.d.ts +0 -20
- package/lib/elements/loading-indicator/loading-indicator.component.d.ts +0 -7
- package/lib/elements/number-input/number-input.component.d.ts +0 -9
- package/lib/elements/password-field/password-field.component.d.ts +0 -7
- package/lib/elements/radio/radio.component.d.ts +0 -21
- package/lib/elements/select/select-footer/select-footer.component.d.ts +0 -7
- package/lib/elements/select/select.component.d.ts +0 -91
- package/lib/elements/sortable-grouped-items/sortable-grouped-items.component.d.ts +0 -12
- package/lib/elements/sortable-items/sortable-items.component.d.ts +0 -29
- package/lib/elements/text-area/text-area.component.d.ts +0 -9
- package/lib/elements/text-input/text-input.component.d.ts +0 -19
- package/lib/elements/toggle/toggle.component.d.ts +0 -7
- package/lib/elements/value-accessor-base/multiple-value-accessor-base.component.d.ts +0 -14
- package/lib/elements/value-accessor-base/value-accessor-base.component.d.ts +0 -50
- package/lib/form/form-caption/form-caption.component.d.ts +0 -11
- package/lib/form/form-caption-end/form-caption-end.component.d.ts +0 -12
- package/lib/form/form-element/form-element.component.d.ts +0 -81
- package/lib/form/form-error/form-error.component.d.ts +0 -15
- package/lib/form/form-submit-button/form-submit-button.component.d.ts +0 -21
- package/lib/form/form-validation-error/form-validation-error.d.ts +0 -10
- package/lib/form/form.component.d.ts +0 -62
- package/lib/material.module.d.ts +0 -11
- package/lib/ngx-enhancy-forms.module.d.ts +0 -41
- package/lib/onRender.component.d.ts +0 -8
- package/lib/types.d.ts +0 -16
- package/lib/util/angular.d.ts +0 -2
- package/lib/util/arrays.d.ts +0 -8
- package/lib/util/classes.d.ts +0 -1
- package/lib/util/dom.d.ts +0 -2
- package/lib/util/objects.d.ts +0 -1
- package/lib/util/values.d.ts +0 -6
- package/lib/validators/dateValidator.d.ts +0 -3
- package/lib/validators/timeValidator.d.ts +0 -3
- package/lib/warning-icon/warning-icon.component.d.ts +0 -6
- package/lib/withTooltip.component.d.ts +0 -23
- package/public-api.d.ts +0 -34
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Host, Input, Optional, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { isNullOrUndefined, isValueSet, stringIsSetAndFilled } from '../../util/values';
|
|
3
|
-
import { arrayIsSetAndFilled } from '../../util/arrays';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../../form/form-element/form-element.component";
|
|
6
|
-
import * as i2 from "@angular/forms";
|
|
7
|
-
/**
|
|
8
|
-
* This component is a base in order to create a component that supports ngModel.
|
|
9
|
-
* Some important things to know about it:
|
|
10
|
-
*
|
|
11
|
-
* innerValue = your own inner state, which you should use to store the current state of what ngModel should be.
|
|
12
|
-
* writeValue() = called by angular, when ngModel is changed from OUTSIDE of the component. Feel free to patch this method if you need inner logic to happen when ngModel is altered from the outside. Always remember to also call the super.writeValue if you do!
|
|
13
|
-
* setInnerValueAndNotify() = call this when you want your ngModel to be updated from INSIDE of your component, and provide it to the OUTSIDE.
|
|
14
|
-
* ngOnInit() = Used to support the angular reactive forms framework. If you use ngOnInit in your own component (which happens fairly often) you must not forget to call the super.ngOnInit() method.
|
|
15
|
-
*/
|
|
16
|
-
export class ValueAccessorBase {
|
|
17
|
-
constructor(parent, controlContainer) {
|
|
18
|
-
this.parent = parent;
|
|
19
|
-
this.controlContainer = controlContainer;
|
|
20
|
-
this.changed = new Array();
|
|
21
|
-
this.touched = new Array();
|
|
22
|
-
this.prevValue = null;
|
|
23
|
-
this.disabled = false;
|
|
24
|
-
// we support both providing just the formControlName and the full formControl
|
|
25
|
-
this.formControlName = null;
|
|
26
|
-
this.formControl = null;
|
|
27
|
-
this.inErrorState = false;
|
|
28
|
-
this.onTouch = new EventEmitter();
|
|
29
|
-
this.focus = () => {
|
|
30
|
-
if (isValueSet(this.nativeInputRef?.nativeElement)) {
|
|
31
|
-
this.nativeInputRef?.nativeElement?.focus();
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
throw new Error('the focus() method is not implemented in this element!');
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
this.setTailTpl = (tpl) => {
|
|
38
|
-
this.tailTpl = tpl;
|
|
39
|
-
};
|
|
40
|
-
this.getTailTpl = () => {
|
|
41
|
-
if (isValueSet(this.getTailTplFn)) {
|
|
42
|
-
return this.getTailTplFn();
|
|
43
|
-
}
|
|
44
|
-
return this.tailTpl;
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
ngOnInit() {
|
|
48
|
-
if (this.formControl) {
|
|
49
|
-
this.attachedFormControl = this.formControl;
|
|
50
|
-
}
|
|
51
|
-
else if (stringIsSetAndFilled(this.formControlName)) {
|
|
52
|
-
this.attachedFormControl = this.controlContainer?.control.get(this.formControlName);
|
|
53
|
-
if (isNullOrUndefined(this.attachedFormControl)) {
|
|
54
|
-
throw new Error(`Form element '${this.formControlName}' with caption '${this.parent?.caption}' is not declared in your FormGroup.`);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (this.attachedFormControl) {
|
|
58
|
-
this.disabled = this.attachedFormControl.disabled;
|
|
59
|
-
this.attachedFormControl.statusChanges.subscribe(() => {
|
|
60
|
-
this.disabled = this.attachedFormControl.disabled;
|
|
61
|
-
});
|
|
62
|
-
this.getImmutableValueFn = this.parent?.registerControl(this.attachedFormControl, this);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
getImmutableValue() {
|
|
66
|
-
return this.getImmutableValueFn?.();
|
|
67
|
-
}
|
|
68
|
-
isInErrorState() {
|
|
69
|
-
if (this.inErrorState) {
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
return this.attachedFormControl && this.attachedFormControl.status === 'INVALID' && this.attachedFormControl.touched;
|
|
73
|
-
}
|
|
74
|
-
ngOnDestroy() {
|
|
75
|
-
if (this.attachedFormControl) {
|
|
76
|
-
this.parent?.unregisterControl(this.attachedFormControl);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
touch() {
|
|
80
|
-
this.touched.forEach((f) => f());
|
|
81
|
-
this.onTouch.emit();
|
|
82
|
-
}
|
|
83
|
-
writeValue(value) {
|
|
84
|
-
this.prevValue = value;
|
|
85
|
-
this.innerValue = value;
|
|
86
|
-
}
|
|
87
|
-
registerOnChange(fn) {
|
|
88
|
-
this.changed.push(fn);
|
|
89
|
-
}
|
|
90
|
-
registerOnTouched(fn) {
|
|
91
|
-
this.touched.push(fn);
|
|
92
|
-
}
|
|
93
|
-
setInnerValueAndNotify(value) {
|
|
94
|
-
const actuallySetValue = (valueToSet) => {
|
|
95
|
-
this.prevValue = valueToSet;
|
|
96
|
-
this.innerValue = valueToSet;
|
|
97
|
-
this.changed.forEach((fn) => fn(valueToSet));
|
|
98
|
-
};
|
|
99
|
-
if (isValueSet(this.innerValueChangeInterceptor)) {
|
|
100
|
-
this.latestInnerValueChangedInterceptorPromise = this.innerValueChangeInterceptor(this.prevValue, value);
|
|
101
|
-
const myPromise = this.latestInnerValueChangedInterceptorPromise;
|
|
102
|
-
this.latestInnerValueChangedInterceptorPromise.then(() => {
|
|
103
|
-
if (this.latestInnerValueChangedInterceptorPromise === myPromise) {
|
|
104
|
-
actuallySetValue(value);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
// ignore outdated promises
|
|
108
|
-
}
|
|
109
|
-
}).catch(() => {
|
|
110
|
-
if (this.latestInnerValueChangedInterceptorPromise === myPromise) {
|
|
111
|
-
actuallySetValue(this.prevValue);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
// ignore outdated promises
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
actuallySetValue(value);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
resetToNull() {
|
|
123
|
-
this.setInnerValueAndNotify(null);
|
|
124
|
-
}
|
|
125
|
-
hasValidator(validatorName) {
|
|
126
|
-
const validators = Object.keys(this.attachedFormControl?.validator?.({}) ?? {});
|
|
127
|
-
if (arrayIsSetAndFilled(validators)) {
|
|
128
|
-
return validators.includes(validatorName);
|
|
129
|
-
}
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ValueAccessorBase, deps: [{ token: i1.FormElementComponent, host: true, optional: true }, { token: i2.ControlContainer, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
133
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: ValueAccessorBase, selector: "ng-component", inputs: { disabled: "disabled", innerValueChangeInterceptor: "innerValueChangeInterceptor", formControlName: "formControlName", formControl: "formControl", inErrorState: "inErrorState", getTailTplFn: "getTailTplFn" }, outputs: { onTouch: "onTouch" }, viewQueries: [{ propertyName: "nativeInputRef", first: true, predicate: ["nativeInputRef"], descendants: true }], ngImport: i0, template: '', isInline: true }); }
|
|
134
|
-
}
|
|
135
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ValueAccessorBase, decorators: [{
|
|
136
|
-
type: Component,
|
|
137
|
-
args: [{
|
|
138
|
-
selector: '',
|
|
139
|
-
template: '',
|
|
140
|
-
}]
|
|
141
|
-
}], ctorParameters: () => [{ type: i1.FormElementComponent, decorators: [{
|
|
142
|
-
type: Host
|
|
143
|
-
}, {
|
|
144
|
-
type: Optional
|
|
145
|
-
}] }, { type: i2.ControlContainer, decorators: [{
|
|
146
|
-
type: Host
|
|
147
|
-
}, {
|
|
148
|
-
type: Optional
|
|
149
|
-
}] }], propDecorators: { disabled: [{
|
|
150
|
-
type: Input
|
|
151
|
-
}], innerValueChangeInterceptor: [{
|
|
152
|
-
type: Input
|
|
153
|
-
}], formControlName: [{
|
|
154
|
-
type: Input
|
|
155
|
-
}], formControl: [{
|
|
156
|
-
type: Input
|
|
157
|
-
}], inErrorState: [{
|
|
158
|
-
type: Input
|
|
159
|
-
}], getTailTplFn: [{
|
|
160
|
-
type: Input
|
|
161
|
-
}], onTouch: [{
|
|
162
|
-
type: Output
|
|
163
|
-
}], nativeInputRef: [{
|
|
164
|
-
type: ViewChild,
|
|
165
|
-
args: ['nativeInputRef']
|
|
166
|
-
}] } });
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtYWNjZXNzb3ItYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9lbGVtZW50cy92YWx1ZS1hY2Nlc3Nvci1iYXNlL3ZhbHVlLWFjY2Vzc29yLWJhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTixTQUFTLEVBRVQsWUFBWSxFQUNaLElBQUksRUFDSixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3RGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDOzs7O0FBR3REOzs7Ozs7OztHQVFHO0FBTUgsTUFBTSxPQUFPLGlCQUFpQjtJQXNCN0IsWUFDK0IsTUFBNEIsRUFDNUIsZ0JBQWtDO1FBRGxDLFdBQU0sR0FBTixNQUFNLENBQXNCO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUF0QjFELFlBQU8sR0FBRyxJQUFJLEtBQUssRUFBc0IsQ0FBQztRQUN6QyxZQUFPLEdBQUcsSUFBSSxLQUFLLEVBQWMsQ0FBQztRQUNsQyxjQUFTLEdBQU0sSUFBSSxDQUFDO1FBRVosYUFBUSxHQUFHLEtBQUssQ0FBQztRQUlqQyw4RUFBOEU7UUFDOUQsb0JBQWUsR0FBVyxJQUFJLENBQUM7UUFDL0IsZ0JBQVcsR0FBdUIsSUFBSSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXBCLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBMEc3QyxVQUFLLEdBQUcsR0FBUyxFQUFFO1lBQ3pCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLEVB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dCI6WyJpbXBvcnQge0NvbnRyb2xDb250YWluZXIsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBVbnR5cGVkRm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0RWxlbWVudFJlZixcblx0RXZlbnRFbWl0dGVyLFxuXHRIb3N0LFxuXHRJbnB1dCxcblx0T25EZXN0cm95LFxuXHRPbkluaXQsXG5cdE9wdGlvbmFsLFxuXHRPdXRwdXQsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1FbGVtZW50Q29tcG9uZW50fSBmcm9tICcuLi8uLi9mb3JtL2Zvcm0tZWxlbWVudC9mb3JtLWVsZW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7aXNOdWxsT3JVbmRlZmluZWQsIGlzVmFsdWVTZXQsIHN0cmluZ0lzU2V0QW5kRmlsbGVkfSBmcm9tICcuLi8uLi91dGlsL3ZhbHVlcyc7XG5pbXBvcnQge2FycmF5SXNTZXRBbmRGaWxsZWR9IGZyb20gJy4uLy4uL3V0aWwvYXJyYXlzJztcbmltcG9ydCB7Y2xvbmVEZWVwfSBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IGlzIGEgYmFzZSBpbiBvcmRlciB0byBjcmVhdGUgYSBjb21wb25lbnQgdGhhdCBzdXBwb3J0cyBuZ01vZGVsLlxuICogU29tZSBpbXBvcnRhbnQgdGhpbmdzIHRvIGtub3cgYWJvdXQgaXQ6XG4gKlxuICogaW5uZXJWYWx1ZSA9IHlvdXIgb3duIGlubmVyIHN0YXRlLCB3aGljaCB5b3Ugc2hvdWxkIHVzZSB0byBzdG9yZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB3aGF0IG5nTW9kZWwgc2hvdWxkIGJlLlxuICogd3JpdGVWYWx1ZSgpID0gY2FsbGVkIGJ5IGFuZ3VsYXIsIHdoZW4gbmdNb2RlbCBpcyBjaGFuZ2VkIGZyb20gT1VUU0lERSBvZiB0aGUgY29tcG9uZW50LiBGZWVsIGZyZWUgdG8gcGF0Y2ggdGhpcyBtZXRob2QgaWYgeW91IG5lZWQgaW5uZXIgbG9naWMgdG8gaGFwcGVuIHdoZW4gbmdNb2RlbCBpcyBhbHRlcmVkIGZyb20gdGhlIG91dHNpZGUuIEFsd2F5cyByZW1lbWJlciB0byBhbHNvIGNhbGwgdGhlIHN1cGVyLndyaXRlVmFsdWUgaWYgeW91IGRvIVxuICogc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeSgpID0gY2FsbCB0aGlzIHdoZW4geW91IHdhbnQgeW91ciBuZ01vZGVsIHRvIGJlIHVwZGF0ZWQgZnJvbSBJTlNJREUgb2YgeW91ciBjb21wb25lbnQsIGFuZCBwcm92aWRlIGl0IHRvIHRoZSBPVVRTSURFLlxuICogbmdPbkluaXQoKSA9IFVzZWQgdG8gc3VwcG9ydCB0aGUgYW5ndWxhciByZWFjdGl2ZSBmb3JtcyBmcmFtZXdvcmsuIElmIHlvdSB1c2UgbmdPbkluaXQgaW4geW91ciBvd24gY29tcG9uZW50ICh3aGljaCBoYXBwZW5zIGZhaXJseSBvZnRlbikgeW91IG11c3Qgbm90IGZvcmdldCB0byBjYWxsIHRoZSBzdXBlci5uZ09uSW5pdCgpIG1ldGhvZC5cbiAqL1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICcnLFxuXHR0ZW1wbGF0ZTogJycsXG59KVxuZXhwb3J0IGNsYXNzIFZhbHVlQWNjZXNzb3JCYXNlPFQ+IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcblx0cHVibGljIGlubmVyVmFsdWU6IFQ7XG5cdHB1YmxpYyBjaGFuZ2VkID0gbmV3IEFycmF5PCh2YWx1ZTogVCkgPT4gdm9pZD4oKTtcblx0cHJpdmF0ZSB0b3VjaGVkID0gbmV3IEFycmF5PCgpID0+IHZvaWQ+KCk7XG5cdHByaXZhdGUgcHJldlZhbHVlOiBUID0gbnVsbDtcblxuXHRASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblx0Ly8gbmVlZGVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG5cdHByaXZhdGUgbGF0ZXN0SW5uZXJWYWx1ZUNoYW5nZWRJbnRlcmNlcHRvclByb21pc2U6IFByb21pc2U8dm9pZD47XG5cdEBJbnB1dCgpIGlubmVyVmFsdWVDaGFuZ2VJbnRlcmNlcHRvcjogKHByZXY6IFQsIGN1cjogVCkgPT4gUHJvbWlzZTx2b2lkPjtcblx0Ly8gd2Ugc3VwcG9ydCBib3RoIHByb3ZpZGluZyBqdXN0IHRoZSBmb3JtQ29udHJvbE5hbWUgYW5kIHRoZSBmdWxsIGZvcm1Db250cm9sXG5cdEBJbnB1dCgpIHB1YmxpYyBmb3JtQ29udHJvbE5hbWU6IHN0cmluZyA9IG51bGw7XG5cdEBJbnB1dCgpIHB1YmxpYyBmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sID0gbnVsbDtcblx0QElucHV0KCkgcHVibGljIGluRXJyb3JTdGF0ZSA9IGZhbHNlO1xuXHRASW5wdXQoKSBnZXRUYWlsVHBsRm46ICgpID0+IFRlbXBsYXRlUmVmPGFueT47XG5cdEBPdXRwdXQoKSBwdWJsaWMgb25Ub3VjaCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblx0QFZpZXdDaGlsZCgnbmF0aXZlSW5wdXRSZWYnKSBuYXRpdmVJbnB1dFJlZjogRWxlbWVudFJlZjtcblxuXHRwcml2YXRlIGF0dGFjaGVkRm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcblx0cHJpdmF0ZSB0YWlsVHBsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRwcml2YXRlIGdldEltbXV0YWJsZVZhbHVlRm46ICgpID0+IFQ7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0QEhvc3QoKSBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgcGFyZW50OiBGb3JtRWxlbWVudENvbXBvbmVudCxcblx0XHRASG9zdCgpIEBPcHRpb25hbCgpIHByb3RlY3RlZCBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyXG5cdCkge1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZm9ybUNvbnRyb2wpIHtcblx0XHRcdHRoaXMuYXR0YWNoZWRGb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2w7XG5cdFx0fSBlbHNlIGlmIChzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLmZvcm1Db250cm9sTmFtZSkpIHtcblx0XHRcdHRoaXMuYXR0YWNoZWRGb3JtQ29udHJvbCA9IHRoaXMuY29udHJvbENvbnRhaW5lcj8uY29udHJvbC5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcblx0XHRcdGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLmF0dGFjaGVkRm9ybUNvbnRyb2wpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgRm9ybSBlbGVtZW50ICcke3RoaXMuZm9ybUNvbnRyb2xOYW1lfScgd2l0aCBjYXB0aW9uICcke3RoaXMucGFyZW50Py5jYXB0aW9ufScgaXMgbm90IGRlY2xhcmVkIGluIHlvdXIgRm9ybUdyb3VwLmApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodGhpcy5hdHRhY2hlZEZvcm1Db250cm9sKSB7XG5cdFx0XHR0aGlzLmRpc2FibGVkID0gdGhpcy5hdHRhY2hlZEZvcm1Db250cm9sLmRpc2FibGVkO1xuXHRcdFx0dGhpcy5hdHRhY2hlZEZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0dGhpcy5kaXNhYmxlZCA9IHRoaXMuYXR0YWNoZWRGb3JtQ29udHJvbC5kaXNhYmxlZDtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5nZXRJbW11dGFibGVWYWx1ZUZuID0gdGhpcy5wYXJlbnQ/LnJlZ2lzdGVyQ29udHJvbCh0aGlzLmF0dGFjaGVkRm9ybUNvbnRyb2wsIHRoaXMpO1xuXHRcdH1cblx0fVxuXG5cdHByb3RlY3RlZCBnZXRJbW11dGFibGVWYWx1ZSgpOiBUIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRJbW11dGFibGVWYWx1ZUZuPy4oKTtcblx0fVxuXG5cblx0aXNJbkVycm9yU3RhdGUoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuaW5FcnJvclN0YXRlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuYXR0YWNoZWRGb3JtQ29udHJvbCAmJiB0aGlzLmF0dGFjaGVkRm9ybUNvbnRyb2wuc3RhdHVzID09PSAnSU5WQUxJRCcgJiYgdGhpcy5hdHRhY2hlZEZvcm1Db250cm9sLnRvdWNoZWQ7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5hdHRhY2hlZEZvcm1Db250cm9sKSB7XG5cdFx0XHR0aGlzLnBhcmVudD8udW5yZWdpc3RlckNvbnRyb2wodGhpcy5hdHRhY2hlZEZvcm1Db250cm9sKTtcblx0XHR9XG5cdH1cblxuXHR0b3VjaCgpOiB2b2lkIHtcblx0XHR0aGlzLnRvdWNoZWQuZm9yRWFjaCgoZikgPT4gZigpKTtcblx0XHR0aGlzLm9uVG91Y2guZW1pdCgpO1xuXHR9XG5cblx0d3JpdGVWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xuXHRcdHRoaXMucHJldlZhbHVlID0gdmFsdWU7XG5cdFx0dGhpcy5pbm5lclZhbHVlID0gdmFsdWU7XG5cdH1cblxuXHRyZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IFQpID0+IHZvaWQpOiB2b2lkIHtcblx0XHR0aGlzLmNoYW5nZWQucHVzaChmbik7XG5cdH1cblxuXHRyZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdHRoaXMudG91Y2hlZC5wdXNoKGZuKTtcblx0fVxuXG5cdHNldElubmVyVmFsdWVBbmROb3RpZnkodmFsdWU6IFQpOiB2b2lkIHtcblx0XHRjb25zdCBhY3R1YWxseVNldFZhbHVlID0gKHZhbHVlVG9TZXQ6IFQpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMucHJldlZhbHVlID0gdmFsdWVUb1NldDtcblx0XHRcdHRoaXMuaW5uZXJWYWx1ZSA9IHZhbHVlVG9TZXQ7XG5cdFx0XHR0aGlzLmNoYW5nZWQuZm9yRWFjaCgoZm4pID0+IGZuKHZhbHVlVG9TZXQpKTtcblx0XHR9O1xuXHRcdGlmIChpc1ZhbHVlU2V0KHRoaXMuaW5uZXJWYWx1ZUNoYW5nZUludGVyY2VwdG9yKSkge1xuXHRcdFx0dGhpcy5sYXRlc3RJbm5lclZhbHVlQ2hhbmdlZEludGVyY2VwdG9yUHJvbWlzZSA9IHRoaXMuaW5uZXJWYWx1ZUNoYW5nZUludGVyY2VwdG9yKHRoaXMucHJldlZhbHVlLCB2YWx1ZSk7XG5cdFx0XHRjb25zdCBteVByb21pc2UgPSB0aGlzLmxhdGVzdElubmVyVmFsdWVDaGFuZ2VkSW50ZXJjZXB0b3JQcm9taXNlO1xuXHRcdFx0dGhpcy5sYXRlc3RJbm5lclZhbHVlQ2hhbmdlZEludGVyY2VwdG9yUHJvbWlzZS50aGVuKCgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMubGF0ZXN0SW5uZXJWYWx1ZUNoYW5nZWRJbnRlcmNlcHRvclByb21pc2UgPT09IG15UHJvbWlzZSkge1xuXHRcdFx0XHRcdGFjdHVhbGx5U2V0VmFsdWUodmFsdWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlnbm9yZSBvdXRkYXRlZCBwcm9taXNlc1xuXHRcdFx0XHR9XG5cdFx0XHR9KS5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmxhdGVzdElubmVyVmFsdWVDaGFuZ2VkSW50ZXJjZXB0b3JQcm9taXNlID09PSBteVByb21pc2UpIHtcblx0XHRcdFx0XHRhY3R1YWxseVNldFZhbHVlKHRoaXMucHJldlZhbHVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBpZ25vcmUgb3V0ZGF0ZWQgcHJvbWlzZXNcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFjdHVhbGx5U2V0VmFsdWUodmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdHJlc2V0VG9OdWxsKCk6IHZvaWQge1xuXHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeShudWxsKTtcblx0fVxuXG5cdGhhc1ZhbGlkYXRvcih2YWxpZGF0b3JOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCB2YWxpZGF0b3JzID0gT2JqZWN0LmtleXModGhpcy5hdHRhY2hlZEZvcm1Db250cm9sPy52YWxpZGF0b3I/Lih7fSBhcyBhbnkpID8/IHt9KTtcblx0XHRpZiAoYXJyYXlJc1NldEFuZEZpbGxlZCh2YWxpZGF0b3JzKSkge1xuXHRcdFx0cmV0dXJuIHZhbGlkYXRvcnMuaW5jbHVkZXModmFsaWRhdG9yTmFtZSk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyBmb2N1cyA9ICgpOiB2b2lkID0+IHtcblx0XHRpZiAoaXNWYWx1ZVNldCh0aGlzLm5hdGl2ZUlucHV0UmVmPy5uYXRpdmVFbGVtZW50KSl7XG5cdFx0XHR0aGlzLm5hdGl2ZUlucHV0UmVmPy5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuXHRcdH1lbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcigndGhlIGZvY3VzKCkgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGVsZW1lbnQhJyk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFRhaWxUcGwgPSAodHBsOiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCA9PiB7XG5cdFx0dGhpcy50YWlsVHBsID0gdHBsO1xuXHR9XG5cdHB1YmxpYyBnZXRUYWlsVHBsID0gKCk6IFRlbXBsYXRlUmVmPGFueT4gPT4ge1xuXHRcdGlmIChpc1ZhbHVlU2V0KHRoaXMuZ2V0VGFpbFRwbEZuKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0VGFpbFRwbEZuKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnRhaWxUcGw7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { Component, Host, Optional, ViewChild } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "../form-element/form-element.component";
|
|
4
|
-
export class FormCaptionComponent {
|
|
5
|
-
constructor(parent) {
|
|
6
|
-
this.parent = parent;
|
|
7
|
-
}
|
|
8
|
-
ngOnInit() {
|
|
9
|
-
// this is being run next cycle, because we dont want to fail if the order of components is as follows:
|
|
10
|
-
// <app-form-error />
|
|
11
|
-
// <some-input />
|
|
12
|
-
// That would fail, because the logic of the form error is run first, and at that moment, the `some-input` isnt registered yet
|
|
13
|
-
setTimeout(() => {
|
|
14
|
-
this.parent.registerCaption(this.contentRef);
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FormCaptionComponent, deps: [{ token: i1.FormElementComponent, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: FormCaptionComponent, selector: "klp-form-caption", viewQueries: [{ propertyName: "contentRef", first: true, predicate: ["contentRef"], descendants: true }], ngImport: i0, template: "<ng-template #contentRef>\n\t<ng-content></ng-content>\n</ng-template>\n", styles: [":host{display:block}\n"] }); }
|
|
19
|
-
}
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FormCaptionComponent, decorators: [{
|
|
21
|
-
type: Component,
|
|
22
|
-
args: [{ selector: 'klp-form-caption', template: "<ng-template #contentRef>\n\t<ng-content></ng-content>\n</ng-template>\n", styles: [":host{display:block}\n"] }]
|
|
23
|
-
}], ctorParameters: () => [{ type: i1.FormElementComponent, decorators: [{
|
|
24
|
-
type: Host
|
|
25
|
-
}, {
|
|
26
|
-
type: Optional
|
|
27
|
-
}] }], propDecorators: { contentRef: [{
|
|
28
|
-
type: ViewChild,
|
|
29
|
-
args: ['contentRef']
|
|
30
|
-
}] } });
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jYXB0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tsaXBwYS9uZ3gtZW5oYW5jeS1mb3Jtcy9zcmMvbGliL2Zvcm0vZm9ybS1jYXB0aW9uL2Zvcm0tY2FwdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9mb3JtL2Zvcm0tY2FwdGlvbi9mb3JtLWNhcHRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYyxJQUFJLEVBQVUsUUFBUSxFQUFlLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7O0FBU3BHLE1BQU0sT0FBTyxvQkFBb0I7SUFHaEMsWUFBd0MsTUFBNEI7UUFBNUIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7SUFBRyxDQUFDO0lBRXhFLFFBQVE7UUFDUCx1R0FBdUc7UUFDdkcscUJBQXFCO1FBQ3JCLGlCQUFpQjtRQUNqQiw4SEFBOEg7UUFDOUgsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBYlcsb0JBQW9CO2tHQUFwQixvQkFBb0Isa0tDVGpDLDBFQUdBOzsyRkRNYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Msa0JBQWtCOzswQkFPZixJQUFJOzswQkFBSSxRQUFRO3lDQUZHLFVBQVU7c0JBQXpDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0LCBPbkluaXQsIE9wdGlvbmFsLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUVsZW1lbnRDb21wb25lbnR9IGZyb20gXCIuLi9mb3JtLWVsZW1lbnQvZm9ybS1lbGVtZW50LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtpc051bGxPclVuZGVmaW5lZH0gZnJvbSBcIi4uLy4uL3V0aWwvdmFsdWVzXCI7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2tscC1mb3JtLWNhcHRpb24nLFxuXHR0ZW1wbGF0ZVVybDogJy4vZm9ybS1jYXB0aW9uLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vZm9ybS1jYXB0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1DYXB0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblx0QFZpZXdDaGlsZCgnY29udGVudFJlZicpIHB1YmxpYyBjb250ZW50UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cdGNvbnN0cnVjdG9yKEBIb3N0KCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBwYXJlbnQ6IEZvcm1FbGVtZW50Q29tcG9uZW50KSB7fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdC8vIHRoaXMgaXMgYmVpbmcgcnVuIG5leHQgY3ljbGUsIGJlY2F1c2Ugd2UgZG9udCB3YW50IHRvIGZhaWwgaWYgdGhlIG9yZGVyIG9mIGNvbXBvbmVudHMgaXMgYXMgZm9sbG93czpcblx0XHQvLyA8YXBwLWZvcm0tZXJyb3IgLz5cblx0XHQvLyA8c29tZS1pbnB1dCAvPlxuXHRcdC8vIFRoYXQgd291bGQgZmFpbCwgYmVjYXVzZSB0aGUgbG9naWMgb2YgdGhlIGZvcm0gZXJyb3IgaXMgcnVuIGZpcnN0LCBhbmQgYXQgdGhhdCBtb21lbnQsIHRoZSBgc29tZS1pbnB1dGAgaXNudCByZWdpc3RlcmVkIHlldFxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5wYXJlbnQucmVnaXN0ZXJDYXB0aW9uKHRoaXMuY29udGVudFJlZik7XG5cdFx0fSk7XG5cdH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjY29udGVudFJlZj5cblx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { Component, Host, Optional, ViewChild } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "../form-element/form-element.component";
|
|
4
|
-
export class FormCaptionEndComponent {
|
|
5
|
-
constructor(parent) {
|
|
6
|
-
this.parent = parent;
|
|
7
|
-
}
|
|
8
|
-
ngOnInit() {
|
|
9
|
-
// this is being run next cycle, because we dont want to fail if the order of components is as follows:
|
|
10
|
-
// <app-form-error />
|
|
11
|
-
// <some-input />
|
|
12
|
-
// That would fail, because the logic of the form error is run first, and at that moment, the `some-input` isnt registered yet
|
|
13
|
-
setTimeout(() => {
|
|
14
|
-
this.parent.registerCaptionEnd(this.contentRef);
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
ngOnDestroy() {
|
|
18
|
-
this.parent.registerCaptionEnd(null);
|
|
19
|
-
}
|
|
20
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FormCaptionEndComponent, deps: [{ token: i1.FormElementComponent, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
21
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: FormCaptionEndComponent, selector: "klp-form-caption-end", viewQueries: [{ propertyName: "contentRef", first: true, predicate: ["contentRef"], descendants: true }], ngImport: i0, template: "<ng-template #contentRef>\n\t<ng-content></ng-content>\n</ng-template>\n", styles: [":host{display:block}\n"] }); }
|
|
22
|
-
}
|
|
23
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FormCaptionEndComponent, decorators: [{
|
|
24
|
-
type: Component,
|
|
25
|
-
args: [{ selector: 'klp-form-caption-end', template: "<ng-template #contentRef>\n\t<ng-content></ng-content>\n</ng-template>\n", styles: [":host{display:block}\n"] }]
|
|
26
|
-
}], ctorParameters: () => [{ type: i1.FormElementComponent, decorators: [{
|
|
27
|
-
type: Host
|
|
28
|
-
}, {
|
|
29
|
-
type: Optional
|
|
30
|
-
}] }], propDecorators: { contentRef: [{
|
|
31
|
-
type: ViewChild,
|
|
32
|
-
args: ['contentRef']
|
|
33
|
-
}] } });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jYXB0aW9uLWVuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9mb3JtL2Zvcm0tY2FwdGlvbi1lbmQvZm9ybS1jYXB0aW9uLWVuZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9mb3JtL2Zvcm0tY2FwdGlvbi1lbmQvZm9ybS1jYXB0aW9uLWVuZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLElBQUksRUFBcUIsUUFBUSxFQUFlLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7O0FBUS9HLE1BQU0sT0FBTyx1QkFBdUI7SUFHbkMsWUFBd0MsTUFBNEI7UUFBNUIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7SUFBRyxDQUFDO0lBRXhFLFFBQVE7UUFDUCx1R0FBdUc7UUFDdkcscUJBQXFCO1FBQ3JCLGlCQUFpQjtRQUNqQiw4SEFBOEg7UUFDOUgsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7OEdBakJXLHVCQUF1QjtrR0FBdkIsdUJBQXVCLHNLQ1JwQywwRUFHQTs7MkZES2EsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNDLHNCQUFzQjs7MEJBT25CLElBQUk7OzBCQUFJLFFBQVE7eUNBRkcsVUFBVTtzQkFBekMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3QsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1FbGVtZW50Q29tcG9uZW50fSBmcm9tIFwiLi4vZm9ybS1lbGVtZW50L2Zvcm0tZWxlbWVudC5jb21wb25lbnRcIjtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAna2xwLWZvcm0tY2FwdGlvbi1lbmQnLFxuXHR0ZW1wbGF0ZVVybDogJy4vZm9ybS1jYXB0aW9uLWVuZC5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL2Zvcm0tY2FwdGlvbi1lbmQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNhcHRpb25FbmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cdEBWaWV3Q2hpbGQoJ2NvbnRlbnRSZWYnKSBwdWJsaWMgY29udGVudFJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuXHRjb25zdHJ1Y3RvcihASG9zdCgpIEBPcHRpb25hbCgpIHByaXZhdGUgcGFyZW50OiBGb3JtRWxlbWVudENvbXBvbmVudCkge31cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHQvLyB0aGlzIGlzIGJlaW5nIHJ1biBuZXh0IGN5Y2xlLCBiZWNhdXNlIHdlIGRvbnQgd2FudCB0byBmYWlsIGlmIHRoZSBvcmRlciBvZiBjb21wb25lbnRzIGlzIGFzIGZvbGxvd3M6XG5cdFx0Ly8gPGFwcC1mb3JtLWVycm9yIC8+XG5cdFx0Ly8gPHNvbWUtaW5wdXQgLz5cblx0XHQvLyBUaGF0IHdvdWxkIGZhaWwsIGJlY2F1c2UgdGhlIGxvZ2ljIG9mIHRoZSBmb3JtIGVycm9yIGlzIHJ1biBmaXJzdCwgYW5kIGF0IHRoYXQgbW9tZW50LCB0aGUgYHNvbWUtaW5wdXRgIGlzbnQgcmVnaXN0ZXJlZCB5ZXRcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMucGFyZW50LnJlZ2lzdGVyQ2FwdGlvbkVuZCh0aGlzLmNvbnRlbnRSZWYpO1xuXHRcdH0pO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJlbnQucmVnaXN0ZXJDYXB0aW9uRW5kKG51bGwpO1xuXHR9XG59XG4iLCI8bmctdGVtcGxhdGUgI2NvbnRlbnRSZWY+XG5cdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|