@acorex/components 7.8.0 → 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.
Files changed (53) hide show
  1. package/esm2022/button/lib/button.component.mjs +2 -2
  2. package/esm2022/list/lib/list.component.mjs +10 -8
  3. package/esm2022/otp/lib/otp.component.mjs +2 -2
  4. package/esm2022/select-box/lib/select-box.component.mjs +7 -6
  5. package/fesm2022/acorex-components-button.mjs +2 -2
  6. package/fesm2022/acorex-components-button.mjs.map +1 -1
  7. package/fesm2022/acorex-components-list.mjs +9 -7
  8. package/fesm2022/acorex-components-list.mjs.map +1 -1
  9. package/fesm2022/acorex-components-otp.mjs +2 -2
  10. package/fesm2022/acorex-components-otp.mjs.map +1 -1
  11. package/fesm2022/acorex-components-select-box.mjs +6 -5
  12. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  13. package/list/lib/list.component.d.ts +1 -2
  14. package/package.json +1 -7
  15. package/select-box/lib/select-box.component.d.ts +0 -1
  16. package/esm2022/mixin/acorex-components-mixin.mjs +0 -5
  17. package/esm2022/mixin/index.mjs +0 -17
  18. package/esm2022/mixin/lib/base-components.class.mjs +0 -110
  19. package/esm2022/mixin/lib/base-menu-mixin.class.mjs +0 -137
  20. package/esm2022/mixin/lib/button-mixin.class.mjs +0 -66
  21. package/esm2022/mixin/lib/clickable-mixin.class.mjs +0 -24
  22. package/esm2022/mixin/lib/color-look-mixing.class.mjs +0 -43
  23. package/esm2022/mixin/lib/constratctor.mjs +0 -2
  24. package/esm2022/mixin/lib/datalist-component.class.mjs +0 -155
  25. package/esm2022/mixin/lib/datalist.class.mjs +0 -46
  26. package/esm2022/mixin/lib/dropdown-mixin.class.mjs +0 -95
  27. package/esm2022/mixin/lib/interactive-mixin.class.mjs +0 -84
  28. package/esm2022/mixin/lib/mixin.class.mjs +0 -26
  29. package/esm2022/mixin/lib/page-component.class.mjs +0 -11
  30. package/esm2022/mixin/lib/selection-component.class.mjs +0 -180
  31. package/esm2022/mixin/lib/sizable-mixin.class.mjs +0 -16
  32. package/esm2022/mixin/lib/textbox-mixin.class.mjs +0 -67
  33. package/esm2022/mixin/lib/value-mixin.class.mjs +0 -227
  34. package/fesm2022/acorex-components-mixin.mjs +0 -1268
  35. package/fesm2022/acorex-components-mixin.mjs.map +0 -1
  36. package/mixin/README.md +0 -3
  37. package/mixin/index.d.ts +0 -16
  38. package/mixin/lib/base-components.class.d.ts +0 -84
  39. package/mixin/lib/base-menu-mixin.class.d.ts +0 -53
  40. package/mixin/lib/button-mixin.class.d.ts +0 -53
  41. package/mixin/lib/clickable-mixin.class.d.ts +0 -36
  42. package/mixin/lib/color-look-mixing.class.d.ts +0 -42
  43. package/mixin/lib/constratctor.d.ts +0 -4
  44. package/mixin/lib/datalist-component.class.d.ts +0 -59
  45. package/mixin/lib/datalist.class.d.ts +0 -49
  46. package/mixin/lib/dropdown-mixin.class.d.ts +0 -47
  47. package/mixin/lib/interactive-mixin.class.d.ts +0 -63
  48. package/mixin/lib/mixin.class.d.ts +0 -680
  49. package/mixin/lib/page-component.class.d.ts +0 -28
  50. package/mixin/lib/selection-component.class.d.ts +0 -61
  51. package/mixin/lib/sizable-mixin.class.d.ts +0 -34
  52. package/mixin/lib/textbox-mixin.class.d.ts +0 -66
  53. 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=