@seniorsistemas/angular-components 17.16.13 → 17.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/seniorsistemas-angular-components.umd.js +366 -9
- package/bundles/seniorsistemas-angular-components.umd.js.map +1 -1
- package/bundles/seniorsistemas-angular-components.umd.min.js +2 -2
- package/bundles/seniorsistemas-angular-components.umd.min.js.map +1 -1
- package/components/chips/chip-item/chip-item.component.d.ts +22 -0
- package/components/chips/chips/chips.component.d.ts +55 -0
- package/components/chips/chips.module.d.ts +2 -0
- package/components/chips/index.d.ts +3 -0
- package/components/chips/models/chip-models.d.ts +7 -0
- package/components/dynamic-form/components/dynamic-field/dynamic-field.component.d.ts +2 -0
- package/components/dynamic-form/components/field-label/field-label.component.d.ts +2 -3
- package/components/dynamic-form/components/grid/row/row.component.d.ts +2 -0
- package/components/index.d.ts +1 -0
- package/components/shared/helpers.d.ts +18 -0
- package/components/shared/index.d.ts +1 -0
- package/esm2015/components/chips/chip-item/chip-item.component.js +68 -0
- package/esm2015/components/chips/chips/chips.component.js +228 -0
- package/esm2015/components/chips/chips.module.js +24 -0
- package/esm2015/components/chips/index.js +3 -0
- package/esm2015/components/chips/models/chip-models.js +1 -0
- package/esm2015/components/dynamic-form/components/dynamic-field/dynamic-field.component.js +6 -2
- package/esm2015/components/dynamic-form/components/field-label/field-label.component.js +2 -8
- package/esm2015/components/dynamic-form/components/grid/row/row.component.js +11 -2
- package/esm2015/components/dynamic-form/configurations/fields/field.js +3 -3
- package/esm2015/components/dynamic-form/index.js +1 -1
- package/esm2015/components/index.js +2 -1
- package/esm2015/components/shared/helpers.js +30 -0
- package/esm2015/components/shared/index.js +2 -1
- package/esm2015/seniorsistemas-angular-components.js +2 -1
- package/esm5/components/chips/chip-item/chip-item.component.js +77 -0
- package/esm5/components/chips/chips/chips.component.js +235 -0
- package/esm5/components/chips/chips.module.js +27 -0
- package/esm5/components/chips/index.js +3 -0
- package/esm5/components/chips/models/chip-models.js +1 -0
- package/esm5/components/dynamic-form/components/dynamic-field/dynamic-field.component.js +4 -2
- package/esm5/components/dynamic-form/components/field-label/field-label.component.js +2 -6
- package/esm5/components/dynamic-form/components/grid/row/row.component.js +4 -2
- package/esm5/components/dynamic-form/configurations/fields/field.js +3 -3
- package/esm5/components/dynamic-form/index.js +1 -1
- package/esm5/components/index.js +2 -1
- package/esm5/components/shared/helpers.js +35 -0
- package/esm5/components/shared/index.js +2 -1
- package/esm5/seniorsistemas-angular-components.js +2 -1
- package/fesm2015/seniorsistemas-angular-components.js +350 -14
- package/fesm2015/seniorsistemas-angular-components.js.map +1 -1
- package/fesm5/seniorsistemas-angular-components.js +365 -12
- package/fesm5/seniorsistemas-angular-components.js.map +1 -1
- package/package.json +1 -1
- package/seniorsistemas-angular-components.d.ts +1 -0
- package/seniorsistemas-angular-components.metadata.json +1 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { EventEmitter, TemplateRef } from '@angular/core';
|
|
2
|
+
export declare class ChipItemComponent {
|
|
3
|
+
dataRender: string | Object;
|
|
4
|
+
objectField: string;
|
|
5
|
+
disabled: boolean;
|
|
6
|
+
templateRef: TemplateRef<any>;
|
|
7
|
+
itemIndex: number;
|
|
8
|
+
showTooltip: boolean;
|
|
9
|
+
maxLengthRenderWithoutTooltip: number;
|
|
10
|
+
clickRemove: EventEmitter<{
|
|
11
|
+
index: number;
|
|
12
|
+
event: Event;
|
|
13
|
+
}>;
|
|
14
|
+
chipClicked: EventEmitter<{
|
|
15
|
+
event: Event;
|
|
16
|
+
data: string | Object;
|
|
17
|
+
}>;
|
|
18
|
+
clickedRemove($event: Event): void;
|
|
19
|
+
onChipClicked($event: Event): void;
|
|
20
|
+
get _text(): string;
|
|
21
|
+
get _rawText(): any;
|
|
22
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { AfterViewInit, ChangeDetectorRef, EventEmitter, TemplateRef } from '@angular/core';
|
|
2
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
export declare class ChipsComponent implements AfterViewInit, ControlValueAccessor {
|
|
4
|
+
private cdr;
|
|
5
|
+
private static _id;
|
|
6
|
+
newItem: string;
|
|
7
|
+
chipTemplate: TemplateRef<any>;
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
field: string;
|
|
10
|
+
value: any[];
|
|
11
|
+
placeholder: string;
|
|
12
|
+
max: number;
|
|
13
|
+
maxLength: number;
|
|
14
|
+
inputId: string;
|
|
15
|
+
allowDuplicated: boolean;
|
|
16
|
+
caseSensitiveDuplication: boolean;
|
|
17
|
+
addOnTab: boolean;
|
|
18
|
+
addOnBlur: boolean;
|
|
19
|
+
separator: string;
|
|
20
|
+
autofocus: boolean;
|
|
21
|
+
infoLabel: string;
|
|
22
|
+
keyFilter: string | RegExp;
|
|
23
|
+
showTooltip: boolean;
|
|
24
|
+
maxLengthRenderWithoutTooltip: number;
|
|
25
|
+
onAdd: EventEmitter<Pick<import("../models/chip-models").ChipEvent, "value">>;
|
|
26
|
+
onRemove: EventEmitter<import("../models/chip-models").ChipEvent>;
|
|
27
|
+
onFocus: EventEmitter<FocusEvent>;
|
|
28
|
+
onBlur: EventEmitter<FocusEvent>;
|
|
29
|
+
onChipClick: EventEmitter<import("../models/chip-models").ChipEvent>;
|
|
30
|
+
valueChange: EventEmitter<any[] | string[]>;
|
|
31
|
+
private templates;
|
|
32
|
+
private input;
|
|
33
|
+
private isTabEventActive;
|
|
34
|
+
onChange: (value: string[] | any[]) => void;
|
|
35
|
+
onTouched: (value: string[] | any[]) => void;
|
|
36
|
+
constructor(cdr: ChangeDetectorRef);
|
|
37
|
+
ngAfterViewInit(): void;
|
|
38
|
+
writeValue(obj: string[] | any[]): void;
|
|
39
|
+
registerOnChange(fn: (value: string[] | any[]) => void): void;
|
|
40
|
+
registerOnTouched(fn: () => void): void;
|
|
41
|
+
setDisabledState(isDisabled: boolean): void;
|
|
42
|
+
onKeydown($event: KeyboardEvent): void;
|
|
43
|
+
onInputFocus($event: FocusEvent): void;
|
|
44
|
+
onInputLostFocus($event: FocusEvent): void;
|
|
45
|
+
removeItem({ itemIndex, event }: {
|
|
46
|
+
itemIndex: number;
|
|
47
|
+
event: Event;
|
|
48
|
+
}): void;
|
|
49
|
+
chipClicked({ event, data }: {
|
|
50
|
+
event: Event;
|
|
51
|
+
data: string | Object;
|
|
52
|
+
}): void;
|
|
53
|
+
private addItem;
|
|
54
|
+
private storeValue;
|
|
55
|
+
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { FormGroup } from "@angular/forms";
|
|
2
2
|
import { FormField } from "../../configurations/form-field";
|
|
3
|
+
import { FieldType } from "../../configurations/field-type";
|
|
3
4
|
export declare class DynamicFieldComponent {
|
|
4
5
|
id: string;
|
|
5
6
|
fields: FormField[];
|
|
6
7
|
form: FormGroup;
|
|
7
8
|
errorMessages?: any;
|
|
9
|
+
FieldType: typeof FieldType;
|
|
8
10
|
getErrorMessages(errorMessages: any): any;
|
|
9
11
|
isFunction(value: any): boolean;
|
|
10
12
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Field } from "../../configurations/fields/field";
|
|
2
2
|
export declare class FieldLabelComponent {
|
|
3
|
-
field:
|
|
4
|
-
displayTimeInfoSign: number;
|
|
3
|
+
field: Field;
|
|
5
4
|
fieldContainerRef: HTMLElement;
|
|
6
5
|
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { OnInit } from "@angular/core";
|
|
2
2
|
import { FormGroup } from "@angular/forms";
|
|
3
3
|
import { Row } from "../../../configurations/grid/row";
|
|
4
|
+
import { FieldType } from "../../../configurations/field-type";
|
|
4
5
|
export declare class RowComponent implements OnInit {
|
|
5
6
|
id: string;
|
|
6
7
|
config: Row;
|
|
7
8
|
group: FormGroup;
|
|
8
9
|
errorMessages: any;
|
|
10
|
+
FieldType: typeof FieldType;
|
|
9
11
|
constructor();
|
|
10
12
|
ngOnInit(): void;
|
|
11
13
|
getErrorMessages(errorMessages: any): any;
|
package/components/index.d.ts
CHANGED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A decorator that can be used to disable functions based on a boolean property on the component.
|
|
3
|
+
*
|
|
4
|
+
* @param disabledField The name of the boolean property that will be used to determine if the decorated
|
|
5
|
+
* function should be disabled. Defaults to 'disabled'.
|
|
6
|
+
* @returns A decorator function that can be used to decorate a function.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* class MyComponent {
|
|
10
|
+
* disabled = true;
|
|
11
|
+
*
|
|
12
|
+
* @CheckDisabled()
|
|
13
|
+
* onClick() {
|
|
14
|
+
* console.log('Button was clicked');
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
*/
|
|
18
|
+
export declare function CheckDisabled(disabledField?: string): (_target: any, _propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
+
import { CheckDisabled } from '../../shared/helpers';
|
|
4
|
+
let ChipItemComponent = class ChipItemComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.disabled = false;
|
|
7
|
+
this.itemIndex = -1;
|
|
8
|
+
this.showTooltip = true;
|
|
9
|
+
this.maxLengthRenderWithoutTooltip = 20;
|
|
10
|
+
this.clickRemove = new EventEmitter();
|
|
11
|
+
this.chipClicked = new EventEmitter();
|
|
12
|
+
}
|
|
13
|
+
clickedRemove($event) {
|
|
14
|
+
this.clickRemove.emit({ index: this.itemIndex, event: $event });
|
|
15
|
+
}
|
|
16
|
+
onChipClicked($event) {
|
|
17
|
+
this.chipClicked.emit({ event: $event, data: this.dataRender });
|
|
18
|
+
}
|
|
19
|
+
get _text() {
|
|
20
|
+
const _text = this._rawText;
|
|
21
|
+
return _text.substring(0, _text.length > this.maxLengthRenderWithoutTooltip ? this.maxLengthRenderWithoutTooltip : _text.length) + (_text.length > this.maxLengthRenderWithoutTooltip ? '...' : '');
|
|
22
|
+
}
|
|
23
|
+
get _rawText() {
|
|
24
|
+
return this.objectField ? this.dataRender[this.objectField] || '' : this.dataRender || '';
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
__decorate([
|
|
28
|
+
Input()
|
|
29
|
+
], ChipItemComponent.prototype, "dataRender", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
Input()
|
|
32
|
+
], ChipItemComponent.prototype, "objectField", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
Input()
|
|
35
|
+
], ChipItemComponent.prototype, "disabled", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
Input()
|
|
38
|
+
], ChipItemComponent.prototype, "templateRef", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
Input()
|
|
41
|
+
], ChipItemComponent.prototype, "itemIndex", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
Input()
|
|
44
|
+
], ChipItemComponent.prototype, "showTooltip", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
Input()
|
|
47
|
+
], ChipItemComponent.prototype, "maxLengthRenderWithoutTooltip", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
Output()
|
|
50
|
+
], ChipItemComponent.prototype, "clickRemove", void 0);
|
|
51
|
+
__decorate([
|
|
52
|
+
Output()
|
|
53
|
+
], ChipItemComponent.prototype, "chipClicked", void 0);
|
|
54
|
+
__decorate([
|
|
55
|
+
CheckDisabled()
|
|
56
|
+
], ChipItemComponent.prototype, "clickedRemove", null);
|
|
57
|
+
__decorate([
|
|
58
|
+
CheckDisabled()
|
|
59
|
+
], ChipItemComponent.prototype, "onChipClicked", null);
|
|
60
|
+
ChipItemComponent = __decorate([
|
|
61
|
+
Component({
|
|
62
|
+
selector: 's-chip-item',
|
|
63
|
+
template: "<ng-template #itemRender>\n <div\n class=\"chip-item\"\n [class.chip-item-disabled]=\"disabled\"\n (click)=\"onChipClicked($event)\"\n [sTooltip]=\"_rawText\"\n [showDelay]=\"0\"\n [visible]=\"showTooltip ? _rawText.length > maxLengthRenderWithoutTooltip : false\">\n <ng-container *ngIf=\"templateRef\">\n <ng-container *ngTemplateOutlet=\"templateRef; context: { $implicit: dataRender, text: _text }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!templateRef\">\n {{ _text }}\n </ng-container>\n <i class=\"fas fa-times\" (click)=\"clickedRemove($event)\"></i>\n </div>\n</ng-template>\n\n\n<ng-container *ngIf=\"objectField && !templateRef\">\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"!objectField && !templateRef\">\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"templateRef\">\n <ng-container *ngTemplateOutlet=\"itemRender\"></ng-container>\n</ng-container>\n",
|
|
64
|
+
styles: [".chip-item{border-radius:4px;border:1px solid #888b99;background-color:#eeebf2;word-break:break-word;font-size:12px;font-weight:400;text-align:center;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;gap:8px;padding:0 8px}.chip-item i{cursor:pointer}.chip-item:hover:not(.chip-item-disabled){background:#c1c1cc}.chip-item-disabled{opacity:.5}.chip-item-disabled i{cursor:default}"]
|
|
65
|
+
})
|
|
66
|
+
], ChipItemComponent);
|
|
67
|
+
export { ChipItemComponent };
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2NoaXBzL2NoaXAtaXRlbS9jaGlwLWl0ZW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU1yRCxJQUFhLGlCQUFpQixHQUE5QixNQUFhLGlCQUFpQjtJQUE5QjtRQUdXLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsY0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2YsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsa0NBQTZCLEdBQUcsRUFBRSxDQUFDO1FBRWxDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW1DLENBQUM7UUFDbEUsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBMkMsQ0FBQztJQW1CdEYsQ0FBQztJQWhCQyxhQUFhLENBQUMsTUFBYTtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBYTtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzVCLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdE0sQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFVBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7SUFDckcsQ0FBQztDQUNGLENBQUE7QUE1QlU7SUFBUixLQUFLLEVBQUU7cURBQTZCO0FBQzVCO0lBQVIsS0FBSyxFQUFFO3NEQUFxQjtBQUNwQjtJQUFSLEtBQUssRUFBRTttREFBa0I7QUFDakI7SUFBUixLQUFLLEVBQUU7c0RBQThCO0FBQzdCO0lBQVIsS0FBSyxFQUFFO29EQUFnQjtBQUNmO0lBQVIsS0FBSyxFQUFFO3NEQUFvQjtBQUNuQjtJQUFSLEtBQUssRUFBRTt3RUFBb0M7QUFFbEM7SUFBVCxNQUFNLEVBQUU7c0RBQW1FO0FBQ2xFO0lBQVQsTUFBTSxFQUFFO3NEQUEyRTtBQUdwRjtJQURDLGFBQWEsRUFBRTtzREFHZjtBQUVEO0lBREMsYUFBYSxFQUFFO3NEQUdmO0FBbkJVLGlCQUFpQjtJQUw3QixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsYUFBYTtRQUN2Qix3b0NBQXlDOztLQUUxQyxDQUFDO0dBQ1csaUJBQWlCLENBNkI3QjtTQTdCWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoZWNrRGlzYWJsZWQgfSBmcm9tICcuLi8uLi9zaGFyZWQvaGVscGVycyc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzLWNoaXAtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGlwLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGlwLWl0ZW0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDaGlwSXRlbUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGRhdGFSZW5kZXI6IHN0cmluZyB8IE9iamVjdDtcbiAgQElucHV0KCkgb2JqZWN0RmllbGQ6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT5cbiAgQElucHV0KCkgaXRlbUluZGV4ID0gLTE7XG4gIEBJbnB1dCgpIHNob3dUb29sdGlwID0gdHJ1ZTtcbiAgQElucHV0KCkgbWF4TGVuZ3RoUmVuZGVyV2l0aG91dFRvb2x0aXAgPSAyMDtcblxuICBAT3V0cHV0KCkgY2xpY2tSZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaW5kZXg6IG51bWJlciwgZXZlbnQ6IEV2ZW50IH0+KCk7XG4gIEBPdXRwdXQoKSBjaGlwQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQsIGRhdGE6IHN0cmluZyB8IE9iamVjdCB9PigpO1xuXG4gIEBDaGVja0Rpc2FibGVkKClcbiAgY2xpY2tlZFJlbW92ZSgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5jbGlja1JlbW92ZS5lbWl0KHsgaW5kZXg6IHRoaXMuaXRlbUluZGV4LCBldmVudDogJGV2ZW50IH0pO1xuICB9XG4gIEBDaGVja0Rpc2FibGVkKClcbiAgb25DaGlwQ2xpY2tlZCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5jaGlwQ2xpY2tlZC5lbWl0KHsgZXZlbnQ6ICRldmVudCwgZGF0YTogdGhpcy5kYXRhUmVuZGVyIH0pO1xuICB9XG5cbiAgZ2V0IF90ZXh0KCkge1xuICAgIGNvbnN0IF90ZXh0ID0gdGhpcy5fcmF3VGV4dDtcbiAgICByZXR1cm4gX3RleHQuc3Vic3RyaW5nKDAsIF90ZXh0Lmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoUmVuZGVyV2l0aG91dFRvb2x0aXAgPyB0aGlzLm1heExlbmd0aFJlbmRlcldpdGhvdXRUb29sdGlwIDogX3RleHQubGVuZ3RoKSArIChfdGV4dC5sZW5ndGggPiB0aGlzLm1heExlbmd0aFJlbmRlcldpdGhvdXRUb29sdGlwID8gJy4uLicgOiAnJyk7XG4gIH1cblxuICBnZXQgX3Jhd1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0RmllbGQgPyAodGhpcy5kYXRhUmVuZGVyIGFzIGFueSlbdGhpcy5vYmplY3RGaWVsZF0gfHwgJycgOiB0aGlzLmRhdGFSZW5kZXIgfHwgJyc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
var ChipsComponent_1;
|
|
2
|
+
import { __decorate } from "tslib";
|
|
3
|
+
import { AfterViewInit, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, forwardRef, HostListener, Input, Output, QueryList, TemplateRef, ViewChild } from '@angular/core';
|
|
4
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
5
|
+
import { CheckDisabled } from '../../shared/helpers';
|
|
6
|
+
import { TemplateDirective } from './../../template/template.directive';
|
|
7
|
+
let ChipsComponent = ChipsComponent_1 = class ChipsComponent {
|
|
8
|
+
constructor(cdr) {
|
|
9
|
+
this.cdr = cdr;
|
|
10
|
+
this.newItem = '';
|
|
11
|
+
this.value = [];
|
|
12
|
+
this.placeholder = '';
|
|
13
|
+
this.inputId = `chips-${ChipsComponent_1._id++}`;
|
|
14
|
+
this.allowDuplicated = true;
|
|
15
|
+
this.caseSensitiveDuplication = false;
|
|
16
|
+
this.addOnTab = true;
|
|
17
|
+
this.addOnBlur = true;
|
|
18
|
+
this.autofocus = false;
|
|
19
|
+
this.infoLabel = '';
|
|
20
|
+
this.showTooltip = true;
|
|
21
|
+
this.maxLengthRenderWithoutTooltip = 20;
|
|
22
|
+
this.onAdd = new EventEmitter();
|
|
23
|
+
this.onRemove = new EventEmitter();
|
|
24
|
+
this.onFocus = new EventEmitter();
|
|
25
|
+
this.onBlur = new EventEmitter();
|
|
26
|
+
this.onChipClick = new EventEmitter();
|
|
27
|
+
this.valueChange = new EventEmitter();
|
|
28
|
+
this.isTabEventActive = false;
|
|
29
|
+
this.onChange = () => { };
|
|
30
|
+
this.onTouched = () => { };
|
|
31
|
+
}
|
|
32
|
+
ngAfterViewInit() {
|
|
33
|
+
var _a;
|
|
34
|
+
if (this.autofocus && this.input) {
|
|
35
|
+
this.input.nativeElement.focus();
|
|
36
|
+
}
|
|
37
|
+
this.chipTemplate = (_a = this.templates.find((x) => x.type === 'chip-container')) === null || _a === void 0 ? void 0 : _a.template;
|
|
38
|
+
this.cdr.detectChanges();
|
|
39
|
+
}
|
|
40
|
+
writeValue(obj) {
|
|
41
|
+
this.value = obj;
|
|
42
|
+
}
|
|
43
|
+
registerOnChange(fn) {
|
|
44
|
+
this.onChange = fn;
|
|
45
|
+
}
|
|
46
|
+
registerOnTouched(fn) {
|
|
47
|
+
this.onTouched = fn;
|
|
48
|
+
}
|
|
49
|
+
setDisabledState(isDisabled) {
|
|
50
|
+
this.disabled = isDisabled;
|
|
51
|
+
}
|
|
52
|
+
onKeydown($event) {
|
|
53
|
+
const isEnter = $event.key === 'Enter';
|
|
54
|
+
const isSeparator = this.separator && $event.key === this.separator;
|
|
55
|
+
const eventKeyIsTab = $event.key === 'Tab';
|
|
56
|
+
if (eventKeyIsTab) {
|
|
57
|
+
this.isTabEventActive = true;
|
|
58
|
+
setTimeout(() => {
|
|
59
|
+
this.isTabEventActive = false;
|
|
60
|
+
}, 50);
|
|
61
|
+
}
|
|
62
|
+
const isTab = this.addOnTab && eventKeyIsTab;
|
|
63
|
+
if (isEnter || isSeparator || isTab) {
|
|
64
|
+
$event.preventDefault();
|
|
65
|
+
this.addItem();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
onInputFocus($event) {
|
|
69
|
+
this.onFocus.emit($event);
|
|
70
|
+
}
|
|
71
|
+
onInputLostFocus($event) {
|
|
72
|
+
if (!this.addOnBlur || this.isTabEventActive) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
this.addItem();
|
|
76
|
+
this.onBlur.emit($event);
|
|
77
|
+
}
|
|
78
|
+
removeItem({ itemIndex, event }) {
|
|
79
|
+
const _removedItem = this.value[itemIndex];
|
|
80
|
+
this.value.splice(itemIndex, 1);
|
|
81
|
+
this.onRemove.emit({ value: _removedItem, originalEvent: event });
|
|
82
|
+
}
|
|
83
|
+
chipClicked({ event, data }) {
|
|
84
|
+
this.onChipClick.emit({ value: data, originalEvent: event });
|
|
85
|
+
}
|
|
86
|
+
addItem() {
|
|
87
|
+
const hasValue = !!this.newItem;
|
|
88
|
+
if (!hasValue) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (this.max && this.value.length === this.max) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const validItemLength = this.maxLength ? this.newItem.length <= this.maxLength : true;
|
|
95
|
+
if (!validItemLength) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const hasField = !!this.field;
|
|
99
|
+
const _mappedValues = this.field ? this.value.map((x) => x[this.field]) : this.value;
|
|
100
|
+
const valueToAdd = hasField ? { [this.field]: this.newItem } : this.newItem;
|
|
101
|
+
const duplicatedItem = _mappedValues.find((x) => {
|
|
102
|
+
if (this.caseSensitiveDuplication) {
|
|
103
|
+
return x === this.newItem;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
return x.toLowerCase() === this.newItem.toLowerCase();
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
let hasDuplicatedItem = false;
|
|
110
|
+
if (!this.allowDuplicated) {
|
|
111
|
+
hasDuplicatedItem = duplicatedItem ? Boolean(duplicatedItem) : false;
|
|
112
|
+
}
|
|
113
|
+
if (!hasDuplicatedItem) {
|
|
114
|
+
this.storeValue(valueToAdd);
|
|
115
|
+
}
|
|
116
|
+
this.newItem = '';
|
|
117
|
+
}
|
|
118
|
+
storeValue(value) {
|
|
119
|
+
this.value = [...this.value, value];
|
|
120
|
+
this.onAdd.emit({ value });
|
|
121
|
+
this.valueChange.emit(this.value);
|
|
122
|
+
this.writeValue(this.value);
|
|
123
|
+
this.onChange(this.value);
|
|
124
|
+
this.onTouched(this.value);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
ChipsComponent._id = 0;
|
|
128
|
+
ChipsComponent.ctorParameters = () => [
|
|
129
|
+
{ type: ChangeDetectorRef }
|
|
130
|
+
];
|
|
131
|
+
__decorate([
|
|
132
|
+
Input()
|
|
133
|
+
], ChipsComponent.prototype, "disabled", void 0);
|
|
134
|
+
__decorate([
|
|
135
|
+
Input()
|
|
136
|
+
], ChipsComponent.prototype, "field", void 0);
|
|
137
|
+
__decorate([
|
|
138
|
+
Input()
|
|
139
|
+
], ChipsComponent.prototype, "value", void 0);
|
|
140
|
+
__decorate([
|
|
141
|
+
Input()
|
|
142
|
+
], ChipsComponent.prototype, "placeholder", void 0);
|
|
143
|
+
__decorate([
|
|
144
|
+
Input()
|
|
145
|
+
], ChipsComponent.prototype, "max", void 0);
|
|
146
|
+
__decorate([
|
|
147
|
+
Input()
|
|
148
|
+
], ChipsComponent.prototype, "maxLength", void 0);
|
|
149
|
+
__decorate([
|
|
150
|
+
Input()
|
|
151
|
+
], ChipsComponent.prototype, "inputId", void 0);
|
|
152
|
+
__decorate([
|
|
153
|
+
Input()
|
|
154
|
+
], ChipsComponent.prototype, "allowDuplicated", void 0);
|
|
155
|
+
__decorate([
|
|
156
|
+
Input()
|
|
157
|
+
], ChipsComponent.prototype, "caseSensitiveDuplication", void 0);
|
|
158
|
+
__decorate([
|
|
159
|
+
Input()
|
|
160
|
+
], ChipsComponent.prototype, "addOnTab", void 0);
|
|
161
|
+
__decorate([
|
|
162
|
+
Input()
|
|
163
|
+
], ChipsComponent.prototype, "addOnBlur", void 0);
|
|
164
|
+
__decorate([
|
|
165
|
+
Input()
|
|
166
|
+
], ChipsComponent.prototype, "separator", void 0);
|
|
167
|
+
__decorate([
|
|
168
|
+
Input()
|
|
169
|
+
], ChipsComponent.prototype, "autofocus", void 0);
|
|
170
|
+
__decorate([
|
|
171
|
+
Input()
|
|
172
|
+
], ChipsComponent.prototype, "infoLabel", void 0);
|
|
173
|
+
__decorate([
|
|
174
|
+
Input()
|
|
175
|
+
], ChipsComponent.prototype, "keyFilter", void 0);
|
|
176
|
+
__decorate([
|
|
177
|
+
Input()
|
|
178
|
+
], ChipsComponent.prototype, "showTooltip", void 0);
|
|
179
|
+
__decorate([
|
|
180
|
+
Input()
|
|
181
|
+
], ChipsComponent.prototype, "maxLengthRenderWithoutTooltip", void 0);
|
|
182
|
+
__decorate([
|
|
183
|
+
Output()
|
|
184
|
+
], ChipsComponent.prototype, "onAdd", void 0);
|
|
185
|
+
__decorate([
|
|
186
|
+
Output()
|
|
187
|
+
], ChipsComponent.prototype, "onRemove", void 0);
|
|
188
|
+
__decorate([
|
|
189
|
+
Output()
|
|
190
|
+
], ChipsComponent.prototype, "onFocus", void 0);
|
|
191
|
+
__decorate([
|
|
192
|
+
Output()
|
|
193
|
+
], ChipsComponent.prototype, "onBlur", void 0);
|
|
194
|
+
__decorate([
|
|
195
|
+
Output()
|
|
196
|
+
], ChipsComponent.prototype, "onChipClick", void 0);
|
|
197
|
+
__decorate([
|
|
198
|
+
Output()
|
|
199
|
+
], ChipsComponent.prototype, "valueChange", void 0);
|
|
200
|
+
__decorate([
|
|
201
|
+
ContentChildren(TemplateDirective)
|
|
202
|
+
], ChipsComponent.prototype, "templates", void 0);
|
|
203
|
+
__decorate([
|
|
204
|
+
ViewChild('input', { read: ElementRef })
|
|
205
|
+
], ChipsComponent.prototype, "input", void 0);
|
|
206
|
+
__decorate([
|
|
207
|
+
HostListener("document:keydown", ["$event"]),
|
|
208
|
+
CheckDisabled()
|
|
209
|
+
], ChipsComponent.prototype, "onKeydown", null);
|
|
210
|
+
__decorate([
|
|
211
|
+
CheckDisabled()
|
|
212
|
+
], ChipsComponent.prototype, "onInputLostFocus", null);
|
|
213
|
+
ChipsComponent = ChipsComponent_1 = __decorate([
|
|
214
|
+
Component({
|
|
215
|
+
selector: 's-chips',
|
|
216
|
+
template: "<ul class=\"chips-container\">\n <li *ngFor=\"let item of value; let index = index\">\n <s-chip-item\n [templateRef]=\"chipTemplate\"\n [dataRender]=\"item\"\n [objectField]=\"field\"\n [itemIndex]=\"index\"\n [disabled]=\"disabled\"\n [showTooltip]=\"showTooltip\"\n [maxLengthRenderWithoutTooltip]=\"maxLengthRenderWithoutTooltip\"\n (clickRemove)=\"removeItem($event)\"\n (chipClicked)=\"chipClicked($event)\">\n </s-chip-item>\n </li>\n <ng-container *ngIf=\"keyFilter\">\n <input\n #input\n [disabled]=\"disabled || max === value?.length\"\n [placeholder]=\"placeholder\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n [pKeyFilter]=\"keyFilter\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\">\n </ng-container>\n <ng-container *ngIf=\"!keyFilter\">\n <input\n #input\n [disabled]=\"disabled || max === value?.length\"\n [placeholder]=\"placeholder\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\">\n </ng-container>\n</ul>\n<ng-container *ngIf=\"infoLabel\">\n <span class=\"info-label\">\n {{ infoLabel }}\n </span>\n</ng-container>\n",
|
|
217
|
+
providers: [
|
|
218
|
+
{
|
|
219
|
+
provide: NG_VALUE_ACCESSOR,
|
|
220
|
+
useExisting: forwardRef(() => ChipsComponent_1),
|
|
221
|
+
multi: true
|
|
222
|
+
}
|
|
223
|
+
],
|
|
224
|
+
styles: [".chips-container{width:100%;padding:8px;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;border-radius:3px;border:1px solid #c1c1cc;background-color:#fff;list-style:none;gap:8px}.chips-container input{background-color:#fff;width:100%;border:none;min-height:2em;min-width:15%;-ms-flex:1;flex:1}.chips-container input:focus-visible{outline:0}.info-label{color:#888b99;font-size:12px;font-style:normal;font-weight:400}"]
|
|
225
|
+
})
|
|
226
|
+
], ChipsComponent);
|
|
227
|
+
export { ChipsComponent };
|
|
228
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvY2hpcHMvY2hpcHMvY2hpcHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25NLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFjeEUsSUFBYSxjQUFjLHNCQUEzQixNQUFhLGNBQWM7SUFvQ3pCLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBbEMxQyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBS0osVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUNsQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUdqQixZQUFPLEdBQUcsU0FBUyxnQkFBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsNkJBQXdCLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFDaEIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUVqQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFFZixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixrQ0FBNkIsR0FBRyxFQUFFLENBQUM7UUFF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QUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDOzZDQUF3QztBQWlDakY7SUFGQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxhQUFhLEVBQUU7K0NBZ0JmO0FBT0Q7SUFEQyxhQUFhLEVBQUU7c0RBT2Y7QUE3RlUsY0FBYztJQVoxQixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsU0FBUztRQUNuQiwrK0NBQXFDO1FBRXJDLFNBQVMsRUFBRTtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWMsQ0FBQztnQkFDN0MsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGOztLQUNGLENBQUM7R0FDVyxjQUFjLENBa0oxQjtTQWxKWSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDaGVja0Rpc2FibGVkIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2hlbHBlcnMnO1xuaW1wb3J0IHsgQ2hpcEFkZEV2ZW50LCBDaGlwQ2xpY2tFdmVudCwgQ2hpcFJlbW92ZUV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL2NoaXAtbW9kZWxzJztcbmltcG9ydCB7IFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi8uLi8uLi90ZW1wbGF0ZS90ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzLWNoaXBzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoaXBzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hpcHMuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGlwc0NvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDaGlwc0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2lkID0gMDtcbiAgbmV3SXRlbSA9ICcnO1xuICBjaGlwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGZpZWxkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHZhbHVlOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xuICBASW5wdXQoKSBtYXg6IG51bWJlcjtcbiAgQElucHV0KCkgbWF4TGVuZ3RoOiBudW1iZXI7XG4gIEBJbnB1dCgpIGlucHV0SWQgPSBgY2hpcHMtJHtDaGlwc0NvbXBvbmVudC5faWQrK31gO1xuICBASW5wdXQoKSBhbGxvd0R1cGxpY2F0ZWQgPSB0cnVlO1xuICBASW5wdXQoKSBjYXNlU2Vuc2l0aXZlRHVwbGljYXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgYWRkT25UYWIgPSB0cnVlO1xuICBASW5wdXQoKSBhZGRPbkJsdXIgPSB0cnVlO1xuICBASW5wdXQoKSBzZXBhcmF0b3I6IHN0cmluZztcbiAgQElucHV0KCkgYXV0b2ZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGluZm9MYWJlbCA9ICcnO1xuICBASW5wdXQoKSBrZXlGaWx0ZXI6IHN0cmluZyB8IFJlZ0V4cDtcbiAgQElucHV0KCkgc2hvd1Rvb2x0aXAgPSB0cnVlO1xuICBASW5wdXQoKSBtYXhMZW5ndGhSZW5kZXJXaXRob3V0VG9vbHRpcCA9IDIwO1xuXG4gIEBPdXRwdXQoKSBvbkFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hpcEFkZEV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPENoaXBSZW1vdmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbkNoaXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hpcENsaWNrRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10gfCBhbnlbXT4oKTtcblxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlRGlyZWN0aXZlKSBwcml2YXRlIHRlbXBsYXRlczogUXVlcnlMaXN0PFRlbXBsYXRlRGlyZWN0aXZlPjtcblxuICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIGlucHV0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgcHJpdmF0ZSBpc1RhYkV2ZW50QWN0aXZlID0gZmFsc2U7XG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZ1tdIHwgYW55W10pID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gIG9uVG91Y2hlZDogKHZhbHVlOiBzdHJpbmdbXSB8IGFueVtdKSA9PiB2b2lkID0gKCkgPT4geyB9O1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMgJiYgdGhpcy5pbnB1dCkge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMuY2hpcFRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXMuZmluZCgoeCkgPT4geC50eXBlID09PSAnY2hpcC1jb250YWluZXInKT8udGVtcGxhdGU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICB3cml0ZVZhbHVlKG9iajogc3RyaW5nW10gfCBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBvYmo7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZ1tdIHwgYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDprZXlkb3duXCIsIFtcIiRldmVudFwiXSlcbiAgQENoZWNrRGlzYWJsZWQoKVxuICBvbktleWRvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgaXNFbnRlciA9ICRldmVudC5rZXkgPT09ICdFbnRlcic7XG4gICAgY29uc3QgaXNTZXBhcmF0b3IgPSB0aGlzLnNlcGFyYXRvciAmJiAkZXZlbnQua2V5ID09PSB0aGlzLnNlcGFyYXRvcjtcbiAgICBjb25zdCBldmVudEtleUlzVGFiID0gJGV2ZW50LmtleSA9PT0gJ1RhYic7XG4gICAgaWYgKGV2ZW50S2V5SXNUYWIpIHtcbiAgICAgIHRoaXMuaXNUYWJFdmVudEFjdGl2ZSA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc1RhYkV2ZW50QWN0aXZlID0gZmFsc2U7XG4gICAgICB9LCA1MCk7XG4gICAgfVxuICAgIGNvbnN0IGlzVGFiID0gdGhpcy5hZGRPblRhYiAmJiBldmVudEtleUlzVGFiO1xuICAgIGlmIChpc0VudGVyIHx8IGlzU2VwYXJhdG9yIHx8IGlzVGFiKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuYWRkSXRlbSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXRGb2N1cygkZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICB0aGlzLm9uRm9jdXMuZW1pdCgkZXZlbnQpO1xuICB9XG5cbiAgQENoZWNrRGlzYWJsZWQoKVxuICBvbklucHV0TG9zdEZvY3VzKCRldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghdGhpcy5hZGRPbkJsdXIgfHwgdGhpcy5pc1RhYkV2ZW50QWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWRkSXRlbSgpO1xuICAgIHRoaXMub25CbHVyLmVtaXQoJGV2ZW50KTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW0oeyBpdGVtSW5kZXgsIGV2ZW50IH06IHsgaXRlbUluZGV4OiBudW1iZXIsIGV2ZW50OiBFdmVudCB9KSB7XG4gICAgY29uc3QgX3JlbW92ZWRJdGVtID0gdGhpcy52YWx1ZVtpdGVtSW5kZXhdO1xuICAgIHRoaXMudmFsdWUuc3BsaWNlKGl0ZW1JbmRleCwgMSlcbiAgICB0aGlzLm9uUmVtb3ZlLmVtaXQoeyB2YWx1ZTogX3JlbW92ZWRJdGVtLCBvcmlnaW5hbEV2ZW50OiBldmVudCB9KTtcbiAgfVxuXG4gIGNoaXBDbGlja2VkKHsgZXZlbnQsIGRhdGEgfTogeyBldmVudDogRXZlbnQsIGRhdGE6IHN0cmluZyB8IE9iamVjdCB9KSB7XG4gICAgdGhpcy5vbkNoaXBDbGljay5lbWl0KHsgdmFsdWU6IGRhdGEsIG9yaWdpbmFsRXZlbnQ6IGV2ZW50IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRJdGVtKCkge1xuICAgIGNvbnN0IGhhc1ZhbHVlID0gISF0aGlzLm5ld0l0ZW07XG4gICAgaWYgKCFoYXNWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXggJiYgdGhpcy52YWx1ZS5sZW5ndGggPT09IHRoaXMubWF4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRJdGVtTGVuZ3RoID0gdGhpcy5tYXhMZW5ndGggPyB0aGlzLm5ld0l0ZW0ubGVuZ3RoIDw9IHRoaXMubWF4TGVuZ3RoIDogdHJ1ZTtcbiAgICBpZiAoIXZhbGlkSXRlbUxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoYXNGaWVsZCA9ICEhdGhpcy5maWVsZDtcbiAgICBjb25zdCBfbWFwcGVkVmFsdWVzOiBzdHJpbmdbXSA9IHRoaXMuZmllbGQgPyB0aGlzLnZhbHVlLm1hcCgoeCkgPT4geFt0aGlzLmZpZWxkXSkgOiB0aGlzLnZhbHVlO1xuICAgIGNvbnN0IHZhbHVlVG9BZGQgPSBoYXNGaWVsZCA/IHsgW3RoaXMuZmllbGRdOiB0aGlzLm5ld0l0ZW0gfSA6IHRoaXMubmV3SXRlbTtcbiAgICBjb25zdCBkdXBsaWNhdGVkSXRlbSA9IF9tYXBwZWRWYWx1ZXMuZmluZCgoeCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2FzZVNlbnNpdGl2ZUR1cGxpY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB4ID09PSB0aGlzLm5ld0l0ZW07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geC50b0xvd2VyQ2FzZSgpID09PSB0aGlzLm5ld0l0ZW0udG9Mb3dlckNhc2UoKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIGxldCBoYXNEdXBsaWNhdGVkSXRlbSA9IGZhbHNlXG4gICAgaWYgKCF0aGlzLmFsbG93RHVwbGljYXRlZCkge1xuICAgICAgaGFzRHVwbGljYXRlZEl0ZW0gPSBkdXBsaWNhdGVkSXRlbSA/IEJvb2xlYW4oZHVwbGljYXRlZEl0ZW0pIDogZmFsc2U7XG4gICAgfVxuICAgIGlmICghaGFzRHVwbGljYXRlZEl0ZW0pIHtcbiAgICAgIHRoaXMuc3RvcmVWYWx1ZSh2YWx1ZVRvQWRkKTtcbiAgICB9XG4gICAgdGhpcy5uZXdJdGVtID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgdmFsdWVdO1xuICAgIHRoaXMub25BZGQuZW1pdCh7IHZhbHVlIH0pO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLndyaXRlVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLm9uVG91Y2hlZCh0aGlzLnZhbHVlKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { ChipsComponent } from './chips/chips.component';
|
|
5
|
+
import { ChipItemComponent } from './chip-item/chip-item.component';
|
|
6
|
+
import { FormsModule } from '@angular/forms';
|
|
7
|
+
import { KeyFilterModule } from 'primeng/keyfilter';
|
|
8
|
+
import { TooltipModule } from '../tooltip/tooltip.module';
|
|
9
|
+
let ChipsModule = class ChipsModule {
|
|
10
|
+
};
|
|
11
|
+
ChipsModule = __decorate([
|
|
12
|
+
NgModule({
|
|
13
|
+
declarations: [ChipsComponent, ChipItemComponent],
|
|
14
|
+
imports: [
|
|
15
|
+
CommonModule,
|
|
16
|
+
FormsModule,
|
|
17
|
+
TooltipModule,
|
|
18
|
+
KeyFilterModule
|
|
19
|
+
],
|
|
20
|
+
exports: [ChipsComponent]
|
|
21
|
+
})
|
|
22
|
+
], ChipsModule);
|
|
23
|
+
export { ChipsModule };
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvY2hpcHMvY2hpcHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFjMUQsSUFBYSxXQUFXLEdBQXhCLE1BQWEsV0FBVztDQUFJLENBQUE7QUFBZixXQUFXO0lBVnZCLFFBQVEsQ0FBQztRQUNSLFlBQVksRUFBRSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQztRQUNqRCxPQUFPLEVBQUU7WUFDUCxZQUFZO1lBQ1osV0FBVztZQUNYLGFBQWE7WUFDYixlQUFlO1NBQ2hCO1FBQ0QsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO0tBQzFCLENBQUM7R0FDVyxXQUFXLENBQUk7U0FBZixXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGlwc0NvbXBvbmVudCB9IGZyb20gJy4vY2hpcHMvY2hpcHMuY29tcG9uZW50JztcbmltcG9ydCB7IENoaXBJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jaGlwLWl0ZW0vY2hpcC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEtleUZpbHRlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcva2V5ZmlsdGVyJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICcuLi90b29sdGlwL3Rvb2x0aXAubW9kdWxlJztcblxuXG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0NoaXBzQ29tcG9uZW50LCBDaGlwSXRlbUNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBLZXlGaWx0ZXJNb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW0NoaXBzQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBDaGlwc01vZHVsZSB7IH1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from "./chips.module";
|
|
2
|
+
export * from "./chips/chips.component";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9jaGlwcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFBO0FBQzlCLGNBQWMseUJBQXlCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jaGlwcy5tb2R1bGVcIlxuZXhwb3J0ICogZnJvbSBcIi4vY2hpcHMvY2hpcHMuY29tcG9uZW50XCJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL2NoaXAtbW9kZWxzJ1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1tb2RlbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9jaGlwcy9tb2RlbHMvY2hpcC1tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIENoaXBFdmVudCA9IHtcbiAgICBvcmlnaW5hbEV2ZW50OiBFdmVudCxcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCB0eXBlIENoaXBBZGRFdmVudCA9IE9taXQ8Q2hpcEV2ZW50LCAnb3JpZ2luYWxFdmVudCc+O1xuZXhwb3J0IHR5cGUgQ2hpcFJlbW92ZUV2ZW50ID0gQ2hpcEV2ZW50O1xuZXhwb3J0IHR5cGUgQ2hpcENsaWNrRXZlbnQgPSBDaGlwRXZlbnQ7XG4iXX0=
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { Component, Input } from "@angular/core";
|
|
3
|
+
import { FieldType } from "../../configurations/field-type";
|
|
3
4
|
let DynamicFieldComponent = class DynamicFieldComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.FieldType = FieldType;
|
|
7
|
+
}
|
|
4
8
|
getErrorMessages(errorMessages) {
|
|
5
9
|
if (errorMessages)
|
|
6
10
|
return this.isFunction(errorMessages)
|
|
@@ -26,8 +30,8 @@ __decorate([
|
|
|
26
30
|
DynamicFieldComponent = __decorate([
|
|
27
31
|
Component({
|
|
28
32
|
selector: "s-dynamic-field",
|
|
29
|
-
template: "<div class=\"ui-fluid\" [formGroup]=\"form\">\n <div class=\"ui-g\">\n <ng-container *ngFor=\"let field of fields\">\n <div\n *ngIf=\"!field.visible || field.visible()\"\n [ngClass]=\"field.gridClass\">\n\n <ng-container\n *sDynamicForm=\"{\n id: id,\n config: field,\n group: form\n }\"\n ></ng-container>\n\n <s-control-errors\n [form]=\"form\"\n [control]=\"form.controls[field.name]\"\n [errorMessages]=\"getErrorMessages(field.errorMessages)\"\n ></s-control-errors>\n\n <ng-container *ngIf=\"field.footer\">\n <ng-container *ngIf=\"field.footer.help\">\n <span\n *ngIf=\"\n field.footer.help.visible({\n abstractControl: form.controls[field.name],\n formField: field\n })\n \"\n style=\"color: #888b99\"\n >\n {{ field.footer.help.text }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"field.footer.link\">\n <div\n *ngIf=\"\n field.footer.link.visible({\n abstractControl: form.controls[field.name],\n formField: field\n })\n \"\n class=\"ui-g\"\n style=\"margin-left: -10px\"\n >\n <s-button\n [label]=\"field.footer.link.label\"\n priority=\"link\"\n (onClick)=\"\n field.footer.link.onClick({\n abstractControl:\n form.controls[field.name],\n formField: field\n })\n \"\n [auxiliary]=\"true\"\n ></s-button>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-template\n *ngIf=\"field?.bottomTemplate\"\n [ngTemplateOutlet]=\"field.bottomTemplate\"\n ></ng-template>\n </div>\n </ng-container>\n </div>\n</div>\n"
|
|
33
|
+
template: "<div class=\"ui-fluid\" [formGroup]=\"form\">\n <div class=\"ui-g\">\n <ng-container *ngFor=\"let field of fields\">\n <div\n *ngIf=\"!field.visible || field.visible()\"\n [ngClass]=\"field.gridClass\">\n\n <ng-container *ngIf=\"field.label && field.type === FieldType.Custom\">\n <label\n *sInfoSign=\"\n field.infoSign;\n displayTime: field.displayTimeInfoSign\n \"\n [for]=\"field.name\"\n [ngClass]=\"{ required: field.required() }\"\n >\n {{ field.label }}\n </label>\n </ng-container>\n\n <ng-container\n *sDynamicForm=\"{\n id: id,\n config: field,\n group: form\n }\"\n ></ng-container>\n\n <s-control-errors\n [form]=\"form\"\n [control]=\"form.controls[field.name]\"\n [errorMessages]=\"getErrorMessages(field.errorMessages)\"\n ></s-control-errors>\n\n <ng-container *ngIf=\"field.footer\">\n <ng-container *ngIf=\"field.footer.help\">\n <span\n *ngIf=\"\n field.footer.help.visible({\n abstractControl: form.controls[field.name],\n formField: field\n })\n \"\n style=\"color: #888b99\"\n >\n {{ field.footer.help.text }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"field.footer.link\">\n <div\n *ngIf=\"\n field.footer.link.visible({\n abstractControl: form.controls[field.name],\n formField: field\n })\n \"\n class=\"ui-g\"\n style=\"margin-left: -10px\"\n >\n <s-button\n [label]=\"field.footer.link.label\"\n priority=\"link\"\n (onClick)=\"\n field.footer.link.onClick({\n abstractControl:\n form.controls[field.name],\n formField: field\n })\n \"\n [auxiliary]=\"true\"\n ></s-button>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-template\n *ngIf=\"field?.bottomTemplate\"\n [ngTemplateOutlet]=\"field.bottomTemplate\"\n ></ng-template>\n </div>\n </ng-container>\n </div>\n</div>\n"
|
|
30
34
|
})
|
|
31
35
|
], DynamicFieldComponent);
|
|
32
36
|
export { DynamicFieldComponent };
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZpZWxkL2R5bmFtaWMtZmllbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFNNUQsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUFBbEM7UUFhSSxjQUFTLEdBQUcsU0FBUyxDQUFDO0lBYTFCLENBQUM7SUFYVSxnQkFBZ0IsQ0FBQyxhQUFrQjtRQUN0QyxJQUFJLGFBQWE7WUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO2dCQUNqQyxDQUFDLGlDQUFNLElBQUksQ0FBQyxhQUFhLEdBQUssYUFBYSxFQUFFLEVBQzdDLENBQUMsaUNBQU0sSUFBSSxDQUFDLGFBQWEsR0FBSyxhQUFhLENBQUUsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFVO1FBQ3hCLE9BQU8sS0FBSyxZQUFZLFFBQVEsQ0FBQztJQUNyQyxDQUFDO0NBQ0osQ0FBQTtBQXhCRztJQURDLEtBQUssRUFBRTtpREFDVTtBQUdsQjtJQURDLEtBQUssRUFBRTtxREFDbUI7QUFHM0I7SUFEQyxLQUFLLEVBQUU7bURBQ2U7QUFHdkI7SUFEQyxLQUFLLEVBQUU7NERBQ21CO0FBWGxCLHFCQUFxQjtJQUpqQyxTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLGs1R0FBNkM7S0FDaEQsQ0FBQztHQUNXLHFCQUFxQixDQTBCakM7U0ExQlkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEZvcm1GaWVsZCB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy9mb3JtLWZpZWxkXCI7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMvZmllbGQtdHlwZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJzLWR5bmFtaWMtZmllbGRcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2R5bmFtaWMtZmllbGQuY29tcG9uZW50Lmh0bWxcIixcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0ZpZWxkQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZmllbGRzOiBGb3JtRmllbGRbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVycm9yTWVzc2FnZXM/OiBhbnk7XG5cbiAgICBGaWVsZFR5cGUgPSBGaWVsZFR5cGU7XG5cbiAgICBwdWJsaWMgZ2V0RXJyb3JNZXNzYWdlcyhlcnJvck1lc3NhZ2VzOiBhbnkpIHtcbiAgICAgICAgaWYgKGVycm9yTWVzc2FnZXMpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0Z1bmN0aW9uKGVycm9yTWVzc2FnZXMpXG4gICAgICAgICAgICAgICAgPyB7IC4uLnRoaXMuZXJyb3JNZXNzYWdlcywgLi4uZXJyb3JNZXNzYWdlcygpIH1cbiAgICAgICAgICAgICAgICA6IHsgLi4udGhpcy5lcnJvck1lc3NhZ2VzLCAuLi5lcnJvck1lc3NhZ2VzIH07XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yTWVzc2FnZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbjtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,24 +1,18 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { Component, Input } from "@angular/core";
|
|
3
3
|
let FieldLabelComponent = class FieldLabelComponent {
|
|
4
|
-
constructor() {
|
|
5
|
-
this.displayTimeInfoSign = 5000;
|
|
6
|
-
}
|
|
7
4
|
};
|
|
8
5
|
__decorate([
|
|
9
6
|
Input()
|
|
10
7
|
], FieldLabelComponent.prototype, "field", void 0);
|
|
11
|
-
__decorate([
|
|
12
|
-
Input()
|
|
13
|
-
], FieldLabelComponent.prototype, "displayTimeInfoSign", void 0);
|
|
14
8
|
__decorate([
|
|
15
9
|
Input()
|
|
16
10
|
], FieldLabelComponent.prototype, "fieldContainerRef", void 0);
|
|
17
11
|
FieldLabelComponent = __decorate([
|
|
18
12
|
Component({
|
|
19
13
|
selector: 's-field-label',
|
|
20
|
-
template: "<span *ngIf=\"field.label\">\n <label\n *sInfoSign=\"
|
|
14
|
+
template: "<!--\n Caso esse componente seja alterado/removido/movido,\n alterar a label no row.component.ts e dynamic-field.component.ts\n-->\n\n<span *ngIf=\"field.label\">\n <label\n *sInfoSign=\"field.infoSign; displayTime: field.displayTimeInfoSign; focusedInputRef: fieldContainerRef\"\n [for]=\"field.name\"\n [ngClass]=\"{ required: field.required() }\"\n >\n {{ field.label }}\n </label>\n</span>\n"
|
|
21
15
|
})
|
|
22
16
|
], FieldLabelComponent);
|
|
23
17
|
export { FieldLabelComponent };
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtbGFiZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZmllbGQtbGFiZWwvZmllbGQtbGFiZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVFqRCxJQUFhLG1CQUFtQixHQUFoQyxNQUFhLG1CQUFtQjtDQU0vQixDQUFBO0FBSkc7SUFEQyxLQUFLLEVBQUU7a0RBQ1k7QUFHcEI7SUFEQyxLQUFLLEVBQUU7OERBQzhCO0FBTDdCLG1CQUFtQjtJQUovQixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsZUFBZTtRQUN6QixrY0FBMkM7S0FDOUMsQ0FBQztHQUNXLG1CQUFtQixDQU0vQjtTQU5ZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy9maWVsZHMvZmllbGRcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzLWZpZWxkLWxhYmVsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmllbGQtbGFiZWwuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZExhYmVsQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWVsZDogRmllbGQ7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWVsZENvbnRhaW5lclJlZjogSFRNTEVsZW1lbnQ7XG59Il19
|