@acorex/components 7.8.1 → 7.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/button/lib/button.component.mjs +2 -2
- package/esm2022/list/lib/list.component.mjs +10 -8
- package/esm2022/otp/lib/otp.component.mjs +2 -2
- package/esm2022/select-box/lib/select-box.component.mjs +7 -6
- package/fesm2022/acorex-components-button.mjs +2 -2
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-list.mjs +9 -7
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-otp.mjs +2 -2
- package/fesm2022/acorex-components-otp.mjs.map +1 -1
- package/fesm2022/acorex-components-select-box.mjs +6 -5
- package/fesm2022/acorex-components-select-box.mjs.map +1 -1
- package/list/lib/list.component.d.ts +1 -2
- package/package.json +1 -7
- package/select-box/lib/select-box.component.d.ts +0 -1
- package/esm2022/mixin/acorex-components-mixin.mjs +0 -5
- package/esm2022/mixin/index.mjs +0 -17
- package/esm2022/mixin/lib/base-components.class.mjs +0 -110
- package/esm2022/mixin/lib/base-menu-mixin.class.mjs +0 -137
- package/esm2022/mixin/lib/button-mixin.class.mjs +0 -66
- package/esm2022/mixin/lib/clickable-mixin.class.mjs +0 -24
- package/esm2022/mixin/lib/color-look-mixing.class.mjs +0 -43
- package/esm2022/mixin/lib/constratctor.mjs +0 -2
- package/esm2022/mixin/lib/datalist-component.class.mjs +0 -155
- package/esm2022/mixin/lib/datalist.class.mjs +0 -46
- package/esm2022/mixin/lib/dropdown-mixin.class.mjs +0 -95
- package/esm2022/mixin/lib/interactive-mixin.class.mjs +0 -84
- package/esm2022/mixin/lib/mixin.class.mjs +0 -26
- package/esm2022/mixin/lib/page-component.class.mjs +0 -11
- package/esm2022/mixin/lib/selection-component.class.mjs +0 -180
- package/esm2022/mixin/lib/sizable-mixin.class.mjs +0 -16
- package/esm2022/mixin/lib/textbox-mixin.class.mjs +0 -67
- package/esm2022/mixin/lib/value-mixin.class.mjs +0 -227
- package/fesm2022/acorex-components-mixin.mjs +0 -1268
- package/fesm2022/acorex-components-mixin.mjs.map +0 -1
- package/mixin/README.md +0 -3
- package/mixin/index.d.ts +0 -16
- package/mixin/lib/base-components.class.d.ts +0 -84
- package/mixin/lib/base-menu-mixin.class.d.ts +0 -53
- package/mixin/lib/button-mixin.class.d.ts +0 -53
- package/mixin/lib/clickable-mixin.class.d.ts +0 -36
- package/mixin/lib/color-look-mixing.class.d.ts +0 -42
- package/mixin/lib/constratctor.d.ts +0 -4
- package/mixin/lib/datalist-component.class.d.ts +0 -59
- package/mixin/lib/datalist.class.d.ts +0 -49
- package/mixin/lib/dropdown-mixin.class.d.ts +0 -47
- package/mixin/lib/interactive-mixin.class.d.ts +0 -63
- package/mixin/lib/mixin.class.d.ts +0 -680
- package/mixin/lib/page-component.class.d.ts +0 -28
- package/mixin/lib/selection-component.class.d.ts +0 -61
- package/mixin/lib/sizable-mixin.class.d.ts +0 -34
- package/mixin/lib/textbox-mixin.class.d.ts +0 -66
- package/mixin/lib/value-mixin.class.d.ts +0 -64
@@ -1,227 +0,0 @@
|
|
1
|
-
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
2
|
-
import { EventEmitter } from '@angular/core';
|
3
|
-
import { clone } from 'lodash-es';
|
4
|
-
export function _ValueComponenetMixin(Base) {
|
5
|
-
return class extends Base {
|
6
|
-
#readonly;
|
7
|
-
/**
|
8
|
-
* If set to true, user cannot change the value of component.
|
9
|
-
*/
|
10
|
-
get readonly() {
|
11
|
-
return this.#readonly;
|
12
|
-
}
|
13
|
-
set readonly(value) {
|
14
|
-
this.#readonly = coerceBooleanProperty(value);
|
15
|
-
}
|
16
|
-
#allowNull;
|
17
|
-
get allowNull() {
|
18
|
-
return this.#allowNull;
|
19
|
-
}
|
20
|
-
set allowNull(value) {
|
21
|
-
this.#allowNull = coerceBooleanProperty(value);
|
22
|
-
}
|
23
|
-
#name;
|
24
|
-
get name() {
|
25
|
-
return this.#name;
|
26
|
-
}
|
27
|
-
set name(value) {
|
28
|
-
this.#name = value;
|
29
|
-
}
|
30
|
-
#isUserInteraction;
|
31
|
-
get isUserInteraction() {
|
32
|
-
return this.#isUserInteraction;
|
33
|
-
}
|
34
|
-
#value;
|
35
|
-
get value() {
|
36
|
-
return this._internalGetValue();
|
37
|
-
}
|
38
|
-
set value(v) {
|
39
|
-
v = this._internalSetValue(v);
|
40
|
-
//if (!this._isInited ) {
|
41
|
-
const old = clone(this.value);
|
42
|
-
// TODO: check real equality
|
43
|
-
if (v != old) {
|
44
|
-
this.#value = v;
|
45
|
-
this._emitOnValueChangedEvent(old, this.value);
|
46
|
-
this._cdr.markForCheck();
|
47
|
-
if (v == null || v == undefined || v == '' || (Array.isArray(v) && v.length == 0)) {
|
48
|
-
this._setState('clear');
|
49
|
-
}
|
50
|
-
// else {
|
51
|
-
// if (this._isInited) {
|
52
|
-
// this.validate();
|
53
|
-
// }
|
54
|
-
// }
|
55
|
-
}
|
56
|
-
this.#isUserInteraction = false;
|
57
|
-
//}
|
58
|
-
}
|
59
|
-
#state;
|
60
|
-
get state() {
|
61
|
-
return this.#state;
|
62
|
-
}
|
63
|
-
set state(value) {
|
64
|
-
this._setState(value);
|
65
|
-
this.stateChange.emit(value);
|
66
|
-
}
|
67
|
-
_emitOnValueChangedEvent(oldValue, newValue) {
|
68
|
-
this.valueChange.emit(newValue);
|
69
|
-
this.onValueChanged.emit({
|
70
|
-
component: this,
|
71
|
-
value: newValue,
|
72
|
-
oldValue: oldValue,
|
73
|
-
name: this.name,
|
74
|
-
isUserInteraction: this.isUserInteraction,
|
75
|
-
});
|
76
|
-
this._onValueChanged(oldValue, this.#value);
|
77
|
-
this.#isUserInteraction = false;
|
78
|
-
}
|
79
|
-
_internalSetValue(value) {
|
80
|
-
return this._setValue(value);
|
81
|
-
}
|
82
|
-
_internalGetValue() {
|
83
|
-
return this._getValue(this.#value);
|
84
|
-
}
|
85
|
-
_setValue(value) {
|
86
|
-
return value;
|
87
|
-
}
|
88
|
-
_getValue(value) {
|
89
|
-
return value;
|
90
|
-
}
|
91
|
-
_setUserInteraction() {
|
92
|
-
this.#isUserInteraction = true;
|
93
|
-
}
|
94
|
-
setUserInteraction() {
|
95
|
-
this.#isUserInteraction = true;
|
96
|
-
}
|
97
|
-
_onValueChanged(oldValue, newValue) { }
|
98
|
-
_onInternalInit() {
|
99
|
-
this._getHostElement().setAttribute('ax-form-input', 'true');
|
100
|
-
super._onInternalInit();
|
101
|
-
}
|
102
|
-
_onInternalViewInit() {
|
103
|
-
this._checkRequired();
|
104
|
-
super._onInternalViewInit();
|
105
|
-
}
|
106
|
-
_onInternalDestroy() {
|
107
|
-
super.onDestroy();
|
108
|
-
}
|
109
|
-
clear() {
|
110
|
-
this.value = null;
|
111
|
-
}
|
112
|
-
_checkRequired() {
|
113
|
-
const isRequired = Array.from(this._getHostElement().querySelectorAll('ax-validation-rule')).some((c) => c.__axContext__.enabled && c.__axContext__.rule == 'required');
|
114
|
-
//
|
115
|
-
if (isRequired) {
|
116
|
-
const container = this._getHostElement().classList.contains('ax-editor-container')
|
117
|
-
? this._getHostElement()
|
118
|
-
: this._getHostElement().querySelector('.ax-editor-container');
|
119
|
-
const formField = container?.closest('.ax-form-field');
|
120
|
-
const label = formField?.querySelector('ax-label')?.__axContext__;
|
121
|
-
if (label)
|
122
|
-
label.required = true;
|
123
|
-
}
|
124
|
-
}
|
125
|
-
validate() {
|
126
|
-
const rules = Array.from(this._getHostElement().querySelectorAll('ax-validation-rule')).filter((c) => c.__axContext__.enabled);
|
127
|
-
//
|
128
|
-
if (!rules || rules.length === 0) {
|
129
|
-
this._setState('clear');
|
130
|
-
return Promise.resolve({
|
131
|
-
result: true,
|
132
|
-
value: this.value,
|
133
|
-
name: this.name,
|
134
|
-
id: this.id,
|
135
|
-
});
|
136
|
-
}
|
137
|
-
return new Promise((resolve) => {
|
138
|
-
Promise.all(rules
|
139
|
-
.filter((c) => typeof c?.validate === 'function')
|
140
|
-
.map((c) => {
|
141
|
-
return c.validate(this.value);
|
142
|
-
})).then((d) => {
|
143
|
-
const error = d.find((c) => c.result === false);
|
144
|
-
if (error) {
|
145
|
-
this._setState('error', error.message);
|
146
|
-
resolve({
|
147
|
-
result: false,
|
148
|
-
value: this.value,
|
149
|
-
message: error.message,
|
150
|
-
name: this.name,
|
151
|
-
id: this.id,
|
152
|
-
});
|
153
|
-
}
|
154
|
-
else {
|
155
|
-
this._setState('success');
|
156
|
-
resolve({
|
157
|
-
result: true,
|
158
|
-
value: this.value,
|
159
|
-
name: this.name,
|
160
|
-
id: this.id,
|
161
|
-
});
|
162
|
-
}
|
163
|
-
});
|
164
|
-
});
|
165
|
-
}
|
166
|
-
/**
|
167
|
-
* @ignore
|
168
|
-
*/
|
169
|
-
constructor(...args) {
|
170
|
-
super(...args);
|
171
|
-
/**
|
172
|
-
* Fires each time the user press a key.
|
173
|
-
* @event
|
174
|
-
*/
|
175
|
-
this.onValueChanged = new EventEmitter();
|
176
|
-
this.valueChange = new EventEmitter();
|
177
|
-
this.stateChange = new EventEmitter();
|
178
|
-
this.#readonly = false;
|
179
|
-
this.#allowNull = true;
|
180
|
-
this.#isUserInteraction = false;
|
181
|
-
this.#state = 'clear';
|
182
|
-
}
|
183
|
-
_setState(state, ...args) {
|
184
|
-
const container = this._getHostElement().classList.contains('ax-editor-container')
|
185
|
-
? this._getHostElement()
|
186
|
-
: this._getHostElement().querySelector('.ax-editor-container');
|
187
|
-
const formField = container?.closest('.ax-form-field');
|
188
|
-
const label = formField?.querySelector('ax-label') || formField?.querySelector('label');
|
189
|
-
let target = container || this._getInnerElement();
|
190
|
-
if (target?.querySelector('.ax-error-container')) {
|
191
|
-
target = target.querySelector('.ax-error-container');
|
192
|
-
}
|
193
|
-
const parent = target?.parentElement;
|
194
|
-
if (!target || !parent)
|
195
|
-
return;
|
196
|
-
switch (state) {
|
197
|
-
case 'clear':
|
198
|
-
this.#state = 'clear';
|
199
|
-
if (parent.querySelector('span.ax-error-message')) {
|
200
|
-
parent.removeChild(parent.querySelector('span.ax-error-message'));
|
201
|
-
}
|
202
|
-
label?.classList.remove('ax-state-error');
|
203
|
-
target.classList.remove('ax-state-error', 'ax-state-success');
|
204
|
-
break;
|
205
|
-
case 'success':
|
206
|
-
this._setState('clear');
|
207
|
-
target.classList.add('ax-state-success');
|
208
|
-
this.#state = 'success';
|
209
|
-
break;
|
210
|
-
case 'error':
|
211
|
-
this._setState('clear');
|
212
|
-
if (args[0]) {
|
213
|
-
const span = document.createElement('span');
|
214
|
-
span.innerText = args[0];
|
215
|
-
span.classList.add('ax-error-message');
|
216
|
-
parent.appendChild(span);
|
217
|
-
}
|
218
|
-
label?.classList.add('ax-state-error');
|
219
|
-
target.classList.add('ax-state-error');
|
220
|
-
this.#state = 'error';
|
221
|
-
break;
|
222
|
-
}
|
223
|
-
this._cdr.markForCheck();
|
224
|
-
}
|
225
|
-
};
|
226
|
-
}
|
227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtbWl4aW4uY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbWl4aW4vc3JjL2xpYi92YWx1ZS1taXhpbi5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJbEMsTUFBTSxVQUFVLHFCQUFxQixDQUE2QyxJQUFXO0lBQzNGLE9BQU8sS0FBTSxTQUFRLElBQUk7UUFVdkIsU0FBUyxDQUFrQjtRQUUzQjs7V0FFRztRQUNILElBQUksUUFBUTtZQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsS0FBYztZQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxVQUFVLENBQWlCO1FBQzNCLElBQUksU0FBUztZQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsS0FBYztZQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFFRCxLQUFLLENBQVM7UUFDZCxJQUFJLElBQUk7WUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLEtBQWE7WUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckIsQ0FBQztRQUVELGtCQUFrQixDQUFrQjtRQUVwQyxJQUFJLGlCQUFpQjtZQUNuQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztR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QU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO29CQUN4QixNQUFNO2dCQUNSLEtBQUssT0FBTztvQkFDVixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN4QixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDWCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt3QkFDdkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDMUI7b0JBQ0QsS0FBSyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFFdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7b0JBQ3RCLE1BQU07YUFDVDtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0IsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhWYWx1ZUNoYW5nZWRFdmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhCYXNlQ29tcG9uZW50LCBBWENvbXBvbmVudFN0YXRlIH0gZnJvbSAnLi9iYXNlLWNvbXBvbmVudHMuY2xhc3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cmF0Y3Rvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBfVmFsdWVDb21wb25lbmV0TWl4aW48VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxBWEJhc2VDb21wb25lbnQ+PihCYXNlOiBUQmFzZSkge1xuICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBCYXNlIHtcbiAgICAvKipcbiAgICAgKiAgRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIHByZXNzIGEga2V5LlxuICAgICAqICBAZXZlbnRcbiAgICAgKi9cbiAgICBvblZhbHVlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYVmFsdWVDaGFuZ2VkRXZlbnQ8YW55Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYVmFsdWVDaGFuZ2VkRXZlbnQ8YW55Pj4oKTtcblxuICAgIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIHN0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QVhDb21wb25lbnRTdGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYQ29tcG9uZW50U3RhdGU+KCk7XG5cbiAgICAjcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqICBJZiBzZXQgdG8gdHJ1ZSwgdXNlciBjYW5ub3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiBjb21wb25lbnQuXG4gICAgICovXG4gICAgZ2V0IHJlYWRvbmx5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuI3JlYWRvbmx5O1xuICAgIH1cbiAgICBzZXQgcmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIHRoaXMuI3JlYWRvbmx5ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICAjYWxsb3dOdWxsOiBib29sZWFuID0gdHJ1ZTtcbiAgICBnZXQgYWxsb3dOdWxsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuI2FsbG93TnVsbDtcbiAgICB9XG4gICAgc2V0IGFsbG93TnVsbCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgdGhpcy4jYWxsb3dOdWxsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICAjbmFtZTogc3RyaW5nO1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuI25hbWU7XG4gICAgfVxuICAgIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuI25hbWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAjaXNVc2VySW50ZXJhY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGdldCBpc1VzZXJJbnRlcmFjdGlvbigpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLiNpc1VzZXJJbnRlcmFjdGlvbjtcbiAgICB9XG5cbiAgICAjdmFsdWU6IGFueTtcbiAgICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEdldFZhbHVlKCk7XG4gICAgfVxuICAgIHNldCB2YWx1ZSh2OiBhbnkpIHtcbiAgICAgIHYgPSB0aGlzLl9pbnRlcm5hbFNldFZhbHVlKHYpO1xuICAgICAgLy9pZiAoIXRoaXMuX2lzSW5pdGVkICkge1xuICAgICAgY29uc3Qgb2xkID0gY2xvbmUodGhpcy52YWx1ZSk7XG4gICAgICAvLyBUT0RPOiBjaGVjayByZWFsIGVxdWFsaXR5XG4gICAgICBpZiAodiAhPSBvbGQpIHtcbiAgICAgICAgdGhpcy4jdmFsdWUgPSB2O1xuICAgICAgICB0aGlzLl9lbWl0T25WYWx1ZUNoYW5nZWRFdmVudChvbGQsIHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGlmICh2ID09IG51bGwgfHwgdiA9PSB1bmRlZmluZWQgfHwgdiA9PSAnJyB8fCAoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lmxlbmd0aCA9PSAwKSkge1xuICAgICAgICAgIHRoaXMuX3NldFN0YXRlKCdjbGVhcicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAvLyAgIGlmICh0aGlzLl9pc0luaXRlZCkge1xuICAgICAgICAvLyAgICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgICAgdGhpcy4jaXNVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICAgIC8vfVxuICAgIH1cblxuICAgICNzdGF0ZTogQVhDb21wb25lbnRTdGF0ZSA9ICdjbGVhcic7XG5cbiAgICBnZXQgc3RhdGUoKTogQVhDb21wb25lbnRTdGF0ZSB7XG4gICAgICByZXR1cm4gdGhpcy4jc3RhdGU7XG4gICAgfVxuXG4gICAgc2V0IHN0YXRlKHZhbHVlOiBBWENvbXBvbmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9zZXRTdGF0ZSh2YWx1ZSk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH1cblxuICAgIF9lbWl0T25WYWx1ZUNoYW5nZWRFdmVudChvbGRWYWx1ZT86IGFueSwgbmV3VmFsdWU/OiBhbnkpIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChuZXdWYWx1ZSk7XG4gICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmVtaXQoe1xuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0aGlzLmlzVXNlckludGVyYWN0aW9uLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9vblZhbHVlQ2hhbmdlZChvbGRWYWx1ZSwgdGhpcy4jdmFsdWUpO1xuICAgICAgdGhpcy4jaXNVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBfaW50ZXJuYWxTZXRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIF9pbnRlcm5hbEdldFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldFZhbHVlKHRoaXMuI3ZhbHVlKTtcbiAgICB9XG5cbiAgICBfc2V0VmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIF9nZXRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgX3NldFVzZXJJbnRlcmFjdGlvbigpIHtcbiAgICAgIHRoaXMuI2lzVXNlckludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBzZXRVc2VySW50ZXJhY3Rpb24oKSB7XG4gICAgICB0aGlzLiNpc1VzZXJJbnRlcmFjdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgX29uVmFsdWVDaGFuZ2VkKG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpOiB2b2lkIHt9XG5cbiAgICBvdmVycmlkZSBfb25JbnRlcm5hbEluaXQoKSB7XG4gICAgICB0aGlzLl9nZXRIb3N0RWxlbWVudCgpLnNldEF0dHJpYnV0ZSgnYXgtZm9ybS1pbnB1dCcsICd0cnVlJyk7XG4gICAgICBzdXBlci5fb25JbnRlcm5hbEluaXQoKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBfb25JbnRlcm5hbFZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgdGhpcy5fY2hlY2tSZXF1aXJlZCgpO1xuICAgICAgc3VwZXIuX29uSW50ZXJuYWxWaWV3SW5pdCgpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIF9vbkludGVybmFsRGVzdHJveSgpIHtcbiAgICAgIHN1cGVyLm9uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgX2NoZWNrUmVxdWlyZWQoKSB7XG4gICAgICBjb25zdCBpc1JlcXVpcmVkID0gQXJyYXkuZnJvbSh0aGlzLl9nZXRIb3N0RWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3JBbGwoJ2F4LXZhbGlkYXRpb24tcnVsZScpKS5zb21lKFxuICAgICAgICAoYykgPT4gKGMgYXMgYW55KS5fX2F4Q29udGV4dF9fLmVuYWJsZWQgJiYgKGMgYXMgYW55KS5fX2F4Q29udGV4dF9fLnJ1bGUgPT0gJ3JlcXVpcmVkJyxcbiAgICAgICk7XG4gICAgICAvL1xuICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5jbGFzc0xpc3QuY29udGFpbnMoJ2F4LWVkaXRvci1jb250YWluZXInKVxuICAgICAgICAgID8gdGhpcy5fZ2V0SG9zdEVsZW1lbnQoKVxuICAgICAgICAgIDogdGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5xdWVyeVNlbGVjdG9yKCcuYXgtZWRpdG9yLWNvbnRhaW5lcicpO1xuICAgICAgICBjb25zdCBmb3JtRmllbGQgPSBjb250YWluZXI/LmNsb3Nlc3QoJy5heC1mb3JtLWZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gKGZvcm1GaWVsZD8ucXVlcnlTZWxlY3RvcignYXgtbGFiZWwnKSBhcyBhbnkpPy5fX2F4Q29udGV4dF9fO1xuICAgICAgICBpZiAobGFiZWwpIGxhYmVsLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgY29uc3QgcnVsZXMgPSBBcnJheS5mcm9tKHRoaXMuX2dldEhvc3RFbGVtZW50KCkucXVlcnlTZWxlY3RvckFsbCgnYXgtdmFsaWRhdGlvbi1ydWxlJykpLmZpbHRlcihcbiAgICAgICAgKGMpID0+IChjIGFzIGFueSkuX19heENvbnRleHRfXy5lbmFibGVkLFxuICAgICAgKTtcbiAgICAgIC8vXG4gICAgICBpZiAoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9zZXRTdGF0ZSgnY2xlYXInKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgcmVzdWx0OiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICAgIHJ1bGVzXG4gICAgICAgICAgICAuZmlsdGVyKChjKSA9PiB0eXBlb2YgKGMgYXMgYW55KT8udmFsaWRhdGUgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICAubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoYyBhcyBhbnkpLnZhbGlkYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICkudGhlbigoZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gZC5maW5kKChjKSA9PiBjLnJlc3VsdCA9PT0gZmFsc2UpO1xuICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fc2V0U3RhdGUoJ2Vycm9yJywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2V0U3RhdGUoJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICByZXN1bHQ6IHRydWUsXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBAaWdub3JlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoLi4uYXJnczogYW55W10pIHtcbiAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIF9zZXRTdGF0ZShzdGF0ZTogQVhDb21wb25lbnRTdGF0ZSwgLi4uYXJncykge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5jbGFzc0xpc3QuY29udGFpbnMoJ2F4LWVkaXRvci1jb250YWluZXInKVxuICAgICAgICA/IHRoaXMuX2dldEhvc3RFbGVtZW50KClcbiAgICAgICAgOiB0aGlzLl9nZXRIb3N0RWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5heC1lZGl0b3ItY29udGFpbmVyJyk7XG4gICAgICBjb25zdCBmb3JtRmllbGQgPSBjb250YWluZXI/LmNsb3Nlc3QoJy5heC1mb3JtLWZpZWxkJyk7XG4gICAgICBjb25zdCBsYWJlbCA9IGZvcm1GaWVsZD8ucXVlcnlTZWxlY3RvcignYXgtbGFiZWwnKSB8fCBmb3JtRmllbGQ/LnF1ZXJ5U2VsZWN0b3IoJ2xhYmVsJyk7XG4gICAgICBsZXQgdGFyZ2V0ID0gY29udGFpbmVyIHx8IHRoaXMuX2dldElubmVyRWxlbWVudCgpO1xuICAgICAgaWYgKHRhcmdldD8ucXVlcnlTZWxlY3RvcignLmF4LWVycm9yLWNvbnRhaW5lcicpKSB7XG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5xdWVyeVNlbGVjdG9yKCcuYXgtZXJyb3ItY29udGFpbmVyJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnQgPSB0YXJnZXQ/LnBhcmVudEVsZW1lbnQ7XG4gICAgICBpZiAoIXRhcmdldCB8fCAhcGFyZW50KSByZXR1cm47XG5cbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgY2FzZSAnY2xlYXInOlxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gJ2NsZWFyJztcbiAgICAgICAgICBpZiAocGFyZW50LnF1ZXJ5U2VsZWN0b3IoJ3NwYW4uYXgtZXJyb3ItbWVzc2FnZScpKSB7XG4gICAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQocGFyZW50LnF1ZXJ5U2VsZWN0b3IoJ3NwYW4uYXgtZXJyb3ItbWVzc2FnZScpISk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxhYmVsPy5jbGFzc0xpc3QucmVtb3ZlKCdheC1zdGF0ZS1lcnJvcicpO1xuICAgICAgICAgIHRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCdheC1zdGF0ZS1lcnJvcicsICdheC1zdGF0ZS1zdWNjZXNzJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICAgIHRoaXMuX3NldFN0YXRlKCdjbGVhcicpO1xuICAgICAgICAgIHRhcmdldC5jbGFzc0xpc3QuYWRkKCdheC1zdGF0ZS1zdWNjZXNzJyk7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICB0aGlzLl9zZXRTdGF0ZSgnY2xlYXInKTtcbiAgICAgICAgICBpZiAoYXJnc1swXSkge1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgIHNwYW4uaW5uZXJUZXh0ID0gYXJnc1swXTtcbiAgICAgICAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZCgnYXgtZXJyb3ItbWVzc2FnZScpO1xuICAgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsYWJlbD8uY2xhc3NMaXN0LmFkZCgnYXgtc3RhdGUtZXJyb3InKTtcbiAgICAgICAgICB0YXJnZXQuY2xhc3NMaXN0LmFkZCgnYXgtc3RhdGUtZXJyb3InKTtcblxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gJ2Vycm9yJztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH07XG59XG4iXX0=
|