coer-elements 0.0.23 → 0.0.25

Sign up to get free protection for your applications and to get access to all the features.
Files changed (181) hide show
  1. package/components/index.d.ts +5 -0
  2. package/components/lib/coer-button/coer-button.component.d.ts +44 -0
  3. package/components/lib/coer-checkbox/coer-checkbox.component.d.ts +28 -0
  4. package/components/lib/coer-filebox/coer-filebox.component.d.ts +33 -0
  5. package/components/lib/coer-form/coer-form.component.d.ts +33 -0
  6. package/components/lib/coer-grid/coer-grid.component.d.ts +53 -0
  7. package/components/lib/coer-grid/coer-grid.extension.d.ts +103 -0
  8. package/components/lib/coer-grid/coer-grid.templates.d.ts +9 -0
  9. package/components/lib/coer-modal/coer-modal.component.d.ts +38 -0
  10. package/components/lib/coer-numberbox/coer-numberbox.component.d.ts +55 -0
  11. package/components/lib/coer-page-title/coer-page-title.component.d.ts +12 -0
  12. package/components/lib/coer-selectbox/coer-selectbox.component.d.ts +75 -0
  13. package/components/lib/coer-switch/coer-switch.component.d.ts +31 -0
  14. package/components/lib/coer-tab/coer-tab.component.d.ts +35 -0
  15. package/components/lib/coer-textarea/coer-textarea.component.d.ts +51 -0
  16. package/components/lib/coer-textbox/coer-textbox.component.d.ts +57 -0
  17. package/components/lib/components.module.d.ts +30 -0
  18. package/components/public-api.d.ts +15 -0
  19. package/directives/index.d.ts +5 -0
  20. package/directives/lib/coer-ref.directive.d.ts +14 -0
  21. package/directives/lib/directives.module.d.ts +8 -0
  22. package/directives/lib/life-cycle.directive.d.ts +16 -0
  23. package/directives/public-api.d.ts +3 -0
  24. package/esm2022/components/coer-elements-components.mjs +5 -0
  25. package/esm2022/components/lib/coer-button/coer-button.component.mjs +133 -0
  26. package/esm2022/components/lib/coer-checkbox/coer-checkbox.component.mjs +83 -0
  27. package/esm2022/components/lib/coer-filebox/coer-filebox.component.mjs +102 -0
  28. package/esm2022/components/lib/coer-form/coer-form.component.mjs +101 -0
  29. package/esm2022/components/lib/coer-grid/coer-grid.component.mjs +512 -0
  30. package/esm2022/components/lib/coer-grid/coer-grid.extension.mjs +408 -0
  31. package/esm2022/components/lib/coer-grid/coer-grid.templates.mjs +30 -0
  32. package/esm2022/components/lib/coer-modal/coer-modal.component.mjs +107 -0
  33. package/esm2022/components/lib/coer-numberbox/coer-numberbox.component.mjs +258 -0
  34. package/esm2022/components/lib/coer-page-title/coer-page-title.component.mjs +44 -0
  35. package/esm2022/components/lib/coer-selectbox/coer-selectbox.component.mjs +338 -0
  36. package/esm2022/components/lib/coer-switch/coer-switch.component.mjs +93 -0
  37. package/esm2022/components/lib/coer-tab/coer-tab.component.mjs +116 -0
  38. package/esm2022/components/lib/coer-textarea/coer-textarea.component.mjs +156 -0
  39. package/esm2022/components/lib/coer-textbox/coer-textbox.component.mjs +195 -0
  40. package/esm2022/components/lib/components.module.mjs +129 -0
  41. package/esm2022/components/public-api.mjs +16 -0
  42. package/esm2022/directives/coer-elements-directives.mjs +5 -0
  43. package/esm2022/directives/lib/coer-ref.directive.mjs +23 -0
  44. package/esm2022/directives/lib/directives.module.mjs +25 -0
  45. package/esm2022/directives/lib/life-cycle.directive.mjs +33 -0
  46. package/esm2022/directives/public-api.mjs +4 -0
  47. package/esm2022/interfaces/coer-elements-interfaces.mjs +5 -0
  48. package/esm2022/interfaces/lib/app-source.interface.mjs +2 -0
  49. package/esm2022/interfaces/lib/coer-filebox/file-image.interface.mjs +2 -0
  50. package/esm2022/interfaces/lib/coer-filebox/file.interface.mjs +2 -0
  51. package/esm2022/interfaces/lib/coer-grid/grid-button-by-row.interface.mjs +2 -0
  52. package/esm2022/interfaces/lib/coer-grid/grid-checkbox.interface.mjs +2 -0
  53. package/esm2022/interfaces/lib/coer-grid/grid-coer-numberbox.interface.mjs +2 -0
  54. package/esm2022/interfaces/lib/coer-grid/grid-coer-selectbox.interface.mjs +2 -0
  55. package/esm2022/interfaces/lib/coer-grid/grid-coer-switch.interface.mjs +2 -0
  56. package/esm2022/interfaces/lib/coer-grid/grid-coer-textbox.interface.mjs +2 -0
  57. package/esm2022/interfaces/lib/coer-grid/grid-column.interface.mjs +2 -0
  58. package/esm2022/interfaces/lib/coer-grid/grid-data-source.interface.mjs +2 -0
  59. package/esm2022/interfaces/lib/coer-grid/grid-header-button.interface.mjs +2 -0
  60. package/esm2022/interfaces/lib/coer-grid/grid-header-export-button.interface.mjs +2 -0
  61. package/esm2022/interfaces/lib/coer-grid/grid-header.interface.mjs +2 -0
  62. package/esm2022/interfaces/lib/coer-grid/grid-import.interface.mjs +2 -0
  63. package/esm2022/interfaces/lib/coer-grid/grid-input-checkbox.interface.mjs +2 -0
  64. package/esm2022/interfaces/lib/coer-grid/grid-input-switch-change.interface.mjs +2 -0
  65. package/esm2022/interfaces/lib/coer-grid/grid-input-textbox.interface.mjs +2 -0
  66. package/esm2022/interfaces/lib/coer-grid/grid-item.interface.mjs +2 -0
  67. package/esm2022/interfaces/lib/coer-grid/grid-keyup-enter.interface.mjs +2 -0
  68. package/esm2022/interfaces/lib/coer-grid/grid-length.interface.mjs +2 -0
  69. package/esm2022/interfaces/lib/coer-grid/grid-search.interface.mjs +2 -0
  70. package/esm2022/interfaces/lib/coer-grid/grid-sort.interface.mjs +2 -0
  71. package/esm2022/interfaces/lib/coer-menu/menu-option-selected.interface.mjs +2 -0
  72. package/esm2022/interfaces/lib/coer-menu/menu-selected.interface.mjs +2 -0
  73. package/esm2022/interfaces/lib/coer-menu/menu.interface.mjs +2 -0
  74. package/esm2022/interfaces/lib/coer-ref.interface.mjs +2 -0
  75. package/esm2022/interfaces/lib/page-title/breadcrumb.interface.mjs +2 -0
  76. package/esm2022/interfaces/lib/page-title/go-back.interface.mjs +2 -0
  77. package/esm2022/interfaces/lib/screen-size.interface.mjs +2 -0
  78. package/esm2022/interfaces/lib/service/http-request.interface.mjs +2 -0
  79. package/esm2022/interfaces/lib/service/http-response.interface.mjs +2 -0
  80. package/esm2022/interfaces/lib/service/patch.interface.mjs +2 -0
  81. package/esm2022/interfaces/public-api.mjs +39 -0
  82. package/esm2022/pipes/coer-elements-pipes.mjs +5 -0
  83. package/esm2022/pipes/lib/html.pipe.mjs +18 -0
  84. package/esm2022/pipes/lib/no-image.pipe.mjs +23 -0
  85. package/esm2022/pipes/lib/numeric-format.pipe.mjs +15 -0
  86. package/esm2022/pipes/lib/pipes.module.mjs +31 -0
  87. package/esm2022/pipes/public-api.mjs +5 -0
  88. package/esm2022/signals/coer-elements-signals.mjs +5 -0
  89. package/esm2022/signals/lib/breakpoint.signal.mjs +4 -0
  90. package/esm2022/signals/lib/is-loading.signal.mjs +3 -0
  91. package/esm2022/signals/lib/is-menu-open.signal.mjs +3 -0
  92. package/esm2022/signals/lib/is-modal-open.signal.mjs +3 -0
  93. package/esm2022/signals/lib/menu.signal.mjs +3 -0
  94. package/esm2022/signals/public-api.mjs +6 -0
  95. package/esm2022/tools/coer-elements-tools.mjs +5 -0
  96. package/esm2022/tools/lib/breadcrumbs.class.mjs +63 -0
  97. package/esm2022/tools/lib/coer-alert/coer-alert.component.mjs +228 -0
  98. package/esm2022/tools/lib/control-value.class.mjs +46 -0
  99. package/esm2022/tools/lib/date-time.class.mjs +29 -0
  100. package/esm2022/tools/lib/files.class.mjs +91 -0
  101. package/esm2022/tools/lib/menu.class.mjs +23 -0
  102. package/esm2022/tools/lib/page.class.mjs +156 -0
  103. package/esm2022/tools/lib/screen.class.mjs +51 -0
  104. package/esm2022/tools/lib/service.class.mjs +247 -0
  105. package/esm2022/tools/lib/source.class.mjs +80 -0
  106. package/esm2022/tools/lib/tools.mjs +220 -0
  107. package/esm2022/tools/public-api.mjs +12 -0
  108. package/fesm2022/coer-elements-components.mjs +2718 -0
  109. package/fesm2022/coer-elements-components.mjs.map +1 -0
  110. package/fesm2022/coer-elements-directives.mjs +82 -0
  111. package/fesm2022/coer-elements-directives.mjs.map +1 -0
  112. package/fesm2022/coer-elements-interfaces.mjs +6 -0
  113. package/fesm2022/coer-elements-interfaces.mjs.map +1 -0
  114. package/fesm2022/coer-elements-pipes.mjs +83 -0
  115. package/fesm2022/coer-elements-pipes.mjs.map +1 -0
  116. package/fesm2022/coer-elements-signals.mjs +19 -0
  117. package/fesm2022/coer-elements-signals.mjs.map +1 -0
  118. package/fesm2022/coer-elements-tools.mjs +1223 -0
  119. package/fesm2022/coer-elements-tools.mjs.map +1 -0
  120. package/interfaces/index.d.ts +5 -0
  121. package/interfaces/lib/app-source.interface.d.ts +4 -0
  122. package/interfaces/lib/coer-filebox/file-image.interface.d.ts +14 -0
  123. package/interfaces/lib/coer-filebox/file.interface.d.ts +5 -0
  124. package/interfaces/lib/coer-grid/grid-button-by-row.interface.d.ts +6 -0
  125. package/interfaces/lib/coer-grid/grid-checkbox.interface.d.ts +5 -0
  126. package/interfaces/lib/coer-grid/grid-coer-numberbox.interface.d.ts +12 -0
  127. package/interfaces/lib/coer-grid/grid-coer-selectbox.interface.d.ts +9 -0
  128. package/interfaces/lib/coer-grid/grid-coer-switch.interface.d.ts +6 -0
  129. package/interfaces/lib/coer-grid/grid-coer-textbox.interface.d.ts +11 -0
  130. package/interfaces/lib/coer-grid/grid-column.interface.d.ts +22 -0
  131. package/interfaces/lib/coer-grid/grid-data-source.interface.d.ts +6 -0
  132. package/interfaces/lib/coer-grid/grid-header-button.interface.d.ts +8 -0
  133. package/interfaces/lib/coer-grid/grid-header-export-button.interface.d.ts +10 -0
  134. package/interfaces/lib/coer-grid/grid-header.interface.d.ts +5 -0
  135. package/interfaces/lib/coer-grid/grid-import.interface.d.ts +4 -0
  136. package/interfaces/lib/coer-grid/grid-input-checkbox.interface.d.ts +5 -0
  137. package/interfaces/lib/coer-grid/grid-input-switch-change.interface.d.ts +5 -0
  138. package/interfaces/lib/coer-grid/grid-input-textbox.interface.d.ts +5 -0
  139. package/interfaces/lib/coer-grid/grid-item.interface.d.ts +5 -0
  140. package/interfaces/lib/coer-grid/grid-keyup-enter.interface.d.ts +6 -0
  141. package/interfaces/lib/coer-grid/grid-length.interface.d.ts +5 -0
  142. package/interfaces/lib/coer-grid/grid-search.interface.d.ts +4 -0
  143. package/interfaces/lib/coer-grid/grid-sort.interface.d.ts +5 -0
  144. package/interfaces/lib/coer-menu/menu-option-selected.interface.d.ts +9 -0
  145. package/interfaces/lib/coer-menu/menu-selected.interface.d.ts +10 -0
  146. package/interfaces/lib/coer-menu/menu.interface.d.ts +6 -0
  147. package/interfaces/lib/coer-ref.interface.d.ts +10 -0
  148. package/interfaces/lib/page-title/breadcrumb.interface.d.ts +6 -0
  149. package/interfaces/lib/page-title/go-back.interface.d.ts +6 -0
  150. package/interfaces/lib/screen-size.interface.d.ts +5 -0
  151. package/interfaces/lib/service/http-request.interface.d.ts +10 -0
  152. package/interfaces/lib/service/http-response.interface.d.ts +6 -0
  153. package/interfaces/lib/service/patch.interface.d.ts +5 -0
  154. package/interfaces/public-api.d.ts +33 -0
  155. package/package.json +37 -1
  156. package/pipes/index.d.ts +5 -0
  157. package/pipes/lib/html.pipe.d.ts +10 -0
  158. package/pipes/lib/no-image.pipe.d.ts +7 -0
  159. package/pipes/lib/numeric-format.pipe.d.ts +7 -0
  160. package/pipes/lib/pipes.module.d.ts +9 -0
  161. package/pipes/public-api.d.ts +4 -0
  162. package/signals/index.d.ts +5 -0
  163. package/signals/lib/breakpoint.signal.d.ts +1 -0
  164. package/signals/lib/is-loading.signal.d.ts +1 -0
  165. package/signals/lib/is-menu-open.signal.d.ts +1 -0
  166. package/signals/lib/is-modal-open.signal.d.ts +1 -0
  167. package/signals/lib/menu.signal.d.ts +2 -0
  168. package/signals/public-api.d.ts +5 -0
  169. package/tools/index.d.ts +5 -0
  170. package/tools/lib/breadcrumbs.class.d.ts +18 -0
  171. package/tools/lib/coer-alert/coer-alert.component.d.ts +23 -0
  172. package/tools/lib/control-value.class.d.ts +25 -0
  173. package/tools/lib/date-time.class.d.ts +13 -0
  174. package/tools/lib/files.class.d.ts +16 -0
  175. package/tools/lib/menu.class.d.ts +8 -0
  176. package/tools/lib/page.class.d.ts +60 -0
  177. package/tools/lib/screen.class.d.ts +13 -0
  178. package/tools/lib/service.class.d.ts +39 -0
  179. package/tools/lib/source.class.d.ts +20 -0
  180. package/tools/lib/tools.d.ts +34 -0
  181. package/tools/public-api.d.ts +11 -0
