coer-elements 0.0.23 → 0.0.24
Sign up to get free protection for your applications and to get access to all the features.
- package/components/index.d.ts +5 -0
- package/components/lib/coer-button/coer-button.component.d.ts +44 -0
- package/components/lib/coer-checkbox/coer-checkbox.component.d.ts +28 -0
- package/components/lib/coer-filebox/coer-filebox.component.d.ts +33 -0
- package/components/lib/coer-form/coer-form.component.d.ts +33 -0
- package/components/lib/coer-grid/coer-grid.component.d.ts +53 -0
- package/components/lib/coer-grid/coer-grid.extension.d.ts +103 -0
- package/components/lib/coer-grid/coer-grid.templates.d.ts +9 -0
- package/components/lib/coer-modal/coer-modal.component.d.ts +38 -0
- package/components/lib/coer-numberbox/coer-numberbox.component.d.ts +55 -0
- package/components/lib/coer-page-title/coer-page-title.component.d.ts +12 -0
- package/components/lib/coer-selectbox/coer-selectbox.component.d.ts +75 -0
- package/components/lib/coer-switch/coer-switch.component.d.ts +31 -0
- package/components/lib/coer-tab/coer-tab.component.d.ts +35 -0
- package/components/lib/coer-textarea/coer-textarea.component.d.ts +51 -0
- package/components/lib/coer-textbox/coer-textbox.component.d.ts +57 -0
- package/components/lib/components.module.d.ts +30 -0
- package/components/public-api.d.ts +15 -0
- package/directives/index.d.ts +5 -0
- package/directives/lib/coer-ref.directive.d.ts +14 -0
- package/directives/lib/directives.module.d.ts +8 -0
- package/directives/lib/life-cycle.directive.d.ts +16 -0
- package/directives/public-api.d.ts +3 -0
- package/esm2022/components/coer-elements-components.mjs +5 -0
- package/esm2022/components/lib/coer-button/coer-button.component.mjs +133 -0
- package/esm2022/components/lib/coer-checkbox/coer-checkbox.component.mjs +83 -0
- package/esm2022/components/lib/coer-filebox/coer-filebox.component.mjs +102 -0
- package/esm2022/components/lib/coer-form/coer-form.component.mjs +101 -0
- package/esm2022/components/lib/coer-grid/coer-grid.component.mjs +512 -0
- package/esm2022/components/lib/coer-grid/coer-grid.extension.mjs +408 -0
- package/esm2022/components/lib/coer-grid/coer-grid.templates.mjs +30 -0
- package/esm2022/components/lib/coer-modal/coer-modal.component.mjs +107 -0
- package/esm2022/components/lib/coer-numberbox/coer-numberbox.component.mjs +258 -0
- package/esm2022/components/lib/coer-page-title/coer-page-title.component.mjs +44 -0
- package/esm2022/components/lib/coer-selectbox/coer-selectbox.component.mjs +338 -0
- package/esm2022/components/lib/coer-switch/coer-switch.component.mjs +93 -0
- package/esm2022/components/lib/coer-tab/coer-tab.component.mjs +116 -0
- package/esm2022/components/lib/coer-textarea/coer-textarea.component.mjs +156 -0
- package/esm2022/components/lib/coer-textbox/coer-textbox.component.mjs +195 -0
- package/esm2022/components/lib/components.module.mjs +129 -0
- package/esm2022/components/public-api.mjs +16 -0
- package/esm2022/directives/coer-elements-directives.mjs +5 -0
- package/esm2022/directives/lib/coer-ref.directive.mjs +23 -0
- package/esm2022/directives/lib/directives.module.mjs +25 -0
- package/esm2022/directives/lib/life-cycle.directive.mjs +33 -0
- package/esm2022/directives/public-api.mjs +4 -0
- package/esm2022/interfaces/coer-elements-interfaces.mjs +5 -0
- package/esm2022/interfaces/lib/app-source.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-filebox/file-image.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-filebox/file.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-button-by-row.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-checkbox.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-coer-numberbox.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-coer-selectbox.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-coer-switch.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-coer-textbox.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-column.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-data-source.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-header-button.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-header-export-button.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-header.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-import.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-input-checkbox.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-input-switch-change.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-input-textbox.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-item.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-keyup-enter.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-length.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-search.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-grid/grid-sort.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-menu/menu-option-selected.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-menu/menu-selected.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-menu/menu.interface.mjs +2 -0
- package/esm2022/interfaces/lib/coer-ref.interface.mjs +2 -0
- package/esm2022/interfaces/lib/page-title/breadcrumb.interface.mjs +2 -0
- package/esm2022/interfaces/lib/page-title/go-back.interface.mjs +2 -0
- package/esm2022/interfaces/lib/screen-size.interface.mjs +2 -0
- package/esm2022/interfaces/lib/service/http-request.interface.mjs +2 -0
- package/esm2022/interfaces/lib/service/http-response.interface.mjs +2 -0
- package/esm2022/interfaces/lib/service/patch.interface.mjs +2 -0
- package/esm2022/interfaces/public-api.mjs +39 -0
- package/esm2022/pipes/coer-elements-pipes.mjs +5 -0
- package/esm2022/pipes/lib/html.pipe.mjs +18 -0
- package/esm2022/pipes/lib/no-image.pipe.mjs +23 -0
- package/esm2022/pipes/lib/numeric-format.pipe.mjs +15 -0
- package/esm2022/pipes/lib/pipes.module.mjs +31 -0
- package/esm2022/pipes/public-api.mjs +5 -0
- package/esm2022/signals/coer-elements-signals.mjs +5 -0
- package/esm2022/signals/lib/breakpoint.signal.mjs +4 -0
- package/esm2022/signals/lib/is-loading.signal.mjs +3 -0
- package/esm2022/signals/lib/is-menu-open.signal.mjs +3 -0
- package/esm2022/signals/lib/is-modal-open.signal.mjs +3 -0
- package/esm2022/signals/lib/menu.signal.mjs +3 -0
- package/esm2022/signals/public-api.mjs +6 -0
- package/esm2022/tools/coer-elements-tools.mjs +5 -0
- package/esm2022/tools/lib/breadcrumbs.class.mjs +63 -0
- package/esm2022/tools/lib/coer-alert/coer-alert.component.mjs +228 -0
- package/esm2022/tools/lib/control-value.class.mjs +46 -0
- package/esm2022/tools/lib/date-time.class.mjs +29 -0
- package/esm2022/tools/lib/files.class.mjs +91 -0
- package/esm2022/tools/lib/menu.class.mjs +23 -0
- package/esm2022/tools/lib/page.class.mjs +156 -0
- package/esm2022/tools/lib/screen.class.mjs +51 -0
- package/esm2022/tools/lib/service.class.mjs +247 -0
- package/esm2022/tools/lib/source.class.mjs +80 -0
- package/esm2022/tools/lib/tools.mjs +220 -0
- package/esm2022/tools/public-api.mjs +12 -0
- package/fesm2022/coer-elements-components.mjs +2718 -0
- package/fesm2022/coer-elements-components.mjs.map +1 -0
- package/fesm2022/coer-elements-directives.mjs +82 -0
- package/fesm2022/coer-elements-directives.mjs.map +1 -0
- package/fesm2022/coer-elements-interfaces.mjs +6 -0
- package/fesm2022/coer-elements-interfaces.mjs.map +1 -0
- package/fesm2022/coer-elements-pipes.mjs +83 -0
- package/fesm2022/coer-elements-pipes.mjs.map +1 -0
- package/fesm2022/coer-elements-signals.mjs +19 -0
- package/fesm2022/coer-elements-signals.mjs.map +1 -0
- package/fesm2022/coer-elements-tools.mjs +1223 -0
- package/fesm2022/coer-elements-tools.mjs.map +1 -0
- package/interfaces/index.d.ts +5 -0
- package/interfaces/lib/app-source.interface.d.ts +4 -0
- package/interfaces/lib/coer-filebox/file-image.interface.d.ts +14 -0
- package/interfaces/lib/coer-filebox/file.interface.d.ts +5 -0
- package/interfaces/lib/coer-grid/grid-button-by-row.interface.d.ts +6 -0
- package/interfaces/lib/coer-grid/grid-checkbox.interface.d.ts +5 -0
- package/interfaces/lib/coer-grid/grid-coer-numberbox.interface.d.ts +12 -0
- package/interfaces/lib/coer-grid/grid-coer-selectbox.interface.d.ts +9 -0
- package/interfaces/lib/coer-grid/grid-coer-switch.interface.d.ts +6 -0
- package/interfaces/lib/coer-grid/grid-coer-textbox.interface.d.ts +11 -0
- package/interfaces/lib/coer-grid/grid-column.interface.d.ts +22 -0
- package/interfaces/lib/coer-grid/grid-data-source.interface.d.ts +6 -0
- package/interfaces/lib/coer-grid/grid-header-button.interface.d.ts +8 -0
- package/interfaces/lib/coer-grid/grid-header-export-button.interface.d.ts +10 -0
- package/interfaces/lib/coer-grid/grid-header.interface.d.ts +5 -0
- package/interfaces/lib/coer-grid/grid-import.interface.d.ts +4 -0
- package/interfaces/lib/coer-grid/grid-input-checkbox.interface.d.ts +5 -0
- package/interfaces/lib/coer-grid/grid-input-switch-change.interface.d.ts +5 -0
- package/interfaces/lib/coer-grid/grid-input-textbox.interface.d.ts +5 -0
- package/interfaces/lib/coer-grid/grid-item.interface.d.ts +5 -0
- package/interfaces/lib/coer-grid/grid-keyup-enter.interface.d.ts +6 -0
- package/interfaces/lib/coer-grid/grid-length.interface.d.ts +5 -0
- package/interfaces/lib/coer-grid/grid-search.interface.d.ts +4 -0
- package/interfaces/lib/coer-grid/grid-sort.interface.d.ts +5 -0
- package/interfaces/lib/coer-menu/menu-option-selected.interface.d.ts +9 -0
- package/interfaces/lib/coer-menu/menu-selected.interface.d.ts +10 -0
- package/interfaces/lib/coer-menu/menu.interface.d.ts +6 -0
- package/interfaces/lib/coer-ref.interface.d.ts +10 -0
- package/interfaces/lib/page-title/breadcrumb.interface.d.ts +6 -0
- package/interfaces/lib/page-title/go-back.interface.d.ts +6 -0
- package/interfaces/lib/screen-size.interface.d.ts +5 -0
- package/interfaces/lib/service/http-request.interface.d.ts +10 -0
- package/interfaces/lib/service/http-response.interface.d.ts +6 -0
- package/interfaces/lib/service/patch.interface.d.ts +5 -0
- package/interfaces/public-api.d.ts +33 -0
- package/package.json +37 -1
- package/pipes/index.d.ts +5 -0
- package/pipes/lib/html.pipe.d.ts +10 -0
- package/pipes/lib/no-image.pipe.d.ts +7 -0
- package/pipes/lib/numeric-format.pipe.d.ts +7 -0
- package/pipes/lib/pipes.module.d.ts +9 -0
- package/pipes/public-api.d.ts +4 -0
- package/signals/index.d.ts +5 -0
- package/signals/lib/breakpoint.signal.d.ts +1 -0
- package/signals/lib/is-loading.signal.d.ts +1 -0
- package/signals/lib/is-menu-open.signal.d.ts +1 -0
- package/signals/lib/is-modal-open.signal.d.ts +1 -0
- package/signals/lib/menu.signal.d.ts +2 -0
- package/signals/public-api.d.ts +5 -0
- package/tools/index.d.ts +5 -0
- package/tools/lib/breadcrumbs.class.d.ts +18 -0
- package/tools/lib/coer-alert/coer-alert.component.d.ts +23 -0
- package/tools/lib/control-value.class.d.ts +25 -0
- package/tools/lib/date-time.class.d.ts +13 -0
- package/tools/lib/files.class.d.ts +16 -0
- package/tools/lib/menu.class.d.ts +8 -0
- package/tools/lib/page.class.d.ts +60 -0
- package/tools/lib/screen.class.d.ts +13 -0
- package/tools/lib/service.class.d.ts +39 -0
- package/tools/lib/source.class.d.ts +20 -0
- package/tools/lib/tools.d.ts +34 -0
- 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=
|