raise-common-lib-new 0.0.15 → 0.0.21
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/assets/language/fr.d.ts +3377 -0
- package/assets/language/ja.d.ts +3351 -0
- package/assets/language/ko.d.ts +3351 -0
- package/assets/language/zh-CN.d.ts +3064 -0
- package/assets/language/zh-TW.d.ts +3354 -0
- package/esm2022/assets/language/fr.mjs +3378 -0
- package/esm2022/assets/language/ja.mjs +3352 -0
- package/esm2022/assets/language/ko.mjs +3352 -0
- package/esm2022/assets/language/zh-CN.mjs +3065 -0
- package/esm2022/assets/language/zh-TW.mjs +3355 -0
- package/esm2022/lib/commentary/constants.mjs +2 -0
- package/esm2022/lib/commentary/index.component.mjs +146 -0
- package/esm2022/lib/common-grid/grid-action/grid-action-item/grid-action-item.component.mjs +44 -0
- package/esm2022/lib/common-grid/grid-action/grid-action.component.mjs +18 -0
- package/esm2022/lib/common-grid/index.component.mjs +52 -30
- package/esm2022/lib/dialog/common-delete-dialog/index.component.mjs +2 -2
- package/esm2022/lib/dialog/common-dialog/index.component.mjs +4 -4
- package/esm2022/lib/form/checkbox-group/index.component.mjs +2 -2
- package/esm2022/lib/form/drawer-form/constants.mjs +10 -0
- package/esm2022/lib/form/drawer-form/drawer-form.component.mjs +336 -0
- package/esm2022/lib/form/encrypted-input/index.component.mjs +35 -0
- package/esm2022/lib/form/radio-group/index.component.mjs +2 -2
- package/esm2022/lib/form/switch-input/index.component.mjs +2 -2
- package/esm2022/lib/form/tag-input/index.component.mjs +31 -11
- package/esm2022/lib/form/toolbar-item/index.component.mjs +56 -0
- package/esm2022/lib/layout/drawer/index.component.mjs +165 -0
- package/esm2022/lib/layout/grid-box/index.component.mjs +67 -0
- package/esm2022/lib/layout/main-container/index.component.mjs +50 -8
- package/esm2022/lib/layout/multi-tab/index.component.mjs +267 -0
- package/esm2022/lib/layout/nav-card-group/constants.mjs +2 -0
- package/esm2022/lib/layout/nav-card-group/index.component.mjs +37 -0
- package/esm2022/lib/layout/page-list/index.component.mjs +73 -0
- package/esm2022/lib/layout/page-tab/index.component.mjs +56 -0
- package/esm2022/lib/layout/rs-aside/index.component.mjs +55 -10
- package/esm2022/lib/layout/rs-footer/index.component.mjs +2 -2
- package/esm2022/lib/layout/rs-header/index.component.mjs +38 -29
- package/esm2022/lib/layout/toolbar/constants.mjs +2 -0
- package/esm2022/lib/layout/toolbar/index.component.mjs +79 -0
- package/esm2022/lib/raise-common-lib.module.mjs +116 -17
- package/esm2022/lib/service/common-function.service.mjs +125 -1
- package/esm2022/lib/service/dialog.service.mjs +5 -5
- package/esm2022/lib/service/drawer.service.mjs +111 -0
- package/esm2022/lib/service/icon-loader.service.mjs +12 -9
- package/esm2022/lib/service/keep-alive.service.mjs +83 -0
- package/esm2022/lib/service/translation.service.mjs +98 -0
- package/esm2022/lib/utils/decorator.mjs +14 -0
- package/esm2022/public-api.mjs +35 -16
- package/fesm2022/raise-common-lib-new.mjs +18952 -538
- package/fesm2022/raise-common-lib-new.mjs.map +1 -1
- package/lib/commentary/constants.d.ts +15 -0
- package/lib/commentary/index.component.d.ts +38 -0
- package/lib/common-grid/grid-action/grid-action-item/grid-action-item.component.d.ts +10 -0
- package/lib/common-grid/grid-action/grid-action.component.d.ts +14 -0
- package/lib/common-grid/index.component.d.ts +8 -5
- package/lib/float-box/index.component.d.ts +2 -2
- package/lib/form/drawer-form/constants.d.ts +34 -0
- package/lib/form/drawer-form/drawer-form.component.d.ts +67 -0
- package/lib/form/encrypted-input/index.component.d.ts +14 -0
- package/lib/form/tag-input/index.component.d.ts +9 -3
- package/lib/form/toolbar-item/index.component.d.ts +17 -0
- package/lib/layout/drawer/index.component.d.ts +45 -0
- package/lib/layout/grid-box/index.component.d.ts +19 -0
- package/lib/layout/main-container/index.component.d.ts +11 -1
- package/lib/layout/multi-tab/index.component.d.ts +53 -0
- package/lib/layout/nav-card-group/constants.d.ts +14 -0
- package/lib/layout/nav-card-group/index.component.d.ts +16 -0
- package/lib/layout/page-list/index.component.d.ts +21 -0
- package/lib/layout/page-tab/index.component.d.ts +18 -0
- package/lib/layout/rs-aside/index.component.d.ts +8 -3
- package/lib/layout/rs-header/index.component.d.ts +12 -12
- package/lib/layout/toolbar/constants.d.ts +8 -0
- package/lib/layout/toolbar/index.component.d.ts +22 -0
- package/lib/raise-common-lib.module.d.ts +48 -34
- package/lib/service/common-function.service.d.ts +11 -0
- package/lib/service/drawer.service.d.ts +46 -0
- package/lib/service/icon-loader.service.d.ts +5 -3
- package/lib/service/keep-alive.service.d.ts +15 -0
- package/lib/service/translation.service.d.ts +12 -0
- package/lib/utils/decorator.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +34 -15
- package/src/assets/img/close-url.svg +10 -0
- package/src/assets/img/comment-cancel.svg +4 -0
- package/src/assets/img/comment-check.svg +5 -0
- package/src/assets/img/desktop-refresh-btn.svg +6 -0
- package/src/assets/img/down-arrow.svg +3 -0
- package/src/assets/img/drawer-back.svg +4 -0
- package/src/assets/img/eye-close.svg +4 -0
- package/src/assets/img/eye-open.svg +4 -0
- package/src/assets/img/grid-action-copy.svg +6 -0
- package/src/assets/img/grid-action-delete.svg +14 -0
- package/src/assets/img/grid-action-detail.svg +7 -0
- package/src/assets/img/grid-action-download.svg +7 -0
- package/src/assets/img/grid-action-edit.svg +4 -0
- package/src/assets/img/grid-action-export.svg +12 -0
- package/src/assets/img/grid-action-move.svg +8 -0
- package/src/assets/img/grid-action-note.svg +10 -0
- package/src/assets/img/grid-action-send.svg +5 -0
- package/src/assets/img/grid-action-settle.svg +13 -0
- package/src/assets/img/grid-menu-arrow-right.svg +3 -0
- package/src/assets/img/grid-pager-arrow-left.svg +3 -0
- package/src/assets/img/grid-pager-arrows-left.svg +4 -0
- package/src/assets/img/icon-more-active.svg +7 -0
- package/src/assets/img/icon-more.svg +7 -0
- package/src/assets/img/more.svg +5 -0
- package/src/assets/img/split-button-arrow.svg +3 -0
- package/src/assets/img/table-column-menu.svg +5 -0
- package/src/assets/img/table-sort-arrow.svg +6 -0
- package/src/assets/img/toolbar-action-add.svg +4 -0
- package/src/assets/img/toolbar-action-delete.svg +14 -0
- package/src/assets/img/toolbar-action-download.svg +5 -0
- package/src/assets/img/toolbar-action-duplicate.svg +6 -0
- package/src/assets/img/toolbar-action-export.svg +5 -0
- package/src/assets/img/toolbar-action-import.svg +5 -0
- package/src/assets/img/toolbar-action-refresh.svg +14 -0
- package/src/assets/img/toolbar-action-upload.svg +5 -0
- package/src/assets/img/tooltip-icon.svg +4 -0
- package/src/assets/language/fr.ts +3603 -0
- package/src/assets/language/ja.ts +3501 -0
- package/src/assets/language/ko.ts +3478 -0
- package/src/assets/language/zh-CN.ts +3115 -0
- package/src/assets/language/zh-TW.ts +3411 -0
- package/src/assets/style/reset/button.scss +78 -10
- package/src/assets/style/reset/checkbox.scss +33 -0
- package/src/assets/style/reset/dropdown.scss +42 -10
- package/src/assets/style/reset/grid.scss +733 -132
- package/src/assets/style/reset/input.scss +45 -12
- package/src/assets/style/reset/mat-dialog.scss +6 -2
- package/src/assets/style/reset/radio.scss +37 -0
- package/src/assets/style/reset/switch.scss +32 -0
- package/src/assets/style/style.scss +6 -0
- package/src/assets/style/syncfusion.min.css +1 -1
- package/src/assets/style/variables.scss +4 -4
- package/esm2022/lib/layout/common-list/index.component.mjs +0 -43
- package/lib/layout/common-list/index.component.d.ts +0 -15
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function filterShowSection(sections) {
|
|
2
|
+
return sections
|
|
3
|
+
.filter((section) => !section.show || section.show())
|
|
4
|
+
.map((section) => ({
|
|
5
|
+
...section,
|
|
6
|
+
fields: section.fields.filter((field) => field.show || section.show()),
|
|
7
|
+
}));
|
|
8
|
+
}
|
|
9
|
+
export const EmailPattern = /^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vZHJhd2VyLWZvcm0vY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTBDQSxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBdUI7SUFDdkQsT0FBTyxRQUFRO1NBQ1osTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3BELEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixHQUFHLE9BQU87UUFDVixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ3ZFLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FDdkIsb01BQW9NLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBGaWVsZEl0ZW0gPSB7XHJcbiAgc2hvdz86ICguLi5hcmdzOiBhbnlbXSkgPT4gYm9vbGVhbjtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIGZvcm1LZXk6IHN0cmluZztcclxuICBmaWVsZEZvcm1UeXBlOlxyXG4gICAgfCBcIlJhZGlvXCJcclxuICAgIHwgXCJDaGVja2JveFwiXHJcbiAgICB8IFwiU3dpdGNoXCJcclxuICAgIHwgXCJUZXh0XCJcclxuICAgIHwgXCJFbWFpbFwiXHJcbiAgICB8IFwiVGV4dGFyZWFcIlxyXG4gICAgfCBcIk51bWJlclwiXHJcbiAgICB8IFwiVGFnc1wiXHJcbiAgICB8IFwiQXV0b0NvbXBsZXRlXCJcclxuICAgIHwgXCJEcm9wZG93blwiXHJcbiAgICB8IFwiTXVsdGlTZWxlY3RcIlxyXG4gICAgfCBcIkRhdGVwaWNrZXJcIlxyXG4gICAgfCBcIkN1c3RvbVwiO1xyXG4gIG9wdGlvbktleT86IHN0cmluZztcclxuICBncm91cEtleT86IHN0cmluZztcclxuICByZXF1aXJlZD86IGJvb2xlYW47XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4gYm9vbGVhbik7XHJcbiAgbWF4bGVuZ3RoPzogbnVtYmVyO1xyXG4gIG1pbmxlbmd0aD86IG51bWJlcjtcclxuICBtYXg/OiBudW1iZXI7XHJcbiAgbWluPzogbnVtYmVyO1xyXG4gIGZvcm1hdD86IHN0cmluZyB8IGZhbHNlO1xyXG4gIHRvb2x0aXA/OiBzdHJpbmc7XHJcbiAgdmFsaWRhdG9yPzogKHZhbHVlOiBhbnksIGZpZWxkOiBGaWVsZEl0ZW0pID0+IGJvb2xlYW47XHJcbiAgb25JbnB1dD86ICh2YWx1ZTogYW55LCBmaWVsZDogRmllbGRJdGVtLCAuLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcclxuICBvbkNoYW5nZT86ICh2YWx1ZTogYW55LCBmaWVsZDogRmllbGRJdGVtLCAuLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcclxuICBvbkZvY3VzPzogKGZpZWxkOiBGaWVsZEl0ZW0sIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xyXG4gIG9uQmx1cj86IChmaWVsZDogRmllbGRJdGVtLCAuLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIFNlY3Rpb25JdGVtID0ge1xyXG4gIHNob3c/OiAoLi4uYXJnczogYW55W10pID0+IGJvb2xlYW47XHJcbiAgY3VzdG9tS2V5Pzogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgZmllbGRzOiBGaWVsZEl0ZW1bXTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJTaG93U2VjdGlvbihzZWN0aW9uczogU2VjdGlvbkl0ZW1bXSkge1xyXG4gIHJldHVybiBzZWN0aW9uc1xyXG4gICAgLmZpbHRlcigoc2VjdGlvbikgPT4gIXNlY3Rpb24uc2hvdyB8fCBzZWN0aW9uLnNob3coKSlcclxuICAgIC5tYXAoKHNlY3Rpb24pID0+ICh7XHJcbiAgICAgIC4uLnNlY3Rpb24sXHJcbiAgICAgIGZpZWxkczogc2VjdGlvbi5maWVsZHMuZmlsdGVyKChmaWVsZCkgPT4gZmllbGQuc2hvdyB8fCBzZWN0aW9uLnNob3coKSksXHJcbiAgICB9KSk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBFbWFpbFBhdHRlcm4gPVxyXG4gIC9eKD89LnsxLDI1NH0kKSg/PS57MSw2NH1AKVthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16QS1aMC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLztcclxuIl19
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, ViewChildren, ViewContainerRef, } from "@angular/core";
|
|
2
|
+
import { DatePipe } from "@angular/common";
|
|
3
|
+
import { Query } from "@syncfusion/ej2-data";
|
|
4
|
+
import { EmailPattern } from "./constants";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "@syncfusion/ej2-angular-popups";
|
|
8
|
+
import * as i3 from "@syncfusion/ej2-angular-calendars";
|
|
9
|
+
import * as i4 from "@syncfusion/ej2-angular-inputs";
|
|
10
|
+
import * as i5 from "@syncfusion/ej2-angular-dropdowns";
|
|
11
|
+
import * as i6 from "../tag-input/index.component";
|
|
12
|
+
import * as i7 from "../radio-group/index.component";
|
|
13
|
+
import * as i8 from "../checkbox-group/index.component";
|
|
14
|
+
import * as i9 from "../switch-input/index.component";
|
|
15
|
+
export class DrawerFormComponent {
|
|
16
|
+
datePipe;
|
|
17
|
+
ref;
|
|
18
|
+
sections = [];
|
|
19
|
+
optionsMap = {};
|
|
20
|
+
customTemplate;
|
|
21
|
+
customSectionTemplate;
|
|
22
|
+
formDisabled = false;
|
|
23
|
+
showAnchor = true;
|
|
24
|
+
optionFields = {
|
|
25
|
+
text: "text",
|
|
26
|
+
value: "code",
|
|
27
|
+
disabled: "disabled",
|
|
28
|
+
groupBy: null,
|
|
29
|
+
};
|
|
30
|
+
showFilterNumber = 10;
|
|
31
|
+
form = {};
|
|
32
|
+
formChange = new EventEmitter();
|
|
33
|
+
fieldChange = new EventEmitter();
|
|
34
|
+
rootEl;
|
|
35
|
+
containers;
|
|
36
|
+
sectionContainers;
|
|
37
|
+
filterOptionsMap = {};
|
|
38
|
+
fieldValidMap = {};
|
|
39
|
+
constructor(datePipe, ref) {
|
|
40
|
+
this.datePipe = datePipe;
|
|
41
|
+
this.ref = ref;
|
|
42
|
+
}
|
|
43
|
+
ngOnInit() { }
|
|
44
|
+
ngOnChanges(changes) {
|
|
45
|
+
if (changes.sections) {
|
|
46
|
+
this.formatForm(changes.sections.currentValue);
|
|
47
|
+
}
|
|
48
|
+
if (changes.form && !changes.form.firstChange) {
|
|
49
|
+
this.checkFormChange(changes.form.previousValue, changes.form.currentValue);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
ngAfterViewInit() {
|
|
53
|
+
this.customTemplateRender(this.containers);
|
|
54
|
+
this.customSectionRender(this.sectionContainers);
|
|
55
|
+
this.containers.changes.subscribe((containers) => {
|
|
56
|
+
this.containers = containers;
|
|
57
|
+
this.customTemplateRender(containers);
|
|
58
|
+
});
|
|
59
|
+
this.sectionContainers.changes.subscribe((containers) => {
|
|
60
|
+
this.sectionContainers = containers;
|
|
61
|
+
this.customSectionRender(containers);
|
|
62
|
+
});
|
|
63
|
+
if (this.showAnchor) {
|
|
64
|
+
this.initAnchorScrollHandler();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
customTemplateRender(containers) {
|
|
68
|
+
if (this.customTemplate && containers.length > 0) {
|
|
69
|
+
const customFields = [];
|
|
70
|
+
this.sections.forEach((section) => {
|
|
71
|
+
section.fields.forEach((field) => {
|
|
72
|
+
if (field.fieldFormType === "Custom") {
|
|
73
|
+
customFields.push(field);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
containers.forEach((container, index) => {
|
|
78
|
+
container.clear();
|
|
79
|
+
container.createEmbeddedView(this.customTemplate, {
|
|
80
|
+
$implicit: customFields[index],
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
customSectionRender(containers) {
|
|
86
|
+
if (this.customSectionTemplate && containers.length > 0) {
|
|
87
|
+
const customSections = this.sections.filter((section) => section.customKey);
|
|
88
|
+
containers.forEach((container, index) => {
|
|
89
|
+
container.clear();
|
|
90
|
+
const customKey = customSections[index].customKey;
|
|
91
|
+
container.createEmbeddedView(this.customSectionTemplate[customKey], {
|
|
92
|
+
$implicit: customSections[index],
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
checkFormChange(previous, current) {
|
|
98
|
+
Object.entries(current).forEach(([key, currentValue]) => {
|
|
99
|
+
if (previous[key] !== currentValue) {
|
|
100
|
+
const field = this.getField(key);
|
|
101
|
+
this.formItemValidator(field);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
formatForm(sections) {
|
|
106
|
+
sections.forEach((section) => {
|
|
107
|
+
section.fields.forEach((field) => {
|
|
108
|
+
if (this.form[field.formKey] === undefined) {
|
|
109
|
+
switch (field.fieldFormType) {
|
|
110
|
+
case "Text":
|
|
111
|
+
case "Email":
|
|
112
|
+
case "Textarea":
|
|
113
|
+
this.form[field.formKey] = "";
|
|
114
|
+
break;
|
|
115
|
+
case "Tags":
|
|
116
|
+
case "Checkbox":
|
|
117
|
+
case "MultiSelect":
|
|
118
|
+
this.form[field.formKey] = [];
|
|
119
|
+
break;
|
|
120
|
+
case "Switch":
|
|
121
|
+
this.form[field.formKey] = false;
|
|
122
|
+
break;
|
|
123
|
+
default:
|
|
124
|
+
this.form[field.formKey] = null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
// 表单提交前会触发这个函数
|
|
131
|
+
updateForm(value, field) {
|
|
132
|
+
const newForm = {
|
|
133
|
+
...this.form,
|
|
134
|
+
[field.formKey]: value,
|
|
135
|
+
};
|
|
136
|
+
// 修复错误提示显示 bug,不设置一下有概率拿不到最新的值
|
|
137
|
+
this.form = newForm;
|
|
138
|
+
this.formChange.emit(newForm);
|
|
139
|
+
this.fieldChange.emit({ field, value });
|
|
140
|
+
}
|
|
141
|
+
formItemValidator(field, isAuto = false) {
|
|
142
|
+
const value = this.form[field.formKey];
|
|
143
|
+
let isValid = true;
|
|
144
|
+
if (field.required) {
|
|
145
|
+
isValid = Array.isArray(value)
|
|
146
|
+
? value.length !== 0
|
|
147
|
+
: ![null, undefined, ""].includes(value);
|
|
148
|
+
}
|
|
149
|
+
if (isValid && field.fieldFormType === "Email" && value) {
|
|
150
|
+
isValid = EmailPattern.test(value);
|
|
151
|
+
}
|
|
152
|
+
if (isValid && field.maxlength) {
|
|
153
|
+
isValid = String(value).length <= field.maxlength;
|
|
154
|
+
}
|
|
155
|
+
if (isValid && field.minlength) {
|
|
156
|
+
isValid = String(value).length >= field.minlength;
|
|
157
|
+
}
|
|
158
|
+
if (isValid && field.max) {
|
|
159
|
+
isValid = value <= field.max;
|
|
160
|
+
}
|
|
161
|
+
if (isValid && field.min) {
|
|
162
|
+
isValid = value >= field.min;
|
|
163
|
+
}
|
|
164
|
+
if (isValid && typeof field.validator === "function") {
|
|
165
|
+
isValid = field.validator.call(null, value, field);
|
|
166
|
+
}
|
|
167
|
+
if (!isAuto) {
|
|
168
|
+
this.fieldValidMap[field.formKey] = isValid;
|
|
169
|
+
}
|
|
170
|
+
return isValid;
|
|
171
|
+
}
|
|
172
|
+
preCheckFormIsValid() {
|
|
173
|
+
let formIsValid = true;
|
|
174
|
+
this.sections.forEach((section) => section.fields.forEach((field) => {
|
|
175
|
+
formIsValid = this.formItemValidator(field) && formIsValid;
|
|
176
|
+
}));
|
|
177
|
+
return formIsValid;
|
|
178
|
+
}
|
|
179
|
+
get formIsValid() {
|
|
180
|
+
return this.sections.every((section) => section.fields.every((field) => this.formItemValidator(field, true)));
|
|
181
|
+
}
|
|
182
|
+
getField(formKey) {
|
|
183
|
+
let fieldItem = null;
|
|
184
|
+
this.sections.find((section) => {
|
|
185
|
+
fieldItem = section.fields.find((field) => field.formKey === formKey);
|
|
186
|
+
return fieldItem;
|
|
187
|
+
});
|
|
188
|
+
return fieldItem;
|
|
189
|
+
}
|
|
190
|
+
callFunction(fn, ...args) {
|
|
191
|
+
this.formItemValidator(args[1] || args[0]);
|
|
192
|
+
if (typeof fn === "function") {
|
|
193
|
+
fn.apply(null, args);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
onInput(value, field) {
|
|
197
|
+
this.callFunction(field.onInput, value, field);
|
|
198
|
+
}
|
|
199
|
+
onChange(value, field) {
|
|
200
|
+
if (field.fieldFormType === "Datepicker") {
|
|
201
|
+
value = this.datePipe.transform(value, "yyyy-MM-dd");
|
|
202
|
+
}
|
|
203
|
+
this.updateForm(value, field);
|
|
204
|
+
this.callFunction(field.onChange, value, field);
|
|
205
|
+
}
|
|
206
|
+
onFocus(field) {
|
|
207
|
+
this.callFunction(field.onFocus, field);
|
|
208
|
+
}
|
|
209
|
+
onBlur(field) {
|
|
210
|
+
this.callFunction(field.onBlur, field);
|
|
211
|
+
}
|
|
212
|
+
onFiltering(event, field) {
|
|
213
|
+
const query = new Query();
|
|
214
|
+
if (event.text) {
|
|
215
|
+
query.where(this.optionFields.text, "contains", event.text, true);
|
|
216
|
+
}
|
|
217
|
+
event.updateData(this.optionsMap[field.optionKey] || [], query);
|
|
218
|
+
}
|
|
219
|
+
getDisabled(field) {
|
|
220
|
+
if (this.formDisabled) {
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
if (typeof field.disabled === "function") {
|
|
224
|
+
return field.disabled();
|
|
225
|
+
}
|
|
226
|
+
return field.disabled;
|
|
227
|
+
}
|
|
228
|
+
getOptionFields(field) {
|
|
229
|
+
if (["Dropdown", "AutoComplete"].includes(field.fieldFormType)) {
|
|
230
|
+
return { ...this.optionFields, groupBy: field.groupKey || null };
|
|
231
|
+
}
|
|
232
|
+
return this.optionFields;
|
|
233
|
+
}
|
|
234
|
+
sectionEls;
|
|
235
|
+
scrollIndex = 0;
|
|
236
|
+
isClickAnchor = false;
|
|
237
|
+
onClickAnchor(index) {
|
|
238
|
+
const sectionItems = this.sectionEls.toArray();
|
|
239
|
+
sectionItems[index].nativeElement.scrollIntoView(true);
|
|
240
|
+
this.scrollIndex = index;
|
|
241
|
+
this.isClickAnchor = true;
|
|
242
|
+
}
|
|
243
|
+
findScrollViewEl(el) {
|
|
244
|
+
if (el === document.body) {
|
|
245
|
+
return el;
|
|
246
|
+
}
|
|
247
|
+
if (el.scrollHeight && el.scrollHeight !== el.offsetHeight) {
|
|
248
|
+
return el;
|
|
249
|
+
}
|
|
250
|
+
return this.findScrollViewEl(el.parentElement);
|
|
251
|
+
}
|
|
252
|
+
initAnchorScrollHandler() {
|
|
253
|
+
const scrollViewEl = this.findScrollViewEl(this.rootEl.nativeElement);
|
|
254
|
+
const scrollHeight = scrollViewEl.scrollHeight - scrollViewEl.offsetHeight;
|
|
255
|
+
const sectionViewRatio = this.sectionEls.toArray().map((section) => {
|
|
256
|
+
const ratio = section.nativeElement.offsetHeight / scrollViewEl.scrollHeight;
|
|
257
|
+
return scrollHeight * ratio;
|
|
258
|
+
});
|
|
259
|
+
const onScroll = () => {
|
|
260
|
+
if (this.isClickAnchor) {
|
|
261
|
+
this.isClickAnchor = false;
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
const scrollTop = scrollViewEl.scrollTop > scrollHeight
|
|
265
|
+
? scrollHeight
|
|
266
|
+
: scrollViewEl.scrollTop;
|
|
267
|
+
let radioScrollHeight = 0;
|
|
268
|
+
for (let index = 0; index < sectionViewRatio.length; index++) {
|
|
269
|
+
radioScrollHeight += sectionViewRatio[index];
|
|
270
|
+
if (radioScrollHeight >= scrollTop) {
|
|
271
|
+
this.scrollIndex = index;
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
while (this.sections[this.scrollIndex] &&
|
|
276
|
+
!this.sections[this.scrollIndex].title) {
|
|
277
|
+
this.scrollIndex++;
|
|
278
|
+
}
|
|
279
|
+
this.ref.markForCheck();
|
|
280
|
+
};
|
|
281
|
+
onScroll();
|
|
282
|
+
scrollViewEl.addEventListener("scroll", onScroll);
|
|
283
|
+
}
|
|
284
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrawerFormComponent, deps: [{ token: i1.DatePipe }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
285
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrawerFormComponent, selector: "rs-drawer-form", inputs: { sections: "sections", optionsMap: "optionsMap", customTemplate: "customTemplate", customSectionTemplate: "customSectionTemplate", formDisabled: ["disabled", "formDisabled"], showAnchor: "showAnchor", optionFields: "optionFields", showFilterNumber: "showFilterNumber", form: "form" }, outputs: { formChange: "formChange", fieldChange: "fieldChange" }, providers: [DatePipe], viewQueries: [{ propertyName: "rootEl", first: true, predicate: ["drawerFormEl"], descendants: true }, { propertyName: "containers", predicate: ["customTemplateContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "sectionContainers", predicate: ["customSectionContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "sectionEls", predicate: ["sectionEl"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #drawerFormEl class=\"rs-drawer-form-container\">\r\n <div class=\"section-container\">\r\n <div #sectionEl class=\"section-item\" *ngFor=\"let section of sections\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"section-expand-checkbox\"\r\n *ngIf=\"section.title\"\r\n />\r\n <div class=\"section-title\" *ngIf=\"section.title\">\r\n <span>{{ section.title }}</span>\r\n </div>\r\n <div class=\"section-form\" *ngIf=\"!section.customKey\">\r\n <div\r\n class=\"form-item\"\r\n *ngFor=\"let field of section.fields\"\r\n [attr.data-required]=\"field.required ? 'yes' : 'no'\"\r\n [attr.data-disabled]=\"field.disabled || formDisabled ? 'yes' : 'no'\"\r\n [attr.data-error]=\"\r\n fieldValidMap[field.formKey] === false ? 'yes' : 'no'\r\n \"\r\n >\r\n <div class=\"form-label\">\r\n <span>{{ field.label }}</span>\r\n <ejs-tooltip\r\n class=\"form-tooltip\"\r\n cssClass=\"rs-drawer-tooltip\"\r\n *ngIf=\"field.tooltip\"\r\n position=\"RightCenter\"\r\n [content]=\"field.tooltip\"\r\n >\r\n <span class=\"tooltip-icon\"></span>\r\n </ejs-tooltip>\r\n </div>\r\n <div class=\"form-content\">\r\n <!-- Radio -->\r\n <rs-radio-group\r\n *ngIf=\"field.fieldFormType === 'Radio'\"\r\n [value]=\"form[field.formKey]\"\r\n [dataSource]=\"optionsMap[field.optionKey]\"\r\n [fields]=\"getOptionFields(field)\"\r\n [disabled]=\"getDisabled(field)\"\r\n [error]=\"fieldValidMap[field.formKey] === false\"\r\n (valueChange)=\"onChange($event, field)\"\r\n ></rs-radio-group>\r\n <!-- Checkbox -->\r\n <rs-checkbox-group\r\n *ngIf=\"field.fieldFormType === 'Checkbox'\"\r\n [value]=\"form[field.formKey]\"\r\n [dataSource]=\"optionsMap[field.optionKey]\"\r\n [fields]=\"getOptionFields(field)\"\r\n [disabled]=\"getDisabled(field)\"\r\n [error]=\"fieldValidMap[field.formKey] === false\"\r\n (valueChange)=\"onChange($event, field)\"\r\n ></rs-checkbox-group>\r\n <!-- Switch -->\r\n <rs-switch-input\r\n *ngIf=\"field.fieldFormType === 'Switch'\"\r\n [value]=\"form[field.formKey]\"\r\n [disabled]=\"getDisabled(field)\"\r\n (valueChange)=\"onChange($event, field)\"\r\n ></rs-switch-input>\r\n <!-- Input -->\r\n <input\r\n class=\"e-input\"\r\n *ngIf=\"\r\n field.fieldFormType === 'Text' ||\r\n field.fieldFormType === 'Email'\r\n \"\r\n [value]=\"form[field.formKey]\"\r\n [disabled]=\"getDisabled(field)\"\r\n [required]=\"field.required\"\r\n [attr.maxlength]=\"field.maxlength\"\r\n [attr.minlength]=\"field.minlength\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (input)=\"onInput($event.target.value, field)\"\r\n (change)=\"onChange($event.target.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n autocomplete=\"off\"\r\n />\r\n <!-- Textarea -->\r\n <textarea\r\n class=\"e-input\"\r\n *ngIf=\"field.fieldFormType === 'Textarea'\"\r\n [value]=\"form[field.formKey]\"\r\n [disabled]=\"getDisabled(field)\"\r\n [required]=\"field.required\"\r\n [attr.maxlength]=\"field.maxlength\"\r\n [attr.minlength]=\"field.minlength\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (input)=\"onInput($event.target.value, field)\"\r\n (change)=\"onChange($event.target.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n autocomplete=\"off\"\r\n rows=\"3\"\r\n ></textarea>\r\n <!-- Number Input -->\r\n <ejs-numerictextbox\r\n *ngIf=\"field.fieldFormType === 'Number'\"\r\n [value]=\"form[field.formKey]\"\r\n [max]=\"field.max\"\r\n [min]=\"field.min\"\r\n [format]=\"field.format\"\r\n [enabled]=\"!getDisabled(field)\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (change)=\"$event.isInteracted && onChange($event.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n ></ejs-numerictextbox>\r\n <!-- Tags Input -->\r\n <rs-tag-input\r\n *ngIf=\"field.fieldFormType === 'Tags'\"\r\n [value]=\"form[field.formKey]\"\r\n [fields]=\"getOptionFields(field)\"\r\n [inputMaxlength]=\"field.maxlength\"\r\n [inputMinlength]=\"field.minlength\"\r\n [disabled]=\"getDisabled(field)\"\r\n [error]=\"fieldValidMap[field.formKey] === false\"\r\n (valueChange)=\"onChange($event, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n ></rs-tag-input>\r\n <!-- AutoComplete -->\r\n <ejs-autocomplete\r\n *ngIf=\"field.fieldFormType === 'AutoComplete'\"\r\n [value]=\"form[field.formKey]\"\r\n [dataSource]=\"optionsMap[field.optionKey]\"\r\n [fields]=\"getOptionFields(field)\"\r\n [enabled]=\"!getDisabled(field)\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (filtering)=\"onFiltering($event, field)\"\r\n (change)=\"$event.isInteracted && onChange($event.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n ></ejs-autocomplete>\r\n <!-- Dropdown -->\r\n <ejs-dropdownlist\r\n *ngIf=\"field.fieldFormType === 'Dropdown'\"\r\n [value]=\"form[field.formKey]\"\r\n [dataSource]=\"optionsMap[field.optionKey]\"\r\n [fields]=\"getOptionFields(field)\"\r\n [allowFiltering]=\"true\"\r\n [showClearButton]=\"true\"\r\n [enabled]=\"!getDisabled(field)\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (filtering)=\"onFiltering($event, field)\"\r\n (change)=\"$event.isInteracted && onChange($event.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n ></ejs-dropdownlist>\r\n <!-- MultiSelect -->\r\n <ejs-multiselect\r\n *ngIf=\"field.fieldFormType === 'MultiSelect'\"\r\n mode=\"CheckBox\"\r\n [value]=\"form[field.formKey]\"\r\n [dataSource]=\"optionsMap[field.optionKey]\"\r\n [fields]=\"getOptionFields(field)\"\r\n [allowFiltering]=\"true\"\r\n [showDropDownIcon]=\"true\"\r\n [enabled]=\"!getDisabled(field)\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (filtering)=\"onFiltering($event, field)\"\r\n (change)=\"$event.isInteracted && onChange($event.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n >\r\n </ejs-multiselect>\r\n <!-- Datepicker -->\r\n <ejs-datepicker\r\n *ngIf=\"field.fieldFormType === 'Datepicker'\"\r\n [value]=\"form[field.formKey]\"\r\n [format]=\"field.format || 'dd-MMM-yyyy'\"\r\n [enabled]=\"!getDisabled(field)\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (change)=\"$event.isInteracted && onChange($event.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n ></ejs-datepicker>\r\n <ng-template\r\n #customTemplateContainer\r\n *ngIf=\"field.fieldFormType === 'Custom'\"\r\n ></ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"section-form\" *ngIf=\"section.customKey\">\r\n <ng-template #customSectionContainer></ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"sections.length > 1 && showAnchor\" class=\"anchor-container\">\r\n <div\r\n class=\"anchor-item\"\r\n *ngFor=\"let section of sections; let index = index\"\r\n [style.display]=\"section.title ? 'block' : 'none'\"\r\n [attr.data-active]=\"scrollIndex === index ? 'yes' : 'no'\"\r\n [attr.data-content]=\"section.title\"\r\n (click)=\"onClickAnchor(index)\"\r\n ></div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;margin-top:16px}.rs-drawer-form-container{display:flex;flex-flow:row nowrap;align-items:flex-start;gap:32px}.rs-drawer-form-container .section-container{flex:auto;display:flex;flex-flow:column nowrap;max-width:1576px}.rs-drawer-form-container .section-item{position:relative}.rs-drawer-form-container .section-item:not(:first-child){border-top:1px solid #eaedf0}.rs-drawer-form-container .section-expand-checkbox{display:block;width:100%;height:28px;appearance:none;cursor:pointer;position:absolute;top:0;left:0}.rs-drawer-form-container .section-expand-checkbox:checked+.section-title:before{transform:rotate(-90deg)}.rs-drawer-form-container .section-expand-checkbox:checked+.section-title+.section-form{max-height:0;overflow:hidden}.rs-drawer-form-container .section-title{padding:6px 0;margin-bottom:12px;color:#44566c;font-family:Arial;font-size:13px;font-style:normal;font-weight:700;line-height:16px;display:flex;flex-flow:row nowrap;align-items:center;pointer-events:none}.rs-drawer-form-container .section-title:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M12.2426 6.24264L8 9.5L3.75736 6.24264%22 stroke%3D%22%236B6B6B%22%2F%3E%0D%3C%2Fsvg%3E%0D\");display:block;height:16px;width:16px;margin-right:8px}.rs-drawer-form-container .section-form{display:flex;flex-flow:row wrap;justify-content:space-between;gap:12px 56px;max-width:1576px;padding:0 24px;margin-bottom:20px}.rs-drawer-form-container .section-form .form-item{min-height:28px;min-width:400px;max-width:700px;width:calc((100% - 56px)/2);display:flex;flex-flow:row nowrap;justify-content:flex-start;align-items:flex-start}.rs-drawer-form-container .section-form .form-item[data-required=yes] .form-label>span:first-child:after{content:\"*\";color:var(--rs-input-require-label-color)}.rs-drawer-form-container .section-form .form-item .form-label{flex:none;width:144px;height:28px;margin-right:16px;color:#43566c;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:14px;display:flex;flex-flow:row nowrap;align-items:center}.rs-drawer-form-container .section-form .form-item .form-label .form-tooltip{margin-left:4px}.rs-drawer-form-container .section-form .form-item .form-label .form-tooltip .tooltip-icon:before{content:\" \";display:block;width:14px;height:14px;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2218%22 height%3D%2218%22 viewBox%3D%220 0 18 18%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D %3Cpath d%3D%22M9 1a8 8 0 1 0 8 8 8.009 8.009 0 0 0-8-8zm0 14.667A6.666 6.666 0 1 1 15.667 9 6.674 6.674 0 0 1 9 15.667z%22 fill%3D%22%2344566C%22%2F%3E%0D %3Cpath d%3D%22M9 7.667h-.667a.667.667 0 1 0 0 1.333h.666v4a.667.667 0 0 0 1.334 0V9a1.333 1.333 0 0 0-1.334-1.333zM9 6.333a1 1 0 1 0 0-2 1 1 0 0 0 0 2z%22 fill%3D%22%2344566C%22%2F%3E%0D%3C%2Fsvg%3E%0D\");background-size:contain;cursor:pointer}.rs-drawer-form-container .section-form .form-item .form-content{flex:auto}@media (max-width: 1420px){.rs-drawer-form-container .section-form .form-item{width:100%}}.rs-drawer-form-container .anchor-container{flex:none;display:flex;flex-flow:column nowrap;gap:4px;min-width:120px;height:auto;position:sticky;top:56px}.rs-drawer-form-container .anchor-item{min-width:120px;padding:4px 12px;border-left:1px solid #eaedf0;cursor:pointer;color:#44566c;font-family:Arial;font-size:11px;font-style:normal;font-weight:400;line-height:16px;position:relative}.rs-drawer-form-container .anchor-item:before{content:attr(data-content);color:#44566c;font-weight:400;position:absolute;left:12px}.rs-drawer-form-container .anchor-item:after{content:attr(data-content);visibility:hidden;color:#1364b3;font-weight:700}.rs-drawer-form-container .anchor-item[data-active=yes]{border-color:#1f7bff}.rs-drawer-form-container .anchor-item[data-active=yes]:before{visibility:hidden}.rs-drawer-form-container .anchor-item[data-active=yes]:after{visibility:visible}.rs-drawer-tooltip.e-tooltip-wrap{border:none;background-color:#44566c}.rs-drawer-tooltip.e-tooltip-wrap .e-arrow-tip{height:4px;visibility:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TooltipComponent, selector: "ejs-tooltip", inputs: ["animation", "closeDelay", "container", "content", "cssClass", "enableHtmlParse", "enableHtmlSanitizer", "enablePersistence", "enableRtl", "height", "htmlAttributes", "isSticky", "locale", "mouseTrail", "offsetX", "offsetY", "openDelay", "opensOn", "position", "showTipPointer", "target", "tipPointerPosition", "width", "windowCollision"], outputs: ["afterClose", "afterOpen", "beforeClose", "beforeCollision", "beforeOpen", "beforeRender", "created", "destroyed"] }, { kind: "component", type: i3.DatePickerComponent, selector: "ejs-datepicker", inputs: ["allowEdit", "calendarMode", "cssClass", "dayHeaderFormat", "depth", "enableMask", "enablePersistence", "enableRtl", "enabled", "firstDayOfWeek", "floatLabelType", "format", "fullScreenMode", "htmlAttributes", "isMultiSelection", "keyConfigs", "locale", "maskPlaceholder", "max", "min", "openOnFocus", "placeholder", "readonly", "serverTimezoneOffset", "showClearButton", "showTodayButton", "start", "strictMode", "value", "values", "weekNumber", "weekRule", "width", "zIndex"], outputs: ["blur", "change", "cleared", "close", "created", "destroyed", "focus", "navigated", "open", "renderDayCell", "valueChange"] }, { kind: "component", type: i4.NumericTextBoxComponent, selector: "ejs-numerictextbox", inputs: ["cssClass", "currency", "currencyCode", "decimals", "enablePersistence", "enableRtl", "enabled", "floatLabelType", "format", "htmlAttributes", "locale", "max", "min", "placeholder", "readonly", "showClearButton", "showSpinButton", "step", "strictMode", "validateDecimalOnType", "value", "width"], outputs: ["blur", "change", "created", "destroyed", "focus", "valueChange"] }, { kind: "component", type: i5.DropDownListComponent, selector: "ejs-dropdownlist", inputs: ["actionFailureTemplate", "allowFiltering", "allowObjectBinding", "cssClass", "dataSource", "enablePersistence", "enableRtl", "enableVirtualization", "enabled", "fields", "filterBarPlaceholder", "filterType", "floatLabelType", "footerTemplate", "groupTemplate", "headerTemplate", "htmlAttributes", "ignoreAccent", "ignoreCase", "index", "isDeviceFullScreen", "itemTemplate", "locale", "noRecordsTemplate", "placeholder", "popupHeight", "popupWidth", "query", "readonly", "showClearButton", "sortOrder", "text", "value", "valueTemplate", "width", "zIndex"], outputs: ["actionBegin", "actionComplete", "actionFailure", "beforeOpen", "blur", "change", "close", "created", "dataBound", "destroyed", "filtering", "focus", "open", "select", "valueChange"] }, { kind: "component", type: i5.MultiSelectComponent, selector: "ejs-multiselect", inputs: ["actionFailureTemplate", "addTagOnBlur", "allowCustomValue", "allowFiltering", "allowObjectBinding", "changeOnBlur", "closePopupOnSelect", "cssClass", "dataSource", "delimiterChar", "enableGroupCheckBox", "enableHtmlSanitizer", "enablePersistence", "enableRtl", "enableSelectionOrder", "enableVirtualization", "enabled", "fields", "filterBarPlaceholder", "filterType", "floatLabelType", "footerTemplate", "groupTemplate", "headerTemplate", "hideSelectedItem", "htmlAttributes", "ignoreAccent", "ignoreCase", "isDeviceFullScreen", "itemTemplate", "locale", "maximumSelectionLength", "mode", "noRecordsTemplate", "openOnClick", "placeholder", "popupHeight", "popupWidth", "query", "readonly", "selectAllText", "showClearButton", "showDropDownIcon", "showSelectAll", "sortOrder", "text", "unSelectAllText", "value", "valueTemplate", "width", "zIndex"], outputs: ["actionBegin", "actionComplete", "actionFailure", "beforeOpen", "beforeSelectAll", "blur", "change", "chipSelection", "close", "created", "customValueSelection", "dataBound", "destroyed", "filtering", "focus", "open", "removed", "removing", "select", "selectedAll", "tagging", "valueChange"] }, { kind: "component", type: i5.AutoCompleteComponent, selector: "ejs-autocomplete", inputs: ["actionFailureTemplate", "allowCustom", "allowFiltering", "allowObjectBinding", "autofill", "cssClass", "dataSource", "enablePersistence", "enableRtl", "enableVirtualization", "enabled", "fields", "filterBarPlaceholder", "filterType", "floatLabelType", "footerTemplate", "groupTemplate", "headerTemplate", "highlight", "htmlAttributes", "ignoreAccent", "ignoreCase", "index", "isDeviceFullScreen", "itemTemplate", "locale", "minLength", "noRecordsTemplate", "placeholder", "popupHeight", "popupWidth", "query", "readonly", "showClearButton", "showPopupButton", "sortOrder", "suggestionCount", "text", "value", "valueTemplate", "width", "zIndex"], outputs: ["actionBegin", "actionComplete", "actionFailure", "beforeOpen", "blur", "change", "close", "created", "customValueSpecifier", "dataBound", "destroyed", "filtering", "focus", "open", "select", "valueChange"] }, { kind: "component", type: i6.TagInputComponent, selector: "rs-tag-input", inputs: ["value", "fields", "disabled", "error", "inputMinlength", "inputMaxlength"], outputs: ["valueChange", "focus", "blur"] }, { kind: "component", type: i7.RadioGroupComponent, selector: "rs-radio-group", inputs: ["value", "dataSource", "orientation", "fields", "disabled", "error"], outputs: ["valueChange"] }, { kind: "component", type: i8.CheckboxGroupComponent, selector: "rs-checkbox-group", inputs: ["name", "value", "dataSource", "orientation", "fields", "disabled", "error"], outputs: ["valueChange"] }, { kind: "component", type: i9.SwitchInputComponent, selector: "rs-switch-input", inputs: ["value", "text", "orientation", "disabled", "error"], outputs: ["valueChange"] }] });
|
|
286
|
+
}
|
|
287
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrawerFormComponent, decorators: [{
|
|
288
|
+
type: Component,
|
|
289
|
+
args: [{ selector: "rs-drawer-form", providers: [DatePipe], template: "<div #drawerFormEl class=\"rs-drawer-form-container\">\r\n <div class=\"section-container\">\r\n <div #sectionEl class=\"section-item\" *ngFor=\"let section of sections\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"section-expand-checkbox\"\r\n *ngIf=\"section.title\"\r\n />\r\n <div class=\"section-title\" *ngIf=\"section.title\">\r\n <span>{{ section.title }}</span>\r\n </div>\r\n <div class=\"section-form\" *ngIf=\"!section.customKey\">\r\n <div\r\n class=\"form-item\"\r\n *ngFor=\"let field of section.fields\"\r\n [attr.data-required]=\"field.required ? 'yes' : 'no'\"\r\n [attr.data-disabled]=\"field.disabled || formDisabled ? 'yes' : 'no'\"\r\n [attr.data-error]=\"\r\n fieldValidMap[field.formKey] === false ? 'yes' : 'no'\r\n \"\r\n >\r\n <div class=\"form-label\">\r\n <span>{{ field.label }}</span>\r\n <ejs-tooltip\r\n class=\"form-tooltip\"\r\n cssClass=\"rs-drawer-tooltip\"\r\n *ngIf=\"field.tooltip\"\r\n position=\"RightCenter\"\r\n [content]=\"field.tooltip\"\r\n >\r\n <span class=\"tooltip-icon\"></span>\r\n </ejs-tooltip>\r\n </div>\r\n <div class=\"form-content\">\r\n <!-- Radio -->\r\n <rs-radio-group\r\n *ngIf=\"field.fieldFormType === 'Radio'\"\r\n [value]=\"form[field.formKey]\"\r\n [dataSource]=\"optionsMap[field.optionKey]\"\r\n [fields]=\"getOptionFields(field)\"\r\n [disabled]=\"getDisabled(field)\"\r\n [error]=\"fieldValidMap[field.formKey] === false\"\r\n (valueChange)=\"onChange($event, field)\"\r\n ></rs-radio-group>\r\n <!-- Checkbox -->\r\n <rs-checkbox-group\r\n *ngIf=\"field.fieldFormType === 'Checkbox'\"\r\n [value]=\"form[field.formKey]\"\r\n [dataSource]=\"optionsMap[field.optionKey]\"\r\n [fields]=\"getOptionFields(field)\"\r\n [disabled]=\"getDisabled(field)\"\r\n [error]=\"fieldValidMap[field.formKey] === false\"\r\n (valueChange)=\"onChange($event, field)\"\r\n ></rs-checkbox-group>\r\n <!-- Switch -->\r\n <rs-switch-input\r\n *ngIf=\"field.fieldFormType === 'Switch'\"\r\n [value]=\"form[field.formKey]\"\r\n [disabled]=\"getDisabled(field)\"\r\n (valueChange)=\"onChange($event, field)\"\r\n ></rs-switch-input>\r\n <!-- Input -->\r\n <input\r\n class=\"e-input\"\r\n *ngIf=\"\r\n field.fieldFormType === 'Text' ||\r\n field.fieldFormType === 'Email'\r\n \"\r\n [value]=\"form[field.formKey]\"\r\n [disabled]=\"getDisabled(field)\"\r\n [required]=\"field.required\"\r\n [attr.maxlength]=\"field.maxlength\"\r\n [attr.minlength]=\"field.minlength\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (input)=\"onInput($event.target.value, field)\"\r\n (change)=\"onChange($event.target.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n autocomplete=\"off\"\r\n />\r\n <!-- Textarea -->\r\n <textarea\r\n class=\"e-input\"\r\n *ngIf=\"field.fieldFormType === 'Textarea'\"\r\n [value]=\"form[field.formKey]\"\r\n [disabled]=\"getDisabled(field)\"\r\n [required]=\"field.required\"\r\n [attr.maxlength]=\"field.maxlength\"\r\n [attr.minlength]=\"field.minlength\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (input)=\"onInput($event.target.value, field)\"\r\n (change)=\"onChange($event.target.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n autocomplete=\"off\"\r\n rows=\"3\"\r\n ></textarea>\r\n <!-- Number Input -->\r\n <ejs-numerictextbox\r\n *ngIf=\"field.fieldFormType === 'Number'\"\r\n [value]=\"form[field.formKey]\"\r\n [max]=\"field.max\"\r\n [min]=\"field.min\"\r\n [format]=\"field.format\"\r\n [enabled]=\"!getDisabled(field)\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (change)=\"$event.isInteracted && onChange($event.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n ></ejs-numerictextbox>\r\n <!-- Tags Input -->\r\n <rs-tag-input\r\n *ngIf=\"field.fieldFormType === 'Tags'\"\r\n [value]=\"form[field.formKey]\"\r\n [fields]=\"getOptionFields(field)\"\r\n [inputMaxlength]=\"field.maxlength\"\r\n [inputMinlength]=\"field.minlength\"\r\n [disabled]=\"getDisabled(field)\"\r\n [error]=\"fieldValidMap[field.formKey] === false\"\r\n (valueChange)=\"onChange($event, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n ></rs-tag-input>\r\n <!-- AutoComplete -->\r\n <ejs-autocomplete\r\n *ngIf=\"field.fieldFormType === 'AutoComplete'\"\r\n [value]=\"form[field.formKey]\"\r\n [dataSource]=\"optionsMap[field.optionKey]\"\r\n [fields]=\"getOptionFields(field)\"\r\n [enabled]=\"!getDisabled(field)\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (filtering)=\"onFiltering($event, field)\"\r\n (change)=\"$event.isInteracted && onChange($event.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n ></ejs-autocomplete>\r\n <!-- Dropdown -->\r\n <ejs-dropdownlist\r\n *ngIf=\"field.fieldFormType === 'Dropdown'\"\r\n [value]=\"form[field.formKey]\"\r\n [dataSource]=\"optionsMap[field.optionKey]\"\r\n [fields]=\"getOptionFields(field)\"\r\n [allowFiltering]=\"true\"\r\n [showClearButton]=\"true\"\r\n [enabled]=\"!getDisabled(field)\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (filtering)=\"onFiltering($event, field)\"\r\n (change)=\"$event.isInteracted && onChange($event.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n ></ejs-dropdownlist>\r\n <!-- MultiSelect -->\r\n <ejs-multiselect\r\n *ngIf=\"field.fieldFormType === 'MultiSelect'\"\r\n mode=\"CheckBox\"\r\n [value]=\"form[field.formKey]\"\r\n [dataSource]=\"optionsMap[field.optionKey]\"\r\n [fields]=\"getOptionFields(field)\"\r\n [allowFiltering]=\"true\"\r\n [showDropDownIcon]=\"true\"\r\n [enabled]=\"!getDisabled(field)\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (filtering)=\"onFiltering($event, field)\"\r\n (change)=\"$event.isInteracted && onChange($event.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n >\r\n </ejs-multiselect>\r\n <!-- Datepicker -->\r\n <ejs-datepicker\r\n *ngIf=\"field.fieldFormType === 'Datepicker'\"\r\n [value]=\"form[field.formKey]\"\r\n [format]=\"field.format || 'dd-MMM-yyyy'\"\r\n [enabled]=\"!getDisabled(field)\"\r\n [class.error]=\"fieldValidMap[field.formKey] === false\"\r\n (change)=\"$event.isInteracted && onChange($event.value, field)\"\r\n (focus)=\"onFocus(field)\"\r\n (blur)=\"onBlur(field)\"\r\n ></ejs-datepicker>\r\n <ng-template\r\n #customTemplateContainer\r\n *ngIf=\"field.fieldFormType === 'Custom'\"\r\n ></ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"section-form\" *ngIf=\"section.customKey\">\r\n <ng-template #customSectionContainer></ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"sections.length > 1 && showAnchor\" class=\"anchor-container\">\r\n <div\r\n class=\"anchor-item\"\r\n *ngFor=\"let section of sections; let index = index\"\r\n [style.display]=\"section.title ? 'block' : 'none'\"\r\n [attr.data-active]=\"scrollIndex === index ? 'yes' : 'no'\"\r\n [attr.data-content]=\"section.title\"\r\n (click)=\"onClickAnchor(index)\"\r\n ></div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;margin-top:16px}.rs-drawer-form-container{display:flex;flex-flow:row nowrap;align-items:flex-start;gap:32px}.rs-drawer-form-container .section-container{flex:auto;display:flex;flex-flow:column nowrap;max-width:1576px}.rs-drawer-form-container .section-item{position:relative}.rs-drawer-form-container .section-item:not(:first-child){border-top:1px solid #eaedf0}.rs-drawer-form-container .section-expand-checkbox{display:block;width:100%;height:28px;appearance:none;cursor:pointer;position:absolute;top:0;left:0}.rs-drawer-form-container .section-expand-checkbox:checked+.section-title:before{transform:rotate(-90deg)}.rs-drawer-form-container .section-expand-checkbox:checked+.section-title+.section-form{max-height:0;overflow:hidden}.rs-drawer-form-container .section-title{padding:6px 0;margin-bottom:12px;color:#44566c;font-family:Arial;font-size:13px;font-style:normal;font-weight:700;line-height:16px;display:flex;flex-flow:row nowrap;align-items:center;pointer-events:none}.rs-drawer-form-container .section-title:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M12.2426 6.24264L8 9.5L3.75736 6.24264%22 stroke%3D%22%236B6B6B%22%2F%3E%0D%3C%2Fsvg%3E%0D\");display:block;height:16px;width:16px;margin-right:8px}.rs-drawer-form-container .section-form{display:flex;flex-flow:row wrap;justify-content:space-between;gap:12px 56px;max-width:1576px;padding:0 24px;margin-bottom:20px}.rs-drawer-form-container .section-form .form-item{min-height:28px;min-width:400px;max-width:700px;width:calc((100% - 56px)/2);display:flex;flex-flow:row nowrap;justify-content:flex-start;align-items:flex-start}.rs-drawer-form-container .section-form .form-item[data-required=yes] .form-label>span:first-child:after{content:\"*\";color:var(--rs-input-require-label-color)}.rs-drawer-form-container .section-form .form-item .form-label{flex:none;width:144px;height:28px;margin-right:16px;color:#43566c;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:14px;display:flex;flex-flow:row nowrap;align-items:center}.rs-drawer-form-container .section-form .form-item .form-label .form-tooltip{margin-left:4px}.rs-drawer-form-container .section-form .form-item .form-label .form-tooltip .tooltip-icon:before{content:\" \";display:block;width:14px;height:14px;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2218%22 height%3D%2218%22 viewBox%3D%220 0 18 18%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D %3Cpath d%3D%22M9 1a8 8 0 1 0 8 8 8.009 8.009 0 0 0-8-8zm0 14.667A6.666 6.666 0 1 1 15.667 9 6.674 6.674 0 0 1 9 15.667z%22 fill%3D%22%2344566C%22%2F%3E%0D %3Cpath d%3D%22M9 7.667h-.667a.667.667 0 1 0 0 1.333h.666v4a.667.667 0 0 0 1.334 0V9a1.333 1.333 0 0 0-1.334-1.333zM9 6.333a1 1 0 1 0 0-2 1 1 0 0 0 0 2z%22 fill%3D%22%2344566C%22%2F%3E%0D%3C%2Fsvg%3E%0D\");background-size:contain;cursor:pointer}.rs-drawer-form-container .section-form .form-item .form-content{flex:auto}@media (max-width: 1420px){.rs-drawer-form-container .section-form .form-item{width:100%}}.rs-drawer-form-container .anchor-container{flex:none;display:flex;flex-flow:column nowrap;gap:4px;min-width:120px;height:auto;position:sticky;top:56px}.rs-drawer-form-container .anchor-item{min-width:120px;padding:4px 12px;border-left:1px solid #eaedf0;cursor:pointer;color:#44566c;font-family:Arial;font-size:11px;font-style:normal;font-weight:400;line-height:16px;position:relative}.rs-drawer-form-container .anchor-item:before{content:attr(data-content);color:#44566c;font-weight:400;position:absolute;left:12px}.rs-drawer-form-container .anchor-item:after{content:attr(data-content);visibility:hidden;color:#1364b3;font-weight:700}.rs-drawer-form-container .anchor-item[data-active=yes]{border-color:#1f7bff}.rs-drawer-form-container .anchor-item[data-active=yes]:before{visibility:hidden}.rs-drawer-form-container .anchor-item[data-active=yes]:after{visibility:visible}.rs-drawer-tooltip.e-tooltip-wrap{border:none;background-color:#44566c}.rs-drawer-tooltip.e-tooltip-wrap .e-arrow-tip{height:4px;visibility:hidden}\n"] }]
|
|
290
|
+
}], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { sections: [{
|
|
291
|
+
type: Input,
|
|
292
|
+
args: ["sections"]
|
|
293
|
+
}], optionsMap: [{
|
|
294
|
+
type: Input,
|
|
295
|
+
args: ["optionsMap"]
|
|
296
|
+
}], customTemplate: [{
|
|
297
|
+
type: Input,
|
|
298
|
+
args: ["customTemplate"]
|
|
299
|
+
}], customSectionTemplate: [{
|
|
300
|
+
type: Input,
|
|
301
|
+
args: ["customSectionTemplate"]
|
|
302
|
+
}], formDisabled: [{
|
|
303
|
+
type: Input,
|
|
304
|
+
args: ["disabled"]
|
|
305
|
+
}], showAnchor: [{
|
|
306
|
+
type: Input,
|
|
307
|
+
args: ["showAnchor"]
|
|
308
|
+
}], optionFields: [{
|
|
309
|
+
type: Input,
|
|
310
|
+
args: ["optionFields"]
|
|
311
|
+
}], showFilterNumber: [{
|
|
312
|
+
type: Input,
|
|
313
|
+
args: ["showFilterNumber"]
|
|
314
|
+
}], form: [{
|
|
315
|
+
type: Input,
|
|
316
|
+
args: ["form"]
|
|
317
|
+
}], formChange: [{
|
|
318
|
+
type: Output,
|
|
319
|
+
args: ["formChange"]
|
|
320
|
+
}], fieldChange: [{
|
|
321
|
+
type: Output,
|
|
322
|
+
args: ["fieldChange"]
|
|
323
|
+
}], rootEl: [{
|
|
324
|
+
type: ViewChild,
|
|
325
|
+
args: ["drawerFormEl", { static: false }]
|
|
326
|
+
}], containers: [{
|
|
327
|
+
type: ViewChildren,
|
|
328
|
+
args: ["customTemplateContainer", { read: ViewContainerRef }]
|
|
329
|
+
}], sectionContainers: [{
|
|
330
|
+
type: ViewChildren,
|
|
331
|
+
args: ["customSectionContainer", { read: ViewContainerRef }]
|
|
332
|
+
}], sectionEls: [{
|
|
333
|
+
type: ViewChildren,
|
|
334
|
+
args: ["sectionEl"]
|
|
335
|
+
}] } });
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vZHJhd2VyLWZvcm0vZHJhd2VyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vZHJhd2VyLWZvcm0vZHJhd2VyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFJTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxZQUFZLEVBQTBCLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7OztBQVFuRSxNQUFNLE9BQU8sbUJBQW1CO0lBbUNWO0lBQTRCO0lBbEM3QixRQUFRLEdBQWtCLEVBQUUsQ0FBQztJQUMzQixVQUFVLEdBQTBCLEVBQUUsQ0FBQztJQUVuQyxjQUFjLENBQW1CO0lBRTFELHFCQUFxQixDQUFtQztJQUVyQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ25CLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDaEIsWUFBWSxHQUFHO1FBQ3BDLElBQUksRUFBRSxNQUFNO1FBQ1osS0FBSyxFQUFFLE1BQU07UUFDYixRQUFRLEVBQUUsVUFBVTtRQUNwQixPQUFPLEVBQUUsSUFBSTtLQUNkLENBQUM7SUFDeUIsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBRWxDLElBQUksR0FBd0IsRUFBRSxDQUFDO0lBQ3hCLFVBQVUsR0FBRyxJQUFJLFlBQVks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Szt1QkFBQyxZQUFZO2dCQUNJLFlBQVk7c0JBQWxDLEtBQUs7dUJBQUMsY0FBYztnQkFNTSxnQkFBZ0I7c0JBQTFDLEtBQUs7dUJBQUMsa0JBQWtCO2dCQUVWLElBQUk7c0JBQWxCLEtBQUs7dUJBQUMsTUFBTTtnQkFDUyxVQUFVO3NCQUEvQixNQUFNO3VCQUFDLFlBQVk7Z0JBQ0csV0FBVztzQkFBakMsTUFBTTt1QkFBQyxhQUFhO2dCQU1yQixNQUFNO3NCQURMLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHcEMsVUFBVTtzQkFEakIsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFHM0QsaUJBQWlCO3NCQUR4QixZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQTRPbEUsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWRhdGFcIjtcclxuaW1wb3J0IHsgRmlsdGVyaW5nRXZlbnRBcmdzIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWRyb3Bkb3duc1wiO1xyXG5pbXBvcnQgeyBFbWFpbFBhdHRlcm4sIEZpZWxkSXRlbSwgU2VjdGlvbkl0ZW0gfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInJzLWRyYXdlci1mb3JtXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9kcmF3ZXItZm9ybS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9kcmF3ZXItZm9ybS5jb21wb25lbnQuc2Nzc1wiXSxcclxuICBwcm92aWRlcnM6IFtEYXRlUGlwZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcmF3ZXJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dChcInNlY3Rpb25zXCIpIHNlY3Rpb25zOiBTZWN0aW9uSXRlbVtdID0gW107XHJcbiAgQElucHV0KFwib3B0aW9uc01hcFwiKSBvcHRpb25zTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4gPSB7fTtcclxuXHJcbiAgQElucHV0KFwiY3VzdG9tVGVtcGxhdGVcIikgY3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KFwiY3VzdG9tU2VjdGlvblRlbXBsYXRlXCIpXHJcbiAgY3VzdG9tU2VjdGlvblRlbXBsYXRlOiBSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgQElucHV0KFwiZGlzYWJsZWRcIikgZm9ybURpc2FibGVkID0gZmFsc2U7XHJcbiAgQElucHV0KFwic2hvd0FuY2hvclwiKSBzaG93QW5jaG9yID0gdHJ1ZTtcclxuICBASW5wdXQoXCJvcHRpb25GaWVsZHNcIikgb3B0aW9uRmllbGRzID0ge1xyXG4gICAgdGV4dDogXCJ0ZXh0XCIsXHJcbiAgICB2YWx1ZTogXCJjb2RlXCIsXHJcbiAgICBkaXNhYmxlZDogXCJkaXNhYmxlZFwiLFxyXG4gICAgZ3JvdXBCeTogbnVsbCxcclxuICB9O1xyXG4gIEBJbnB1dChcInNob3dGaWx0ZXJOdW1iZXJcIikgc2hvd0ZpbHRlck51bWJlciA9IDEwO1xyXG5cclxuICBASW5wdXQoXCJmb3JtXCIpIGZvcm06IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICBAT3V0cHV0KFwiZm9ybUNoYW5nZVwiKSBmb3JtQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+PigpO1xyXG4gIEBPdXRwdXQoXCJmaWVsZENoYW5nZVwiKSBmaWVsZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgZmllbGQ6IEZpZWxkSXRlbTtcclxuICAgIHZhbHVlOiBhbnk7XHJcbiAgfT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZChcImRyYXdlckZvcm1FbFwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICByb290RWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oXCJjdXN0b21UZW1wbGF0ZUNvbnRhaW5lclwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICBwcml2YXRlIGNvbnRhaW5lcnM6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcclxuICBAVmlld0NoaWxkcmVuKFwiY3VzdG9tU2VjdGlvbkNvbnRhaW5lclwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICBwcml2YXRlIHNlY3Rpb25Db250YWluZXJzOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj47XHJcblxyXG4gIGZpbHRlck9wdGlvbnNNYXA6IFJlY29yZDxzdHJpbmcsIGFueVtdPiA9IHt9O1xyXG4gIGZpZWxkVmFsaWRNYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLCBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMuc2VjdGlvbnMpIHtcclxuICAgICAgdGhpcy5mb3JtYXRGb3JtKGNoYW5nZXMuc2VjdGlvbnMuY3VycmVudFZhbHVlKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzLmZvcm0gJiYgIWNoYW5nZXMuZm9ybS5maXJzdENoYW5nZSkge1xyXG4gICAgICB0aGlzLmNoZWNrRm9ybUNoYW5nZShcclxuICAgICAgICBjaGFuZ2VzLmZvcm0ucHJldmlvdXNWYWx1ZSxcclxuICAgICAgICBjaGFuZ2VzLmZvcm0uY3VycmVudFZhbHVlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmN1c3RvbVRlbXBsYXRlUmVuZGVyKHRoaXMuY29udGFpbmVycyk7XHJcbiAgICB0aGlzLmN1c3RvbVNlY3Rpb25SZW5kZXIodGhpcy5zZWN0aW9uQ29udGFpbmVycyk7XHJcbiAgICB0aGlzLmNvbnRhaW5lcnMuY2hhbmdlcy5zdWJzY3JpYmUoXHJcbiAgICAgIChjb250YWluZXJzOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj4pID0+IHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lcnMgPSBjb250YWluZXJzO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVSZW5kZXIoY29udGFpbmVycyk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnNlY3Rpb25Db250YWluZXJzLmNoYW5nZXMuc3Vic2NyaWJlKFxyXG4gICAgICAoY29udGFpbmVyczogUXVlcnlMaXN0PFZpZXdDb250YWluZXJSZWY+KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uQ29udGFpbmVycyA9IGNvbnRhaW5lcnM7XHJcbiAgICAgICAgdGhpcy5jdXN0b21TZWN0aW9uUmVuZGVyKGNvbnRhaW5lcnMpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuc2hvd0FuY2hvcikge1xyXG4gICAgICB0aGlzLmluaXRBbmNob3JTY3JvbGxIYW5kbGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjdXN0b21UZW1wbGF0ZVJlbmRlcihjb250YWluZXJzOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj4pIHtcclxuICAgIGlmICh0aGlzLmN1c3RvbVRlbXBsYXRlICYmIGNvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBjdXN0b21GaWVsZHMgPSBbXTtcclxuICAgICAgdGhpcy5zZWN0aW9ucy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICAgIGlmIChmaWVsZC5maWVsZEZvcm1UeXBlID09PSBcIkN1c3RvbVwiKSB7XHJcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkcy5wdXNoKGZpZWxkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnRhaW5lcnMuZm9yRWFjaCgoY29udGFpbmVyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbnRhaW5lci5jbGVhcigpO1xyXG4gICAgICAgIGNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5jdXN0b21UZW1wbGF0ZSwge1xyXG4gICAgICAgICAgJGltcGxpY2l0OiBjdXN0b21GaWVsZHNbaW5kZXhdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGN1c3RvbVNlY3Rpb25SZW5kZXIoY29udGFpbmVyczogUXVlcnlMaXN0PFZpZXdDb250YWluZXJSZWY+KSB7XHJcbiAgICBpZiAodGhpcy5jdXN0b21TZWN0aW9uVGVtcGxhdGUgJiYgY29udGFpbmVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGN1c3RvbVNlY3Rpb25zID0gdGhpcy5zZWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgKHNlY3Rpb24pID0+IHNlY3Rpb24uY3VzdG9tS2V5XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnRhaW5lcnMuZm9yRWFjaCgoY29udGFpbmVyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbnRhaW5lci5jbGVhcigpO1xyXG4gICAgICAgIGNvbnN0IGN1c3RvbUtleSA9IGN1c3RvbVNlY3Rpb25zW2luZGV4XS5jdXN0b21LZXk7XHJcbiAgICAgICAgY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLmN1c3RvbVNlY3Rpb25UZW1wbGF0ZVtjdXN0b21LZXldLCB7XHJcbiAgICAgICAgICAkaW1wbGljaXQ6IGN1c3RvbVNlY3Rpb25zW2luZGV4XSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja0Zvcm1DaGFuZ2UocHJldmlvdXM6IFJlY29yZDxzdHJpbmcsIGFueT4sIGN1cnJlbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcclxuICAgIE9iamVjdC5lbnRyaWVzKGN1cnJlbnQpLmZvckVhY2goKFtrZXksIGN1cnJlbnRWYWx1ZV0pID0+IHtcclxuICAgICAgaWYgKHByZXZpb3VzW2tleV0gIT09IGN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZChrZXkpO1xyXG4gICAgICAgIHRoaXMuZm9ybUl0ZW1WYWxpZGF0b3IoZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZvcm1hdEZvcm0oc2VjdGlvbnM6IFNlY3Rpb25JdGVtW10pIHtcclxuICAgIHNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IFNlY3Rpb25JdGVtKSA9PiB7XHJcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybVtmaWVsZC5mb3JtS2V5XSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmZpZWxkRm9ybVR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIlRleHRcIjpcclxuICAgICAgICAgICAgY2FzZSBcIkVtYWlsXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJUZXh0YXJlYVwiOlxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybVtmaWVsZC5mb3JtS2V5XSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFwiVGFnc1wiOlxyXG4gICAgICAgICAgICBjYXNlIFwiQ2hlY2tib3hcIjpcclxuICAgICAgICAgICAgY2FzZSBcIk11bHRpU2VsZWN0XCI6XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtW2ZpZWxkLmZvcm1LZXldID0gW107XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFwiU3dpdGNoXCI6XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtW2ZpZWxkLmZvcm1LZXldID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybVtmaWVsZC5mb3JtS2V5XSA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g6KGo5Y2V5o+Q5Lqk5YmN5Lya6Kem5Y+R6L+Z5Liq5Ye95pWwXHJcbiAgdXBkYXRlRm9ybSh2YWx1ZTogYW55LCBmaWVsZDogRmllbGRJdGVtKSB7XHJcbiAgICBjb25zdCBuZXdGb3JtID0ge1xyXG4gICAgICAuLi50aGlzLmZvcm0sXHJcbiAgICAgIFtmaWVsZC5mb3JtS2V5XTogdmFsdWUsXHJcbiAgICB9O1xyXG4gICAgLy8g5L+u5aSN6ZSZ6K+v5o+Q56S65pi+56S6IGJ1Z++8jOS4jeiuvue9ruS4gOS4i+acieamgueOh+aLv+S4jeWIsOacgOaWsOeahOWAvFxyXG4gICAgdGhpcy5mb3JtID0gbmV3Rm9ybTtcclxuICAgIHRoaXMuZm9ybUNoYW5nZS5lbWl0KG5ld0Zvcm0pO1xyXG4gICAgdGhpcy5maWVsZENoYW5nZS5lbWl0KHsgZmllbGQsIHZhbHVlIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9ybUl0ZW1WYWxpZGF0b3IoZmllbGQ6IEZpZWxkSXRlbSwgaXNBdXRvID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtW2ZpZWxkLmZvcm1LZXldO1xyXG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xyXG4gICAgaWYgKGZpZWxkLnJlcXVpcmVkKSB7XHJcbiAgICAgIGlzVmFsaWQgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxyXG4gICAgICAgID8gdmFsdWUubGVuZ3RoICE9PSAwXHJcbiAgICAgICAgOiAhW251bGwsIHVuZGVmaW5lZCwgXCJcIl0uaW5jbHVkZXModmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzVmFsaWQgJiYgZmllbGQuZmllbGRGb3JtVHlwZSA9PT0gXCJFbWFpbFwiICYmIHZhbHVlKSB7XHJcbiAgICAgIGlzVmFsaWQgPSBFbWFpbFBhdHRlcm4udGVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNWYWxpZCAmJiBmaWVsZC5tYXhsZW5ndGgpIHtcclxuICAgICAgaXNWYWxpZCA9IFN0cmluZyh2YWx1ZSkubGVuZ3RoIDw9IGZpZWxkLm1heGxlbmd0aDtcclxuICAgIH1cclxuICAgIGlmIChpc1ZhbGlkICYmIGZpZWxkLm1pbmxlbmd0aCkge1xyXG4gICAgICBpc1ZhbGlkID0gU3RyaW5nKHZhbHVlKS5sZW5ndGggPj0gZmllbGQubWlubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzVmFsaWQgJiYgZmllbGQubWF4KSB7XHJcbiAgICAgIGlzVmFsaWQgPSB2YWx1ZSA8PSBmaWVsZC5tYXg7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNWYWxpZCAmJiBmaWVsZC5taW4pIHtcclxuICAgICAgaXNWYWxpZCA9IHZhbHVlID49IGZpZWxkLm1pbjtcclxuICAgIH1cclxuICAgIGlmIChpc1ZhbGlkICYmIHR5cGVvZiBmaWVsZC52YWxpZGF0b3IgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBpc1ZhbGlkID0gZmllbGQudmFsaWRhdG9yLmNhbGwobnVsbCwgdmFsdWUsIGZpZWxkKTtcclxuICAgIH1cclxuICAgIGlmICghaXNBdXRvKSB7XHJcbiAgICAgIHRoaXMuZmllbGRWYWxpZE1hcFtmaWVsZC5mb3JtS2V5XSA9IGlzVmFsaWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNWYWxpZDtcclxuICB9XHJcblxyXG4gIHByZUNoZWNrRm9ybUlzVmFsaWQoKSB7XHJcbiAgICBsZXQgZm9ybUlzVmFsaWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWN0aW9ucy5mb3JFYWNoKChzZWN0aW9uKSA9PlxyXG4gICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIGZvcm1Jc1ZhbGlkID0gdGhpcy5mb3JtSXRlbVZhbGlkYXRvcihmaWVsZCkgJiYgZm9ybUlzVmFsaWQ7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIGZvcm1Jc1ZhbGlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZvcm1Jc1ZhbGlkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VjdGlvbnMuZXZlcnkoKHNlY3Rpb24pID0+XHJcbiAgICAgIHNlY3Rpb24uZmllbGRzLmV2ZXJ5KChmaWVsZCkgPT4gdGhpcy5mb3JtSXRlbVZhbGlkYXRvcihmaWVsZCwgdHJ1ZSkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGQoZm9ybUtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZmllbGRJdGVtOiBGaWVsZEl0ZW0gPSBudWxsO1xyXG4gICAgdGhpcy5zZWN0aW9ucy5maW5kKChzZWN0aW9uKSA9PiB7XHJcbiAgICAgIGZpZWxkSXRlbSA9IHNlY3Rpb24uZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5mb3JtS2V5ID09PSBmb3JtS2V5KTtcclxuICAgICAgcmV0dXJuIGZpZWxkSXRlbTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZpZWxkSXRlbTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsbEZ1bmN0aW9uKGZuOiBGdW5jdGlvbiwgLi4uYXJnczogYW55W10pIHtcclxuICAgIHRoaXMuZm9ybUl0ZW1WYWxpZGF0b3IoYXJnc1sxXSB8fCBhcmdzWzBdKTtcclxuICAgIGlmICh0eXBlb2YgZm4gPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSW5wdXQodmFsdWU6IHN0cmluZywgZmllbGQ6IEZpZWxkSXRlbSkge1xyXG4gICAgdGhpcy5jYWxsRnVuY3Rpb24oZmllbGQub25JbnB1dCwgdmFsdWUsIGZpZWxkKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKHZhbHVlOiBhbnksIGZpZWxkOiBGaWVsZEl0ZW0pIHtcclxuICAgIGlmIChmaWVsZC5maWVsZEZvcm1UeXBlID09PSBcIkRhdGVwaWNrZXJcIikge1xyXG4gICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCBcInl5eXktTU0tZGRcIik7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm0odmFsdWUsIGZpZWxkKTtcclxuICAgIHRoaXMuY2FsbEZ1bmN0aW9uKGZpZWxkLm9uQ2hhbmdlLCB2YWx1ZSwgZmllbGQpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhmaWVsZDogRmllbGRJdGVtKSB7XHJcbiAgICB0aGlzLmNhbGxGdW5jdGlvbihmaWVsZC5vbkZvY3VzLCBmaWVsZCk7XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoZmllbGQ6IEZpZWxkSXRlbSkge1xyXG4gICAgdGhpcy5jYWxsRnVuY3Rpb24oZmllbGQub25CbHVyLCBmaWVsZCk7XHJcbiAgfVxyXG5cclxuICBvbkZpbHRlcmluZyhldmVudDogRmlsdGVyaW5nRXZlbnRBcmdzLCBmaWVsZDogRmllbGRJdGVtKSB7XHJcbiAgICBjb25zdCBxdWVyeSA9IG5ldyBRdWVyeSgpO1xyXG4gICAgaWYgKGV2ZW50LnRleHQpIHtcclxuICAgICAgcXVlcnkud2hlcmUodGhpcy5vcHRpb25GaWVsZHMudGV4dCwgXCJjb250YWluc1wiLCBldmVudC50ZXh0LCB0cnVlKTtcclxuICAgIH1cclxuICAgIGV2ZW50LnVwZGF0ZURhdGEodGhpcy5vcHRpb25zTWFwW2ZpZWxkLm9wdGlvbktleV0gfHwgW10sIHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIGdldERpc2FibGVkKGZpZWxkOiBGaWVsZEl0ZW0pIHtcclxuICAgIGlmICh0aGlzLmZvcm1EaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgZmllbGQuZGlzYWJsZWQgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICByZXR1cm4gZmllbGQuZGlzYWJsZWQoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmaWVsZC5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIGdldE9wdGlvbkZpZWxkcyhmaWVsZDogRmllbGRJdGVtKSB7XHJcbiAgICBpZiAoW1wiRHJvcGRvd25cIiwgXCJBdXRvQ29tcGxldGVcIl0uaW5jbHVkZXMoZmllbGQuZmllbGRGb3JtVHlwZSkpIHtcclxuICAgICAgcmV0dXJuIHsgLi4udGhpcy5vcHRpb25GaWVsZHMsIGdyb3VwQnk6IGZpZWxkLmdyb3VwS2V5IHx8IG51bGwgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm9wdGlvbkZpZWxkcztcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oXCJzZWN0aW9uRWxcIilcclxuICBzZWN0aW9uRWxzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+O1xyXG4gIHNjcm9sbEluZGV4ID0gMDtcclxuICBpc0NsaWNrQW5jaG9yID0gZmFsc2U7XHJcblxyXG4gIG9uQ2xpY2tBbmNob3IoaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3Qgc2VjdGlvbkl0ZW1zID0gdGhpcy5zZWN0aW9uRWxzLnRvQXJyYXkoKTtcclxuICAgIHNlY3Rpb25JdGVtc1tpbmRleF0ubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh0cnVlKTtcclxuICAgIHRoaXMuc2Nyb2xsSW5kZXggPSBpbmRleDtcclxuICAgIHRoaXMuaXNDbGlja0FuY2hvciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBmaW5kU2Nyb2xsVmlld0VsKGVsOiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcclxuICAgIGlmIChlbCA9PT0gZG9jdW1lbnQuYm9keSkge1xyXG4gICAgICByZXR1cm4gZWw7XHJcbiAgICB9XHJcbiAgICBpZiAoZWwuc2Nyb2xsSGVpZ2h0ICYmIGVsLnNjcm9sbEhlaWdodCAhPT0gZWwub2Zmc2V0SGVpZ2h0KSB7XHJcbiAgICAgIHJldHVybiBlbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZpbmRTY3JvbGxWaWV3RWwoZWwucGFyZW50RWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBpbml0QW5jaG9yU2Nyb2xsSGFuZGxlcigpIHtcclxuICAgIGNvbnN0IHNjcm9sbFZpZXdFbCA9IHRoaXMuZmluZFNjcm9sbFZpZXdFbCh0aGlzLnJvb3RFbC5uYXRpdmVFbGVtZW50KTtcclxuICAgIGNvbnN0IHNjcm9sbEhlaWdodCA9IHNjcm9sbFZpZXdFbC5zY3JvbGxIZWlnaHQgLSBzY3JvbGxWaWV3RWwub2Zmc2V0SGVpZ2h0O1xyXG4gICAgY29uc3Qgc2VjdGlvblZpZXdSYXRpbyA9IHRoaXMuc2VjdGlvbkVscy50b0FycmF5KCkubWFwKChzZWN0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJhdGlvID1cclxuICAgICAgICBzZWN0aW9uLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gc2Nyb2xsVmlld0VsLnNjcm9sbEhlaWdodDtcclxuICAgICAgcmV0dXJuIHNjcm9sbEhlaWdodCAqIHJhdGlvO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgb25TY3JvbGwgPSAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmlzQ2xpY2tBbmNob3IpIHtcclxuICAgICAgICB0aGlzLmlzQ2xpY2tBbmNob3IgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc2Nyb2xsVG9wID1cclxuICAgICAgICBzY3JvbGxWaWV3RWwuc2Nyb2xsVG9wID4gc2Nyb2xsSGVpZ2h0XHJcbiAgICAgICAgICA/IHNjcm9sbEhlaWdodFxyXG4gICAgICAgICAgOiBzY3JvbGxWaWV3RWwuc2Nyb2xsVG9wO1xyXG4gICAgICBsZXQgcmFkaW9TY3JvbGxIZWlnaHQgPSAwO1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc2VjdGlvblZpZXdSYXRpby5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICByYWRpb1Njcm9sbEhlaWdodCArPSBzZWN0aW9uVmlld1JhdGlvW2luZGV4XTtcclxuICAgICAgICBpZiAocmFkaW9TY3JvbGxIZWlnaHQgPj0gc2Nyb2xsVG9wKSB7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgd2hpbGUgKFxyXG4gICAgICAgIHRoaXMuc2VjdGlvbnNbdGhpcy5zY3JvbGxJbmRleF0gJiZcclxuICAgICAgICAhdGhpcy5zZWN0aW9uc1t0aGlzLnNjcm9sbEluZGV4XS50aXRsZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNjcm9sbEluZGV4Kys7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIG9uU2Nyb2xsKCk7XHJcbiAgICBzY3JvbGxWaWV3RWwuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBvblNjcm9sbCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2RyYXdlckZvcm1FbCBjbGFzcz1cInJzLWRyYXdlci1mb3JtLWNvbnRhaW5lclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiAjc2VjdGlvbkVsIGNsYXNzPVwic2VjdGlvbi1pdGVtXCIgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2Ygc2VjdGlvbnNcIj5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICBjbGFzcz1cInNlY3Rpb24tZXhwYW5kLWNoZWNrYm94XCJcclxuICAgICAgICAqbmdJZj1cInNlY3Rpb24udGl0bGVcIlxyXG4gICAgICAvPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiICpuZ0lmPVwic2VjdGlvbi50aXRsZVwiPlxyXG4gICAgICAgIDxzcGFuPnt7IHNlY3Rpb24udGl0bGUgfX08L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1mb3JtXCIgKm5nSWY9XCIhc2VjdGlvbi5jdXN0b21LZXlcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0taXRlbVwiXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIlxyXG4gICAgICAgICAgW2F0dHIuZGF0YS1yZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZCA/ICd5ZXMnIDogJ25vJ1wiXHJcbiAgICAgICAgICBbYXR0ci5kYXRhLWRpc2FibGVkXT1cImZpZWxkLmRpc2FibGVkIHx8IGZvcm1EaXNhYmxlZCA/ICd5ZXMnIDogJ25vJ1wiXHJcbiAgICAgICAgICBbYXR0ci5kYXRhLWVycm9yXT1cIlxyXG4gICAgICAgICAgICBmaWVsZFZhbGlkTWFwW2ZpZWxkLmZvcm1LZXldID09PSBmYWxzZSA/ICd5ZXMnIDogJ25vJ1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBmaWVsZC5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGVqcy10b29sdGlwXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgIGNzc0NsYXNzPVwicnMtZHJhd2VyLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZmllbGQudG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgcG9zaXRpb249XCJSaWdodENlbnRlclwiXHJcbiAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiZmllbGQudG9vbHRpcFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtaWNvblwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9lanMtdG9vbHRpcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udGVudFwiPlxyXG4gICAgICAgICAgICA8IS0tIFJhZGlvIC0tPlxyXG4gICAgICAgICAgICA8cnMtcmFkaW8tZ3JvdXBcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkLmZpZWxkRm9ybVR5cGUgPT09ICdSYWRpbydcIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtW2ZpZWxkLmZvcm1LZXldXCJcclxuICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJvcHRpb25zTWFwW2ZpZWxkLm9wdGlvbktleV1cIlxyXG4gICAgICAgICAgICAgIFtmaWVsZHNdPVwiZ2V0T3B0aW9uRmllbGRzKGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldERpc2FibGVkKGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgW2Vycm9yXT1cImZpZWxkVmFsaWRNYXBbZmllbGQuZm9ybUtleV0gPT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBmaWVsZClcIlxyXG4gICAgICAgICAgICA+PC9ycy1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgPCEtLSBDaGVja2JveCAtLT5cclxuICAgICAgICAgICAgPHJzLWNoZWNrYm94LWdyb3VwXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZC5maWVsZEZvcm1UeXBlID09PSAnQ2hlY2tib3gnXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybVtmaWVsZC5mb3JtS2V5XVwiXHJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwib3B0aW9uc01hcFtmaWVsZC5vcHRpb25LZXldXCJcclxuICAgICAgICAgICAgICBbZmllbGRzXT1cImdldE9wdGlvbkZpZWxkcyhmaWVsZClcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXREaXNhYmxlZChmaWVsZClcIlxyXG4gICAgICAgICAgICAgIFtlcnJvcl09XCJmaWVsZFZhbGlkTWFwW2ZpZWxkLmZvcm1LZXldID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudCwgZmllbGQpXCJcclxuICAgICAgICAgICAgPjwvcnMtY2hlY2tib3gtZ3JvdXA+XHJcbiAgICAgICAgICAgIDwhLS0gU3dpdGNoIC0tPlxyXG4gICAgICAgICAgICA8cnMtc3dpdGNoLWlucHV0XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZC5maWVsZEZvcm1UeXBlID09PSAnU3dpdGNoJ1wiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1bZmllbGQuZm9ybUtleV1cIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXREaXNhYmxlZChmaWVsZClcIlxyXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIGZpZWxkKVwiXHJcbiAgICAgICAgICAgID48L3JzLXN3aXRjaC1pbnB1dD5cclxuICAgICAgICAgICAgPCEtLSBJbnB1dCAtLT5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlLWlucHV0XCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgZmllbGQuZmllbGRGb3JtVHlwZSA9PT0gJ1RleHQnIHx8XHJcbiAgICAgICAgICAgICAgICBmaWVsZC5maWVsZEZvcm1UeXBlID09PSAnRW1haWwnXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybVtmaWVsZC5mb3JtS2V5XVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldERpc2FibGVkKGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwiZmllbGQubWF4bGVuZ3RoXCJcclxuICAgICAgICAgICAgICBbYXR0ci5taW5sZW5ndGhdPVwiZmllbGQubWlubGVuZ3RoXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiZmllbGRWYWxpZE1hcFtmaWVsZC5mb3JtS2V5XSA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0KCRldmVudC50YXJnZXQudmFsdWUsIGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlLCBmaWVsZClcIlxyXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPCEtLSBUZXh0YXJlYSAtLT5cclxuICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlLWlucHV0XCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkLmZpZWxkRm9ybVR5cGUgPT09ICdUZXh0YXJlYSdcIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtW2ZpZWxkLmZvcm1LZXldXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0RGlzYWJsZWQoZmllbGQpXCJcclxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgIFthdHRyLm1heGxlbmd0aF09XCJmaWVsZC5tYXhsZW5ndGhcIlxyXG4gICAgICAgICAgICAgIFthdHRyLm1pbmxlbmd0aF09XCJmaWVsZC5taW5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJmaWVsZFZhbGlkTWFwW2ZpZWxkLmZvcm1LZXldID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50LnRhcmdldC52YWx1ZSwgZmllbGQpXCJcclxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudC50YXJnZXQudmFsdWUsIGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoZmllbGQpXCJcclxuICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoZmllbGQpXCJcclxuICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgIHJvd3M9XCIzXCJcclxuICAgICAgICAgICAgPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgIDwhLS0gTnVtYmVyIElucHV0IC0tPlxyXG4gICAgICAgICAgICA8ZWpzLW51bWVyaWN0ZXh0Ym94XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZC5maWVsZEZvcm1UeXBlID09PSAnTnVtYmVyJ1wiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1bZmllbGQuZm9ybUtleV1cIlxyXG4gICAgICAgICAgICAgIFttYXhdPVwiZmllbGQubWF4XCJcclxuICAgICAgICAgICAgICBbbWluXT1cImZpZWxkLm1pblwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1hdF09XCJmaWVsZC5mb3JtYXRcIlxyXG4gICAgICAgICAgICAgIFtlbmFibGVkXT1cIiFnZXREaXNhYmxlZChmaWVsZClcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJmaWVsZFZhbGlkTWFwW2ZpZWxkLmZvcm1LZXldID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQuaXNJbnRlcmFjdGVkICYmIG9uQ2hhbmdlKCRldmVudC52YWx1ZSwgZmllbGQpXCJcclxuICAgICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cyhmaWVsZClcIlxyXG4gICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cihmaWVsZClcIlxyXG4gICAgICAgICAgICA+PC9lanMtbnVtZXJpY3RleHRib3g+XHJcbiAgICAgICAgICAgIDwhLS0gVGFncyBJbnB1dCAtLT5cclxuICAgICAgICAgICAgPHJzLXRhZy1pbnB1dFxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZmllbGQuZmllbGRGb3JtVHlwZSA9PT0gJ1RhZ3MnXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybVtmaWVsZC5mb3JtS2V5XVwiXHJcbiAgICAgICAgICAgICAgW2ZpZWxkc109XCJnZXRPcHRpb25GaWVsZHMoZmllbGQpXCJcclxuICAgICAgICAgICAgICBbaW5wdXRNYXhsZW5ndGhdPVwiZmllbGQubWF4bGVuZ3RoXCJcclxuICAgICAgICAgICAgICBbaW5wdXRNaW5sZW5ndGhdPVwiZmllbGQubWlubGVuZ3RoXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0RGlzYWJsZWQoZmllbGQpXCJcclxuICAgICAgICAgICAgICBbZXJyb3JdPVwiZmllbGRWYWxpZE1hcFtmaWVsZC5mb3JtS2V5XSA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoZmllbGQpXCJcclxuICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoZmllbGQpXCJcclxuICAgICAgICAgICAgPjwvcnMtdGFnLWlucHV0PlxyXG4gICAgICAgICAgICA8IS0tIEF1dG9Db21wbGV0ZSAtLT5cclxuICAgICAgICAgICAgPGVqcy1hdXRvY29tcGxldGVcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkLmZpZWxkRm9ybVR5cGUgPT09ICdBdXRvQ29tcGxldGUnXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybVtmaWVsZC5mb3JtS2V5XVwiXHJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwib3B0aW9uc01hcFtmaWVsZC5vcHRpb25LZXldXCJcclxuICAgICAgICAgICAgICBbZmllbGRzXT1cImdldE9wdGlvbkZpZWxkcyhmaWVsZClcIlxyXG4gICAgICAgICAgICAgIFtlbmFibGVkXT1cIiFnZXREaXNhYmxlZChmaWVsZClcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJmaWVsZFZhbGlkTWFwW2ZpZWxkLmZvcm1LZXldID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgKGZpbHRlcmluZyk9XCJvbkZpbHRlcmluZygkZXZlbnQsIGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQuaXNJbnRlcmFjdGVkICYmIG9uQ2hhbmdlKCRldmVudC52YWx1ZSwgZmllbGQpXCJcclxuICAgICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cyhmaWVsZClcIlxyXG4gICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cihmaWVsZClcIlxyXG4gICAgICAgICAgICA+PC9lanMtYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxyXG4gICAgICAgICAgICA8ZWpzLWRyb3Bkb3dubGlzdFxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZmllbGQuZmllbGRGb3JtVHlwZSA9PT0gJ0Ryb3Bkb3duJ1wiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1bZmllbGQuZm9ybUtleV1cIlxyXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cIm9wdGlvbnNNYXBbZmllbGQub3B0aW9uS2V5XVwiXHJcbiAgICAgICAgICAgICAgW2ZpZWxkc109XCJnZXRPcHRpb25GaWVsZHMoZmllbGQpXCJcclxuICAgICAgICAgICAgICBbYWxsb3dGaWx0ZXJpbmddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW3Nob3dDbGVhckJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbZW5hYmxlZF09XCIhZ2V0RGlzYWJsZWQoZmllbGQpXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiZmllbGRWYWxpZE1hcFtmaWVsZC5mb3JtS2V5XSA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgIChmaWx0ZXJpbmcpPVwib25GaWx0ZXJpbmcoJGV2ZW50LCBmaWVsZClcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50LmlzSW50ZXJhY3RlZCAmJiBvbkNoYW5nZSgkZXZlbnQudmFsdWUsIGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoZmllbGQpXCJcclxuICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoZmllbGQpXCJcclxuICAgICAgICAgICAgPjwvZWpzLWRyb3Bkb3dubGlzdD5cclxuICAgICAgICAgICAgPCEtLSBNdWx0aVNlbGVjdCAtLT5cclxuICAgICAgICAgICAgPGVqcy1tdWx0aXNlbGVjdFxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZmllbGQuZmllbGRGb3JtVHlwZSA9PT0gJ011bHRpU2VsZWN0J1wiXHJcbiAgICAgICAgICAgICAgbW9kZT1cIkNoZWNrQm94XCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybVtmaWVsZC5mb3JtS2V5XVwiXHJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwib3B0aW9uc01hcFtmaWVsZC5vcHRpb25LZXldXCJcclxuICAgICAgICAgICAgICBbZmllbGRzXT1cImdldE9wdGlvbkZpZWxkcyhmaWVsZClcIlxyXG4gICAgICAgICAgICAgIFthbGxvd0ZpbHRlcmluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbc2hvd0Ryb3BEb3duSWNvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbZW5hYmxlZF09XCIhZ2V0RGlzYWJsZWQoZmllbGQpXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiZmllbGRWYWxpZE1hcFtmaWVsZC5mb3JtS2V5XSA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgIChmaWx0ZXJpbmcpPVwib25GaWx0ZXJpbmcoJGV2ZW50LCBmaWVsZClcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50LmlzSW50ZXJhY3RlZCAmJiBvbkNoYW5nZSgkZXZlbnQudmFsdWUsIGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoZmllbGQpXCJcclxuICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoZmllbGQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L2Vqcy1tdWx0aXNlbGVjdD5cclxuICAgICAgICAgICAgPCEtLSBEYXRlcGlja2VyIC0tPlxyXG4gICAgICAgICAgICA8ZWpzLWRhdGVwaWNrZXJcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkLmZpZWxkRm9ybVR5cGUgPT09ICdEYXRlcGlja2VyJ1wiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1bZmllbGQuZm9ybUtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtYXRdPVwiZmllbGQuZm9ybWF0IHx8ICdkZC1NTU0teXl5eSdcIlxyXG4gICAgICAgICAgICAgIFtlbmFibGVkXT1cIiFnZXREaXNhYmxlZChmaWVsZClcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJmaWVsZFZhbGlkTWFwW2ZpZWxkLmZvcm1LZXldID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQuaXNJbnRlcmFjdGVkICYmIG9uQ2hhbmdlKCRldmVudC52YWx1ZSwgZmllbGQpXCJcclxuICAgICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cyhmaWVsZClcIlxyXG4gICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cihmaWVsZClcIlxyXG4gICAgICAgICAgICA+PC9lanMtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgI2N1c3RvbVRlbXBsYXRlQ29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZC5maWVsZEZvcm1UeXBlID09PSAnQ3VzdG9tJ1wiXHJcbiAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1mb3JtXCIgKm5nSWY9XCJzZWN0aW9uLmN1c3RvbUtleVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tU2VjdGlvbkNvbnRhaW5lcj48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJzZWN0aW9ucy5sZW5ndGggPiAxICYmIHNob3dBbmNob3JcIiBjbGFzcz1cImFuY2hvci1jb250YWluZXJcIj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJhbmNob3ItaXRlbVwiXHJcbiAgICAgICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIHNlY3Rpb25zOyBsZXQgaW5kZXggPSBpbmRleFwiXHJcbiAgICAgIFtzdHlsZS5kaXNwbGF5XT1cInNlY3Rpb24udGl0bGUgPyAnYmxvY2snIDogJ25vbmUnXCJcclxuICAgICAgW2F0dHIuZGF0YS1hY3RpdmVdPVwic2Nyb2xsSW5kZXggPT09IGluZGV4ID8gJ3llcycgOiAnbm8nXCJcclxuICAgICAgW2F0dHIuZGF0YS1jb250ZW50XT1cInNlY3Rpb24udGl0bGVcIlxyXG4gICAgICAoY2xpY2spPVwib25DbGlja0FuY2hvcihpbmRleClcIlxyXG4gICAgPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// 组件类
|
|
2
|
+
import { Component, EventEmitter, Input, Output } from "@angular/core";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "@angular/forms";
|
|
6
|
+
export class EncryptedInputComponent {
|
|
7
|
+
value;
|
|
8
|
+
disabled = false;
|
|
9
|
+
error = false;
|
|
10
|
+
placeholder = "";
|
|
11
|
+
valueChange = new EventEmitter();
|
|
12
|
+
encrypted = true;
|
|
13
|
+
ngOnInit() { }
|
|
14
|
+
onInput(event) {
|
|
15
|
+
const value = event.target.value;
|
|
16
|
+
this.valueChange.emit(value);
|
|
17
|
+
}
|
|
18
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EncryptedInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
19
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EncryptedInputComponent, selector: "rs-encrypted-input", inputs: { value: "value", disabled: "disabled", error: "error", placeholder: "placeholder" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"rs-encrypted-input\">\r\n <input\r\n [ngClass]=\"{\r\n disabled: disabled,\r\n error: error\r\n }\"\r\n class=\"e-input\"\r\n type=\"text\"\r\n [type]=\"encrypted ? 'password' : 'text'\"\r\n [(ngModel)]=\"value\"\r\n [disabled]=\"disabled\"\r\n (input)=\"onInput($event)\"\r\n />\r\n <span\r\n [ngClass]=\"{ 'right-eyes': true, 'close-eye': !encrypted }\"\r\n (click)=\"encrypted = !encrypted\"\r\n ></span>\r\n</div>\r\n", styles: [".rs-encrypted-input{position:relative}.rs-encrypted-input .e-input{padding-right:38px!important}.rs-encrypted-input .right-eyes{display:inline-block;cursor:pointer;position:absolute;top:50%;transform:translateY(-12px);right:8px;width:24px;height:24px;background-image:url(/assets/img/eye-open.svg)}.rs-encrypted-input .close-eye{background-image:url(/assets/img/eye-close.svg)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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"] }] });
|
|
20
|
+
}
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EncryptedInputComponent, decorators: [{
|
|
22
|
+
type: Component,
|
|
23
|
+
args: [{ selector: "rs-encrypted-input", template: "<div class=\"rs-encrypted-input\">\r\n <input\r\n [ngClass]=\"{\r\n disabled: disabled,\r\n error: error\r\n }\"\r\n class=\"e-input\"\r\n type=\"text\"\r\n [type]=\"encrypted ? 'password' : 'text'\"\r\n [(ngModel)]=\"value\"\r\n [disabled]=\"disabled\"\r\n (input)=\"onInput($event)\"\r\n />\r\n <span\r\n [ngClass]=\"{ 'right-eyes': true, 'close-eye': !encrypted }\"\r\n (click)=\"encrypted = !encrypted\"\r\n ></span>\r\n</div>\r\n", styles: [".rs-encrypted-input{position:relative}.rs-encrypted-input .e-input{padding-right:38px!important}.rs-encrypted-input .right-eyes{display:inline-block;cursor:pointer;position:absolute;top:50%;transform:translateY(-12px);right:8px;width:24px;height:24px;background-image:url(/assets/img/eye-open.svg)}.rs-encrypted-input .close-eye{background-image:url(/assets/img/eye-close.svg)}\n"] }]
|
|
24
|
+
}], propDecorators: { value: [{
|
|
25
|
+
type: Input
|
|
26
|
+
}], disabled: [{
|
|
27
|
+
type: Input
|
|
28
|
+
}], error: [{
|
|
29
|
+
type: Input
|
|
30
|
+
}], placeholder: [{
|
|
31
|
+
type: Input
|
|
32
|
+
}], valueChange: [{
|
|
33
|
+
type: Output
|
|
34
|
+
}] } });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vZW5jcnlwdGVkLWlucHV0L2luZGV4LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JhaXNlLWNvbW1vbi1saWIvc3JjL2xpYi9mb3JtL2VuY3J5cHRlZC1pbnB1dC9pbmRleC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNO0FBQ04sT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQU8vRSxNQUFNLE9BQU8sdUJBQXVCO0lBQ3pCLEtBQUssQ0FBQztJQUNOLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFHMUIsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQixRQUFRLEtBQUksQ0FBQztJQUNiLE9BQU8sQ0FBQyxLQUFLO1FBQ1gsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQzt3R0FiVSx1QkFBdUI7NEZBQXZCLHVCQUF1QixpTUNScEMsZ2VBa0JBOzs0RkRWYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usb0JBQW9COzhCQUtyQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFHTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyDnu4Tku7bnsbtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJycy1lbmNyeXB0ZWQtaW5wdXRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2luZGV4LmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRW5jcnlwdGVkSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHZhbHVlO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZXJyb3IgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGVuY3J5cHRlZCA9IHRydWU7XHJcbiAgbmdPbkluaXQoKSB7fVxyXG4gIG9uSW5wdXQoZXZlbnQpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJzLWVuY3J5cHRlZC1pbnB1dFwiPlxyXG4gIDxpbnB1dFxyXG4gICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXHJcbiAgICAgIGVycm9yOiBlcnJvclxyXG4gICAgfVwiXHJcbiAgICBjbGFzcz1cImUtaW5wdXRcIlxyXG4gICAgdHlwZT1cInRleHRcIlxyXG4gICAgW3R5cGVdPVwiZW5jcnlwdGVkID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J1wiXHJcbiAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcclxuICAvPlxyXG4gIDxzcGFuXHJcbiAgICBbbmdDbGFzc109XCJ7ICdyaWdodC1leWVzJzogdHJ1ZSwgJ2Nsb3NlLWV5ZSc6ICFlbmNyeXB0ZWQgfVwiXHJcbiAgICAoY2xpY2spPVwiZW5jcnlwdGVkID0gIWVuY3J5cHRlZFwiXHJcbiAgPjwvc3Bhbj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -19,11 +19,11 @@ export class RadioGroupComponent {
|
|
|
19
19
|
this.valueChange.emit(value);
|
|
20
20
|
}
|
|
21
21
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
22
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RadioGroupComponent, selector: "rs-radio-group", inputs: { value: "value", dataSource: "dataSource", orientation: "orientation", fields: "fields", disabled: "disabled", error: "error" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"radio-group\" [ngClass]=\"[orientation, error ? 'error' : '']\">\r\n <div class=\"radio-item\" *ngFor=\"let option of dataSource\">\r\n <ejs-radiobutton\r\n [label]=\"option[fields.text]\"\r\n [(ngModel)]=\"value\"\r\n [value]=\"option[fields.value]\"\r\n [disabled]=\"option[fields.disabled] || disabled\"\r\n (change)=\"onChange($event)\"\r\n ></ejs-radiobutton>\r\n </div>\r\n</div>\r\n", styles: [".radio-group{display:flex;padding-left:4px}.radio-group.horizontal{flex-direction:row;gap:35px}.radio-group.vertical{flex-direction:column;gap:14px}.radio-group
|
|
22
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RadioGroupComponent, selector: "rs-radio-group", inputs: { value: "value", dataSource: "dataSource", orientation: "orientation", fields: "fields", disabled: "disabled", error: "error" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"radio-group\" [ngClass]=\"[orientation, error ? 'error' : '']\">\r\n <div class=\"radio-item\" *ngFor=\"let option of dataSource\">\r\n <ejs-radiobutton\r\n [label]=\"option[fields.text]\"\r\n [(ngModel)]=\"value\"\r\n [value]=\"option[fields.value]\"\r\n [disabled]=\"option[fields.disabled] || disabled\"\r\n (change)=\"onChange($event)\"\r\n ></ejs-radiobutton>\r\n </div>\r\n</div>\r\n", styles: [".radio-group{display:flex;padding-left:4px}.radio-group.horizontal{flex-direction:row;gap:35px}.radio-group.vertical{flex-direction:column;gap:14px}.radio-group.error .e-radio+label:before{border-color:var(--rs-input-error-border-color)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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"] }, { kind: "component", type: i3.RadioButtonComponent, selector: "ejs-radiobutton", inputs: ["checked", "cssClass", "disabled", "enableHtmlSanitizer", "enablePersistence", "enableRtl", "htmlAttributes", "label", "labelPosition", "locale", "name", "value"], outputs: ["focus", "blur", "change", "created", "valueChange"] }] });
|
|
23
23
|
}
|
|
24
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RadioGroupComponent, decorators: [{
|
|
25
25
|
type: Component,
|
|
26
|
-
args: [{ selector: "rs-radio-group", template: "<div class=\"radio-group\" [ngClass]=\"[orientation, error ? 'error' : '']\">\r\n <div class=\"radio-item\" *ngFor=\"let option of dataSource\">\r\n <ejs-radiobutton\r\n [label]=\"option[fields.text]\"\r\n [(ngModel)]=\"value\"\r\n [value]=\"option[fields.value]\"\r\n [disabled]=\"option[fields.disabled] || disabled\"\r\n (change)=\"onChange($event)\"\r\n ></ejs-radiobutton>\r\n </div>\r\n</div>\r\n", styles: [".radio-group{display:flex;padding-left:4px}.radio-group.horizontal{flex-direction:row;gap:35px}.radio-group.vertical{flex-direction:column;gap:14px}.radio-group
|
|
26
|
+
args: [{ selector: "rs-radio-group", template: "<div class=\"radio-group\" [ngClass]=\"[orientation, error ? 'error' : '']\">\r\n <div class=\"radio-item\" *ngFor=\"let option of dataSource\">\r\n <ejs-radiobutton\r\n [label]=\"option[fields.text]\"\r\n [(ngModel)]=\"value\"\r\n [value]=\"option[fields.value]\"\r\n [disabled]=\"option[fields.disabled] || disabled\"\r\n (change)=\"onChange($event)\"\r\n ></ejs-radiobutton>\r\n </div>\r\n</div>\r\n", styles: [".radio-group{display:flex;padding-left:4px}.radio-group.horizontal{flex-direction:row;gap:35px}.radio-group.vertical{flex-direction:column;gap:14px}.radio-group.error .e-radio+label:before{border-color:var(--rs-input-error-border-color)}\n"] }]
|
|
27
27
|
}], propDecorators: { value: [{
|
|
28
28
|
type: Input
|
|
29
29
|
}], dataSource: [{
|