@posiwise/shared-components 0.0.146 → 0.0.147

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 (29) hide show
  1. package/fesm2022/posiwise-shared-components.mjs +128 -96
  2. package/fesm2022/posiwise-shared-components.mjs.map +1 -1
  3. package/lib/pw-tabs/pw-tabs.component.d.ts +1 -0
  4. package/package.json +4 -6
  5. package/esm2022/index.mjs +0 -22
  6. package/esm2022/lib/authenticator/authenticator.component.mjs +0 -39
  7. package/esm2022/lib/clearbit-icon/clearbit-icon.component.mjs +0 -34
  8. package/esm2022/lib/coming-soon/coming-soon.component.mjs +0 -29
  9. package/esm2022/lib/header/header.component.mjs +0 -38
  10. package/esm2022/lib/input-container/input-container.component.mjs +0 -91
  11. package/esm2022/lib/label-management/entity-group/entity-group.component.mjs +0 -154
  12. package/esm2022/lib/label-management/group-definition/group-definition.component.mjs +0 -178
  13. package/esm2022/lib/label-management/groups/groups.component.mjs +0 -236
  14. package/esm2022/lib/landing-page-footer-b/landing-page-footer-b.component.mjs +0 -26
  15. package/esm2022/lib/no-data/no-data.component.mjs +0 -75
  16. package/esm2022/lib/number-picker/number-picker.component.mjs +0 -304
  17. package/esm2022/lib/number-picker/number-picker.config.mjs +0 -2
  18. package/esm2022/lib/password-validation/password-validation.component.mjs +0 -55
  19. package/esm2022/lib/permission-tree/permission-tree.component.mjs +0 -111
  20. package/esm2022/lib/privacy-and-tos/privacy-and-tos.component.mjs +0 -119
  21. package/esm2022/lib/privacy-policy/privacy-policy.component.mjs +0 -23
  22. package/esm2022/lib/pw-tabs/pw-tabs.component.mjs +0 -50
  23. package/esm2022/lib/range-date-picker/date-range-picker.component.mjs +0 -48
  24. package/esm2022/lib/resource-shared-components.module.mjs +0 -99
  25. package/esm2022/lib/shared/shared-component.interface.mjs +0 -2
  26. package/esm2022/lib/shared-components.module.mjs +0 -211
  27. package/esm2022/lib/splash/splash.component.mjs +0 -12
  28. package/esm2022/lib/terms-conditions/terms-conditions.component.mjs +0 -32
  29. package/esm2022/posiwise-shared-components.mjs +0 -5
