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.
Files changed (135) hide show
  1. package/assets/language/fr.d.ts +3377 -0
  2. package/assets/language/ja.d.ts +3351 -0
  3. package/assets/language/ko.d.ts +3351 -0
  4. package/assets/language/zh-CN.d.ts +3064 -0
  5. package/assets/language/zh-TW.d.ts +3354 -0
  6. package/esm2022/assets/language/fr.mjs +3378 -0
  7. package/esm2022/assets/language/ja.mjs +3352 -0
  8. package/esm2022/assets/language/ko.mjs +3352 -0
  9. package/esm2022/assets/language/zh-CN.mjs +3065 -0
  10. package/esm2022/assets/language/zh-TW.mjs +3355 -0
  11. package/esm2022/lib/commentary/constants.mjs +2 -0
  12. package/esm2022/lib/commentary/index.component.mjs +146 -0
  13. package/esm2022/lib/common-grid/grid-action/grid-action-item/grid-action-item.component.mjs +44 -0
  14. package/esm2022/lib/common-grid/grid-action/grid-action.component.mjs +18 -0
  15. package/esm2022/lib/common-grid/index.component.mjs +52 -30
  16. package/esm2022/lib/dialog/common-delete-dialog/index.component.mjs +2 -2
  17. package/esm2022/lib/dialog/common-dialog/index.component.mjs +4 -4
  18. package/esm2022/lib/form/checkbox-group/index.component.mjs +2 -2
  19. package/esm2022/lib/form/drawer-form/constants.mjs +10 -0
  20. package/esm2022/lib/form/drawer-form/drawer-form.component.mjs +336 -0
  21. package/esm2022/lib/form/encrypted-input/index.component.mjs +35 -0
  22. package/esm2022/lib/form/radio-group/index.component.mjs +2 -2
  23. package/esm2022/lib/form/switch-input/index.component.mjs +2 -2
  24. package/esm2022/lib/form/tag-input/index.component.mjs +31 -11
  25. package/esm2022/lib/form/toolbar-item/index.component.mjs +56 -0
  26. package/esm2022/lib/layout/drawer/index.component.mjs +165 -0
  27. package/esm2022/lib/layout/grid-box/index.component.mjs +67 -0
  28. package/esm2022/lib/layout/main-container/index.component.mjs +50 -8
  29. package/esm2022/lib/layout/multi-tab/index.component.mjs +267 -0
  30. package/esm2022/lib/layout/nav-card-group/constants.mjs +2 -0
  31. package/esm2022/lib/layout/nav-card-group/index.component.mjs +37 -0
  32. package/esm2022/lib/layout/page-list/index.component.mjs +73 -0
  33. package/esm2022/lib/layout/page-tab/index.component.mjs +56 -0
  34. package/esm2022/lib/layout/rs-aside/index.component.mjs +55 -10
  35. package/esm2022/lib/layout/rs-footer/index.component.mjs +2 -2
  36. package/esm2022/lib/layout/rs-header/index.component.mjs +38 -29
  37. package/esm2022/lib/layout/toolbar/constants.mjs +2 -0
  38. package/esm2022/lib/layout/toolbar/index.component.mjs +79 -0
  39. package/esm2022/lib/raise-common-lib.module.mjs +116 -17
  40. package/esm2022/lib/service/common-function.service.mjs +125 -1
  41. package/esm2022/lib/service/dialog.service.mjs +5 -5
  42. package/esm2022/lib/service/drawer.service.mjs +111 -0
  43. package/esm2022/lib/service/icon-loader.service.mjs +12 -9
  44. package/esm2022/lib/service/keep-alive.service.mjs +83 -0
  45. package/esm2022/lib/service/translation.service.mjs +98 -0
  46. package/esm2022/lib/utils/decorator.mjs +14 -0
  47. package/esm2022/public-api.mjs +35 -16
  48. package/fesm2022/raise-common-lib-new.mjs +18952 -538
  49. package/fesm2022/raise-common-lib-new.mjs.map +1 -1
  50. package/lib/commentary/constants.d.ts +15 -0
  51. package/lib/commentary/index.component.d.ts +38 -0
  52. package/lib/common-grid/grid-action/grid-action-item/grid-action-item.component.d.ts +10 -0
  53. package/lib/common-grid/grid-action/grid-action.component.d.ts +14 -0
  54. package/lib/common-grid/index.component.d.ts +8 -5
  55. package/lib/float-box/index.component.d.ts +2 -2
  56. package/lib/form/drawer-form/constants.d.ts +34 -0
  57. package/lib/form/drawer-form/drawer-form.component.d.ts +67 -0
  58. package/lib/form/encrypted-input/index.component.d.ts +14 -0
  59. package/lib/form/tag-input/index.component.d.ts +9 -3
  60. package/lib/form/toolbar-item/index.component.d.ts +17 -0
  61. package/lib/layout/drawer/index.component.d.ts +45 -0
  62. package/lib/layout/grid-box/index.component.d.ts +19 -0
  63. package/lib/layout/main-container/index.component.d.ts +11 -1
  64. package/lib/layout/multi-tab/index.component.d.ts +53 -0
  65. package/lib/layout/nav-card-group/constants.d.ts +14 -0
  66. package/lib/layout/nav-card-group/index.component.d.ts +16 -0
  67. package/lib/layout/page-list/index.component.d.ts +21 -0
  68. package/lib/layout/page-tab/index.component.d.ts +18 -0
  69. package/lib/layout/rs-aside/index.component.d.ts +8 -3
  70. package/lib/layout/rs-header/index.component.d.ts +12 -12
  71. package/lib/layout/toolbar/constants.d.ts +8 -0
  72. package/lib/layout/toolbar/index.component.d.ts +22 -0
  73. package/lib/raise-common-lib.module.d.ts +48 -34
  74. package/lib/service/common-function.service.d.ts +11 -0
  75. package/lib/service/drawer.service.d.ts +46 -0
  76. package/lib/service/icon-loader.service.d.ts +5 -3
  77. package/lib/service/keep-alive.service.d.ts +15 -0
  78. package/lib/service/translation.service.d.ts +12 -0
  79. package/lib/utils/decorator.d.ts +1 -0
  80. package/package.json +1 -1
  81. package/public-api.d.ts +34 -15
  82. package/src/assets/img/close-url.svg +10 -0
  83. package/src/assets/img/comment-cancel.svg +4 -0
  84. package/src/assets/img/comment-check.svg +5 -0
  85. package/src/assets/img/desktop-refresh-btn.svg +6 -0
  86. package/src/assets/img/down-arrow.svg +3 -0
  87. package/src/assets/img/drawer-back.svg +4 -0
  88. package/src/assets/img/eye-close.svg +4 -0
  89. package/src/assets/img/eye-open.svg +4 -0
  90. package/src/assets/img/grid-action-copy.svg +6 -0
  91. package/src/assets/img/grid-action-delete.svg +14 -0
  92. package/src/assets/img/grid-action-detail.svg +7 -0
  93. package/src/assets/img/grid-action-download.svg +7 -0
  94. package/src/assets/img/grid-action-edit.svg +4 -0
  95. package/src/assets/img/grid-action-export.svg +12 -0
  96. package/src/assets/img/grid-action-move.svg +8 -0
  97. package/src/assets/img/grid-action-note.svg +10 -0
  98. package/src/assets/img/grid-action-send.svg +5 -0
  99. package/src/assets/img/grid-action-settle.svg +13 -0
  100. package/src/assets/img/grid-menu-arrow-right.svg +3 -0
  101. package/src/assets/img/grid-pager-arrow-left.svg +3 -0
  102. package/src/assets/img/grid-pager-arrows-left.svg +4 -0
  103. package/src/assets/img/icon-more-active.svg +7 -0
  104. package/src/assets/img/icon-more.svg +7 -0
  105. package/src/assets/img/more.svg +5 -0
  106. package/src/assets/img/split-button-arrow.svg +3 -0
  107. package/src/assets/img/table-column-menu.svg +5 -0
  108. package/src/assets/img/table-sort-arrow.svg +6 -0
  109. package/src/assets/img/toolbar-action-add.svg +4 -0
  110. package/src/assets/img/toolbar-action-delete.svg +14 -0
  111. package/src/assets/img/toolbar-action-download.svg +5 -0
  112. package/src/assets/img/toolbar-action-duplicate.svg +6 -0
  113. package/src/assets/img/toolbar-action-export.svg +5 -0
  114. package/src/assets/img/toolbar-action-import.svg +5 -0
  115. package/src/assets/img/toolbar-action-refresh.svg +14 -0
  116. package/src/assets/img/toolbar-action-upload.svg +5 -0
  117. package/src/assets/img/tooltip-icon.svg +4 -0
  118. package/src/assets/language/fr.ts +3603 -0
  119. package/src/assets/language/ja.ts +3501 -0
  120. package/src/assets/language/ko.ts +3478 -0
  121. package/src/assets/language/zh-CN.ts +3115 -0
  122. package/src/assets/language/zh-TW.ts +3411 -0
  123. package/src/assets/style/reset/button.scss +78 -10
  124. package/src/assets/style/reset/checkbox.scss +33 -0
  125. package/src/assets/style/reset/dropdown.scss +42 -10
  126. package/src/assets/style/reset/grid.scss +733 -132
  127. package/src/assets/style/reset/input.scss +45 -12
  128. package/src/assets/style/reset/mat-dialog.scss +6 -2
  129. package/src/assets/style/reset/radio.scss +37 -0
  130. package/src/assets/style/reset/switch.scss +32 -0
  131. package/src/assets/style/style.scss +6 -0
  132. package/src/assets/style/syncfusion.min.css +1 -1
  133. package/src/assets/style/variables.scss +4 -4
  134. package/esm2022/lib/layout/common-list/index.component.mjs +0 -43
  135. 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 .radio-item .e-radio:disabled+label:before{border-color:#d1d1d180;background-color:#eaedf059}.radio-group .radio-item .e-radio:checked+label:before{background-color:var(--rs-active-color);border-color:var(--rs-active-color);box-shadow:none}.radio-group .radio-item .e-radio:checked+label:after{content:\"\"!important;display:block;width:11px;height:8px;background-image:url(/assets/img/checked-vector.svg);background-size:cover;background-position:center;background-color:transparent;transform:scale(1);left:2px;top:3px;border:0;border-radius:0}.radio-group .radio-item .e-label{color:var(--rs-label-color);font-family:var(--rs-font-family);font-size:var(--rs-font-size);font-weight:400;line-height:14px}\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"] }] });
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 .radio-item .e-radio:disabled+label:before{border-color:#d1d1d180;background-color:#eaedf059}.radio-group .radio-item .e-radio:checked+label:before{background-color:var(--rs-active-color);border-color:var(--rs-active-color);box-shadow:none}.radio-group .radio-item .e-radio:checked+label:after{content:\"\"!important;display:block;width:11px;height:8px;background-image:url(/assets/img/checked-vector.svg);background-size:cover;background-position:center;background-color:transparent;transform:scale(1);left:2px;top:3px;border:0;border-radius:0}.radio-group .radio-item .e-label{color:var(--rs-label-color);font-family:var(--rs-font-family);font-size:var(--rs-font-size);font-weight:400;line-height:14px}\n"] }]
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: [{