@@ -0,0 +1,408 @@
1
+ import { Component, Input, computed, inject, input, output, signal, viewChild, viewChildren } from "@angular/core";
2
+ import { CoerCheckbox } from "../../lib/coer-checkbox/coer-checkbox.component";
3
+ import { CoerNumberBox } from "../../lib/coer-numberbox/coer-numberbox.component";
4
+ import { CoerSelectbox } from "../../lib/coer-selectbox/coer-selectbox.component";
5
+ import { CoerTextBox } from "../../lib/coer-textbox/coer-textbox.component";
6
+ import { CoerAlert, ControlValue, DateTime, Screen, Tools } from 'coer-elements/tools';
7
+ import * as i0 from "@angular/core";
8
+ export class CoerGridExtension extends ControlValue {
9
+ constructor() {
10
+ super(...arguments);
11
+ //Injections
12
+ this.alert = inject(CoerAlert);
13
+ //Elements
14
+ this.inputFile = viewChild.required('inputFileRef');
15
+ this.inputSearch = viewChild.required('inputSearch');
16
+ this.coerTextboxList = viewChildren(CoerTextBox);
17
+ this.coerNumberboxList = viewChildren(CoerNumberBox);
18
+ this.coerSelectboxList = viewChildren(CoerSelectbox);
19
+ this.coerCheckboxList = viewChildren(CoerCheckbox);
20
+ //Variables
21
+ this._value = [];
22
+ this.value_signal = signal([]);
23
+ this._gridSearch = signal('');
24
+ this._isLoading = true;
25
+ this._isLoadingMessage = true;
26
+ this._id = Tools.GetGuid('coer-grid');
27
+ this._expandedGroups = [];
28
+ this._enableAnimations = false;
29
+ this._indexFocus = signal(0);
30
+ this._sort = signal({ columnName: '', direction: 'none', icon: '' });
31
+ //Generic Tools
32
+ this.GetNumericFormat = Tools.GetNumericFormat;
33
+ this.GetDateFormat = DateTime.GetDateFormat;
34
+ //Inputs
35
+ this.columns = input([]);
36
+ this.cleanColumnName = input(true);
37
+ this.addButton = { show: false };
38
+ this.exportButton = { show: false };
39
+ this.importButton = { show: false };
40
+ this.search = { show: false, ignore: false };
41
+ this.buttonByRow = {};
42
+ this.checkbox = { show: false };
43
+ this.tooltipByRow = input('');
44
+ this.isLoading = input(false);
45
+ this.isDisabled = input(false);
46
+ this.rowsByPage = input(50);
47
+ this.groupBy = input('');
48
+ this.showColumnGrouped = input(false);
49
+ this.rowsByGroup = input(50);
50
+ this.isInvisible = input(false);
51
+ this.showFooter = input(true);
52
+ this.width = input('100%');
53
+ this.MinWidth = input('250px');
54
+ this.MaxWidth = input('100%');
55
+ this.height = input('350px');
56
+ this.minHeight = input('140px');
57
+ this.maxHeight = input('100vh');
58
+ this.margin = input('auto');
59
+ this.enableSort = input(true);
60
+ this.enableRowFocus = input(true);
61
+ //Outputs
62
+ this.onClickAdd = output();
63
+ this.onClickImport = output();
64
+ this.onClickExport = output();
65
+ this.onClickRow = output();
66
+ this.onDoubleClickRow = output();
67
+ this.onClickDeleteRow = output();
68
+ this.onClickEditRow = output();
69
+ this.onClickGoRow = output();
70
+ this.onKeyupEnter = output();
71
+ this.onKeyupEnterLast = output();
72
+ this.onSwitchChange = output();
73
+ this.onTextboxChange = output();
74
+ this.onSelectboxChange = output();
75
+ this.onCheckboxChange = output();
76
+ //computed
77
+ this._isDisabled = computed(() => {
78
+ return this.isDisabled() || this.isLoading() || this.isInvisible();
79
+ });
80
+ //computed
81
+ this._isGrouped = computed(() => {
82
+ return this.groupBy().length > 0;
83
+ });
84
+ //computed
85
+ this.gridColumns = computed(() => {
86
+ const SET_COLUMNS = new Set();
87
+ //Has filter columns?
88
+ if (this.columns().length > 0) {
89
+ for (const { property } of this.columns()) {
90
+ SET_COLUMNS.add(property);
91
+ }
92
+ }
93
+ //Get all columns
94
+ else
95
+ for (const row of this.value_signal()) {
96
+ for (const property in row) {
97
+ SET_COLUMNS.add(property);
98
+ }
99
+ }
100
+ //Remove indexRow column
101
+ if (SET_COLUMNS.has('indexRow')) {
102
+ SET_COLUMNS.delete('indexRow');
103
+ }
104
+ //Remove groupBy column
105
+ if (this._isGrouped() && !this.showColumnGrouped() && SET_COLUMNS.has(this.groupBy())) {
106
+ SET_COLUMNS.delete(this.groupBy());
107
+ }
108
+ //Set index column
109
+ let indexColumn = 0;
110
+ return Array.from(SET_COLUMNS).map(property => Tools.BreakReference({
111
+ columnName: property,
112
+ indexColumn: indexColumn++,
113
+ width: this._GetColumnConfig(property)?.width || 'auto'
114
+ }));
115
+ });
116
+ //computed
117
+ this.gridDataSource = computed(() => {
118
+ let list = this.gridDataSourceFiltered();
119
+ //It's Grouped?
120
+ if (this._isGrouped()) {
121
+ //let indexRow = 0;
122
+ let indexGroup = 0;
123
+ const SET_COLUMN = new Set();
124
+ for (const row of list) {
125
+ SET_COLUMN.add(row[this.groupBy()]);
126
+ }
127
+ const DATA_SOURCE_GROPUED = [];
128
+ for (const column of SET_COLUMN) {
129
+ DATA_SOURCE_GROPUED.push({
130
+ groupBy: column,
131
+ indexGroup: indexGroup++,
132
+ length: list.filter((item) => item[this.groupBy()] == column).length,
133
+ rows: [...list]
134
+ .filter((item) => item[this.groupBy()] == column)
135
+ .splice(0, this.rowsByGroup())
136
+ //.map((item: any) => Object.assign({ indexRow: indexRow++ }, item))
137
+ });
138
+ }
139
+ //Response by group
140
+ return [...DATA_SOURCE_GROPUED].splice(0, this.rowsByPage());
141
+ }
142
+ //Response
143
+ return [{
144
+ groupBy: 'Not Grouped',
145
+ indexGroup: -1,
146
+ length: -1,
147
+ rows: [...list].splice(0, this.rowsByPage())
148
+ }];
149
+ });
150
+ //computed
151
+ this.gridDataSourceFiltered = computed(() => {
152
+ let list = [];
153
+ const dataSource = Tools.BreakReference(this.value_signal());
154
+ //Ignore Filter
155
+ if (this._gridSearch() == '' || this.search?.ignore) {
156
+ list = dataSource;
157
+ }
158
+ //Filter by search
159
+ else {
160
+ const SET_ROW = new Set();
161
+ let listFiltered = [];
162
+ for (const { columnName } of this.gridColumns()) {
163
+ listFiltered = dataSource.filter((item) => !SET_ROW.has(item['indexRow'])
164
+ && String(item[Tools.FirstCharToLower(columnName)]).trim().toUpperCase().includes(String(this._gridSearch()).trim().toUpperCase()));
165
+ for (const { indexRow } of listFiltered) {
166
+ SET_ROW.add(indexRow);
167
+ }
168
+ list = Tools.BreakReference(list.concat(listFiltered));
169
+ }
170
+ }
171
+ return Tools.BreakReference(list);
172
+ });
173
+ /** Get Column Configuration */
174
+ this._GetColumnConfig = (columnName) => {
175
+ return this.columns().find(x => x.property.replaceAll(' ', '').toUpperCase() == columnName.replaceAll(' ', '').toUpperCase());
176
+ };
177
+ /** Clean Name or get alias */
178
+ this._GetColumnName = (columnName) => {
179
+ const columnConfig = this._GetColumnConfig(columnName);
180
+ //Get Alias
181
+ if (columnConfig && columnConfig.alias && columnConfig.alias.length > 0) {
182
+ return columnConfig.alias;
183
+ }
184
+ //Clean headerName
185
+ if (this.cleanColumnName() && columnName.length > 0) {
186
+ columnName = Tools.FirstCharToLower(columnName);
187
+ const charArray = [];
188
+ for (const char of columnName) {
189
+ if (char === char.toUpperCase())
190
+ charArray.push(' ');
191
+ charArray.push(char);
192
+ }
193
+ charArray[0] = charArray[0].toUpperCase();
194
+ columnName = charArray.join('');
195
+ }
196
+ return columnName.trim();
197
+ };
198
+ /** */
199
+ this._GetShortIcon = (columnName) => {
200
+ return this._sort().columnName == columnName ? this._sort().icon : '';
201
+ };
202
+ /** */
203
+ this._GetId = (indexRow, indexColumn, suffix = '') => {
204
+ if (suffix.length > 0)
205
+ suffix = `-${suffix}`;
206
+ return `${this._id}-row${indexRow}column${indexColumn}${suffix}`;
207
+ };
208
+ /** */
209
+ this._GetCellValue = (row, columnName) => {
210
+ return row[Tools.FirstCharToLower(columnName).replaceAll(' ', '')];
211
+ };
212
+ /** */
213
+ this._GetTooltip = (prefix, row, suffix = '') => {
214
+ let column = Tools.FirstCharToLower(this.tooltipByRow()).replaceAll(' ', '');
215
+ if (suffix.length > 0) {
216
+ suffix = ` ${suffix}`;
217
+ }
218
+ return this.tooltipByRow().length > 0
219
+ ? `${prefix} ${row[column]}${suffix}`
220
+ : `${prefix}${suffix}`;
221
+ };
222
+ /** */
223
+ this._HideRow = (group) => {
224
+ return (this._isGrouped() ? !(this._expandedGroups.some(x => x == group.groupBy)) : false);
225
+ };
226
+ }
227
+ //getter
228
+ get _height() {
229
+ let height = this.height();
230
+ if (height == 'full') {
231
+ const TOOLBAR = 45;
232
+ const PAGE_HEADER = 70;
233
+ const GRID_HEADER = document.getElementById(`${this._id}-header`);
234
+ const HEADER = (GRID_HEADER && GRID_HEADER.children.length > 0) ? 50 : 0;
235
+ const MARGIN = 30;
236
+ const PADDING = 20;
237
+ const FOOTER = this.showFooter() ? 24.5 : 0;
238
+ height = (Screen.WINDOW_HEIGHT - TOOLBAR - PAGE_HEADER - MARGIN - HEADER - PADDING - FOOTER) + 'px';
239
+ }
240
+ return height;
241
+ }
242
+ //getter
243
+ get _onlyOneCheck() {
244
+ return Tools.IsNotNull(this.checkbox.onlyOneCheck) && this.checkbox.onlyOneCheck;
245
+ }
246
+ ngAfterViewInit() {
247
+ Tools.Sleep().then(() => {
248
+ this._enableAnimations = true;
249
+ this._isLoading = false;
250
+ this._isLoadingMessage = false;
251
+ });
252
+ }
253
+ //ControlValueAccessor
254
+ SetValue(value) {
255
+ let indexRow = 0;
256
+ if (!Tools.IsNotNull(value))
257
+ value = [];
258
+ const dataSource = Tools.BreakReference(value).map((item) => Object.assign({ checked: false }, { ...item }, { indexRow: indexRow++ }));
259
+ this._UpdateValue(dataSource);
260
+ this._value = dataSource;
261
+ this.value_signal.set(dataSource);
262
+ }
263
+ //ControlValueAccessor
264
+ writeValue(value) {
265
+ let indexRow = 0;
266
+ if (!Tools.IsNotNull(value))
267
+ value = [];
268
+ const dataSource = Tools.BreakReference(value).map((item) => Object.assign({ checked: false }, { ...item }, { indexRow: indexRow++ }));
269
+ this._value = dataSource;
270
+ this.value_signal.set(dataSource);
271
+ }
272
+ /** */
273
+ _IsCellType(property, data, type) {
274
+ let response = false;
275
+ const columnConfig = this._GetColumnConfig(property);
276
+ const value = data[property];
277
+ const row = Tools.BreakReference(data);
278
+ if (columnConfig) {
279
+ if (['coerTextbox', 'coerNumberbox', 'coerSelectbox', 'coerSwitch'].includes(type)) {
280
+ const inputConfig = columnConfig;
281
+ response = inputConfig.hasOwnProperty(type)
282
+ && typeof inputConfig[type] === 'function'
283
+ && inputConfig[type]({ property, row, value }).isInput;
284
+ }
285
+ else
286
+ switch (type) {
287
+ case 'number': {
288
+ if (typeof columnConfig.typeNumber === 'boolean') {
289
+ response = columnConfig.typeNumber;
290
+ }
291
+ else if (typeof columnConfig.typeNumber === 'function') {
292
+ response = (data === null) ? false : columnConfig.typeNumber({ property, row, value });
293
+ }
294
+ break;
295
+ }
296
+ case 'date': {
297
+ if (data === null)
298
+ return false;
299
+ if (typeof columnConfig.typeDate === 'boolean') {
300
+ response = columnConfig.typeDate;
301
+ }
302
+ else if (typeof columnConfig.typeDate === 'function') {
303
+ response = (data === null) ? false : columnConfig.typeDate({ property, row, value });
304
+ }
305
+ break;
306
+ }
307
+ case 'template': {
308
+ if (data === null)
309
+ return false;
310
+ response = (typeof columnConfig.template === 'string') || (typeof columnConfig.template === 'function');
311
+ break;
312
+ }
313
+ }
314
+ }
315
+ return response;
316
+ }
317
+ /** */
318
+ _IsCellColor(property, data, color) {
319
+ let response = false;
320
+ const columnConfig = this._GetColumnConfig(property);
321
+ if (columnConfig) {
322
+ if (typeof columnConfig[color] === 'boolean') {
323
+ response = columnConfig[color];
324
+ }
325
+ else if (typeof columnConfig[color] === 'function') {
326
+ response = columnConfig[color]({
327
+ property,
328
+ row: Tools.BreakReference(data),
329
+ value: data[property]
330
+ });
331
+ }
332
+ }
333
+ return response;
334
+ }
335
+ /** */
336
+ GetAttribute(property, data, attribute, type) {
337
+ const columnConfig = this._GetColumnConfig(property);
338
+ const value = Tools.IsNotNull(data) ? data[property] : null;
339
+ const row = Tools.BreakReference(data);
340
+ if (columnConfig) {
341
+ if (type === 'defaul-cell') {
342
+ switch (attribute) {
343
+ case 'textAlign': {
344
+ return columnConfig?.textAlign || 'left';
345
+ }
346
+ case 'template': {
347
+ const inputConfig = columnConfig;
348
+ if (inputConfig.hasOwnProperty(attribute)) {
349
+ if (typeof inputConfig[attribute] === 'string') {
350
+ return inputConfig[attribute];
351
+ }
352
+ else if (typeof inputConfig[attribute] === 'function') {
353
+ return inputConfig[attribute]({ property, row, value }) || '';
354
+ }
355
+ }
356
+ }
357
+ }
358
+ }
359
+ else if (['coerTextbox', 'coerNumberbox', 'coerSelectbox', 'coerSwitch'].includes(type)) {
360
+ const inputConfig = columnConfig;
361
+ if (inputConfig.hasOwnProperty(type) && typeof inputConfig[type] === 'function') {
362
+ return inputConfig[type]({ property, row, value })[attribute] || null;
363
+ }
364
+ }
365
+ }
366
+ return null;
367
+ }
368
+ /** */
369
+ ButtonByRow(property, data = null) {
370
+ let response = false;
371
+ const buttonByRow = this.buttonByRow;
372
+ const row = Tools.IsNotNull(data) ? Tools.BreakReference(data) : null;
373
+ if (buttonByRow.hasOwnProperty(property)) {
374
+ if (row === null) {
375
+ response = (typeof buttonByRow[property] === 'boolean') ? buttonByRow[property] : true;
376
+ }
377
+ else if (typeof buttonByRow[property] === 'boolean') {
378
+ response = buttonByRow[property];
379
+ }
380
+ else if (typeof buttonByRow[property] === 'function') {
381
+ response = buttonByRow[property]({ property, row, value: null });
382
+ }
383
+ }
384
+ return response ? (this._value && this._value.length > 0) : false;
385
+ }
386
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoerGridExtension, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
387
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "17.3.12", type: CoerGridExtension, selector: "coer-grid-extension", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, cleanColumnName: { classPropertyName: "cleanColumnName", publicName: "cleanColumnName", isSignal: true, isRequired: false, transformFunction: null }, addButton: { classPropertyName: "addButton", publicName: "addButton", isSignal: false, isRequired: false, transformFunction: null }, exportButton: { classPropertyName: "exportButton", publicName: "exportButton", isSignal: false, isRequired: false, transformFunction: null }, importButton: { classPropertyName: "importButton", publicName: "importButton", isSignal: false, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: false, isRequired: false, transformFunction: null }, buttonByRow: { classPropertyName: "buttonByRow", publicName: "buttonByRow", isSignal: false, isRequired: false, transformFunction: null }, checkbox: { classPropertyName: "checkbox", publicName: "checkbox", isSignal: false, isRequired: false, transformFunction: null }, tooltipByRow: { classPropertyName: "tooltipByRow", publicName: "tooltipByRow", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, rowsByPage: { classPropertyName: "rowsByPage", publicName: "rowsByPage", isSignal: true, isRequired: false, transformFunction: null }, groupBy: { classPropertyName: "groupBy", publicName: "groupBy", isSignal: true, isRequired: false, transformFunction: null }, showColumnGrouped: { classPropertyName: "showColumnGrouped", publicName: "showColumnGrouped", isSignal: true, isRequired: false, transformFunction: null }, rowsByGroup: { classPropertyName: "rowsByGroup", publicName: "rowsByGroup", isSignal: true, isRequired: false, transformFunction: null }, isInvisible: { classPropertyName: "isInvisible", publicName: "isInvisible", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, MinWidth: { classPropertyName: "MinWidth", publicName: "MinWidth", isSignal: true, isRequired: false, transformFunction: null }, MaxWidth: { classPropertyName: "MaxWidth", publicName: "MaxWidth", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, margin: { classPropertyName: "margin", publicName: "margin", isSignal: true, isRequired: false, transformFunction: null }, enableSort: { classPropertyName: "enableSort", publicName: "enableSort", isSignal: true, isRequired: false, transformFunction: null }, enableRowFocus: { classPropertyName: "enableRowFocus", publicName: "enableRowFocus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClickAdd: "onClickAdd", onClickImport: "onClickImport", onClickExport: "onClickExport", onClickRow: "onClickRow", onDoubleClickRow: "onDoubleClickRow", onClickDeleteRow: "onClickDeleteRow", onClickEditRow: "onClickEditRow", onClickGoRow: "onClickGoRow", onKeyupEnter: "onKeyupEnter", onKeyupEnterLast: "onKeyupEnterLast", onSwitchChange: "onSwitchChange", onTextboxChange: "onTextboxChange", onSelectboxChange: "onSelectboxChange", onCheckboxChange: "onCheckboxChange" }, viewQueries: [{ propertyName: "inputFile", first: true, predicate: ["inputFileRef"], descendants: true, isSignal: true }, { propertyName: "inputSearch", first: true, predicate: ["inputSearch"], descendants: true, isSignal: true }, { propertyName: "coerTextboxList", predicate: CoerTextBox, descendants: true, isSignal: true }, { propertyName: "coerNumberboxList", predicate: CoerNumberBox, descendants: true, isSignal: true }, { propertyName: "coerSelectboxList", predicate: CoerSelectbox, descendants: true, isSignal: true }, { propertyName: "coerCheckboxList", predicate: CoerCheckbox, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
388
+ }
389
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoerGridExtension, decorators: [{
390
+ type: Component,
391
+ args: [{
392
+ selector: 'coer-grid-extension',
393
+ template: ''
394
+ }]
395
+ }], propDecorators: { addButton: [{
396
+ type: Input
397
+ }], exportButton: [{
398
+ type: Input
399
+ }], importButton: [{
400
+ type: Input
401
+ }], search: [{
402
+ type: Input
403
+ }], buttonByRow: [{
404
+ type: Input
405
+ }], checkbox: [{
406
+ type: Input
407
+ }] } });
408
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lci1ncmlkLmV4dGVuc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZXItZWxlbWVudHMvY29tcG9uZW50cy9saWIvY29lci1ncmlkL2NvZXItZ3JpZC5leHRlbnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNsRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFNdkYsTUFBTSxPQUFPLGlCQUFxQixTQUFRLFlBQVk7SUFKdEQ7O1FBTUksWUFBWTtRQUNPLFVBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFN0MsVUFBVTtRQUNBLGNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLGNBQWMsQ0FBQyxDQUFDO1FBQzNELGdCQUFXLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBYyxhQUFhLENBQUMsQ0FBQztRQUM3RCxvQkFBZSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxzQkFBaUIsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEQsc0JBQWlCLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hE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bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFLEVBQUU7aUJBQ2Y7OEJBaUNZLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJR3JpZEJ1dHRvbkJ5Um93LCBJR3JpZENvbHVtbiwgSUdyaWREYXRhU291cmNlLCBJR3JpZEltcG9ydCwgSUdyaWRIZWFkZXJCdXR0b24sIElHcmlkSGVhZGVyRXhwb3J0QnV0dG9uLCBJR3JpZEtleXVwRW50ZXIsIElHcmlkU2VhcmNoLCBJR3JpZElucHV0U3dpdGNoQ2hhbmdlLCBJR3JpZElucHV0VGV4dGJveCwgSUdyaWRTb3J0LCBJR3JpZENoZWNrYm94LCBJR3JpZElucHV0Q2hlY2tib3gsIElHcmlkSGVhZGVyIH0gZnJvbSBcImNvZXItZWxlbWVudHMvaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZCwgdmlld0NoaWxkcmVuIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29lckNoZWNrYm94IH0gZnJvbSBcIi4uLy4uL2xpYi9jb2VyLWNoZWNrYm94L2NvZXItY2hlY2tib3guY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvZXJOdW1iZXJCb3ggfSBmcm9tIFwiLi4vLi4vbGliL2NvZXItbnVtYmVyYm94L2NvZXItbnVtYmVyYm94LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb2VyU2VsZWN0Ym94IH0gZnJvbSBcIi4uLy4uL2xpYi9jb2VyLXNlbGVjdGJveC9jb2VyLXNlbGVjdGJveC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29lclRleHRCb3ggfSBmcm9tIFwiLi4vLi4vbGliL2NvZXItdGV4dGJveC9jb2VyLXRleHRib3guY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvZXJBbGVydCwgQ29udHJvbFZhbHVlLCBEYXRlVGltZSwgU2NyZWVuLCBUb29scyB9IGZyb20gJ2NvZXItZWxlbWVudHMvdG9vbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NvZXItZ3JpZC1leHRlbnNpb24nLFxyXG4gICAgdGVtcGxhdGU6ICcnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2VyR3JpZEV4dGVuc2lvbjxUPiBleHRlbmRzIENvbnRyb2xWYWx1ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAgIC8vSW5qZWN0aW9uc1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0ID0gaW5qZWN0KENvZXJBbGVydCk7XHJcblxyXG4gICAgLy9FbGVtZW50c1xyXG4gICAgcHJvdGVjdGVkIGlucHV0RmlsZSA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaW5wdXRGaWxlUmVmJyk7XHJcbiAgICBwcm90ZWN0ZWQgaW5wdXRTZWFyY2ggPSB2aWV3Q2hpbGQucmVxdWlyZWQ8Q29lclRleHRCb3g+KCdpbnB1dFNlYXJjaCcpO1xyXG4gICAgcHJvdGVjdGVkIGNvZXJUZXh0Ym94TGlzdCA9IHZpZXdDaGlsZHJlbihDb2VyVGV4dEJveCk7XHJcbiAgICBwcm90ZWN0ZWQgY29lck51bWJlcmJveExpc3QgPSB2aWV3Q2hpbGRyZW4oQ29lck51bWJlckJveCk7XHJcbiAgICBwcm90ZWN0ZWQgY29lclNlbGVjdGJveExpc3QgPSB2aWV3Q2hpbGRyZW4oQ29lclNlbGVjdGJveCk7XHJcbiAgICBwcm90ZWN0ZWQgY29lckNoZWNrYm94TGlzdCA9IHZpZXdDaGlsZHJlbihDb2VyQ2hlY2tib3gpO1xyXG5cclxuICAgIC8vVmFyaWFibGVzXHJcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3ZhbHVlOiBUW10gPSBbXTtcclxuICAgIHByb3RlY3RlZCB2YWx1ZV9zaWduYWwgPSBzaWduYWw8VFtdPihbXSk7XHJcbiAgICBwcm90ZWN0ZWQgX2dyaWRTZWFyY2ggPSBzaWduYWw8c3RyaW5nIHwgbnVtYmVyPignJyk7XHJcbiAgICBwcm90ZWN0ZWQgX2lzTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwcm90ZWN0ZWQgX2lzTG9hZGluZ01lc3NhZ2U6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHJvdGVjdGVkIF9pZDogc3RyaW5nID0gVG9vbHMuR2V0R3VpZCgnY29lci1ncmlkJyk7XHJcbiAgICBwcm90ZWN0ZWQgX2V4cGFuZGVkR3JvdXBzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcHJvdGVjdGVkIF9lbmFibGVBbmltYXRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgX2luZGV4Rm9jdXMgPSBzaWduYWw8bnVtYmVyPigwKTtcclxuICAgIHByb3RlY3RlZCBfc29ydCA9IHNpZ25hbDxJR3JpZFNvcnQ+KHsgY29sdW1uTmFtZTogJycsIGRpcmVjdGlvbjogJ25vbmUnLCBpY29uOiAnJyB9KTtcclxuXHJcbiAgICAvL0dlbmVyaWMgVG9vbHNcclxuICAgIHByb3RlY3RlZCBHZXROdW1lcmljRm9ybWF0ID0gVG9vbHMuR2V0TnVtZXJpY0Zvcm1hdDtcclxuICAgIHByb3RlY3RlZCBHZXREYXRlRm9ybWF0ID0gRGF0ZVRpbWUuR2V0RGF0ZUZvcm1hdDtcclxuXHJcbiAgICAvL0lucHV0c1xyXG4gICAgcHVibGljIGNvbHVtbnMgPSBpbnB1dDxJR3JpZENvbHVtbjxUPltdPihbXSk7XHJcbiAgICBwdWJsaWMgY2xlYW5Db2x1bW5OYW1lID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICBASW5wdXQoKSBhZGRCdXR0b246IElHcmlkSGVhZGVyQnV0dG9uID0geyBzaG93OiBmYWxzZSB9O1xyXG4gICAgQElucHV0KCkgZXhwb3J0QnV0dG9uOiBJR3JpZEhlYWRlckV4cG9ydEJ1dHRvbiA9IHsgc2hvdzogZmFsc2UgfTtcclxuICAgIEBJbnB1dCgpIGltcG9ydEJ1dHRvbjogSUdyaWRIZWFkZXJCdXR0b24gPSB7IHNob3c6IGZhbHNlIH07XHJcbiAgICBASW5wdXQoKSBzZWFyY2g6IElHcmlkU2VhcmNoID0geyBzaG93OiBmYWxzZSwgaWdub3JlOiBmYWxzZSB9O1xyXG4gICAgQElucHV0KCkgYnV0dG9uQnlSb3c6IElHcmlkQnV0dG9uQnlSb3c8VD4gPSB7fTtcclxuICAgIEBJbnB1dCgpIGNoZWNrYm94OiBJR3JpZENoZWNrYm94ID0geyBzaG93OiBmYWxzZSB9O1xyXG4gICAgcHVibGljIHRvb2x0aXBCeVJvdyA9IGlucHV0PHN0cmluZz4oJycpO1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHB1YmxpYyBpc0Rpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHVibGljIHJvd3NCeVBhZ2UgPSBpbnB1dDxudW1iZXI+KDUwKTtcclxuICAgIHB1YmxpYyBncm91cEJ5ID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcbiAgICBwdWJsaWMgc2hvd0NvbHVtbkdyb3VwZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwdWJsaWMgcm93c0J5R3JvdXAgPSBpbnB1dDxudW1iZXI+KDUwKTtcclxuICAgIHB1YmxpYyBpc0ludmlzaWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHB1YmxpYyBzaG93Rm9vdGVyID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICBwdWJsaWMgd2lkdGggPSBpbnB1dDxzdHJpbmc+KCcxMDAlJyk7XHJcbiAgICBwdWJsaWMgTWluV2lkdGggPSBpbnB1dDxzdHJpbmc+KCcyNTBweCcpO1xyXG4gICAgcHVibGljIE1heFdpZHRoID0gaW5wdXQ8c3RyaW5nPignMTAwJScpO1xyXG4gICAgcHVibGljIGhlaWdodCA9IGlucHV0PHN0cmluZz4oJzM1MHB4Jyk7XHJcbiAgICBwdWJsaWMgbWluSGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPignMTQwcHgnKTtcclxuICAgIHB1YmxpYyBtYXhIZWlnaHQgPSBpbnB1dDxzdHJpbmc+KCcxMDB2aCcpO1xyXG4gICAgcHVibGljIG1hcmdpbiA9IGlucHV0PHN0cmluZz4oJ2F1dG8nKTtcclxuICAgIHB1YmxpYyBlbmFibGVTb3J0ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICBwdWJsaWMgZW5hYmxlUm93Rm9jdXMgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgICAvL091dHB1dHNcclxuICAgIHB1YmxpYyBvbkNsaWNrQWRkID0gb3V0cHV0PHZvaWQ+KCk7XHJcbiAgICBwdWJsaWMgb25DbGlja0ltcG9ydCA9IG91dHB1dDxJR3JpZEltcG9ydDxUPj4oKTtcclxuICAgIHB1YmxpYyBvbkNsaWNrRXhwb3J0ID0gb3V0cHV0PFRbXT4oKTtcclxuICAgIHB1YmxpYyBvbkNsaWNrUm93ID0gb3V0cHV0PFQ+KCk7XHJcbiAgICBwdWJsaWMgb25Eb3VibGVDbGlja1JvdyA9IG91dHB1dDxUPigpO1xyXG4gICAgcHVibGljIG9uQ2xpY2tEZWxldGVSb3cgPSBvdXRwdXQ8VD4oKTtcclxuICAgIHB1YmxpYyBvbkNsaWNrRWRpdFJvdyA9IG91dHB1dDxUPigpO1xyXG4gICAgcHVibGljIG9uQ2xpY2tHb1JvdyA9IG91dHB1dDxUPigpO1xyXG4gICAgcHVibGljIG9uS2V5dXBFbnRlciA9IG91dHB1dDxJR3JpZEtleXVwRW50ZXI+KCk7XHJcbiAgICBwdWJsaWMgb25LZXl1cEVudGVyTGFzdCA9IG91dHB1dDx2b2lkPigpO1xyXG4gICAgcHVibGljIG9uU3dpdGNoQ2hhbmdlID0gb3V0cHV0PElHcmlkSW5wdXRTd2l0Y2hDaGFuZ2U8VD4+KCk7XHJcbiAgICBwdWJsaWMgb25UZXh0Ym94Q2hhbmdlID0gb3V0cHV0PElHcmlkSW5wdXRUZXh0Ym94PFQ+PigpO1xyXG4gICAgcHVibGljIG9uU2VsZWN0Ym94Q2hhbmdlID0gb3V0cHV0PElHcmlkSW5wdXRUZXh0Ym94PFQ+PigpO1xyXG4gICAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2UgPSBvdXRwdXQ8SUdyaWRJbnB1dENoZWNrYm94PFQ+PigpO1xyXG5cclxuICAgIC8vY29tcHV0ZWRcclxuICAgIHByb3RlY3RlZCBfaXNEaXNhYmxlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkKCkgfHwgdGhpcy5pc0xvYWRpbmcoKSB8fCB0aGlzLmlzSW52aXNpYmxlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL2NvbXB1dGVkXHJcbiAgICBwcm90ZWN0ZWQgX2lzR3JvdXBlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncm91cEJ5KCkubGVuZ3RoID4gMDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vZ2V0dGVyXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IF9oZWlnaHQoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTtcclxuXHJcbiAgICAgICAgaWYgKGhlaWdodCA9PSAnZnVsbCcpIHtcclxuICAgICAgICAgICAgY29uc3QgVE9PTEJBUiA9IDQ1O1xyXG4gICAgICAgICAgICBjb25zdCBQQUdFX0hFQURFUiA9IDcwO1xyXG4gICAgICAgICAgICBjb25zdCBHUklEX0hFQURFUiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3RoaXMuX2lkfS1oZWFkZXJgKSE7XHJcbiAgICAgICAgICAgIGNvbnN0IEhFQURFUiA9IChHUklEX0hFQURFUiAmJiBHUklEX0hFQURFUi5jaGlsZHJlbi5sZW5ndGggPiAwKSA/IDUwIDogMDtcclxuICAgICAgICAgICAgY29uc3QgTUFSR0lOID0gMzA7XHJcbiAgICAgICAgICAgIGNvbnN0IFBBRERJTkcgPSAyMDtcclxuICAgICAgICAgICAgY29uc3QgRk9PVEVSID0gdGhpcy5zaG93Rm9vdGVyKCkgPyAyNC41IDogMDtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gKFNjcmVlbi5XSU5ET1dfSEVJR0hUIC0gVE9PTEJBUiAtIFBBR0VfSEVBREVSIC0gTUFSR0lOIC0gSEVBREVSIC0gUEFERElORyAtIEZPT1RFUikgKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGhlaWdodDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9nZXR0ZXJcclxuICAgIHByb3RlY3RlZCBnZXQgX29ubHlPbmVDaGVjaygpIHtcclxuICAgICAgICByZXR1cm4gVG9vbHMuSXNOb3ROdWxsKHRoaXMuY2hlY2tib3gub25seU9uZUNoZWNrKSAmJiB0aGlzLmNoZWNrYm94Lm9ubHlPbmVDaGVjaztcclxuICAgIH1cclxuXHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIFRvb2xzLlNsZWVwKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5faXNMb2FkaW5nTWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vQ29udHJvbFZhbHVlQWNjZXNzb3JcclxuICAgIHB1YmxpYyBvdmVycmlkZSBTZXRWYWx1ZSh2YWx1ZTogVFtdKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGluZGV4Um93ID0gMDtcclxuICAgICAgICBpZighVG9vbHMuSXNOb3ROdWxsKHZhbHVlKSkgdmFsdWUgPSBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFRvb2xzLkJyZWFrUmVmZXJlbmNlKHZhbHVlKS5tYXAoKGl0ZW06IGFueSkgPT5cclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih7IGNoZWNrZWQ6IGZhbHNlIH0sIHsgLi4uaXRlbSB9LCB7IGluZGV4Um93OiBpbmRleFJvdysrIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5fVXBkYXRlVmFsdWUoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBkYXRhU291cmNlO1xyXG4gICAgICAgIHRoaXMudmFsdWVfc2lnbmFsLnNldChkYXRhU291cmNlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9Db250cm9sVmFsdWVBY2Nlc3NvclxyXG4gICAgcHVibGljIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IFRbXSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBpbmRleFJvdyA9IDA7XHJcbiAgICAgICAgaWYoIVRvb2xzLklzTm90TnVsbCh2YWx1ZSkpIHZhbHVlID0gW107XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBUb29scy5CcmVha1JlZmVyZW5jZSh2YWx1ZSkubWFwKChpdGVtOiBhbnkpID0+XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oeyBjaGVja2VkOiBmYWxzZSB9LCB7IC4uLml0ZW0gfSwgeyBpbmRleFJvdzogaW5kZXhSb3crKyB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gZGF0YVNvdXJjZTtcclxuICAgICAgICB0aGlzLnZhbHVlX3NpZ25hbC5zZXQoZGF0YVNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgICAvL2NvbXB1dGVkXHJcbiAgICAgcHJvdGVjdGVkIGdyaWRDb2x1bW5zID0gY29tcHV0ZWQ8SUdyaWRIZWFkZXJbXT4oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IFNFVF9DT0xVTU5TID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcblxyXG4gICAgICAgIC8vSGFzIGZpbHRlciBjb2x1bW5zP1xyXG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnMoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBwcm9wZXJ0eSB9IG9mIHRoaXMuY29sdW1ucygpKSB7XHJcbiAgICAgICAgICAgICAgICBTRVRfQ09MVU1OUy5hZGQocHJvcGVydHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL0dldCBhbGwgY29sdW1uc1xyXG4gICAgICAgIGVsc2UgZm9yIChjb25zdCByb3cgb2YgdGhpcy52YWx1ZV9zaWduYWwoKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHJvdykge1xyXG4gICAgICAgICAgICAgICAgU0VUX0NPTFVNTlMuYWRkKHByb3BlcnR5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9SZW1vdmUgaW5kZXhSb3cgY29sdW1uXHJcbiAgICAgICAgaWYgKFNFVF9DT0xVTU5TLmhhcygnaW5kZXhSb3cnKSkge1xyXG4gICAgICAgICAgICBTRVRfQ09MVU1OUy5kZWxldGUoJ2luZGV4Um93Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1JlbW92ZSBncm91cEJ5IGNvbHVtblxyXG4gICAgICAgIGlmICh0aGlzLl9pc0dyb3VwZWQoKSAmJiAhdGhpcy5zaG93Q29sdW1uR3JvdXBlZCgpICYmIFNFVF9DT0xVTU5TLmhhcyh0aGlzLmdyb3VwQnkoKSkpIHtcclxuICAgICAgICAgICAgU0VUX0NPTFVNTlMuZGVsZXRlKHRoaXMuZ3JvdXBCeSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vU2V0IGluZGV4IGNvbHVtblxyXG4gICAgICAgIGxldCBpbmRleENvbHVtbiA9IDA7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oU0VUX0NPTFVNTlMpLm1hcChwcm9wZXJ0eSA9PiBUb29scy5CcmVha1JlZmVyZW5jZTxJR3JpZEhlYWRlcj4oe1xyXG4gICAgICAgICAgICBjb2x1bW5OYW1lOiBwcm9wZXJ0eSxcclxuICAgICAgICAgICAgaW5kZXhDb2x1bW46IGluZGV4Q29sdW1uKyssXHJcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLl9HZXRDb2x1bW5Db25maWcocHJvcGVydHkpPy53aWR0aCB8fCAnYXV0bydcclxuICAgICAgICB9KSk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgLy9jb21wdXRlZFxyXG4gICAgcHJvdGVjdGVkIGdyaWREYXRhU291cmNlID0gY29tcHV0ZWQ8SUdyaWREYXRhU291cmNlW10+KCgpID0+IHtcclxuICAgICAgICBsZXQgbGlzdCA9IHRoaXMuZ3JpZERhdGFTb3VyY2VGaWx0ZXJlZCgpO1xyXG5cclxuICAgICAgICAvL0l0J3MgR3JvdXBlZD9cclxuICAgICAgICBpZiAodGhpcy5faXNHcm91cGVkKCkpIHtcclxuICAgICAgICAgICAgLy9sZXQgaW5kZXhSb3cgPSAwO1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhHcm91cCA9IDA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBTRVRfQ09MVU1OID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGxpc3QgYXMgYW55KSB7XHJcbiAgICAgICAgICAgICAgICBTRVRfQ09MVU1OLmFkZChyb3dbdGhpcy5ncm91cEJ5KCldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgREFUQV9TT1VSQ0VfR1JPUFVFRCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBTRVRfQ09MVU1OKSB7XHJcbiAgICAgICAgICAgICAgICBEQVRBX1NPVVJDRV9HUk9QVUVELnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwQnk6IGNvbHVtbixcclxuICAgICAgICAgICAgICAgICAgICBpbmRleEdyb3VwOiBpbmRleEdyb3VwKyssXHJcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBsaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtW3RoaXMuZ3JvdXBCeSgpXSA9PSBjb2x1bW4pLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICByb3dzOiBbLi4ubGlzdF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtW3RoaXMuZ3JvdXBCeSgpXSA9PSBjb2x1bW4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpY2UoMCwgdGhpcy5yb3dzQnlHcm91cCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLy5tYXAoKGl0ZW06IGFueSkgPT4gT2JqZWN0LmFzc2lnbih7IGluZGV4Um93OiBpbmRleFJvdysrIH0sIGl0ZW0pKVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vUmVzcG9uc2UgYnkgZ3JvdXBcclxuICAgICAgICAgICAgcmV0dXJuIFsuLi5EQVRBX1NPVVJDRV9HUk9QVUVEXS5zcGxpY2UoMCwgdGhpcy5yb3dzQnlQYWdlKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9SZXNwb25zZVxyXG4gICAgICAgIHJldHVybiBbe1xyXG4gICAgICAgICAgICBncm91cEJ5OiAnTm90IEdyb3VwZWQnLFxyXG4gICAgICAgICAgICBpbmRleEdyb3VwOiAtMSxcclxuICAgICAgICAgICAgbGVuZ3RoOiAtMSxcclxuICAgICAgICAgICAgcm93czogWy4uLmxpc3RdLnNwbGljZSgwLCB0aGlzLnJvd3NCeVBhZ2UoKSlcclxuICAgICAgICB9XTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvL2NvbXB1dGVkXHJcbiAgICBwcm90ZWN0ZWQgZ3JpZERhdGFTb3VyY2VGaWx0ZXJlZCA9IGNvbXB1dGVkPFRbXT4oKCkgPT4ge1xyXG4gICAgICAgIGxldCBsaXN0OiBUW10gPSBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFRvb2xzLkJyZWFrUmVmZXJlbmNlKHRoaXMudmFsdWVfc2lnbmFsKCkpO1xyXG5cclxuICAgICAgICAvL0lnbm9yZSBGaWx0ZXJcclxuICAgICAgICBpZiAodGhpcy5fZ3JpZFNlYXJjaCgpID09ICcnIHx8IHRoaXMuc2VhcmNoPy5pZ25vcmUpIHtcclxuICAgICAgICAgICAgbGlzdCA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL0ZpbHRlciBieSBzZWFyY2hcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgU0VUX1JPVyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGxpc3RGaWx0ZXJlZDogYW55W10gPSBbXTtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHsgY29sdW1uTmFtZSB9IG9mIHRoaXMuZ3JpZENvbHVtbnMoKSkge1xyXG4gICAgICAgICAgICAgICAgbGlzdEZpbHRlcmVkID0gZGF0YVNvdXJjZS5maWx0ZXIoKGl0ZW06IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAhU0VUX1JPVy5oYXMoaXRlbVsnaW5kZXhSb3cnXSlcclxuICAgICAgICAgICAgICAgICAgICAmJiBTdHJpbmcoaXRlbVtUb29scy5GaXJzdENoYXJUb0xvd2VyKGNvbHVtbk5hbWUpXSkudHJpbSgpLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoU3RyaW5nKHRoaXMuX2dyaWRTZWFyY2goKSkudHJpbSgpLnRvVXBwZXJDYXNlKCkpXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCB7IGluZGV4Um93IH0gb2YgbGlzdEZpbHRlcmVkIGFzIGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIFNFVF9ST1cuYWRkKGluZGV4Um93KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsaXN0ID0gVG9vbHMuQnJlYWtSZWZlcmVuY2UobGlzdC5jb25jYXQobGlzdEZpbHRlcmVkKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBUb29scy5CcmVha1JlZmVyZW5jZShsaXN0KTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvKiogR2V0IENvbHVtbiBDb25maWd1cmF0aW9uICovXHJcbiAgICBwcm90ZWN0ZWQgX0dldENvbHVtbkNvbmZpZyA9IChjb2x1bW5OYW1lOiBzdHJpbmcpOiBJR3JpZENvbHVtbjxUPiB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucygpLmZpbmQoeCA9PiB4LnByb3BlcnR5LnJlcGxhY2VBbGwoJyAnLCAnJykudG9VcHBlckNhc2UoKSA9PSBjb2x1bW5OYW1lLnJlcGxhY2VBbGwoJyAnLCAnJykudG9VcHBlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiBDbGVhbiBOYW1lIG9yIGdldCBhbGlhcyAqL1xyXG4gICAgcHJvdGVjdGVkIF9HZXRDb2x1bW5OYW1lID0gKGNvbHVtbk5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sdW1uQ29uZmlnID0gdGhpcy5fR2V0Q29sdW1uQ29uZmlnKGNvbHVtbk5hbWUpO1xyXG5cclxuICAgICAgICAvL0dldCBBbGlhc1xyXG4gICAgICAgIGlmIChjb2x1bW5Db25maWcgJiYgY29sdW1uQ29uZmlnLmFsaWFzICYmIGNvbHVtbkNvbmZpZy5hbGlhcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5Db25maWcuYWxpYXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL0NsZWFuIGhlYWRlck5hbWVcclxuICAgICAgICBpZiAodGhpcy5jbGVhbkNvbHVtbk5hbWUoKSAmJiBjb2x1bW5OYW1lLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29sdW1uTmFtZSA9IFRvb2xzLkZpcnN0Q2hhclRvTG93ZXIoY29sdW1uTmFtZSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjaGFyQXJyYXkgPSBbXTtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IGNoYXIgb2YgY29sdW1uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYoY2hhciA9PT0gY2hhci50b1VwcGVyQ2FzZSgpKSBjaGFyQXJyYXkucHVzaCgnICcpO1xyXG4gICAgICAgICAgICAgICAgY2hhckFycmF5LnB1c2goY2hhcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYXJBcnJheVswXSA9IGNoYXJBcnJheVswXS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICBjb2x1bW5OYW1lID0gY2hhckFycmF5LmpvaW4oJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbk5hbWUudHJpbSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfR2V0U2hvcnRJY29uID0gKGNvbHVtbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zb3J0KCkuY29sdW1uTmFtZSA9PSBjb2x1bW5OYW1lID8gdGhpcy5fc29ydCgpLmljb24gOiAnJztcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgX0dldElkID0gKGluZGV4Um93OiBudW1iZXIsIGluZGV4Q29sdW1uOiBudW1iZXIsIHN1ZmZpeDogc3RyaW5nID0gJycpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIGlmIChzdWZmaXgubGVuZ3RoID4gMCkgc3VmZml4ID0gYC0ke3N1ZmZpeH1gO1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLl9pZH0tcm93JHtpbmRleFJvd31jb2x1bW4ke2luZGV4Q29sdW1ufSR7c3VmZml4fWA7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIF9HZXRDZWxsVmFsdWUgPSAocm93OiBhbnksIGNvbHVtbk5hbWU6IHN0cmluZyk6IGFueSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJvd1tUb29scy5GaXJzdENoYXJUb0xvd2VyKGNvbHVtbk5hbWUpLnJlcGxhY2VBbGwoJyAnLCAnJyldO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfR2V0VG9vbHRpcCA9IChwcmVmaXg6IHN0cmluZywgcm93OiBhbnksIHN1ZmZpeDogc3RyaW5nID0gJycpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIGxldCBjb2x1bW4gPSBUb29scy5GaXJzdENoYXJUb0xvd2VyKHRoaXMudG9vbHRpcEJ5Um93KCkpLnJlcGxhY2VBbGwoJyAnLCAnJyk7XHJcblxyXG4gICAgICAgIGlmIChzdWZmaXgubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzdWZmaXggPSBgICR7c3VmZml4fWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy50b29sdGlwQnlSb3coKS5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgID8gYCR7cHJlZml4fSAke3Jvd1tjb2x1bW5dfSR7c3VmZml4fWBcclxuICAgICAgICAgICAgOiBgJHtwcmVmaXh9JHtzdWZmaXh9YDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgX0hpZGVSb3cgPSAoZ3JvdXA6IElHcmlkRGF0YVNvdXJjZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5faXNHcm91cGVkKCkgPyAhKHRoaXMuX2V4cGFuZGVkR3JvdXBzLnNvbWUoeCA9PiB4ID09IGdyb3VwLmdyb3VwQnkpKSA6IGZhbHNlKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfSXNDZWxsVHlwZShwcm9wZXJ0eTogc3RyaW5nLCBkYXRhOiBhbnksIHR5cGU6ICdudW1iZXInIHwgJ2RhdGUnIHwgJ3RlbXBsYXRlJyB8ICdjb2VyVGV4dGJveCcgfCAnY29lck51bWJlcmJveCcgfCAnY29lclNlbGVjdGJveCcgIHwgJ2NvZXJTd2l0Y2gnKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgY29sdW1uQ29uZmlnID0gdGhpcy5fR2V0Q29sdW1uQ29uZmlnKHByb3BlcnR5KTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbcHJvcGVydHldO1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IFRvb2xzLkJyZWFrUmVmZXJlbmNlKGRhdGEpO1xyXG5cclxuICAgICAgICBpZiAoY29sdW1uQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIGlmIChbJ2NvZXJUZXh0Ym94JywgJ2NvZXJOdW1iZXJib3gnLCAnY29lclNlbGVjdGJveCcsICdjb2VyU3dpdGNoJ10uaW5jbHVkZXModHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0Q29uZmlnOiBhbnkgPSBjb2x1bW5Db25maWc7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGlucHV0Q29uZmlnLmhhc093blByb3BlcnR5KHR5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mIGlucHV0Q29uZmlnW3R5cGVdID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgaW5wdXRDb25maWdbdHlwZV0oeyBwcm9wZXJ0eSwgcm93LCB2YWx1ZSB9KS5pc0lucHV0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIHN3aXRjaCh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdudW1iZXInOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2x1bW5Db25maWcudHlwZU51bWJlciA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY29sdW1uQ29uZmlnLnR5cGVOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY29sdW1uQ29uZmlnLnR5cGVOdW1iZXIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSAoZGF0YSA9PT0gbnVsbCkgPyBmYWxzZSA6IGNvbHVtbkNvbmZpZy50eXBlTnVtYmVyKHsgcHJvcGVydHksIHJvdywgdmFsdWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29sdW1uQ29uZmlnLnR5cGVEYXRlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBjb2x1bW5Db25maWcudHlwZURhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY29sdW1uQ29uZmlnLnR5cGVEYXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gKGRhdGEgPT09IG51bGwpID8gZmFsc2UgOiBjb2x1bW5Db25maWcudHlwZURhdGUoeyBwcm9wZXJ0eSwgcm93LCB2YWx1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ3RlbXBsYXRlJzoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSAodHlwZW9mIGNvbHVtbkNvbmZpZy50ZW1wbGF0ZSA9PT0gJ3N0cmluZycpIHx8ICh0eXBlb2YgY29sdW1uQ29uZmlnLnRlbXBsYXRlID09PSAnZnVuY3Rpb24nKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfSXNDZWxsQ29sb3IocHJvcGVydHk6IHN0cmluZywgZGF0YTogYW55LCBjb2xvcjogJ2NvbG9yQmx1ZScgfCAnY29sb3JHcmVlbicgfCAnY29sb3JZZWxsb3cnIHwgJ2NvbG9yUmVkJyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCByZXNwb25zZSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbkNvbmZpZzogYW55ID0gdGhpcy5fR2V0Q29sdW1uQ29uZmlnKHByb3BlcnR5KTtcclxuXHJcbiAgICAgICAgaWYgKGNvbHVtbkNvbmZpZykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbHVtbkNvbmZpZ1tjb2xvcl0gPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBjb2x1bW5Db25maWdbY29sb3JdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY29sdW1uQ29uZmlnW2NvbG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBjb2x1bW5Db25maWdbY29sb3JdKHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcclxuICAgICAgICAgICAgICAgICAgICByb3c6IFRvb2xzLkJyZWFrUmVmZXJlbmNlKGRhdGEpLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhW3Byb3BlcnR5XVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgR2V0QXR0cmlidXRlKHByb3BlcnR5OiBzdHJpbmcsIGRhdGE6IGFueSwgYXR0cmlidXRlOiBzdHJpbmcsIHR5cGU6ICdjb2VyU3dpdGNoJyB8ICdjb2VyVGV4dGJveCcgfCAnY29lck51bWJlcmJveCd8ICdjb2VyU2VsZWN0Ym94JyB8ICdkZWZhdWwtY2VsbCcgKTogYW55IHtcclxuICAgICAgICBjb25zdCBjb2x1bW5Db25maWcgPSB0aGlzLl9HZXRDb2x1bW5Db25maWcocHJvcGVydHkpO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gVG9vbHMuSXNOb3ROdWxsKGRhdGEpID8gZGF0YVtwcm9wZXJ0eV0gOiBudWxsO1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IFRvb2xzLkJyZWFrUmVmZXJlbmNlKGRhdGEpO1xyXG5cclxuICAgICAgICBpZiAoY29sdW1uQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnZGVmYXVsLWNlbGwnKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goYXR0cmlidXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGV4dEFsaWduJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uQ29uZmlnPy50ZXh0QWxpZ24gfHwgJ2xlZnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGVtcGxhdGUnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0Q29uZmlnOiBhbnkgPSBjb2x1bW5Db25maWc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRDb25maWcuaGFzT3duUHJvcGVydHkoYXR0cmlidXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGlucHV0Q29uZmlnW2F0dHJpYnV0ZV0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0Q29uZmlnW2F0dHJpYnV0ZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZih0eXBlb2YgaW5wdXRDb25maWdbYXR0cmlidXRlXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dENvbmZpZ1thdHRyaWJ1dGVdKHsgcHJvcGVydHksIHJvdywgdmFsdWUgfSkgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYoWydjb2VyVGV4dGJveCcsICdjb2VyTnVtYmVyYm94JywgJ2NvZXJTZWxlY3Rib3gnLCAnY29lclN3aXRjaCddLmluY2x1ZGVzKHR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dENvbmZpZzogYW55ID0gY29sdW1uQ29uZmlnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0Q29uZmlnLmhhc093blByb3BlcnR5KHR5cGUpICYmIHR5cGVvZiBpbnB1dENvbmZpZ1t0eXBlXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dENvbmZpZ1t0eXBlXSh7IHByb3BlcnR5LCByb3csIHZhbHVlIH0pW2F0dHJpYnV0ZV0gfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIEJ1dHRvbkJ5Um93KHByb3BlcnR5OiAnc2hvd0RlbGV0ZUJ1dHRvbicgfCAnc2hvd0VkaXRCdXR0b24nIHwgJ3Nob3dHb0J1dHRvbicsIGRhdGE6IGFueSA9IG51bGwpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBidXR0b25CeVJvdzogYW55ID0gdGhpcy5idXR0b25CeVJvdztcclxuICAgICAgICBjb25zdCByb3cgPSBUb29scy5Jc05vdE51bGwoZGF0YSkgPyBUb29scy5CcmVha1JlZmVyZW5jZShkYXRhKSA6IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChidXR0b25CeVJvdy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgICAgICAgICAgaWYgKHJvdyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSAodHlwZW9mIGJ1dHRvbkJ5Um93W3Byb3BlcnR5XSA9PT0gJ2Jvb2xlYW4nKSA/IGJ1dHRvbkJ5Um93W3Byb3BlcnR5XSA6IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBidXR0b25CeVJvd1twcm9wZXJ0eV0gPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBidXR0b25CeVJvd1twcm9wZXJ0eV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBidXR0b25CeVJvd1twcm9wZXJ0eV0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYnV0dG9uQnlSb3dbcHJvcGVydHldKHsgcHJvcGVydHksIHJvdywgdmFsdWU6IG51bGwgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXNwb25zZSA/ICh0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5sZW5ndGggPiAwKSA6IGZhbHNlO1xyXG4gICAgfVxyXG59Il19
@@ -0,0 +1,30 @@
1
+ export const GridTemplates = {
2
+ /** Template for boolean property */
3
+ isActiveTemplate: (item) => {
4
+ if (item.value) {
5
+ return `
6
+ <span class='text-green-bold'>
7
+ <i class="fa-solid fa-circle-check"></i> Active
8
+ </span>
9
+ `;
10
+ }
11
+ else {
12
+ return `
13
+ <span class='text-gray-bold'>
14
+ <i class="fa-solid fa-circle-minus"></i> Disabled
15
+ </span>
16
+ `;
17
+ }
18
+ },
19
+ /** Template for boolean property */
20
+ coerSwitchTemplate: (item) => ({
21
+ isInput: true,
22
+ tooltip: `${item.value ? 'Active' : 'Disabled'}`
23
+ }),
24
+ /** Template for text property */
25
+ coerTextboxTemplate: (item) => ({
26
+ isInput: true,
27
+ isInvalid: item.value.length <= 0
28
+ })
29
+ };
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lci1ncmlkLnRlbXBsYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZXItZWxlbWVudHMvY29tcG9uZW50cy9saWIvY29lci1ncmlkL2NvZXItZ3JpZC50ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBRXpCLG9DQUFvQztJQUNwQyxnQkFBZ0IsRUFBRSxDQUFDLElBQW9CLEVBQVUsRUFBRTtRQUMvQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNiLE9BQU87Ozs7YUFJTixDQUFDO1FBQ04sQ0FBQzthQUVJLENBQUM7WUFDRixPQUFPOzs7O2FBSU4sQ0FBQztRQUNOLENBQUM7SUFDTCxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLGtCQUFrQixFQUFFLENBQUMsSUFBb0IsRUFBbUIsRUFBRSxDQUFDLENBQUM7UUFDNUQsT0FBTyxFQUFFLElBQUk7UUFDYixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVcsRUFBRTtLQUNwRCxDQUFDO0lBR0YsaUNBQWlDO0lBQ2pDLG1CQUFtQixFQUFFLENBQUMsSUFBb0IsRUFBb0IsRUFBRSxDQUFDLENBQUM7UUFDOUQsT0FBTyxFQUFFLElBQUk7UUFDYixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQztLQUNwQyxDQUFDO0NBQ0wsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElHcmlkQ29lclN3aXRjaCwgSUdyaWRDb2VyVGV4dEJveCwgSUdyaWRJdGVtIH0gZnJvbSBcImNvZXItZWxlbWVudHMvaW50ZXJmYWNlc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IEdyaWRUZW1wbGF0ZXMgPSB7XHJcblxyXG4gICAgLyoqIFRlbXBsYXRlIGZvciBib29sZWFuIHByb3BlcnR5ICovXHJcbiAgICBpc0FjdGl2ZVRlbXBsYXRlOiAoaXRlbTogSUdyaWRJdGVtPGFueT4pOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ndGV4dC1ncmVlbi1ib2xkJz5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNpcmNsZS1jaGVja1wiPjwvaT4gQWN0aXZlXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIGA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGBcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSd0ZXh0LWdyYXktYm9sZCc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jaXJjbGUtbWludXNcIj48L2k+IERpc2FibGVkXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIGA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKiogVGVtcGxhdGUgZm9yIGJvb2xlYW4gcHJvcGVydHkgKi9cclxuICAgIGNvZXJTd2l0Y2hUZW1wbGF0ZTogKGl0ZW06IElHcmlkSXRlbTxhbnk+KTogSUdyaWRDb2VyU3dpdGNoID0+ICh7XHJcbiAgICAgICAgaXNJbnB1dDogdHJ1ZSxcclxuICAgICAgICB0b29sdGlwOiBgJHtpdGVtLnZhbHVlID8gJ0FjdGl2ZScgOiAnRGlzYWJsZWQnIH1gXHJcbiAgICB9KSxcclxuXHJcblxyXG4gICAgLyoqIFRlbXBsYXRlIGZvciB0ZXh0IHByb3BlcnR5ICovXHJcbiAgICBjb2VyVGV4dGJveFRlbXBsYXRlOiAoaXRlbTogSUdyaWRJdGVtPGFueT4pOiBJR3JpZENvZXJUZXh0Qm94ID0+ICh7XHJcbiAgICAgICAgaXNJbnB1dDogdHJ1ZSxcclxuICAgICAgICBpc0ludmFsaWQ6IGl0ZW0udmFsdWUubGVuZ3RoIDw9IDBcclxuICAgIH0pXHJcbn0iXX0=