@@ -1,304 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { NumberPickerService } from '@posiwise/common-services';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@posiwise/common-services";
5
- import * as i2 from "@angular/forms";
6
- import * as i3 from "primeng/tooltip";
7
- import * as i4 from "@angular/common";
8
- export class NumberPickerComponent {
9
- constructor(numberPickerService) {
10
- this.numberPickerService = numberPickerService;
11
- this.eventHolder = null;
12
- this.countInterval = null;
13
- this.isInputFocused = false;
14
- this.size = 'md';
15
- this.customClass = {};
16
- this.mouseWheel = false;
17
- this.arrowKeys = true;
18
- this.inputReadOnly = false;
19
- this.showUpButton = true;
20
- this.showDownButton = true;
21
- this.valueChange = new EventEmitter();
22
- this.minReached = new EventEmitter();
23
- this.maxReached = new EventEmitter();
24
- this.pickStarted = new EventEmitter();
25
- this.pickStopped = new EventEmitter();
26
- this.pickUpStarted = new EventEmitter();
27
- this.pickUpStopped = new EventEmitter();
28
- this.pickDownStarted = new EventEmitter();
29
- this.pickDownStopped = new EventEmitter();
30
- }
31
- ngOnInit() {
32
- this.initPicker();
33
- }
34
- isHorizontal() {
35
- return this.buttonsOrientation !== 'v' && this.buttonsOrientation !== 'vertical';
36
- }
37
- onFocus(event) {
38
- event.preventDefault();
39
- event.stopPropagation();
40
- this.isInputFocused = true;
41
- }
42
- onBlur(event) {
43
- event.preventDefault();
44
- event.stopPropagation();
45
- this.isInputFocused = false;
46
- }
47
- onMouseWheel(event) {
48
- if (this.isInputFocused) {
49
- event.preventDefault();
50
- let wheelUp = null;
51
- let delta = null;
52
- if (event.deltaY) {
53
- delta = event.deltaY / 60;
54
- }
55
- if (event.detail) {
56
- delta = -event.detail / 2;
57
- }
58
- if (delta !== null) {
59
- wheelUp = delta > 0;
60
- }
61
- this.afterMouseWheels(wheelUp, event);
62
- event.stopPropagation();
63
- }
64
- }
65
- afterMouseWheels(wheelUp, event) {
66
- this.onPickStarted(wheelUp);
67
- if (wheelUp) {
68
- this.onIncrease(event);
69
- }
70
- else {
71
- this.onDecrease(event);
72
- }
73
- this.onPickStopped(wheelUp);
74
- }
75
- onValueChange(_event) {
76
- if (this.value > this.max) {
77
- this.value = this.max;
78
- }
79
- else if (this.value < this.min) {
80
- this.value = this.min;
81
- }
82
- if (this.parseVal(this.value) === 0 || this.parseVal(this.value)) {
83
- this.valueChange.emit(this.value);
84
- }
85
- }
86
- onDecrease(event) {
87
- event.preventDefault();
88
- if (this.canDecrease()) {
89
- this.value = this.round(this.value > this.min ? this.value - this.step : this.value);
90
- this.valueChange.emit(this.value);
91
- }
92
- else {
93
- this.minReached.emit(true);
94
- }
95
- event.stopPropagation();
96
- }
97
- onIncrease(event) {
98
- event.preventDefault();
99
- if (this.canIncrease()) {
100
- this.value = this.round(this.value < this.max ? this.value + this.step : this.value);
101
- this.valueChange.emit(this.value);
102
- }
103
- else {
104
- this.maxReached.emit(true);
105
- }
106
- event.stopPropagation();
107
- }
108
- onMouseDown(event, increase = true) {
109
- this.afterMouseDown(increase, event);
110
- }
111
- isArrowUpDown(key) {
112
- return key === 'ArrowUp' || key === 'ArrowDown';
113
- }
114
- isArrowUp(key) {
115
- return key === 'ArrowUp';
116
- }
117
- loopPick(increase, event) {
118
- this.onPickStarted(increase);
119
- this.eventHolder = setTimeout(() => {
120
- this.countInterval = setInterval(() => {
121
- if (increase) {
122
- this.onIncrease(event);
123
- }
124
- else {
125
- this.onDecrease(event);
126
- }
127
- }, this.pickTimer);
128
- }, this.pickStartAfter);
129
- }
130
- onMouseUp(event, increase = true) {
131
- this.afterMouseUp(increase, event);
132
- }
133
- onKeyDown(event) {
134
- if (this.isArrowUpDown(event.key)) {
135
- event.preventDefault();
136
- if (!this.eventHolder) {
137
- this.loopPick(this.isArrowUp(event.key), event);
138
- }
139
- }
140
- event.stopPropagation();
141
- }
142
- onKeyUp(event) {
143
- if (this.isArrowUpDown(event.key)) {
144
- event.preventDefault();
145
- this.afterPick(this.isArrowUp(event.key));
146
- }
147
- event.stopPropagation();
148
- }
149
- afterMouseDown(up, event) {
150
- event.preventDefault();
151
- if (this.isLeftClick(event)) {
152
- this.loopPick(up, event);
153
- }
154
- event.stopPropagation();
155
- }
156
- afterMouseUp(up, event) {
157
- event.preventDefault();
158
- this.afterPick(up);
159
- event.stopPropagation();
160
- }
161
- afterPick(up) {
162
- this.onPickStopped(up);
163
- this.clearTimers();
164
- }
165
- clearTimers() {
166
- clearTimeout(this.eventHolder);
167
- clearInterval(this.countInterval);
168
- this.eventHolder = null;
169
- this.countInterval = null;
170
- }
171
- parseVal(value) {
172
- if (typeof value === 'number') {
173
- return value;
174
- }
175
- return Number.parseFloat(value);
176
- }
177
- getPrecision(step) {
178
- return /^\d*$/.exec(String(step))[0].length;
179
- }
180
- round(value) {
181
- // eslint-disable-next-line no-restricted-properties
182
- return Math.round(value * 10 ** this.precision) / 10 ** this.precision;
183
- }
184
- canIncrease() {
185
- const canIncrease = this.value <= this.max - this.step;
186
- if (!canIncrease) {
187
- this.value = this.max;
188
- }
189
- return canIncrease;
190
- }
191
- canDecrease() {
192
- const canDecrease = this.value >= this.min + this.step;
193
- if (!canDecrease) {
194
- this.value = this.min;
195
- }
196
- return canDecrease;
197
- }
198
- onPickStarted(increase) {
199
- const isIncrease = increase;
200
- if (isIncrease) {
201
- // NOSONAR
202
- if (this.canIncrease()) {
203
- this.pickStarted.emit(true);
204
- this.pickUpStarted.emit(true);
205
- }
206
- }
207
- else if (this.canDecrease()) {
208
- this.pickStarted.emit(true);
209
- this.pickDownStarted.emit(true);
210
- }
211
- }
212
- onPickStopped(increase) {
213
- const isIncrease = increase;
214
- if (isIncrease) {
215
- // NOSONAR
216
- if (this.canIncrease()) {
217
- this.pickUpStopped.emit(true);
218
- this.pickStopped.emit(true);
219
- }
220
- }
221
- else if (this.canDecrease()) {
222
- this.pickDownStopped.emit(true);
223
- this.pickStopped.emit(true);
224
- }
225
- }
226
- isLeftClick(event) {
227
- return event.button === 0;
228
- }
229
- initPicker() {
230
- this.min = this.parseVal(this.min) || this.numberPickerService.min;
231
- this.max = this.parseVal(this.max) || this.numberPickerService.max;
232
- this.step = this.parseVal(this.step) || this.numberPickerService.step;
233
- this.value = this.parseVal(this.value) || this.numberPickerService.value;
234
- this.pickStartAfter =
235
- this.parseVal(this.pickStartAfter) || this.numberPickerService.pickStartAfter;
236
- this.pickTimer = this.parseVal(this.pickTimer) || this.numberPickerService.pickTimer;
237
- this.precision = this.getPrecision(this.step) || this.numberPickerService.precision;
238
- this.value = this.round(this.value);
239
- this.placeholder = this.placeholder ?? '';
240
- }
241
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NumberPickerComponent, deps: [{ token: i1.NumberPickerService }], target: i0.ɵɵFactoryTarget.Component }); }
242
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: NumberPickerComponent, selector: "pw-number-picker", inputs: { min: "min", showTooltip: "showTooltip", tooltipText: "tooltipText", max: "max", step: "step", value: "value", pickStartAfter: "pickStartAfter", pickTimer: "pickTimer", prefix: "prefix", postfix: "postfix", placeholder: "placeholder", buttonsOrientation: "buttonsOrientation", size: "size", customClass: "customClass", mouseWheel: "mouseWheel", arrowKeys: "arrowKeys", inputReadOnly: "inputReadOnly", showUpButton: "showUpButton", showDownButton: "showDownButton" }, outputs: { valueChange: "valueChange", minReached: "minReached", maxReached: "maxReached", pickStarted: "pickStarted", pickStopped: "pickStopped", pickUpStarted: "pickUpStarted", pickUpStopped: "pickUpStopped", pickDownStarted: "pickDownStarted", pickDownStopped: "pickDownStopped" }, ngImport: i0, template: "<div class=\"input-group mb-3 input-{{ size }} {{ customClass.container }}\">\n <!-- Horizontal decrease button orientation -->\n <span *ngIf=\"isHorizontal() && showDownButton\"\n class=\"input-group-text decrease {{ customClass.down }}\"\n (click)=\"onDecrease($event)\"\n (keydown.enter)=\"onDecrease($event)\"\n (mouseup)=\"onMouseUp($event, false)\"\n (mousedown)=\"onMouseDown($event, false)\">-</span>\n <!-- Input prefix -->\n <span *ngIf=\"prefix\"\n class=\"input-group-text {{ customClass.prefix }}\">{{ prefix }}\n </span>\n <input type=\"number\"\n class=\"form-control\"\n name=\"input-spin-val\"\n [(ngModel)]=\"value\"\n [readOnly]=\"inputReadOnly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (wheel)=\"mouseWheel && onMouseWheel($event)\"\n (keyup)=\"arrowKeys && onKeyUp($event)\"\n (keydown.enter)=\"arrowKeys && onKeyDown($event)\"\n (keydown.arrowup)=\"arrowKeys && onIncrease($event)\"\n (keydown.arrowdown)=\"arrowKeys && onDecrease($event)\"\n (change)=\"onValueChange($event)\"\n [placeholder]=\"placeholder\" />\n <!-- Input postfix -->\n\n <span *ngIf=\"postfix\"\n class=\"input-group-text {{ customClass.postfix }}\"\n [style.borderLeft]=\"'0'\">{{postfix}}\n <span class=\"tooltip-wrap ms-1\"\n *ngIf=\"showTooltip && tooltipText\"\n [pTooltip]=\"tooltipText\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"tooltipPosition || 'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </span>\n\n <!-- Horizontal increase button orientation -->\n <span *ngIf=\"isHorizontal() && showUpButton\"\n class=\"input-group-text increase {{ customClass.up }}\"\n [style.borderLeft]=\"!postfix ? '0' : ''\"\n (click)=\"onIncrease($event)\"\n (keydown.enter)=\"onIncrease($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mousedown)=\"onMouseDown($event)\">+</span>\n <!-- Vertical buttons orientation -->\n <span *ngIf=\"!isHorizontal()\"\n class=\"input-group-text vertical p-0\">\n <span *ngIf=\"showUpButton\"\n class=\"{{ customClass.up }}\"\n (click)=\"onIncrease($event)\"\n (keydown.enter)=\"onIncrease($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mousedown)=\"onMouseDown($event)\">+</span>\n <span *ngIf=\"showDownButton\"\n class=\"{{ customClass.down }}\"\n (keydown.enter)=\"onDecrease($event)\"\n (click)=\"onDecrease($event)\"\n (mouseup)=\"onMouseUp($event, false)\"\n (mousedown)=\"onMouseDown($event, false)\">-</span>\n </span>\n</div>\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{appearance:none;margin:0}.increase:hover,.decrease:hover{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer;background-color:#d8d8d8}.increase{border-top-right-radius:3px!important;border-bottom-right-radius:3px!important}.vertical{display:flex;justify-content:center;flex-direction:column;text-align:center;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer}.vertical span{line-height:15px}.input-md .vertical span,.input-sm .vertical span{padding:2px 10px}.input-lg .vertical span{padding:4px 10px}.input-xlg .vertical span{padding:7px 10px}.input-md,.input-medium{height:45px}.input-lg,.input-large{height:50px}.input-xlg,.input-xlarge{height:75px}.input-md input,.input-medium input,.input-md span,.input-medium span{font-size:22px}.input-lg input,.input-large input,.input-lg span,.input-large span{font-size:25px}.input-xlg input,.input-xlarge input,.input-xlg span,.input-xlarge span{font-size:38px}\n"], dependencies: [{ kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
243
- }
244
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NumberPickerComponent, decorators: [{
245
- type: Component,
246
- args: [{ selector: 'pw-number-picker', template: "<div class=\"input-group mb-3 input-{{ size }} {{ customClass.container }}\">\n <!-- Horizontal decrease button orientation -->\n <span *ngIf=\"isHorizontal() && showDownButton\"\n class=\"input-group-text decrease {{ customClass.down }}\"\n (click)=\"onDecrease($event)\"\n (keydown.enter)=\"onDecrease($event)\"\n (mouseup)=\"onMouseUp($event, false)\"\n (mousedown)=\"onMouseDown($event, false)\">-</span>\n <!-- Input prefix -->\n <span *ngIf=\"prefix\"\n class=\"input-group-text {{ customClass.prefix }}\">{{ prefix }}\n </span>\n <input type=\"number\"\n class=\"form-control\"\n name=\"input-spin-val\"\n [(ngModel)]=\"value\"\n [readOnly]=\"inputReadOnly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (wheel)=\"mouseWheel && onMouseWheel($event)\"\n (keyup)=\"arrowKeys && onKeyUp($event)\"\n (keydown.enter)=\"arrowKeys && onKeyDown($event)\"\n (keydown.arrowup)=\"arrowKeys && onIncrease($event)\"\n (keydown.arrowdown)=\"arrowKeys && onDecrease($event)\"\n (change)=\"onValueChange($event)\"\n [placeholder]=\"placeholder\" />\n <!-- Input postfix -->\n\n <span *ngIf=\"postfix\"\n class=\"input-group-text {{ customClass.postfix }}\"\n [style.borderLeft]=\"'0'\">{{postfix}}\n <span class=\"tooltip-wrap ms-1\"\n *ngIf=\"showTooltip && tooltipText\"\n [pTooltip]=\"tooltipText\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"tooltipPosition || 'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </span>\n\n <!-- Horizontal increase button orientation -->\n <span *ngIf=\"isHorizontal() && showUpButton\"\n class=\"input-group-text increase {{ customClass.up }}\"\n [style.borderLeft]=\"!postfix ? '0' : ''\"\n (click)=\"onIncrease($event)\"\n (keydown.enter)=\"onIncrease($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mousedown)=\"onMouseDown($event)\">+</span>\n <!-- Vertical buttons orientation -->\n <span *ngIf=\"!isHorizontal()\"\n class=\"input-group-text vertical p-0\">\n <span *ngIf=\"showUpButton\"\n class=\"{{ customClass.up }}\"\n (click)=\"onIncrease($event)\"\n (keydown.enter)=\"onIncrease($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mousedown)=\"onMouseDown($event)\">+</span>\n <span *ngIf=\"showDownButton\"\n class=\"{{ customClass.down }}\"\n (keydown.enter)=\"onDecrease($event)\"\n (click)=\"onDecrease($event)\"\n (mouseup)=\"onMouseUp($event, false)\"\n (mousedown)=\"onMouseDown($event, false)\">-</span>\n </span>\n</div>\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{appearance:none;margin:0}.increase:hover,.decrease:hover{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer;background-color:#d8d8d8}.increase{border-top-right-radius:3px!important;border-bottom-right-radius:3px!important}.vertical{display:flex;justify-content:center;flex-direction:column;text-align:center;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer}.vertical span{line-height:15px}.input-md .vertical span,.input-sm .vertical span{padding:2px 10px}.input-lg .vertical span{padding:4px 10px}.input-xlg .vertical span{padding:7px 10px}.input-md,.input-medium{height:45px}.input-lg,.input-large{height:50px}.input-xlg,.input-xlarge{height:75px}.input-md input,.input-medium input,.input-md span,.input-medium span{font-size:22px}.input-lg input,.input-large input,.input-lg span,.input-large span{font-size:25px}.input-xlg input,.input-xlarge input,.input-xlg span,.input-xlarge span{font-size:38px}\n"] }]
247
- }], ctorParameters: () => [{ type: i1.NumberPickerService }], propDecorators: { min: [{
248
- type: Input
249
- }], showTooltip: [{
250
- type: Input
251
- }], tooltipText: [{
252
- type: Input
253
- }], max: [{
254
- type: Input
255
- }], step: [{
256
- type: Input
257
- }], value: [{
258
- type: Input
259
- }], pickStartAfter: [{
260
- type: Input
261
- }], pickTimer: [{
262
- type: Input
263
- }], prefix: [{
264
- type: Input
265
- }], postfix: [{
266
- type: Input
267
- }], placeholder: [{
268
- type: Input
269
- }], buttonsOrientation: [{
270
- type: Input
271
- }], size: [{
272
- type: Input
273
- }], customClass: [{
274
- type: Input
275
- }], mouseWheel: [{
276
- type: Input
277
- }], arrowKeys: [{
278
- type: Input
279
- }], inputReadOnly: [{
280
- type: Input
281
- }], showUpButton: [{
282
- type: Input
283
- }], showDownButton: [{
284
- type: Input
285
- }], valueChange: [{
286
- type: Output
287
- }], minReached: [{
288
- type: Output
289
- }], maxReached: [{
290
- type: Output
291
- }], pickStarted: [{
292
- type: Output
293
- }], pickStopped: [{
294
- type: Output
295
- }], pickUpStarted: [{
296
- type: Output
297
- }], pickUpStopped: [{
298
- type: Output
299
- }], pickDownStarted: [{
300
- type: Output
301
- }], pickDownStopped: [{
302
- type: Output
303
- }] } });
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NoYXJlZC1jb21wb25lbnRzL3NyYy9saWIvbnVtYmVyLXBpY2tlci9udW1iZXItcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hhcmVkLWNvbXBvbmVudHMvc3JjL2xpYi9udW1iZXItcGlja2VyL251bWJlci1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBU2hFLE1BQU0sT0FBTyxxQkFBcUI7SUFpRTlCLFlBQTZCLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBOUQ3RCxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUVuQixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUVyQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQTBCdEIsU0FBSSxHQUFhLElBQUksQ0FBQztRQUV0QixnQkFBVyxHQUFrQixFQUFFLENBQUM7UUFFaEMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRWpCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXRCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXBCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBRXJCLGdCQUFXLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFdkQsZUFBVSxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXZELGVBQVUsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV2RCxnQkFBVyxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFD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LENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUM5QyxDQUFDOytHQTlTUSxxQkFBcUI7bUdBQXJCLHFCQUFxQixpekJDWGxDLG9oRkFpRUE7OzRGRHREYSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0ksa0JBQWtCO3dGQWFuQixHQUFHO3NCQUFYLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRUcsZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTnVtYmVyUGlja2VyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuXG5pbXBvcnQgeyBidXR0b25zT3JpZW50YXRpb25UeXBlLCBDdXN0b21DbGFzc2VzLCBzaXplVHlwZSB9IGZyb20gJy4vbnVtYmVyLXBpY2tlci5jb25maWcnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LW51bWJlci1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9udW1iZXItcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9udW1iZXItcGlja2VyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTnVtYmVyUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwcml2YXRlIHByZWNpc2lvbjogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBldmVudEhvbGRlciA9IG51bGw7XG5cbiAgICBwcml2YXRlIGNvdW50SW50ZXJ2YWwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBpc0lucHV0Rm9jdXNlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgbWluOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBzaG93VG9vbHRpcDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHRvb2x0aXBUZXh0OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBtYXg6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIHN0ZXA6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIHZhbHVlOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBwaWNrU3RhcnRBZnRlcjogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgcGlja1RpbWVyOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBwcmVmaXg6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHBvc3RmaXg6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBidXR0b25zT3JpZW50YXRpb246IGJ1dHRvbnNPcmllbnRhdGlvblR5cGU7XG5cbiAgICBASW5wdXQoKSBzaXplOiBzaXplVHlwZSA9ICdtZCc7XG5cbiAgICBASW5wdXQoKSBjdXN0b21DbGFzczogQ3VzdG9tQ2xhc3NlcyA9IHt9O1xuXG4gICAgQElucHV0KCkgbW91c2VXaGVlbCA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgYXJyb3dLZXlzID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIGlucHV0UmVhZE9ubHkgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNob3dVcEJ1dHRvbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBzaG93RG93bkJ1dHRvbiA9IHRydWU7XG5cbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIG1pblJlYWNoZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBtYXhSZWFjaGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgcGlja1N0YXJ0ZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBwaWNrU3RvcHBlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIHBpY2tVcFN0YXJ0ZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBwaWNrVXBTdG9wcGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgcGlja0Rvd25TdGFydGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgcGlja0Rvd25TdG9wcGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG51bWJlclBpY2tlclNlcnZpY2U6IE51bWJlclBpY2tlclNlcnZpY2UpIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5pbml0UGlja2VyKCk7XG4gICAgfVxuXG4gICAgaXNIb3Jpem9udGFsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5idXR0b25zT3JpZW50YXRpb24gIT09ICd2JyAmJiB0aGlzLmJ1dHRvbnNPcmllbnRhdGlvbiAhPT0gJ3ZlcnRpY2FsJztcbiAgICB9XG5cbiAgICBvbkZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmlzSW5wdXRGb2N1c2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbkJsdXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmlzSW5wdXRGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Nb3VzZVdoZWVsKGV2ZW50OiBXaGVlbEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5wdXRGb2N1c2VkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgbGV0IHdoZWVsVXAgPSBudWxsO1xuICAgICAgICAgICAgbGV0IGRlbHRhID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LmRlbHRhWSkge1xuICAgICAgICAgICAgICAgIGRlbHRhID0gZXZlbnQuZGVsdGFZIC8gNjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGV0YWlsKSB7XG4gICAgICAgICAgICAgICAgZGVsdGEgPSAtZXZlbnQuZGV0YWlsIC8gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWx0YSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHdoZWVsVXAgPSBkZWx0YSA+IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYWZ0ZXJNb3VzZVdoZWVscyh3aGVlbFVwLCBldmVudCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWZ0ZXJNb3VzZVdoZWVscyh3aGVlbFVwOiBib29sZWFuLCBldmVudDogV2hlZWxFdmVudCkge1xuICAgICAgICB0aGlzLm9uUGlja1N0YXJ0ZWQod2hlZWxVcCk7XG4gICAgICAgIGlmICh3aGVlbFVwKSB7XG4gICAgICAgICAgICB0aGlzLm9uSW5jcmVhc2UoZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkRlY3JlYXNlKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uUGlja1N0b3BwZWQod2hlZWxVcCk7XG4gICAgfVxuXG4gICAgb25WYWx1ZUNoYW5nZShfZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1heDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlIDwgdGhpcy5taW4pIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJzZVZhbCh0aGlzLnZhbHVlKSA9PT0gMCB8fCB0aGlzLnBhcnNlVmFsKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRlY3JlYXNlKGV2ZW50OiBNb3VzZUV2ZW50IHwgV2hlZWxFdmVudCB8IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuY2FuRGVjcmVhc2UoKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucm91bmQodGhpcy52YWx1ZSA+IHRoaXMubWluID8gdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCA6IHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5taW5SZWFjaGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgb25JbmNyZWFzZShldmVudDogTW91c2VFdmVudCB8IFdoZWVsRXZlbnQgfCBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmNhbkluY3JlYXNlKCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJvdW5kKHRoaXMudmFsdWUgPCB0aGlzLm1heCA/IHRoaXMudmFsdWUgKyB0aGlzLnN0ZXAgOiB0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWF4UmVhY2hlZC5lbWl0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIG9uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50LCBpbmNyZWFzZSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5hZnRlck1vdXNlRG93bihpbmNyZWFzZSwgZXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBcnJvd1VwRG93bihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4ga2V5ID09PSAnQXJyb3dVcCcgfHwga2V5ID09PSAnQXJyb3dEb3duJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQXJyb3dVcChrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4ga2V5ID09PSAnQXJyb3dVcCc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb29wUGljayhpbmNyZWFzZTogYm9vbGVhbiwgZXZlbnQ6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25QaWNrU3RhcnRlZChpbmNyZWFzZSk7XG4gICAgICAgIHRoaXMuZXZlbnRIb2xkZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY291bnRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5jcmVhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkluY3JlYXNlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVjcmVhc2UoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMucGlja1RpbWVyKTtcbiAgICAgICAgfSwgdGhpcy5waWNrU3RhcnRBZnRlcik7XG4gICAgfVxuXG4gICAgb25Nb3VzZVVwKGV2ZW50OiBNb3VzZUV2ZW50LCBpbmNyZWFzZSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5hZnRlck1vdXNlVXAoaW5jcmVhc2UsIGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBcnJvd1VwRG93bihldmVudC5rZXkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmV2ZW50SG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb29wUGljayh0aGlzLmlzQXJyb3dVcChldmVudC5rZXkpLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgb25LZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0Fycm93VXBEb3duKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmFmdGVyUGljayh0aGlzLmlzQXJyb3dVcChldmVudC5rZXkpKTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFmdGVyTW91c2VEb3duKHVwOiBib29sZWFuLCBldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5pc0xlZnRDbGljayhldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9vcFBpY2sodXAsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFmdGVyTW91c2VVcCh1cDogYm9vbGVhbiwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hZnRlclBpY2sodXApO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFmdGVyUGljayh1cDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLm9uUGlja1N0b3BwZWQodXApO1xuICAgICAgICB0aGlzLmNsZWFyVGltZXJzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhclRpbWVycygpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZXZlbnRIb2xkZXIpO1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuY291bnRJbnRlcnZhbCk7XG4gICAgICAgIHRoaXMuZXZlbnRIb2xkZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmNvdW50SW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VWYWwodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByZWNpc2lvbihzdGVwOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gL15cXGQqJC8uZXhlYyhTdHJpbmcoc3RlcCkpWzBdLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJvdW5kKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMTAgKiogdGhpcy5wcmVjaXNpb24pIC8gMTAgKiogdGhpcy5wcmVjaXNpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5JbmNyZWFzZSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2FuSW5jcmVhc2UgPSB0aGlzLnZhbHVlIDw9IHRoaXMubWF4IC0gdGhpcy5zdGVwO1xuICAgICAgICBpZiAoIWNhbkluY3JlYXNlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FuSW5jcmVhc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5EZWNyZWFzZSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2FuRGVjcmVhc2UgPSB0aGlzLnZhbHVlID49IHRoaXMubWluICsgdGhpcy5zdGVwO1xuICAgICAgICBpZiAoIWNhbkRlY3JlYXNlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FuRGVjcmVhc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblBpY2tTdGFydGVkKGluY3JlYXNlOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGlzSW5jcmVhc2UgPSBpbmNyZWFzZTtcbiAgICAgICAgaWYgKGlzSW5jcmVhc2UpIHtcbiAgICAgICAgICAgIC8vIE5PU09OQVJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbkluY3JlYXNlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tTdGFydGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrVXBTdGFydGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYW5EZWNyZWFzZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tTdGFydGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnBpY2tEb3duU3RhcnRlZC5lbWl0KHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblBpY2tTdG9wcGVkKGluY3JlYXNlOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGlzSW5jcmVhc2UgPSBpbmNyZWFzZTtcbiAgICAgICAgaWYgKGlzSW5jcmVhc2UpIHtcbiAgICAgICAgICAgIC8vIE5PU09OQVJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbkluY3JlYXNlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tVcFN0b3BwZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tTdG9wcGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYW5EZWNyZWFzZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tEb3duU3RvcHBlZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5waWNrU3RvcHBlZC5lbWl0KHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xlZnRDbGljayhldmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnQuYnV0dG9uID09PSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFBpY2tlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5taW4gPSB0aGlzLnBhcnNlVmFsKHRoaXMubWluKSB8fCB0aGlzLm51bWJlclBpY2tlclNlcnZpY2UubWluO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMucGFyc2VWYWwodGhpcy5tYXgpIHx8IHRoaXMubnVtYmVyUGlja2VyU2VydmljZS5tYXg7XG4gICAgICAgIHRoaXMuc3RlcCA9IHRoaXMucGFyc2VWYWwodGhpcy5zdGVwKSB8fCB0aGlzLm51bWJlclBpY2tlclNlcnZpY2Uuc3RlcDtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucGFyc2VWYWwodGhpcy52YWx1ZSkgfHwgdGhpcy5udW1iZXJQaWNrZXJTZXJ2aWNlLnZhbHVlO1xuICAgICAgICB0aGlzLnBpY2tTdGFydEFmdGVyID1cbiAgICAgICAgICAgIHRoaXMucGFyc2VWYWwodGhpcy5waWNrU3RhcnRBZnRlcikgfHwgdGhpcy5udW1iZXJQaWNrZXJTZXJ2aWNlLnBpY2tTdGFydEFmdGVyO1xuICAgICAgICB0aGlzLnBpY2tUaW1lciA9IHRoaXMucGFyc2VWYWwodGhpcy5waWNrVGltZXIpIHx8IHRoaXMubnVtYmVyUGlja2VyU2VydmljZS5waWNrVGltZXI7XG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gdGhpcy5nZXRQcmVjaXNpb24odGhpcy5zdGVwKSB8fCB0aGlzLm51bWJlclBpY2tlclNlcnZpY2UucHJlY2lzaW9uO1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5yb3VuZCh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXIgPz8gJyc7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIG1iLTMgaW5wdXQte3sgc2l6ZSB9fSB7eyBjdXN0b21DbGFzcy5jb250YWluZXIgfX1cIj5cbiAgPCEtLSBIb3Jpem9udGFsIGRlY3JlYXNlIGJ1dHRvbiBvcmllbnRhdGlvbiAtLT5cbiAgPHNwYW4gKm5nSWY9XCJpc0hvcml6b250YWwoKSAmJiBzaG93RG93bkJ1dHRvblwiXG4gICAgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0IGRlY3JlYXNlIHt7IGN1c3RvbUNsYXNzLmRvd24gfX1cIlxuICAgIChjbGljayk9XCJvbkRlY3JlYXNlKCRldmVudClcIlxuICAgIChrZXlkb3duLmVudGVyKT1cIm9uRGVjcmVhc2UoJGV2ZW50KVwiXG4gICAgKG1vdXNldXApPVwib25Nb3VzZVVwKCRldmVudCwgZmFsc2UpXCJcbiAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudCwgZmFsc2UpXCI+LTwvc3Bhbj5cbiAgPCEtLSBJbnB1dCBwcmVmaXggLS0+XG4gIDxzcGFuICpuZ0lmPVwicHJlZml4XCJcbiAgICBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQge3sgY3VzdG9tQ2xhc3MucHJlZml4IH19XCI+e3sgcHJlZml4IH19XG4gIDwvc3Bhbj5cbiAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICBuYW1lPVwiaW5wdXQtc3Bpbi12YWxcIlxuICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICAgIFtyZWFkT25seV09XCJpbnB1dFJlYWRPbmx5XCJcbiAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgKHdoZWVsKT1cIm1vdXNlV2hlZWwgJiYgb25Nb3VzZVdoZWVsKCRldmVudClcIlxuICAgIChrZXl1cCk9XCJhcnJvd0tleXMgJiYgb25LZXlVcCgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCJhcnJvd0tleXMgJiYgb25LZXlEb3duKCRldmVudClcIlxuICAgIChrZXlkb3duLmFycm93dXApPVwiYXJyb3dLZXlzICYmIG9uSW5jcmVhc2UoJGV2ZW50KVwiXG4gICAgKGtleWRvd24uYXJyb3dkb3duKT1cImFycm93S2V5cyAmJiBvbkRlY3JlYXNlKCRldmVudClcIlxuICAgIChjaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiAvPlxuICA8IS0tIElucHV0IHBvc3RmaXggLS0+XG5cbiAgPHNwYW4gKm5nSWY9XCJwb3N0Zml4XCJcbiAgICBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQge3sgY3VzdG9tQ2xhc3MucG9zdGZpeCB9fVwiXG4gICAgW3N0eWxlLmJvcmRlckxlZnRdPVwiJzAnXCI+e3twb3N0Zml4fX1cbiAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcCBtcy0xXCJcbiAgICAgICpuZ0lmPVwic2hvd1Rvb2x0aXAgJiYgdG9vbHRpcFRleHRcIlxuICAgICAgW3BUb29sdGlwXT1cInRvb2x0aXBUZXh0XCJcbiAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24gfHwgJ3RvcCdcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgIDwvc3Bhbj5cbiAgPC9zcGFuPlxuXG4gIDwhLS0gSG9yaXpvbnRhbCBpbmNyZWFzZSBidXR0b24gb3JpZW50YXRpb24gLS0+XG4gIDxzcGFuICpuZ0lmPVwiaXNIb3Jpem9udGFsKCkgJiYgc2hvd1VwQnV0dG9uXCJcbiAgICBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgaW5jcmVhc2Uge3sgY3VzdG9tQ2xhc3MudXAgfX1cIlxuICAgIFtzdHlsZS5ib3JkZXJMZWZ0XT1cIiFwb3N0Zml4ID8gJzAnIDogJydcIlxuICAgIChjbGljayk9XCJvbkluY3JlYXNlKCRldmVudClcIlxuICAgIChrZXlkb3duLmVudGVyKT1cIm9uSW5jcmVhc2UoJGV2ZW50KVwiXG4gICAgKG1vdXNldXApPVwib25Nb3VzZVVwKCRldmVudClcIlxuICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50KVwiPis8L3NwYW4+XG4gIDwhLS0gVmVydGljYWwgYnV0dG9ucyBvcmllbnRhdGlvbiAtLT5cbiAgPHNwYW4gKm5nSWY9XCIhaXNIb3Jpem9udGFsKClcIlxuICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCB2ZXJ0aWNhbCBwLTBcIj5cbiAgICA8c3BhbiAqbmdJZj1cInNob3dVcEJ1dHRvblwiXG4gICAgICBjbGFzcz1cInt7IGN1c3RvbUNsYXNzLnVwIH19XCJcbiAgICAgIChjbGljayk9XCJvbkluY3JlYXNlKCRldmVudClcIlxuICAgICAgKGtleWRvd24uZW50ZXIpPVwib25JbmNyZWFzZSgkZXZlbnQpXCJcbiAgICAgIChtb3VzZXVwKT1cIm9uTW91c2VVcCgkZXZlbnQpXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50KVwiPis8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJzaG93RG93bkJ1dHRvblwiXG4gICAgICBjbGFzcz1cInt7IGN1c3RvbUNsYXNzLmRvd24gfX1cIlxuICAgICAgKGtleWRvd24uZW50ZXIpPVwib25EZWNyZWFzZSgkZXZlbnQpXCJcbiAgICAgIChjbGljayk9XCJvbkRlY3JlYXNlKCRldmVudClcIlxuICAgICAgKG1vdXNldXApPVwib25Nb3VzZVVwKCRldmVudCwgZmFsc2UpXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCBmYWxzZSlcIj4tPC9zcGFuPlxuICA8L3NwYW4+XG48L2Rpdj5cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLXBpY2tlci5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NoYXJlZC1jb21wb25lbnRzL3NyYy9saWIvbnVtYmVyLXBpY2tlci9udW1iZXItcGlja2VyLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgYnV0dG9uc09yaWVudGF0aW9uVHlwZSA9ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgfCAnaCcgfCAndic7XG5leHBvcnQgdHlwZSBzaXplVHlwZSA9ICdtZWRpdW0nIHwgJ2xhcmdlJyB8ICdzbWFsbCcgfCAneGxhcmdlJyB8ICdtZCcgfCAnbGcnIHwgJ3NtJyB8ICd4bGcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUNsYXNzZXMge1xuICAgIGNvbnRhaW5lcj86IHN0cmluZzsgLy8gY3VzdG9tIGNsYXNzIGZvciB0aGUgY29tcG9uZW50IGNvbnRhaW5lclxuICAgIHVwPzogc3RyaW5nOyAvLyBjdXN0b20gY2xhc3MgZm9yIHRoZSB1cHdhcmRzIGJ1dHRvbnNcbiAgICBkb3duPzogc3RyaW5nOyAvLyBjdXN0b20gY2xhc3MgZm9yIHRoZSBkb3dud2FyZHMgYnV0dG9uc1xuICAgIHBvc3RmaXg/OiBzdHJpbmc7IC8vIGN1c3RvbSBjbGFzcyBmb3IgdGhlIHRleHQgYWZ0ZXIgdGhlIGlucHV0XG4gICAgcHJlZml4Pzogc3RyaW5nOyAvLyBjdXN0b20gY2xhc3MgZm9yIHRoZSB0ZXh0IGJlZm9yZSB0aGUgaW5wdXRcbiAgICBzdWNjZXNzPzogc3RyaW5nOyAvLyBUT0RPOlxuICAgIGVycm9yPzogc3RyaW5nOyAvLyBUT0RPOlxufVxuIl19
@@ -1,55 +0,0 @@
1
- import { Component, EventEmitter, Injector, Input, Output, TemplateRef, ViewChild } from '@angular/core';
2
- import { AppBaseComponent } from '@posiwise/app-base-component';
3
- import { StatusCodes } from 'http-status-codes';
4
- import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@ng-bootstrap/ng-bootstrap";
7
- import * as i2 from "@angular/forms";
8
- import * as i3 from "@posiwise/directives";
9
- import * as i4 from "@jsverse/transloco";
10
- export class PasswordValidationComponent extends AppBaseComponent {
11
- constructor(injector, modal) {
12
- super(injector);
13
- this.modal = modal;
14
- this.confirmMessage = 'User.Account.Message.EnterPassword';
15
- this.successEvent = new EventEmitter();
16
- }
17
- open() {
18
- this.modal.open(this.content, { centered: true, windowClass: 'modal-holder' });
19
- }
20
- validatePassword() {
21
- if (this.password) {
22
- this.buttonBusy = true;
23
- this.userService
24
- .checkPassword({ password: this.password })
25
- .subscribe(data => {
26
- if (data && data?.status === StatusCodes.OK) {
27
- this.successEvent.emit(true);
28
- this.modal.dismissAll();
29
- this.password = null;
30
- }
31
- else {
32
- this.successEvent.emit(false);
33
- this.password = null;
34
- }
35
- })
36
- .add(() => {
37
- this.buttonBusy = false;
38
- });
39
- }
40
- }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PasswordValidationComponent, deps: [{ token: i0.Injector }, { token: i1.NgbModal }], target: i0.ɵɵFactoryTarget.Component }); }
42
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PasswordValidationComponent, selector: "pw-password-validation", inputs: { confirmMessage: "confirmMessage" }, outputs: { successEvent: "successEvent" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Confirm</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n <div class=\"modal-body\">\n <strong class=\"p3\">{{ confirmMessage | transloco }}</strong>\n <div>\n <ng-content></ng-content>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <input type=\"password\"\n #passwordRef\n [(ngModel)]=\"password\"\n class=\"form-control\"\n placeholder=\"Current Password\" />\n </div>\n </div>\n <div class=\"row mt-2\">\n <div class=\"col-12\">\n <button [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary float-end\"\n type=\"button\"\n (click)=\"validatePassword()\">\n {{ 'Button.Confirm' | transloco }}\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }] }); }
43
- }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PasswordValidationComponent, decorators: [{
45
- type: Component,
46
- args: [{ selector: 'pw-password-validation', template: "<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Confirm</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n <div class=\"modal-body\">\n <strong class=\"p3\">{{ confirmMessage | transloco }}</strong>\n <div>\n <ng-content></ng-content>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <input type=\"password\"\n #passwordRef\n [(ngModel)]=\"password\"\n class=\"form-control\"\n placeholder=\"Current Password\" />\n </div>\n </div>\n <div class=\"row mt-2\">\n <div class=\"col-12\">\n <button [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary float-end\"\n type=\"button\"\n (click)=\"validatePassword()\">\n {{ 'Button.Confirm' | transloco }}\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n" }]
47
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.NgbModal }], propDecorators: { content: [{
48
- type: ViewChild,
49
- args: ['content', { static: true }]
50
- }], confirmMessage: [{
51
- type: Input
52
- }], successEvent: [{
53
- type: Output
54
- }] } });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtdmFsaWRhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NoYXJlZC1jb21wb25lbnRzL3NyYy9saWIvcGFzc3dvcmQtdmFsaWRhdGlvbi9wYXNzd29yZC12YWxpZGF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hhcmVkLWNvbXBvbmVudHMvc3JjL2xpYi9wYXNzd29yZC12YWxpZGF0aW9uL3Bhc3N3b3JkLXZhbGlkYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7QUFRdEQsTUFBTSxPQUFPLDJCQUE0QixTQUFRLGdCQUFnQjtJQVc3RCxZQUNJLFFBQWtCLEVBQ0QsS0FBZTtRQUVoQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFGQyxVQUFLLEdBQUwsS0FBSyxDQUFVO1FBWDNCLG1CQUFjLEdBQUcsb0NBQW9DLENBQUM7UUFHL0QsaUJBQVksR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQVd6RCxDQUFDO0lBRUQsSUFBSTtRQUNBLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVztpQkFDWCxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUMxQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2QsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sS0FBSyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDekIsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDekIsQ0FBQztZQUNMLENBQUMsQ0FBQztpQkFDRCxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNMLENBQUM7K0dBekNRLDJCQUEyQjttR0FBM0IsMkJBQTJCLGdTQ3RCeEMsMi9CQW9DQTs7NEZEZGEsMkJBQTJCO2tCQUp2QyxTQUFTOytCQUNJLHdCQUF3QjtvR0FJTSxPQUFPO3NCQUE5QyxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQzdCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR04sWUFBWTtzQkFEWCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcblxuaW1wb3J0IHsgU3RhdHVzQ29kZXMgfSBmcm9tICdodHRwLXN0YXR1cy1jb2Rlcyc7XG5cbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG5pbXBvcnQgeyBTaGFyZWRNb2RhbENvbnRleHQgfSBmcm9tICcuLi9zaGFyZWQvc2hhcmVkLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXBhc3N3b3JkLXZhbGlkYXRpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wYXNzd29yZC12YWxpZGF0aW9uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQYXNzd29yZFZhbGlkYXRpb25Db21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IHtcbiAgICBAVmlld0NoaWxkKCdjb250ZW50JywgeyBzdGF0aWM6IHRydWUgfSkgY29udGVudDogVGVtcGxhdGVSZWY8U2hhcmVkTW9kYWxDb250ZXh0PjtcbiAgICBASW5wdXQoKSBjb25maXJtTWVzc2FnZSA9ICdVc2VyLkFjY291bnQuTWVzc2FnZS5FbnRlclBhc3N3b3JkJztcblxuICAgIEBPdXRwdXQoKVxuICAgIHN1Y2Nlc3NFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcGFzc3dvcmQ6IHN0cmluZztcblxuICAgIGJ1dHRvbkJ1c3k6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsOiBOZ2JNb2RhbFxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgb3BlbigpIHtcbiAgICAgICAgdGhpcy5tb2RhbC5vcGVuKHRoaXMuY29udGVudCwgeyBjZW50ZXJlZDogdHJ1ZSwgd2luZG93Q2xhc3M6ICdtb2RhbC1ob2xkZXInIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlUGFzc3dvcmQoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhc3N3b3JkKSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkJ1c3kgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZVxuICAgICAgICAgICAgICAgIC5jaGVja1Bhc3N3b3JkKHsgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQgfSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhPy5zdGF0dXMgPT09IFN0YXR1c0NvZGVzLk9LKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NFdmVudC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RhbC5kaXNtaXNzQWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhc3N3b3JkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc0V2ZW50LmVtaXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXNzd29yZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbkJ1c3kgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjY29udGVudFxuICBsZXQtbW9kYWw+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPkNvbmZpcm08L2g1PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImJ0bi1jbG9zZSBmbG9hdC1lbmRcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgPHN0cm9uZyBjbGFzcz1cInAzXCI+e3sgY29uZmlybU1lc3NhZ2UgfCB0cmFuc2xvY28gfX08L3N0cm9uZz5cbiAgICA8ZGl2PlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgI3Bhc3N3b3JkUmVmXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ3VycmVudCBQYXNzd29yZFwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgPGJ1dHRvbiBbYnV0dG9uQnVzeV09XCJidXR0b25CdXN5XCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBmbG9hdC1lbmRcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJ2YWxpZGF0ZVBhc3N3b3JkKClcIj5cbiAgICAgICAgICB7eyAnQnV0dG9uLkNvbmZpcm0nIHwgdHJhbnNsb2NvIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,111 +0,0 @@
1
- import { Component, ElementRef, Input } from '@angular/core';
2
- import map from 'lodash/map';
3
- import * as i0 from "@angular/core";
4
- export class PermissionTreeComponent {
5
- constructor(_element) {
6
- this._element = _element;
7
- }
8
- ngOnChanges(simple) {
9
- if (simple['data']?.currentValue?.grantedPermissionNames) {
10
- this.refreshTree();
11
- }
12
- }
13
- ngAfterViewInit() {
14
- this._$tree = $(this._element.nativeElement);
15
- this.refreshTree();
16
- }
17
- getGrantedPermissionNames() {
18
- if (!this._$tree || !this._createdTreeBefore) {
19
- return [];
20
- }
21
- const permissionNames = [];
22
- const selectedPermissions = this._$tree.jstree('get_selected', true);
23
- for (const permission of selectedPermissions) {
24
- permissionNames.push(permission.original.id);
25
- }
26
- return permissionNames;
27
- }
28
- refreshTree() {
29
- if (this._createdTreeBefore) {
30
- this._$tree.jstree('destroy');
31
- }
32
- this._createdTreeBefore = false;
33
- if (!this.data || !this._$tree) {
34
- return;
35
- }
36
- const treeData = map(this.data.permissions, item => {
37
- return {
38
- id: item.name,
39
- parent: item.parentName ?? '#',
40
- text: item.displayName,
41
- state: {
42
- opened: true,
43
- selected: this.data.grantedPermissionNames.includes(item.name)
44
- }
45
- };
46
- });
47
- this._$tree.jstree({
48
- core: {
49
- data: treeData
50
- },
51
- types: {
52
- default: {
53
- icon: 'fa fa-folder-open tree-item-icon-color icon-lg'
54
- },
55
- file: {
56
- icon: 'fa fa-file tree-item-icon-color icon-lg'
57
- }
58
- },
59
- checkbox: {
60
- keep_selected_style: false,
61
- three_state: false,
62
- cascade: ''
63
- },
64
- plugins: ['checkbox', 'types']
65
- });
66
- this._createdTreeBefore = true;
67
- let inTreeChangeEvent = false;
68
- const selectNodeAndAllParents = node => {
69
- this._$tree.jstree('select_node', node, true);
70
- const parent = this._$tree.jstree('get_parent', node);
71
- if (parent) {
72
- selectNodeAndAllParents(parent);
73
- }
74
- };
75
- this._$tree.on('changed.jstree', (_e, data) => {
76
- if (!data.node) {
77
- return;
78
- }
79
- const wasInTreeChangeEvent = inTreeChangeEvent;
80
- if (!wasInTreeChangeEvent) {
81
- inTreeChangeEvent = true;
82
- }
83
- let childrenNodes;
84
- if (data.node.state.selected) {
85
- selectNodeAndAllParents(this._$tree.jstree('get_parent', data.node));
86
- childrenNodes = $.makeArray(this._$tree.jstree('get_children_dom', data.node));
87
- this._$tree.jstree('select_node', childrenNodes);
88
- }
89
- else {
90
- childrenNodes = $.makeArray(this._$tree.jstree('get_children_dom', data.node));
91
- this._$tree.jstree('deselect_node', childrenNodes);
92
- }
93
- if (!wasInTreeChangeEvent) {
94
- inTreeChangeEvent = false;
95
- }
96
- });
97
- }
98
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PermissionTreeComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
99
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PermissionTreeComponent, selector: "permission-tree", inputs: { data: "data" }, usesOnChanges: true, ngImport: i0, template: ` <div class="permission-tree"></div> `, isInline: true }); }
100
- }
101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PermissionTreeComponent, decorators: [{
102
- type: Component,
103
- args: [{
104
- // eslint-disable-next-line @angular-eslint/component-selector
105
- selector: 'permission-tree',
106
- template: ` <div class="permission-tree"></div> `
107
- }]
108
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { data: [{
109
- type: Input
110
- }] } });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hhcmVkLWNvbXBvbmVudHMvc3JjL2xpYi9wZXJtaXNzaW9uLXRyZWUvcGVybWlzc2lvbi10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBR1IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDOztBQVM3QixNQUFNLE9BQU8sdUJBQXVCO0lBS2hDLFlBQTZCLFFBQW9CO1FBQXBCLGFBQVEsR0FBUixRQUFRLENBQVk7SUFBRyxDQUFDO0lBRXJELFdBQVcsQ0FBQyxNQUFxQjtRQUM3QixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELHlCQUF5QjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzNDLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUUzQixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRSxLQUFLLE1BQU0sVUFBVSxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDM0MsZUFBZSxD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TSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3JELENBQUM7aUJBQU0sQ0FBQztnQkFDSixhQUFhLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFFRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDeEIsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1lBQzlCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBbkhRLHVCQUF1QjttR0FBdkIsdUJBQXVCLHNHQUZ0Qix1Q0FBdUM7OzRGQUV4Qyx1QkFBdUI7a0JBTG5DLFNBQVM7bUJBQUM7b0JBQ1AsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUUsdUNBQXVDO2lCQUNwRDsrRUFFWSxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCBtYXAgZnJvbSAnbG9kYXNoL21hcCc7XG5cbmltcG9ydCB7IFBlcm1pc3Npb25UcmVlRGF0YSB9IGZyb20gJy4uL3NoYXJlZC9zaGFyZWQtY29tcG9uZW50LmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdwZXJtaXNzaW9uLXRyZWUnLFxuICAgIHRlbXBsYXRlOiBgIDxkaXYgY2xhc3M9XCJwZXJtaXNzaW9uLXRyZWVcIj48L2Rpdj4gYFxufSlcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgZGF0YTogUGVybWlzc2lvblRyZWVEYXRhO1xuXG4gICAgcHJpdmF0ZSBfJHRyZWU7XG4gICAgcHJpdmF0ZSBfY3JlYXRlZFRyZWVCZWZvcmU6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfZWxlbWVudDogRWxlbWVudFJlZikge31cblxuICAgIG5nT25DaGFuZ2VzKHNpbXBsZTogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoc2ltcGxlWydkYXRhJ10/LmN1cnJlbnRWYWx1ZT8uZ3JhbnRlZFBlcm1pc3Npb25OYW1lcykge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVHJlZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl8kdHJlZSA9ICQodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICB0aGlzLnJlZnJlc2hUcmVlKCk7XG4gICAgfVxuXG4gICAgZ2V0R3JhbnRlZFBlcm1pc3Npb25OYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICghdGhpcy5fJHRyZWUgfHwgIXRoaXMuX2NyZWF0ZWRUcmVlQmVmb3JlKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwZXJtaXNzaW9uTmFtZXMgPSBbXTtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZFBlcm1pc3Npb25zID0gdGhpcy5fJHRyZWUuanN0cmVlKCdnZXRfc2VsZWN0ZWQnLCB0cnVlKTtcbiAgICAgICAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIHNlbGVjdGVkUGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25OYW1lcy5wdXNoKHBlcm1pc3Npb24ub3JpZ2luYWwuaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25OYW1lcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hUcmVlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY3JlYXRlZFRyZWVCZWZvcmUpIHtcbiAgICAgICAgICAgIHRoaXMuXyR0cmVlLmpzdHJlZSgnZGVzdHJveScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3JlYXRlZFRyZWVCZWZvcmUgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMuZGF0YSB8fCAhdGhpcy5fJHRyZWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRyZWVEYXRhID0gbWFwKHRoaXMuZGF0YS5wZXJtaXNzaW9ucywgaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBpdGVtLnBhcmVudE5hbWUgPz8gJyMnLFxuICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0uZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5kYXRhLmdyYW50ZWRQZXJtaXNzaW9uTmFtZXMuaW5jbHVkZXMoaXRlbS5uYW1lKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuXyR0cmVlLmpzdHJlZSh7XG4gICAgICAgICAgICBjb3JlOiB7XG4gICAgICAgICAgICAgICAgZGF0YTogdHJlZURhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2ZhIGZhLWZvbGRlci1vcGVuIHRyZWUtaXRlbS1pY29uLWNvbG9yIGljb24tbGcnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdmYSBmYS1maWxlIHRyZWUtaXRlbS1pY29uLWNvbG9yIGljb24tbGcnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNoZWNrYm94OiB7XG4gICAgICAgICAgICAgICAga2VlcF9zZWxlY3RlZF9zdHlsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGhyZWVfc3RhdGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNhc2NhZGU6ICcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGx1Z2luczogWydjaGVja2JveCcsICd0eXBlcyddXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NyZWF0ZWRUcmVlQmVmb3JlID0gdHJ1ZTtcblxuICAgICAgICBsZXQgaW5UcmVlQ2hhbmdlRXZlbnQgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBzZWxlY3ROb2RlQW5kQWxsUGFyZW50cyA9IG5vZGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fJHRyZWUuanN0cmVlKCdzZWxlY3Rfbm9kZScsIG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fJHRyZWUuanN0cmVlKCdnZXRfcGFyZW50Jywgbm9kZSk7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0Tm9kZUFuZEFsbFBhcmVudHMocGFyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl8kdHJlZS5vbignY2hhbmdlZC5qc3RyZWUnLCAoX2UsIGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmICghZGF0YS5ub2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB3YXNJblRyZWVDaGFuZ2VFdmVudCA9IGluVHJlZUNoYW5nZUV2ZW50O1xuICAgICAgICAgICAgaWYgKCF3YXNJblRyZWVDaGFuZ2VFdmVudCkge1xuICAgICAgICAgICAgICAgIGluVHJlZUNoYW5nZUV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNoaWxkcmVuTm9kZXM7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLm5vZGUuc3RhdGUuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3ROb2RlQW5kQWxsUGFyZW50cyh0aGlzLl8kdHJlZS5qc3RyZWUoJ2dldF9wYXJlbnQnLCBkYXRhLm5vZGUpKTtcblxuICAgICAgICAgICAgICAgIGNoaWxkcmVuTm9kZXMgPSAkLm1ha2VBcnJheSh0aGlzLl8kdHJlZS5qc3RyZWUoJ2dldF9jaGlsZHJlbl9kb20nLCBkYXRhLm5vZGUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl8kdHJlZS5qc3RyZWUoJ3NlbGVjdF9ub2RlJywgY2hpbGRyZW5Ob2Rlcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuTm9kZXMgPSAkLm1ha2VBcnJheSh0aGlzLl8kdHJlZS5qc3RyZWUoJ2dldF9jaGlsZHJlbl9kb20nLCBkYXRhLm5vZGUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl8kdHJlZS5qc3RyZWUoJ2Rlc2VsZWN0X25vZGUnLCBjaGlsZHJlbk5vZGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF3YXNJblRyZWVDaGFuZ2VFdmVudCkge1xuICAgICAgICAgICAgICAgIGluVHJlZUNoYW5nZUV2ZW50ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==