@seniorsistemas/angular-components 19.8.0 → 19.9.0
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/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +2 -1
- package/code-editor/lib/code-editor/core/facades/core-facade.d.ts +3 -1
- package/code-editor/lib/code-editor/infra/cores/codemirror-6/codemirror-6-core.d.ts +12 -2
- package/drawer/README.md +119 -0
- package/drawer/index.d.ts +5 -0
- package/{sidebar/lib/sidebar/sidebar.component.d.ts → drawer/lib/drawer/drawer.component.d.ts} +18 -15
- package/drawer/lib/drawer/drawer.module.d.ts +8 -0
- package/drawer/public-api.d.ts +2 -0
- package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +6 -3
- package/esm2022/code-editor/lib/code-editor/core/facades/core-facade.mjs +7 -1
- package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/codemirror-6-core.mjs +47 -22
- package/esm2022/drawer/lib/drawer/drawer.component.mjs +192 -0
- package/esm2022/drawer/lib/drawer/drawer.module.mjs +17 -0
- package/esm2022/drawer/public-api.mjs +3 -0
- package/esm2022/drawer/seniorsistemas-angular-components-drawer.mjs +5 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +4 -5
- package/esm2022/lib/locale/fallback.mjs +3 -2
- package/esm2022/select/lib/select/select.component.mjs +11 -14
- package/esm2022/side-sheet/lib/side-sheet/models/side-sheet-config.mjs +2 -0
- package/esm2022/side-sheet/lib/side-sheet/models/side-sheet-size.mjs +2 -0
- package/esm2022/side-sheet/lib/side-sheet/services/side-sheet.service.mjs +82 -0
- package/esm2022/side-sheet/lib/side-sheet/side-sheet.component.mjs +171 -0
- package/esm2022/side-sheet/public-api.mjs +3 -0
- package/esm2022/side-sheet/seniorsistemas-angular-components-side-sheet.mjs +5 -0
- package/esm2022/sidebar/public-api.mjs +12 -3
- package/esm2022/switch/lib/switch/switch.component.mjs +5 -3
- package/esm2022/switch/lib/switch/switch.module.mjs +2 -2
- package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +4 -3
- package/esm2022/tabs/lib/tabs/tabs.component.mjs +14 -10
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +82 -75
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +3 -3
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.mjs +35 -18
- package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.event.service.mjs +2 -1
- package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +89 -77
- package/esm2022/toast/lib/toast/toast.service.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +5 -2
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +52 -21
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs +211 -0
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -0
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +3 -4
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +10 -13
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs +257 -0
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs.map +1 -0
- package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +10 -180
- package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-switch.mjs +5 -3
- package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs +16 -11
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +201 -164
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-toast.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components.mjs +2 -1
- package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
- package/package.json +19 -7
- package/select/lib/select/select.component.d.ts +2 -1
- package/side-sheet/README.md +184 -0
- package/side-sheet/index.d.ts +5 -0
- package/side-sheet/lib/side-sheet/models/side-sheet-config.d.ts +20 -0
- package/side-sheet/lib/side-sheet/models/side-sheet-size.d.ts +1 -0
- package/side-sheet/lib/side-sheet/services/side-sheet.service.d.ts +49 -0
- package/side-sheet/lib/side-sheet/side-sheet.component.d.ts +61 -0
- package/side-sheet/public-api.d.ts +4 -0
- package/sidebar/README.md +20 -93
- package/sidebar/public-api.d.ts +11 -2
- package/tabs/lib/tab-item/tab-item.component.d.ts +1 -0
- package/tabs/lib/tabs/tabs.component.d.ts +2 -1
- package/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.d.ts +19 -7
- package/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.d.ts +4 -3
- package/tiered-menu/lib/tiered-menu/services/tiered-menu.event.service.d.ts +1 -0
- package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +6 -5
- package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +0 -169
- package/esm2022/sidebar/lib/sidebar/sidebar.module.mjs +0 -17
- package/sidebar/lib/sidebar/sidebar.module.d.ts +0 -8
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, HostListener, Injector, Input, Output, inject, } from '@angular/core';
|
|
2
|
+
import { Overlay } from '@angular/cdk/overlay';
|
|
3
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
2
4
|
import { Subject } from 'rxjs';
|
|
3
5
|
import { takeUntil } from 'rxjs/operators';
|
|
4
6
|
import { TieredMenuNestedComponent } from './components/tiered-menu-nested/tiered-menu-nested.component';
|
|
@@ -6,7 +8,6 @@ import { TieredMenuComponent } from './components/tiered-menu/tiered-menu.compon
|
|
|
6
8
|
import { TieredMenuEventService } from './services/tiered-menu.event.service';
|
|
7
9
|
import { TieredMenuGlobalService } from './services/tiered-menu.global.service';
|
|
8
10
|
import { TieredMenuService } from './services/tiered-menu.service';
|
|
9
|
-
import { enableScroll } from '@seniorsistemas/angular-components/utils';
|
|
10
11
|
import * as i0 from "@angular/core";
|
|
11
12
|
/**
|
|
12
13
|
* @description Diretiva que anexa um menu multinível (tiered menu) a qualquer elemento do DOM.
|
|
@@ -23,8 +24,7 @@ import * as i0 from "@angular/core";
|
|
|
23
24
|
*/
|
|
24
25
|
export class TieredMenuDirective {
|
|
25
26
|
_elementRef = inject(ElementRef);
|
|
26
|
-
|
|
27
|
-
_componentFactoryResolver = inject(ComponentFactoryResolver);
|
|
27
|
+
_overlay = inject(Overlay);
|
|
28
28
|
_injector = inject(Injector);
|
|
29
29
|
_tieredMenuEventService = inject(TieredMenuEventService);
|
|
30
30
|
_tieredMenuService = inject(TieredMenuService);
|
|
@@ -52,6 +52,7 @@ export class TieredMenuDirective {
|
|
|
52
52
|
ariaLabel;
|
|
53
53
|
tieredMenuOpened = new EventEmitter();
|
|
54
54
|
tieredMenuClosed = new EventEmitter();
|
|
55
|
+
_overlayRef = null;
|
|
55
56
|
_componentRef = null;
|
|
56
57
|
_showTimeout;
|
|
57
58
|
_isNested = false;
|
|
@@ -60,10 +61,6 @@ export class TieredMenuDirective {
|
|
|
60
61
|
_lastActiveElement;
|
|
61
62
|
_previousItems = [];
|
|
62
63
|
_itemsAreValid;
|
|
63
|
-
_resizeObserver = new ResizeObserver(() => {
|
|
64
|
-
this._setMenuPosition();
|
|
65
|
-
this._componentRef?.hostView.detectChanges();
|
|
66
|
-
});
|
|
67
64
|
ngOnInit() {
|
|
68
65
|
this._itemsAreValid = !!this.items?.length;
|
|
69
66
|
if (!this._itemsAreValid)
|
|
@@ -112,6 +109,28 @@ export class TieredMenuDirective {
|
|
|
112
109
|
event.stopPropagation();
|
|
113
110
|
}
|
|
114
111
|
}
|
|
112
|
+
onWindowResize() {
|
|
113
|
+
if (!this._overlayRef)
|
|
114
|
+
return;
|
|
115
|
+
const isNestedNow = document.body.clientWidth < 600;
|
|
116
|
+
if (isNestedNow === this._isNested)
|
|
117
|
+
return;
|
|
118
|
+
// Crossing the 600px breakpoint while open switches between the desktop (flyout) and
|
|
119
|
+
// nested (fullscreen accordion) menu components. Unlike a real close, this must preserve
|
|
120
|
+
// which items are currently open — _disposeOverlay() only tears down the CDK overlay(s),
|
|
121
|
+
// it doesn't touch `isOpen` state or emit closeAllMenusEvent (which would reset it).
|
|
122
|
+
this._isNested = isNestedNow;
|
|
123
|
+
this._disposeOverlay();
|
|
124
|
+
this._isNested ? this._createNestedMenu() : this._createTieredMenu();
|
|
125
|
+
}
|
|
126
|
+
_disposeOverlay() {
|
|
127
|
+
if (this._componentRef?.instance instanceof TieredMenuComponent) {
|
|
128
|
+
this._componentRef.instance.disposeChain();
|
|
129
|
+
}
|
|
130
|
+
this._overlayRef?.dispose();
|
|
131
|
+
this._overlayRef = null;
|
|
132
|
+
this._componentRef = null;
|
|
133
|
+
}
|
|
115
134
|
_createMenu() {
|
|
116
135
|
this._updateServiceItems();
|
|
117
136
|
if (!this._componentRef && this._tieredMenuService.items?.length > 0) {
|
|
@@ -124,102 +143,92 @@ export class TieredMenuDirective {
|
|
|
124
143
|
this._isNested ? this._createNestedMenu() : this._createTieredMenu();
|
|
125
144
|
}
|
|
126
145
|
}
|
|
146
|
+
static DESKTOP_POSITIONS = [
|
|
147
|
+
{ originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },
|
|
148
|
+
{ originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },
|
|
149
|
+
{ originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },
|
|
150
|
+
{ originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },
|
|
151
|
+
];
|
|
152
|
+
// Single position, no flip fallback: the nested/mobile panel can accumulate several
|
|
153
|
+
// simultaneously open branches (restored from desktop mode) and grow much taller than the
|
|
154
|
+
// trigger's surroundings. Falling back to a "top" position in that case just misplaces the
|
|
155
|
+
// panel; instead it always opens below the trigger and relies on `withFlexibleDimensions` +
|
|
156
|
+
// `.menu`'s own `overflow: auto` to scroll internally when it doesn't fit.
|
|
157
|
+
static NESTED_POSITIONS = [
|
|
158
|
+
{ originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },
|
|
159
|
+
];
|
|
127
160
|
_createTieredMenu() {
|
|
128
|
-
if (!this.
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
161
|
+
if (!this._overlayRef && this._tieredMenuService.items?.length > 0) {
|
|
162
|
+
const positionStrategy = this._overlay
|
|
163
|
+
.position()
|
|
164
|
+
.flexibleConnectedTo(this._elementRef)
|
|
165
|
+
.withPositions(TieredMenuDirective.DESKTOP_POSITIONS)
|
|
166
|
+
.withFlexibleDimensions(false)
|
|
167
|
+
.withPush(false);
|
|
168
|
+
this._overlayRef = this._overlay.create({
|
|
169
|
+
positionStrategy,
|
|
170
|
+
scrollStrategy: this._overlay.scrollStrategies.reposition(),
|
|
171
|
+
});
|
|
172
|
+
const componentRef = this._overlayRef.attach(new ComponentPortal(TieredMenuComponent, null, this._injector));
|
|
173
|
+
this._componentRef = componentRef;
|
|
133
174
|
this._setMenuComponentProperties();
|
|
134
|
-
|
|
175
|
+
componentRef.instance.ariaLabel = this.ariaLabel;
|
|
176
|
+
// Render synchronously so item elements are queryable right away, then recreate any
|
|
177
|
+
// flyout chain that was already open (e.g. coming from nested/mobile mode via resize).
|
|
178
|
+
componentRef.changeDetectorRef.detectChanges();
|
|
179
|
+
componentRef.instance.restoreOpenChain();
|
|
180
|
+
componentRef.instance.destroyRequest.pipe(takeUntil(this._unsubscribe$)).subscribe(() => {
|
|
135
181
|
this._destroy();
|
|
136
182
|
});
|
|
137
|
-
this._setMenuPosition();
|
|
138
183
|
}
|
|
139
184
|
}
|
|
140
185
|
_createNestedMenu() {
|
|
141
|
-
if (!this.
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
186
|
+
if (!this._overlayRef && this._tieredMenuService.items?.length > 0) {
|
|
187
|
+
// The nested/mobile panel is near full-width (see .menu--nested CSS), so it doesn't
|
|
188
|
+
// need to flip horizontally like the desktop menu — `withPush` clamps it into the
|
|
189
|
+
// viewport instead. `withFlexibleDimensions(true)` lets it shrink to the remaining
|
|
190
|
+
// viewport space below the trigger (scrolling internally via `.menu`'s own
|
|
191
|
+
// `overflow: auto`) instead of flipping above it, which would misplace a panel that's
|
|
192
|
+
// taller than the trigger's surroundings.
|
|
193
|
+
const positionStrategy = this._overlay
|
|
194
|
+
.position()
|
|
195
|
+
.flexibleConnectedTo(this._elementRef)
|
|
196
|
+
.withPositions(TieredMenuDirective.NESTED_POSITIONS)
|
|
197
|
+
.withFlexibleDimensions(true)
|
|
198
|
+
.withPush(true);
|
|
199
|
+
this._overlayRef = this._overlay.create({
|
|
200
|
+
positionStrategy,
|
|
201
|
+
scrollStrategy: this._overlay.scrollStrategies.reposition(),
|
|
202
|
+
});
|
|
203
|
+
this._componentRef = this._overlayRef.attach(new ComponentPortal(TieredMenuNestedComponent, null, this._injector));
|
|
147
204
|
this._setMenuComponentProperties();
|
|
148
|
-
this._setMenuPosition();
|
|
149
205
|
}
|
|
150
206
|
}
|
|
151
|
-
_createComponent(componentClass) {
|
|
152
|
-
const componentFactory = this._componentFactoryResolver.resolveComponentFactory(componentClass);
|
|
153
|
-
const _componentRef = componentFactory.create(this._injector);
|
|
154
|
-
this._resizeObserver.observe(_componentRef.location.nativeElement.querySelector('.menu'));
|
|
155
|
-
_componentRef.onDestroy(() => {
|
|
156
|
-
this._resizeObserver.disconnect();
|
|
157
|
-
});
|
|
158
|
-
return _componentRef;
|
|
159
|
-
}
|
|
160
207
|
_destroy() {
|
|
161
|
-
if (this.
|
|
208
|
+
if (this._overlayRef) {
|
|
162
209
|
this._isOpen = false;
|
|
163
210
|
this.tieredMenuClosed.emit();
|
|
164
211
|
window.clearTimeout(this._showTimeout);
|
|
165
|
-
this.
|
|
166
|
-
this.
|
|
212
|
+
this._overlayRef.dispose();
|
|
213
|
+
this._overlayRef = null;
|
|
167
214
|
this._componentRef = null;
|
|
168
215
|
this._tieredMenuService.currentItems = this._tieredMenuService.items;
|
|
169
216
|
this._tieredMenuService.currentItem = this._tieredMenuService.items[0];
|
|
170
217
|
this._tieredMenuEventService.closeAllMenusEvent.emit();
|
|
171
218
|
}
|
|
172
219
|
}
|
|
173
|
-
_setMenuPosition() {
|
|
174
|
-
if (!this._componentRef) {
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
this._changeDetectorRef.detectChanges();
|
|
178
|
-
const ITEM_HEIGHT = 37;
|
|
179
|
-
const ITEM_WIDTH = this._componentRef.location.nativeElement?.querySelector('.menu')?.clientWidth || 176;
|
|
180
|
-
const DIVIDER_HEIGHT = 5;
|
|
181
|
-
const PADDING = 8;
|
|
182
|
-
const MARGIN = 4;
|
|
183
|
-
this._componentRef.instance.top = 8;
|
|
184
|
-
let { bottom, left, right } = this._elementRef.nativeElement.getBoundingClientRect();
|
|
185
|
-
const itemsCount = this._componentRef.instance.items?.reduce((count, item) => {
|
|
186
|
-
return !item.divider ? count + 1 : count;
|
|
187
|
-
}, 0);
|
|
188
|
-
const dividersCount = this._componentRef.instance.items?.reduce((count, item) => {
|
|
189
|
-
return item.divider ? count + 1 : count;
|
|
190
|
-
}, 0);
|
|
191
|
-
const menuHeight = itemsCount * ITEM_HEIGHT + dividersCount * DIVIDER_HEIGHT + PADDING + MARGIN;
|
|
192
|
-
const rightFreeSpace = window.innerWidth - right;
|
|
193
|
-
const bottomFreeSpace = window.innerHeight - bottom;
|
|
194
|
-
this._componentRef.instance.top = bottom;
|
|
195
|
-
this._componentRef.instance.left = left;
|
|
196
|
-
if (bottomFreeSpace <= menuHeight) {
|
|
197
|
-
this._componentRef.instance.top = Math.max(scrollY + bottom - menuHeight, 0);
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
this._componentRef.instance.top = window.scrollY + bottom + MARGIN;
|
|
201
|
-
}
|
|
202
|
-
if (rightFreeSpace > 176) {
|
|
203
|
-
this._componentRef.instance.left = window.scrollX + left;
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
this._componentRef.instance.left = window.scrollX + right - ITEM_WIDTH;
|
|
207
|
-
}
|
|
208
|
-
if (this._isNested) {
|
|
209
|
-
this._componentRef.instance.left = MARGIN;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
220
|
_setMenuComponentProperties() {
|
|
213
221
|
if (this._componentRef != null) {
|
|
214
222
|
this._componentRef.instance.items = this._tieredMenuService.items;
|
|
215
|
-
this._componentRef.instance.ariaLabel = this.ariaLabel;
|
|
216
223
|
}
|
|
217
224
|
}
|
|
218
225
|
_subscribeEvents() {
|
|
219
226
|
this._tieredMenuEventService.closeAllMenusEvent.pipe(takeUntil(this._unsubscribe$)).subscribe(() => {
|
|
220
227
|
this._tieredMenuService.items = this._tieredMenuService.markAllItemsAsClosed(this._tieredMenuService.items);
|
|
221
228
|
this._destroy();
|
|
222
|
-
|
|
229
|
+
});
|
|
230
|
+
this._tieredMenuEventService.restoreFocusEvent.pipe(takeUntil(this._unsubscribe$)).subscribe(() => {
|
|
231
|
+
this._lastActiveElement?.focus();
|
|
223
232
|
});
|
|
224
233
|
}
|
|
225
234
|
_compareItems(item1, item2) {
|
|
@@ -236,7 +245,7 @@ export class TieredMenuDirective {
|
|
|
236
245
|
this._tieredMenuService.items[0];
|
|
237
246
|
}
|
|
238
247
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
239
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: TieredMenuDirective, isStandalone: true, selector: "[sTieredMenu]", inputs: { items: "items", focusedItem: "focusedItem", triggerEvent: "triggerEvent", ariaLabel: "ariaLabel" }, outputs: { tieredMenuOpened: "tieredMenuOpened", tieredMenuClosed: "tieredMenuClosed" }, host: { listeners: { "click": "onClick($event)" } }, providers: [TieredMenuEventService, TieredMenuService], usesOnChanges: true, ngImport: i0 });
|
|
248
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: TieredMenuDirective, isStandalone: true, selector: "[sTieredMenu]", inputs: { items: "items", focusedItem: "focusedItem", triggerEvent: "triggerEvent", ariaLabel: "ariaLabel" }, outputs: { tieredMenuOpened: "tieredMenuOpened", tieredMenuClosed: "tieredMenuClosed" }, host: { listeners: { "click": "onClick($event)", "window:resize": "onWindowResize()" } }, providers: [TieredMenuEventService, TieredMenuService], usesOnChanges: true, ngImport: i0 });
|
|
240
249
|
}
|
|
241
250
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuDirective, decorators: [{
|
|
242
251
|
type: Directive,
|
|
@@ -260,5 +269,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
260
269
|
}], onClick: [{
|
|
261
270
|
type: HostListener,
|
|
262
271
|
args: ['click', ['$event']]
|
|
272
|
+
}], onWindowResize: [{
|
|
273
|
+
type: HostListener,
|
|
274
|
+
args: ['window:resize']
|
|
263
275
|
}] } });
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGllcmVkLW1lbnUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3RpZXJlZC1tZW51L3NyYy9saWIvdGllcmVkLW1lbnUvdGllcmVkLW1lbnUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUV4QixTQUFTLEVBQ1QsVUFBVSxFQUVWLFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxNQUFNLEVBRU4sTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRXJGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFFeEU7Ozs7Ozs7Ozs7OztHQVlHO0FBTUgsTUFBTSxPQUFPLG1CQUFtQjtJQUNYLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyx5QkFBeUIsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM3RCxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEs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QWdCO3NCQUR0QixNQUFNO2dCQUlBLGdCQUFnQjtzQkFEdEIsTUFBTTtnQkErREEsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBcHBsaWNhdGlvblJlZixcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgQ29tcG9uZW50UmVmLFxyXG4gICAgRGlyZWN0aXZlLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEVtYmVkZGVkVmlld1JlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEhvc3RMaXN0ZW5lcixcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBUeXBlLFxyXG4gICAgaW5qZWN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBUaWVyZWRNZW51TmVzdGVkQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RpZXJlZC1tZW51LW5lc3RlZC90aWVyZWQtbWVudS1uZXN0ZWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGllcmVkTWVudUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90aWVyZWQtbWVudS90aWVyZWQtbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUaWVyZWRNZW51SXRlbURhdGEgfSBmcm9tICcuL21vZGVscy90aWVyZWQtbWVudS1pdGVtLWRhdGEnO1xyXG5pbXBvcnQgeyBUaWVyZWRNZW51RXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90aWVyZWQtbWVudS5ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGllcmVkTWVudUdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3RpZXJlZC1tZW51Lmdsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGllcmVkTWVudVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3RpZXJlZC1tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaWVyZWRNZW51SXRlbUludGVybmFsRGF0YSB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgZW5hYmxlU2Nyb2xsIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIERpcmV0aXZhIHF1ZSBhbmV4YSB1bSBtZW51IG11bHRpbsOtdmVsICh0aWVyZWQgbWVudSkgYSBxdWFscXVlciBlbGVtZW50byBkbyBET00uXHJcbiAqIEFvIGRpc3BhcmFyIG8gZXZlbnRvIGNvbmZpZ3VyYWRvIG5vIGVsZW1lbnRvIGhvc3BlZGVpcm8sIGV4aWJlIHVtIHBhaW5lbCBmbHV0dWFudGVcclxuICogY29tIGl0ZW5zIGRlIG1lbnUgaGllcsOhcnF1aWNvcywgc3Vwb3J0YW5kbyBzdWJtZW51cyBhbmluaGFkb3MgZSBkaXZpc29yZXMuXHJcbiAqIEVtIHRlbGFzIGVzdHJlaXRhcyAoPCA2MDBweCksIG8gbWVudSDDqSBleGliaWRvIGVtIG1vZG8gYW5pbmhhZG8gZnVsbHNjcmVlbi5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiA8cy1idXR0b24gW3NUaWVyZWRNZW51XT1cIm1lbnVJdGVtc1wiIHRyaWdnZXJFdmVudD1cImNsaWNrXCI+QWJyaXIgbWVudTwvcy1idXR0b24+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgTmF2ZWdhw6fDo29cclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbc1RpZXJlZE1lbnVdJyxcclxuICAgIHByb3ZpZGVyczogW1RpZXJlZE1lbnVFdmVudFNlcnZpY2UsIFRpZXJlZE1lbnVTZXJ2aWNlXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUaWVyZWRNZW51RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXBwUmVmID0gaW5qZWN0KEFwcGxpY2F0aW9uUmVmKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlciA9IGluamVjdChDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGllcmVkTWVudUV2ZW50U2VydmljZSA9IGluamVjdChUaWVyZWRNZW51RXZlbnRTZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RpZXJlZE1lbnVTZXJ2aWNlID0gaW5qZWN0KFRpZXJlZE1lbnVTZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RpZXJlZE1lbnVHbG9iYWxTZXJ2aWNlID0gaW5qZWN0KFRpZXJlZE1lbnVHbG9iYWxTZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBMaXN0YSBkZSBpdGVucyBleGliaWRvcyBubyBtZW51LiBDYWRhIGl0ZW0gcG9kZSBjb250ZXIgdW0gYXJyYXkgZGUgYGNoaWxkcmVuYFxyXG4gICAgICogcGFyYSBjcmlhciBzdWJtZW51cyBhbmluaGFkb3MsIGFsw6ltIGRlIHByb3ByaWVkYWRlcyBjb21vIGBsYWJlbGAsIGBpY29uYCxcclxuICAgICAqIGBkaXNhYmxlZGAsIGBjb21tYW5kYCBlIGBkaXZpZGVyYC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpdGVtczogVGllcmVkTWVudUl0ZW1EYXRhW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdGVtIHF1ZSByZWNlYmVyw6EgbyBmb2NvIGluaWNpYWwgYW8gYWJyaXIgbyBtZW51LlxyXG4gICAgICogw5p0aWwgcGFyYSBkZXN0YWNhciB1bWEgb3DDp8OjbyBwcsOpLXNlbGVjaW9uYWRhIG91IGNvbnRleHR1YWwuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZm9jdXNlZEl0ZW06IFRpZXJlZE1lbnVJdGVtRGF0YSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBEZWZpbmUgbyBldmVudG8gZG8gZWxlbWVudG8gaG9zcGVkZWlybyBxdWUgZGlzcGFyYSBhIGFiZXJ0dXJhIGRvIG1lbnUuXHJcbiAgICAgKiAtIGAnY2xpY2snYDogYWJyZSBvIG1lbnUgYW8gY2xpY2FyIG5vIGVsZW1lbnRvIChwYWRyw6NvKS5cclxuICAgICAqIC0gYCdob3ZlcidgOiBhYnJlIG8gbWVudSBhbyBwYXNzYXIgbyBtb3VzZSBzb2JyZSBvIGVsZW1lbnRvLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0ICdjbGljaydcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0cmlnZ2VyRXZlbnQ6ICdjbGljaycgfCAnaG92ZXInID0gJ2NsaWNrJztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGFyaWFMYWJlbD86IHN0cmluZztcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB0aWVyZWRNZW51T3BlbmVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgdGllcmVkTWVudUNsb3NlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIHByaXZhdGUgX2NvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4gfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgX3Nob3dUaW1lb3V0PzogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBfaXNOZXN0ZWQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX2xhc3RBY3RpdmVFbGVtZW50PzogRWxlbWVudDtcclxuICAgIHByaXZhdGUgX3ByZXZpb3VzSXRlbXM6IFRpZXJlZE1lbnVJdGVtRGF0YVtdID0gW107XHJcbiAgICBwcml2YXRlIF9pdGVtc0FyZVZhbGlkPzogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9zZXRNZW51UG9zaXRpb24oKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRSZWY/Lmhvc3RWaWV3LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9pdGVtc0FyZVZhbGlkID0gISF0aGlzLml0ZW1zPy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5faXRlbXNBcmVWYWxpZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVFdmVudHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pdGVtc0FyZVZhbGlkKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fcHJldmlvdXNJdGVtcykge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c0l0ZW1zID0gdGhpcy5fdGllcmVkTWVudVNlcnZpY2UuY2xvbmVJdGVtcyh0aGlzLml0ZW1zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCAhPT0gdGhpcy5fcHJldmlvdXNJdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NvbXBhcmVJdGVtcyh0aGlzLml0ZW1zW2ldLCB0aGlzLl9wcmV2aW91c0l0ZW1zW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGFzQ2hhbmdlcykge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVTZXJ2aWNlSXRlbXMoKTtcclxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWJ1aWxkTWVudSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNJdGVtcyA9IHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLmNsb25lSXRlbXModGhpcy5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5faXRlbXNBcmVWYWxpZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZSQubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLl9kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2l0ZW1zQXJlVmFsaWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlckV2ZW50ID09PSAnY2xpY2snICYmICF0aGlzLl9pc09wZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5fbGFzdEFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU1lbnUoKTtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NyZWF0ZU1lbnUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlU2VydmljZUl0ZW1zKCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29tcG9uZW50UmVmICYmIHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpZXJlZE1lbnVHbG9iYWxTZXJ2aWNlLmxhc3RJbnN0YW5jZT8uX2Rlc3Ryb3koKTtcclxuICAgICAgICAgICAgdGhpcy5fdGllcmVkTWVudUdsb2JhbFNlcnZpY2UubGFzdEluc3RhbmNlID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICh0aGlzLl9sYXN0QWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk/LmJsdXIoKTtcclxuICAgICAgICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy50aWVyZWRNZW51T3BlbmVkLmVtaXQoKTtcclxuICAgICAgICAgICAgdGhpcy5faXNOZXN0ZWQgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDwgNjAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5faXNOZXN0ZWQgPyB0aGlzLl9jcmVhdGVOZXN0ZWRNZW51KCkgOiB0aGlzLl9jcmVhdGVUaWVyZWRNZW51KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NyZWF0ZVRpZXJlZE1lbnUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb21wb25lbnRSZWYgJiYgdGhpcy5fdGllcmVkTWVudVNlcnZpY2UuaXRlbXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmID0gdGhpcy5fY3JlYXRlQ29tcG9uZW50KFRpZXJlZE1lbnVDb21wb25lbnQpO1xyXG4gICAgICAgICAgICB0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyh0aGlzLl9jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xyXG4gICAgICAgICAgICBjb25zdCBkb21FbGVtID0gdGhpcy5fY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9tRWxlbSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldE1lbnVDb21wb25lbnRQcm9wZXJ0aWVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5kZXN0cm95UmVxdWVzdC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NldE1lbnVQb3NpdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jcmVhdGVOZXN0ZWRNZW51KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5fY29tcG9uZW50UmVmICYmIHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoVGllcmVkTWVudU5lc3RlZENvbXBvbmVudCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudFJlZiA9IGNvbXBvbmVudEZhY3RvcnkuY3JlYXRlKHRoaXMuX2luamVjdG9yKTtcclxuICAgICAgICAgICAgdGhpcy5fYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5fY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuICAgICAgICAgICAgY29uc3QgZG9tRWxlbSA9ICh0aGlzLl9jb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb21FbGVtKTtcclxuICAgICAgICAgICAgdGhpcy5fc2V0TWVudUNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5fc2V0TWVudVBvc2l0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NyZWF0ZUNvbXBvbmVudDxUPihjb21wb25lbnRDbGFzczogVHlwZTxUPikge1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50Q2xhc3MpO1xyXG4gICAgICAgIGNvbnN0IF9jb21wb25lbnRSZWYgPSBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZSh0aGlzLl9pbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShfY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm1lbnUnKSk7XHJcbiAgICAgICAgX2NvbXBvbmVudFJlZi5vbkRlc3Ryb3koKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIF9jb21wb25lbnRSZWY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fY29tcG9uZW50UmVmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnRpZXJlZE1lbnVDbG9zZWQuZW1pdCgpO1xyXG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dUaW1lb3V0KTtcclxuICAgICAgICAgICAgdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcodGhpcy5fY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLmN1cnJlbnRJdGVtcyA9IHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zO1xyXG4gICAgICAgICAgICB0aGlzLl90aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbSA9IHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zWzBdO1xyXG4gICAgICAgICAgICB0aGlzLl90aWVyZWRNZW51RXZlbnRTZXJ2aWNlLmNsb3NlQWxsTWVudXNFdmVudC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldE1lbnVQb3NpdGlvbigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbXBvbmVudFJlZikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBjb25zdCBJVEVNX0hFSUdIVCA9IDM3O1xyXG4gICAgICAgIGNvbnN0IElURU1fV0lEVEggPVxyXG4gICAgICAgICAgICAodGhpcy5fY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpPy5xdWVyeVNlbGVjdG9yKCcubWVudScpPy5jbGllbnRXaWR0aCB8fCAxNzY7XHJcbiAgICAgICAgY29uc3QgRElWSURFUl9IRUlHSFQgPSA1O1xyXG4gICAgICAgIGNvbnN0IFBBRERJTkcgPSA4O1xyXG4gICAgICAgIGNvbnN0IE1BUkdJTiA9IDQ7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IDg7XHJcbiAgICAgICAgbGV0IHsgYm90dG9tLCBsZWZ0LCByaWdodCB9ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICBjb25zdCBpdGVtc0NvdW50ID0gdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLml0ZW1zPy5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChjb3VudDogbnVtYmVyLCBpdGVtOiBUaWVyZWRNZW51SXRlbUludGVybmFsRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFpdGVtLmRpdmlkZXIgPyBjb3VudCArIDEgOiBjb3VudDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBkaXZpZGVyc0NvdW50ID0gdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLml0ZW1zPy5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChjb3VudDogbnVtYmVyLCBpdGVtOiBUaWVyZWRNZW51SXRlbUludGVybmFsRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGl2aWRlciA/IGNvdW50ICsgMSA6IGNvdW50O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lbnVIZWlnaHQgPSBpdGVtc0NvdW50ICogSVRFTV9IRUlHSFQgKyBkaXZpZGVyc0NvdW50ICogRElWSURFUl9IRUlHSFQgKyBQQURESU5HICsgTUFSR0lOO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0RnJlZVNwYWNlID0gd2luZG93LmlubmVyV2lkdGggLSByaWdodDtcclxuICAgICAgICBjb25zdCBib3R0b21GcmVlU3BhY2UgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBib3R0b207XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS50b3AgPSBib3R0b207XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLmxlZnQgPSBsZWZ0O1xyXG5cclxuICAgICAgICBpZiAoYm90dG9tRnJlZVNwYWNlIDw9IG1lbnVIZWlnaHQpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgubWF4KHNjcm9sbFkgKyBib3R0b20gLSBtZW51SGVpZ2h0LCAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UudG9wID0gd2luZG93LnNjcm9sbFkgKyBib3R0b20gKyBNQVJHSU47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmlnaHRGcmVlU3BhY2UgPiAxNzYpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLmxlZnQgPSB3aW5kb3cuc2Nyb2xsWCArIGxlZnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLmxlZnQgPSB3aW5kb3cuc2Nyb2xsWCArIHJpZ2h0IC0gSVRFTV9XSURUSDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc05lc3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UubGVmdCA9IE1BUkdJTjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0TWVudUNvbXBvbmVudFByb3BlcnRpZXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudFJlZiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5pdGVtcyA9IHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zO1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuYXJpYUxhYmVsID0gdGhpcy5hcmlhTGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3N1YnNjcmliZUV2ZW50cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90aWVyZWRNZW51RXZlbnRTZXJ2aWNlLmNsb3NlQWxsTWVudXNFdmVudC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl90aWVyZWRNZW51U2VydmljZS5pdGVtcyA9IHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLm1hcmtBbGxJdGVtc0FzQ2xvc2VkKHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zKTtcclxuICAgICAgICAgICAgdGhpcy5fZGVzdHJveSgpO1xyXG4gICAgICAgICAgICBlbmFibGVTY3JvbGwoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jb21wYXJlSXRlbXMoaXRlbTE6IFRpZXJlZE1lbnVJdGVtRGF0YSwgaXRlbTI6IFRpZXJlZE1lbnVJdGVtRGF0YSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShpdGVtMSkgPT09IEpTT04uc3RyaW5naWZ5KGl0ZW0yKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9yZWJ1aWxkTWVudSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdXBkYXRlU2VydmljZUl0ZW1zKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zID0gdGhpcy5fdGllcmVkTWVudVNlcnZpY2Uubm9ybWFsaXplRGF0YSh0aGlzLml0ZW1zKTtcclxuICAgICAgICB0aGlzLl90aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbXMgPSB0aGlzLl90aWVyZWRNZW51U2VydmljZS5pdGVtcztcclxuXHJcbiAgICAgICAgdGhpcy5fdGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW0gPVxyXG4gICAgICAgICAgICB0aGlzLl90aWVyZWRNZW51U2VydmljZS5pdGVtcy5maW5kKChpKSA9PiBpLmxhYmVsID09PSB0aGlzLmZvY3VzZWRJdGVtPy5sYWJlbCkgPz9cclxuICAgICAgICAgICAgdGhpcy5fdGllcmVkTWVudVNlcnZpY2UuaXRlbXNbMF07XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGllcmVkLW1lbnUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3RpZXJlZC1tZW51L3NyYy9saWIvdGllcmVkLW1lbnUvdGllcmVkLW1lbnUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxpQkFBaUIsRUFFakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBSUwsTUFBTSxFQUNOLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFCLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUVyRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFFbkU7Ozs7Ozs7Ozs7OztHQVlHO0FBTUgsTUFBTSxPQUFPLG1CQUFtQjtJQUNYLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLHVCQUF1QixH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QUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQztnQkFDOUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO3dHQXBSUSxtQkFBbUI7NEZBQW5CLG1CQUFtQiw2VkFIakIsQ0FBQyxzQkFBc0IsRUFBRSxpQkFBaUIsQ0FBQzs7NEZBRzdDLG1CQUFtQjtrQkFML0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsU0FBUyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsaUJBQWlCLENBQUM7b0JBQ3RELFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs4QkFnQlUsS0FBSztzQkFEWCxLQUFLO2dCQVFDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBV0MsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxTQUFTO3NCQURmLEtBQUs7Z0JBSUMsZ0JBQWdCO3NCQUR0QixNQUFNO2dCQUlBLGdCQUFnQjtzQkFEdEIsTUFBTTtnQkE0REEsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFhMUIsY0FBYztzQkFEcEIsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50UmVmLFxyXG4gICAgRGlyZWN0aXZlLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEhvc3RMaXN0ZW5lcixcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBpbmplY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbm5lY3RlZFBvc2l0aW9uLCBPdmVybGF5LCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuXHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgVGllcmVkTWVudU5lc3RlZENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90aWVyZWQtbWVudS1uZXN0ZWQvdGllcmVkLW1lbnUtbmVzdGVkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRpZXJlZE1lbnVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGllcmVkLW1lbnUvdGllcmVkLW1lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGllcmVkTWVudUl0ZW1EYXRhIH0gZnJvbSAnLi9tb2RlbHMvdGllcmVkLW1lbnUtaXRlbS1kYXRhJztcclxuaW1wb3J0IHsgVGllcmVkTWVudUV2ZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGllcmVkLW1lbnUuZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRpZXJlZE1lbnVHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90aWVyZWQtbWVudS5nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFRpZXJlZE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90aWVyZWQtbWVudS5zZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gRGlyZXRpdmEgcXVlIGFuZXhhIHVtIG1lbnUgbXVsdGluw612ZWwgKHRpZXJlZCBtZW51KSBhIHF1YWxxdWVyIGVsZW1lbnRvIGRvIERPTS5cclxuICogQW8gZGlzcGFyYXIgbyBldmVudG8gY29uZmlndXJhZG8gbm8gZWxlbWVudG8gaG9zcGVkZWlybywgZXhpYmUgdW0gcGFpbmVsIGZsdXR1YW50ZVxyXG4gKiBjb20gaXRlbnMgZGUgbWVudSBoaWVyw6FycXVpY29zLCBzdXBvcnRhbmRvIHN1Ym1lbnVzIGFuaW5oYWRvcyBlIGRpdmlzb3Jlcy5cclxuICogRW0gdGVsYXMgZXN0cmVpdGFzICg8IDYwMHB4KSwgbyBtZW51IMOpIGV4aWJpZG8gZW0gbW9kbyBhbmluaGFkbyBmdWxsc2NyZWVuLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDxzLWJ1dHRvbiBbc1RpZXJlZE1lbnVdPVwibWVudUl0ZW1zXCIgdHJpZ2dlckV2ZW50PVwiY2xpY2tcIj5BYnJpciBtZW51PC9zLWJ1dHRvbj5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBjYXRlZ29yeSBOYXZlZ2HDp8Ojb1xyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tzVGllcmVkTWVudV0nLFxyXG4gICAgcHJvdmlkZXJzOiBbVGllcmVkTWVudUV2ZW50U2VydmljZSwgVGllcmVkTWVudVNlcnZpY2VdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRpZXJlZE1lbnVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGllcmVkTWVudUV2ZW50U2VydmljZSA9IGluamVjdChUaWVyZWRNZW51RXZlbnRTZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RpZXJlZE1lbnVTZXJ2aWNlID0gaW5qZWN0KFRpZXJlZE1lbnVTZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RpZXJlZE1lbnVHbG9iYWxTZXJ2aWNlID0gaW5qZWN0KFRpZXJlZE1lbnVHbG9iYWxTZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBMaXN0YSBkZSBpdGVucyBleGliaWRvcyBubyBtZW51LiBDYWRhIGl0ZW0gcG9kZSBjb250ZXIgdW0gYXJyYXkgZGUgYGNoaWxkcmVuYFxyXG4gICAgICogcGFyYSBjcmlhciBzdWJtZW51cyBhbmluaGFkb3MsIGFsw6ltIGRlIHByb3ByaWVkYWRlcyBjb21vIGBsYWJlbGAsIGBpY29uYCxcclxuICAgICAqIGBkaXNhYmxlZGAsIGBjb21tYW5kYCBlIGBkaXZpZGVyYC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpdGVtczogVGllcmVkTWVudUl0ZW1EYXRhW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdGVtIHF1ZSByZWNlYmVyw6EgbyBmb2NvIGluaWNpYWwgYW8gYWJyaXIgbyBtZW51LlxyXG4gICAgICogw5p0aWwgcGFyYSBkZXN0YWNhciB1bWEgb3DDp8OjbyBwcsOpLXNlbGVjaW9uYWRhIG91IGNvbnRleHR1YWwuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZm9jdXNlZEl0ZW06IFRpZXJlZE1lbnVJdGVtRGF0YSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBEZWZpbmUgbyBldmVudG8gZG8gZWxlbWVudG8gaG9zcGVkZWlybyBxdWUgZGlzcGFyYSBhIGFiZXJ0dXJhIGRvIG1lbnUuXHJcbiAgICAgKiAtIGAnY2xpY2snYDogYWJyZSBvIG1lbnUgYW8gY2xpY2FyIG5vIGVsZW1lbnRvIChwYWRyw6NvKS5cclxuICAgICAqIC0gYCdob3ZlcidgOiBhYnJlIG8gbWVudSBhbyBwYXNzYXIgbyBtb3VzZSBzb2JyZSBvIGVsZW1lbnRvLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0ICdjbGljaydcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0cmlnZ2VyRXZlbnQ6ICdjbGljaycgfCAnaG92ZXInID0gJ2NsaWNrJztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGFyaWFMYWJlbD86IHN0cmluZztcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB0aWVyZWRNZW51T3BlbmVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgdGllcmVkTWVudUNsb3NlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIHByaXZhdGUgX292ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgX2NvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFRpZXJlZE1lbnVDb21wb25lbnQgfCBUaWVyZWRNZW51TmVzdGVkQ29tcG9uZW50PiB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBfc2hvd1RpbWVvdXQ/OiBudW1iZXI7XHJcbiAgICBwcml2YXRlIF9pc05lc3RlZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfaXNPcGVuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfbGFzdEFjdGl2ZUVsZW1lbnQ/OiBFbGVtZW50O1xyXG4gICAgcHJpdmF0ZSBfcHJldmlvdXNJdGVtczogVGllcmVkTWVudUl0ZW1EYXRhW10gPSBbXTtcclxuICAgIHByaXZhdGUgX2l0ZW1zQXJlVmFsaWQ/OiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9pdGVtc0FyZVZhbGlkID0gISF0aGlzLml0ZW1zPy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5faXRlbXNBcmVWYWxpZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVFdmVudHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pdGVtc0FyZVZhbGlkKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fcHJldmlvdXNJdGVtcykge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c0l0ZW1zID0gdGhpcy5fdGllcmVkTWVudVNlcnZpY2UuY2xvbmVJdGVtcyh0aGlzLml0ZW1zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCAhPT0gdGhpcy5fcHJldmlvdXNJdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NvbXBhcmVJdGVtcyh0aGlzLml0ZW1zW2ldLCB0aGlzLl9wcmV2aW91c0l0ZW1zW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGFzQ2hhbmdlcykge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVTZXJ2aWNlSXRlbXMoKTtcclxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWJ1aWxkTWVudSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNJdGVtcyA9IHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLmNsb25lSXRlbXModGhpcy5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5faXRlbXNBcmVWYWxpZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZSQubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLl9kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2l0ZW1zQXJlVmFsaWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlckV2ZW50ID09PSAnY2xpY2snICYmICF0aGlzLl9pc09wZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5fbGFzdEFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU1lbnUoKTtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxyXG4gICAgcHVibGljIG9uV2luZG93UmVzaXplKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5fb3ZlcmxheVJlZikgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBpc05lc3RlZE5vdyA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPCA2MDA7XHJcblxyXG4gICAgICAgIGlmIChpc05lc3RlZE5vdyA9PT0gdGhpcy5faXNOZXN0ZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gQ3Jvc3NpbmcgdGhlIDYwMHB4IGJyZWFrcG9pbnQgd2hpbGUgb3BlbiBzd2l0Y2hlcyBiZXR3ZWVuIHRoZSBkZXNrdG9wIChmbHlvdXQpIGFuZFxyXG4gICAgICAgIC8vIG5lc3RlZCAoZnVsbHNjcmVlbiBhY2NvcmRpb24pIG1lbnUgY29tcG9uZW50cy4gVW5saWtlIGEgcmVhbCBjbG9zZSwgdGhpcyBtdXN0IHByZXNlcnZlXHJcbiAgICAgICAgLy8gd2hpY2ggaXRlbXMgYXJlIGN1cnJlbnRseSBvcGVuIOKAlCBfZGlzcG9zZU92ZXJsYXkoKSBvbmx5IHRlYXJzIGRvd24gdGhlIENESyBvdmVybGF5KHMpLFxyXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgdG91Y2ggYGlzT3BlbmAgc3RhdGUgb3IgZW1pdCBjbG9zZUFsbE1lbnVzRXZlbnQgKHdoaWNoIHdvdWxkIHJlc2V0IGl0KS5cclxuICAgICAgICB0aGlzLl9pc05lc3RlZCA9IGlzTmVzdGVkTm93O1xyXG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VPdmVybGF5KCk7XHJcbiAgICAgICAgdGhpcy5faXNOZXN0ZWQgPyB0aGlzLl9jcmVhdGVOZXN0ZWRNZW51KCkgOiB0aGlzLl9jcmVhdGVUaWVyZWRNZW51KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZGlzcG9zZU92ZXJsYXkoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudFJlZj8uaW5zdGFuY2UgaW5zdGFuY2VvZiBUaWVyZWRNZW51Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5kaXNwb3NlQ2hhaW4oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX292ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcclxuICAgICAgICB0aGlzLl9vdmVybGF5UmVmID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRSZWYgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NyZWF0ZU1lbnUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlU2VydmljZUl0ZW1zKCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29tcG9uZW50UmVmICYmIHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpZXJlZE1lbnVHbG9iYWxTZXJ2aWNlLmxhc3RJbnN0YW5jZT8uX2Rlc3Ryb3koKTtcclxuICAgICAgICAgICAgdGhpcy5fdGllcmVkTWVudUdsb2JhbFNlcnZpY2UubGFzdEluc3RhbmNlID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICh0aGlzLl9sYXN0QWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk/LmJsdXIoKTtcclxuICAgICAgICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy50aWVyZWRNZW51T3BlbmVkLmVtaXQoKTtcclxuICAgICAgICAgICAgdGhpcy5faXNOZXN0ZWQgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDwgNjAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5faXNOZXN0ZWQgPyB0aGlzLl9jcmVhdGVOZXN0ZWRNZW51KCkgOiB0aGlzLl9jcmVhdGVUaWVyZWRNZW51KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFU0tUT1BfUE9TSVRJT05TOiBDb25uZWN0ZWRQb3NpdGlvbltdID0gW1xyXG4gICAgICAgIHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ2JvdHRvbScsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ3RvcCcsIG9mZnNldFk6IDQgfSxcclxuICAgICAgICB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICdib3R0b20nLCBvZmZzZXRZOiAtNCB9LFxyXG4gICAgICAgIHsgb3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiAndG9wJywgb2Zmc2V0WTogNCB9LFxyXG4gICAgICAgIHsgb3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiAnYm90dG9tJywgb2Zmc2V0WTogLTQgfSxcclxuICAgIF07XHJcblxyXG4gICAgLy8gU2luZ2xlIHBvc2l0aW9uLCBubyBmbGlwIGZhbGxiYWNrOiB0aGUgbmVzdGVkL21vYmlsZSBwYW5lbCBjYW4gYWNjdW11bGF0ZSBzZXZlcmFsXHJcbiAgICAvLyBzaW11bHRhbmVvdXNseSBvcGVuIGJyYW5jaGVzIChyZXN0b3JlZCBmcm9tIGRlc2t0b3AgbW9kZSkgYW5kIGdyb3cgbXVjaCB0YWxsZXIgdGhhbiB0aGVcclxuICAgIC8vIHRyaWdnZXIncyBzdXJyb3VuZGluZ3MuIEZhbGxpbmcgYmFjayB0byBhIFwidG9wXCIgcG9zaXRpb24gaW4gdGhhdCBjYXNlIGp1c3QgbWlzcGxhY2VzIHRoZVxyXG4gICAgLy8gcGFuZWw7IGluc3RlYWQgaXQgYWx3YXlzIG9wZW5zIGJlbG93IHRoZSB0cmlnZ2VyIGFuZCByZWxpZXMgb24gYHdpdGhGbGV4aWJsZURpbWVuc2lvbnNgICtcclxuICAgIC8vIGAubWVudWAncyBvd24gYG92ZXJmbG93OiBhdXRvYCB0byBzY3JvbGwgaW50ZXJuYWxseSB3aGVuIGl0IGRvZXNuJ3QgZml0LlxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTkVTVEVEX1BPU0lUSU9OUzogQ29ubmVjdGVkUG9zaXRpb25bXSA9IFtcclxuICAgICAgICB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICd0b3AnLCBvZmZzZXRZOiA0IH0sXHJcbiAgICBdO1xyXG5cclxuICAgIHByaXZhdGUgX2NyZWF0ZVRpZXJlZE1lbnUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9vdmVybGF5UmVmICYmIHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5XHJcbiAgICAgICAgICAgICAgICAucG9zaXRpb24oKVxyXG4gICAgICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudFJlZilcclxuICAgICAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKFRpZXJlZE1lbnVEaXJlY3RpdmUuREVTS1RPUF9QT1NJVElPTlMpXHJcbiAgICAgICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcclxuICAgICAgICAgICAgICAgIC53aXRoUHVzaChmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoe1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneSxcclxuICAgICAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKFxyXG4gICAgICAgICAgICAgICAgbmV3IENvbXBvbmVudFBvcnRhbChUaWVyZWRNZW51Q29tcG9uZW50LCBudWxsLCB0aGlzLl9pbmplY3RvciksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudFJlZiA9IGNvbXBvbmVudFJlZjtcclxuICAgICAgICAgICAgdGhpcy5fc2V0TWVudUNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmFyaWFMYWJlbCA9IHRoaXMuYXJpYUxhYmVsO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVuZGVyIHN5bmNocm9ub3VzbHkgc28gaXRlbSBlbGVtZW50cyBhcmUgcXVlcnlhYmxlIHJpZ2h0IGF3YXksIHRoZW4gcmVjcmVhdGUgYW55XHJcbiAgICAgICAgICAgIC8vIGZseW91dCBjaGFpbiB0aGF0IHdhcyBhbHJlYWR5IG9wZW4gKGUuZy4gY29taW5nIGZyb20gbmVzdGVkL21vYmlsZSBtb2RlIHZpYSByZXNpemUpLlxyXG4gICAgICAgICAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucmVzdG9yZU9wZW5DaGFpbigpO1xyXG5cclxuICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmRlc3Ryb3lSZXF1ZXN0LnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jcmVhdGVOZXN0ZWRNZW51KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5fb3ZlcmxheVJlZiAmJiB0aGlzLl90aWVyZWRNZW51U2VydmljZS5pdGVtcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBUaGUgbmVzdGVkL21vYmlsZSBwYW5lbCBpcyBuZWFyIGZ1bGwtd2lkdGggKHNlZSAubWVudS0tbmVzdGVkIENTUyksIHNvIGl0IGRvZXNuJ3RcclxuICAgICAgICAgICAgLy8gbmVlZCB0byBmbGlwIGhvcml6b250YWxseSBsaWtlIHRoZSBkZXNrdG9wIG1lbnUg4oCUIGB3aXRoUHVzaGAgY2xhbXBzIGl0IGludG8gdGhlXHJcbiAgICAgICAgICAgIC8vIHZpZXdwb3J0IGluc3RlYWQuIGB3aXRoRmxleGlibGVEaW1lbnNpb25zKHRydWUpYCBsZXRzIGl0IHNocmluayB0byB0aGUgcmVtYWluaW5nXHJcbiAgICAgICAgICAgIC8vIHZpZXdwb3J0IHNwYWNlIGJlbG93IHRoZSB0cmlnZ2VyIChzY3JvbGxpbmcgaW50ZXJuYWxseSB2aWEgYC5tZW51YCdzIG93blxyXG4gICAgICAgICAgICAvLyBgb3ZlcmZsb3c6IGF1dG9gKSBpbnN0ZWFkIG9mIGZsaXBwaW5nIGFib3ZlIGl0LCB3aGljaCB3b3VsZCBtaXNwbGFjZSBhIHBhbmVsIHRoYXQnc1xyXG4gICAgICAgICAgICAvLyB0YWxsZXIgdGhhbiB0aGUgdHJpZ2dlcidzIHN1cnJvdW5kaW5ncy5cclxuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuX292ZXJsYXlcclxuICAgICAgICAgICAgICAgIC5wb3NpdGlvbigpXHJcbiAgICAgICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50UmVmKVxyXG4gICAgICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMoVGllcmVkTWVudURpcmVjdGl2ZS5ORVNURURfUE9TSVRJT05TKVxyXG4gICAgICAgICAgICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnModHJ1ZSlcclxuICAgICAgICAgICAgICAgIC53aXRoUHVzaCh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMuX292ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmID0gdGhpcy5fb3ZlcmxheVJlZi5hdHRhY2goXHJcbiAgICAgICAgICAgICAgICBuZXcgQ29tcG9uZW50UG9ydGFsKFRpZXJlZE1lbnVOZXN0ZWRDb21wb25lbnQsIG51bGwsIHRoaXMuX2luamVjdG9yKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5fc2V0TWVudUNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xyXG4gICAgICAgICAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy50aWVyZWRNZW51Q2xvc2VkLmVtaXQoKTtcclxuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dCk7XHJcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLmN1cnJlbnRJdGVtcyA9IHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zO1xyXG4gICAgICAgICAgICB0aGlzLl90aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbSA9IHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zWzBdO1xyXG4gICAgICAgICAgICB0aGlzLl90aWVyZWRNZW51RXZlbnRTZXJ2aWNlLmNsb3NlQWxsTWVudXNFdmVudC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldE1lbnVDb21wb25lbnRQcm9wZXJ0aWVzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRSZWYgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuaXRlbXMgPSB0aGlzLl90aWVyZWRNZW51U2VydmljZS5pdGVtcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlRXZlbnRzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RpZXJlZE1lbnVFdmVudFNlcnZpY2UuY2xvc2VBbGxNZW51c0V2ZW50LnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zID0gdGhpcy5fdGllcmVkTWVudVNlcnZpY2UubWFya0FsbEl0ZW1zQXNDbG9zZWQodGhpcy5fdGllcmVkTWVudVNlcnZpY2UuaXRlbXMpO1xyXG4gICAgICAgICAgICB0aGlzLl9kZXN0cm95KCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RpZXJlZE1lbnVFdmVudFNlcnZpY2UucmVzdG9yZUZvY3VzRXZlbnQucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgKHRoaXMuX2xhc3RBY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KT8uZm9jdXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jb21wYXJlSXRlbXMoaXRlbTE6IFRpZXJlZE1lbnVJdGVtRGF0YSwgaXRlbTI6IFRpZXJlZE1lbnVJdGVtRGF0YSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShpdGVtMSkgPT09IEpTT04uc3RyaW5naWZ5KGl0ZW0yKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9yZWJ1aWxkTWVudSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdXBkYXRlU2VydmljZUl0ZW1zKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zID0gdGhpcy5fdGllcmVkTWVudVNlcnZpY2Uubm9ybWFsaXplRGF0YSh0aGlzLml0ZW1zKTtcclxuICAgICAgICB0aGlzLl90aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbXMgPSB0aGlzLl90aWVyZWRNZW51U2VydmljZS5pdGVtcztcclxuXHJcbiAgICAgICAgdGhpcy5fdGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW0gPVxyXG4gICAgICAgICAgICB0aGlzLl90aWVyZWRNZW51U2VydmljZS5pdGVtcy5maW5kKChpKSA9PiBpLmxhYmVsID09PSB0aGlzLmZvY3VzZWRJdGVtPy5sYWJlbCkgPz9cclxuICAgICAgICAgICAgdGhpcy5fdGllcmVkTWVudVNlcnZpY2UuaXRlbXNbMF07XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -16,7 +16,7 @@ export class ToastService {
|
|
|
16
16
|
this.globalToastHostElement.style.flexDirection = "column";
|
|
17
17
|
this.globalToastHostElement.style.position = "fixed";
|
|
18
18
|
this.globalToastHostElement.style.right = "20px";
|
|
19
|
-
this.globalToastHostElement.style.top = "
|
|
19
|
+
this.globalToastHostElement.style.top = "40px";
|
|
20
20
|
this.globalToastHostElement.style.zIndex = "99999";
|
|
21
21
|
this.globalToastHostElement.style.gap = "10px";
|
|
22
22
|
}
|
|
@@ -60,4 +60,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
60
60
|
providedIn: "root",
|
|
61
61
|
}]
|
|
62
62
|
}] });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy90b2FzdC9zcmMvbGliL3RvYXN0L3RvYXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsY0FBYyxFQUFFLFFBQVEsRUFBbUIsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBS3ZDLE1BQU0sT0FBTyxZQUFZO0lBQ2IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBRTVELFlBQVksR0FBbUMsRUFBRSxDQUFDO0lBQ2xELHNCQUFzQixHQUF1QixJQUFJLENBQUM7SUFFbEQscUJBQXFCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUV2RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDbkQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO1lBQzNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUNyRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7WUFDakQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQy9DLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztZQUNuRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFDbkQsQ0FBQztJQUNMLENBQUM7SUFFTSxJQUFJLENBQUMsS0FBWTtRQUNwQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUU3QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvRixNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU5QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7UUFDN0MsQ0FBQztRQUVELFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHO1lBQzFCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsR0FBRyxLQUFLO1NBQ1gsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFJLFlBQVksQ0FBQyxRQUFpQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFDNUYsSUFBSSxDQUFDLHNCQUF1QixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBRXhDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdEQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1lBQ3ZDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7d0dBN0RRLFlBQVk7NEdBQVosWUFBWSxjQUZULE1BQU07OzRGQUVULFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgQ29tcG9uZW50UmVmLCBBcHBsaWNhdGlvblJlZiwgSW5qZWN0b3IsIEVtYmVkZGVkVmlld1JlZiwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQgeyBUb2FzdENvbXBvbmVudCB9IGZyb20gXCIuL3RvYXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVG9hc3QgfSBmcm9tIFwiLi90eXBlcy90b2FzdFwiO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBUb2FzdFNlcnZpY2Uge1xuICAgIHByaXZhdGUgYXBwUmVmID0gaW5qZWN0KEFwcGxpY2F0aW9uUmVmKTtcbiAgICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciA9IGluamVjdChDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO1xuXG4gICAgcHJpdmF0ZSBhY3RpdmVUb2FzdHM6IENvbXBvbmVudFJlZjxUb2FzdENvbXBvbmVudD5bXSA9IFtdO1xuICAgIHByaXZhdGUgZ2xvYmFsVG9hc3RIb3N0RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgZW5zdXJlR2xvYmFsVG9hc3RIb3N0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZ2xvYmFsVG9hc3RIb3N0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxUb2FzdEhvc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5nbG9iYWxUb2FzdEhvc3RFbGVtZW50KTtcblxuICAgICAgICAgICAgdGhpcy5nbG9iYWxUb2FzdEhvc3RFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImZsZXhcIjtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsVG9hc3RIb3N0RWxlbWVudC5zdHlsZS5mbGV4RGlyZWN0aW9uID0gXCJjb2x1bW5cIjtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsVG9hc3RIb3N0RWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsVG9hc3RIb3N0RWxlbWVudC5zdHlsZS5yaWdodCA9IFwiMjBweFwiO1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxUb2FzdEhvc3RFbGVtZW50LnN0eWxlLnRvcCA9IFwiNDBweFwiO1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxUb2FzdEhvc3RFbGVtZW50LnN0eWxlLnpJbmRleCA9IFwiOTk5OTlcIjtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsVG9hc3RIb3N0RWxlbWVudC5zdHlsZS5nYXAgPSBcIjEwcHhcIjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzaG93KHRvYXN0OiBUb2FzdCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVuc3VyZUdsb2JhbFRvYXN0SG9zdCgpO1xuXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShUb2FzdENvbXBvbmVudCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNvbXBvbmVudEZhY3RvcnkuY3JlYXRlKHRoaXMuaW5qZWN0b3IpO1xuXG4gICAgICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcblxuICAgICAgICBpZiAoIXRvYXN0LnN0aWNreSkge1xuICAgICAgICAgICAgdG9hc3QuZHVyYXRpb24gPSB0b2FzdC5kdXJhdGlvbiA/PyAxMDAwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS50b2FzdCA9IHtcbiAgICAgICAgICAgIGNsb3NhYmxlOiB0cnVlLFxuICAgICAgICAgICAgLi4udG9hc3QsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZG9tRWxlbSA9IChjb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdGhpcy5nbG9iYWxUb2FzdEhvc3RFbGVtZW50IS5hcHBlbmRDaGlsZChkb21FbGVtKTtcbiAgICAgICAgZG9tRWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJmbGV4XCI7XG4gICAgICAgIGRvbUVsZW0uc3R5bGUuanVzdGlmeUNvbnRlbnQgPSBcImNlbnRlclwiO1xuXG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5kaXNtaXNzLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hY3RpdmVUb2FzdHMuaW5kZXhPZihjb21wb25lbnRSZWYpO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVUb2FzdHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlVG9hc3RzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmdsb2JhbFRvYXN0SG9zdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdsb2JhbFRvYXN0SG9zdEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nbG9iYWxUb2FzdEhvc3RFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVUb2FzdHMucHVzaChjb21wb25lbnRSZWYpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -94,6 +94,7 @@ class BignumberInputDirective extends NumericMaskDirective {
|
|
|
94
94
|
pasteRejected = output();
|
|
95
95
|
_decimalSeparatorExplicit = false;
|
|
96
96
|
_thousandSeparatorExplicit = false;
|
|
97
|
+
_lastAutoPlaceholder;
|
|
97
98
|
constructor() {
|
|
98
99
|
super();
|
|
99
100
|
}
|
|
@@ -210,9 +211,11 @@ class BignumberInputDirective extends NumericMaskDirective {
|
|
|
210
211
|
}
|
|
211
212
|
updatePlaceholder() {
|
|
212
213
|
const scale = this.scale();
|
|
213
|
-
|
|
214
|
-
|
|
214
|
+
const autoPlaceholder = scale ? `0${this.decimalSeparator()}${''.padEnd(scale, '0')}` : '0';
|
|
215
|
+
if (this.placeholder() === undefined || this.placeholder() === this._lastAutoPlaceholder) {
|
|
216
|
+
this.placeholder.set(autoPlaceholder);
|
|
215
217
|
}
|
|
218
|
+
this._lastAutoPlaceholder = autoPlaceholder;
|
|
216
219
|
}
|
|
217
220
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BignumberInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
218
221
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: BignumberInputDirective, isStandalone: true, selector: "input[sBignumberInput]", inputs: { precision: { classPropertyName: "precision", publicName: "precision", isSignal: true, isRequired: false, transformFunction: null }, scale: { classPropertyName: "scale", publicName: "scale", isSignal: true, isRequired: false, transformFunction: null }, minDecimalPlaces: { classPropertyName: "minDecimalPlaces", publicName: "minDecimalPlaces", isSignal: true, isRequired: false, transformFunction: null }, maxDecimalPlaces: { classPropertyName: "maxDecimalPlaces", publicName: "maxDecimalPlaces", isSignal: true, isRequired: false, transformFunction: null }, decimalSeparator: { classPropertyName: "decimalSeparator", publicName: "decimalSeparator", isSignal: true, isRequired: false, transformFunction: null }, thousandsSeparator: { classPropertyName: "thousandsSeparator", publicName: "thousandsSeparator", isSignal: true, isRequired: false, transformFunction: null }, thousandSeparator: { classPropertyName: "thousandSeparator", publicName: "thousandSeparator", isSignal: true, isRequired: false, transformFunction: null }, alignTo: { classPropertyName: "alignTo", publicName: "alignTo", isSignal: true, isRequired: false, transformFunction: null }, allowNegative: { classPropertyName: "allowNegative", publicName: "allowNegative", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { minDecimalPlaces: "minDecimalPlacesChange", maxDecimalPlaces: "maxDecimalPlacesChange", decimalSeparator: "decimalSeparatorChange", thousandSeparator: "thousandSeparatorChange", placeholder: "placeholderChange", pasteRejected: "pasteRejected" }, host: { properties: { "attr.placeholder": "placeholder()", "attr.maxLength": "maxLength" } }, providers: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-bignumber-input.mjs","sources":["../../projects/angular-components/bignumber-input/src/lib/bignumber-input/bignumber-input.directive.ts","../../projects/angular-components/bignumber-input/src/lib/bignumber-input/bignumber-input.module.ts","../../projects/angular-components/bignumber-input/src/seniorsistemas-angular-components-bignumber-input.ts"],"sourcesContent":["import { Directive, forwardRef, input, model, OnInit, OnChanges, output, SimpleChanges } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, AbstractControl, ValidationErrors } from '@angular/forms';\r\n\r\nimport { NumericMaskDirective } from '@seniorsistemas/angular-components/numeric-mask';\r\n\r\n/**\r\n * @deprecated Este enum não tem mais efeito. O alinhamento do campo é sempre `'right'`.\r\n */\r\nexport enum BignumberAlignmentOption {\r\n RIGHT = 'right',\r\n LEFT = 'left',\r\n}\r\n\r\n/**\r\n * @deprecated Utilize a diretiva `BigNumberInput` ao invés desta.\r\n * @description Diretiva de máscara para campos de entrada de números de grande precisão,\r\n * adaptada do `CurrencyMaskDirective`. Permite configurar precisão, escala,\r\n * separadores decimais e de milhar de acordo com o locale da aplicação.\r\n *\r\n * @example\r\n * ```html\r\n * <input sBignumberInput [precision]=\"15\" [scale]=\"2\" [allowNegative]=\"false\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Directive({\r\n selector: 'input[sBignumberInput]',\r\n host: {\r\n '[attr.placeholder]': 'placeholder()',\r\n '[attr.maxLength]': 'maxLength',\r\n },\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n // NOSONAR - 'BignumberInputDirective' is deprecated.\r\n useExisting: forwardRef(() => BignumberInputDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class BignumberInputDirective extends NumericMaskDirective implements OnInit, OnChanges {\r\n /**\r\n * @description Número total de dígitos significativos aceitos pelo campo (parte inteira + parte decimal).\r\n *\r\n * Durante a digitação, o campo limita fisicamente o número de caracteres via `maxLength`.\r\n * Ao colar um valor que ultrapasse o limite, o evento `pasteRejected` é emitido e a colagem é cancelada.\r\n * Após sair do campo (blur) ou ao submeter o formulário, se o valor ultrapassar `precision`,\r\n * o campo ficará inválido com o erro `exceedsPrecision: { precision, actual }`.\r\n *\r\n * @default 15\r\n */\r\n public precision = input(15);\r\n\r\n /**\r\n * @deprecated Use `minDecimalPlaces` e `maxDecimalPlaces` ao invés deste.\r\n * @description Número de casas decimais exibidas e aceitas pelo campo.\r\n * Quando informado, repassa o valor para `minDecimalPlaces` e `maxDecimalPlaces`.\r\n *\r\n * @default 0\r\n */\r\n public scale = input(0);\r\n\r\n /**\r\n * @description Número mínimo de casas decimais exibidas.\r\n *\r\n * @default 0\r\n */\r\n public override minDecimalPlaces = model(0);\r\n\r\n /**\r\n * @description Número máximo de casas decimais aceitas.\r\n *\r\n * @default 0\r\n */\r\n public override maxDecimalPlaces = model(0);\r\n\r\n /**\r\n * @description Separador decimal personalizado. Quando não informado,\r\n * utiliza o separador definido pelo locale ativo da aplicação.\r\n */\r\n public override decimalSeparator = model(',');\r\n\r\n /**\r\n * @deprecated Use `thousandSeparator` ao invés deste.\r\n * @description Separador de milhar personalizado. Recomenda-se migrar para `thousandSeparator`.\r\n */\r\n public thousandsSeparator = input<string | undefined>(undefined);\r\n\r\n /**\r\n * @description Separador de milhar personalizado. Quando não informado,\r\n * utiliza o separador definido pelo locale ativo da aplicação.\r\n */\r\n public override thousandSeparator = model('.');\r\n\r\n /**\r\n * @deprecated Este input não tem mais efeito e pode ser removido.\r\n * O alinhamento do campo é sempre `'right'`, conforme o comportamento padrão da máscara numérica.\r\n */\r\n public alignTo = input<'left' | 'right'>('right');\r\n\r\n /**\r\n * @description Permite a entrada de valores negativos.\r\n *\r\n * @default true\r\n */\r\n public override allowNegative = input(true);\r\n\r\n /**\r\n * @description Texto de placeholder exibido quando o campo está vazio.\r\n */\r\n public placeholder = model<string | undefined>(undefined);\r\n\r\n public maxLength?: number;\r\n\r\n /**\r\n * @description Emitido quando uma colagem (paste) é rejeitada pela validação do campo.\r\n * Emite a string colada que foi recusada.\r\n */\r\n public pasteRejected = output<string>();\r\n\r\n private _decimalSeparatorExplicit = false;\r\n private _thousandSeparatorExplicit = false;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.updatePlaceholder();\r\n }\r\n\r\n // ngOnChanges handles all signal writes reactively, avoiding the need for\r\n // effect() with allowSignalWrites. The decimalSeparator/thousandSeparator inputs\r\n // have truthy defaults, so ngOnChanges is necessary to distinguish \"parent bound this\"\r\n // from \"it's just the default value\".\r\n public override ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['decimalSeparator'] && this.decimalSeparator()) {\r\n this._decimalSeparatorExplicit = true;\r\n }\r\n if (changes['thousandSeparator'] && this.thousandSeparator()) {\r\n this._thousandSeparatorExplicit = true;\r\n }\r\n if (changes['thousandsSeparator']) {\r\n const val = this.thousandsSeparator();\r\n if (val !== undefined) {\r\n this._thousandSeparatorExplicit = true;\r\n this.thousandSeparator.set(val);\r\n }\r\n }\r\n if (changes['scale']) {\r\n this.minDecimalPlaces.set(this.scale());\r\n this.maxDecimalPlaces.set(this.scale());\r\n }\r\n if (\r\n changes['scale'] ||\r\n changes['decimalSeparator'] ||\r\n changes['thousandSeparator'] ||\r\n changes['thousandsSeparator'] ||\r\n changes['precision']\r\n ) {\r\n this.calculateMaxLength();\r\n }\r\n if (changes['scale'] || changes['decimalSeparator']) {\r\n this.updatePlaceholder();\r\n }\r\n }\r\n\r\n /**\r\n * Overrides base paste handler to add precision validation.\r\n * If the pasted value exceeds `precision` digits, the paste is rejected.\r\n */\r\n public override onPaste(event: ClipboardEvent): void {\r\n const pastedText = event.clipboardData?.getData('text') ?? '';\r\n const effectiveThousandSep = this.thousandsSeparator() ?? this.thousandSeparator();\r\n const numericText = pastedText\r\n .replace(new RegExp(`\\\\${effectiveThousandSep}`, 'g'), '')\r\n .replace(this.decimalSeparator(), '.');\r\n const [intPart, decimalPart = ''] = numericText.split('.');\r\n const totalDigits = intPart.replace(/\\D/g, '').length + decimalPart.slice(0, this.scale()).length;\r\n\r\n if (totalDigits > this.precision()) {\r\n event.preventDefault();\r\n this.pasteRejected.emit(pastedText);\r\n return;\r\n }\r\n\r\n super.onPaste(event);\r\n }\r\n\r\n /**\r\n * Overrides locale-derived separators with explicitly set inputs, if provided.\r\n * If no explicit separator is set, the locale-derived value is used.\r\n */\r\n protected override updateSeparators(): void {\r\n const explicitDecimal = this._decimalSeparatorExplicit ? this.decimalSeparator() : undefined;\r\n const explicitThousand = this._thousandSeparatorExplicit\r\n ? (this.thousandsSeparator() ?? this.thousandSeparator())\r\n : undefined;\r\n\r\n super.updateSeparators();\r\n\r\n if (explicitDecimal !== undefined) {\r\n this.decimalSeparator.set(explicitDecimal);\r\n }\r\n if (explicitThousand !== undefined) {\r\n this.thousandSeparator.set(explicitThousand);\r\n }\r\n\r\n this.calculateMaxLength();\r\n this.updatePlaceholder();\r\n }\r\n\r\n /**\r\n * Overrides base validator to add precision validation.\r\n * If the total number of significant digits exceeds `precision`, returns an `exceedsPrecision` error.\r\n */\r\n public override validate(control: AbstractControl): ValidationErrors | null {\r\n const baseErrors = super.validate(control);\r\n\r\n if (!control.value || !this.precision()) {\r\n return baseErrors ?? null;\r\n }\r\n\r\n const numericStr = String(control.value).replace('-', '');\r\n const [intPart, decimalPart = ''] = numericStr.split('.');\r\n const totalDigits = intPart.length + decimalPart.length;\r\n\r\n if (totalDigits > this.precision()) {\r\n return {\r\n ...baseErrors,\r\n exceedsPrecision: {\r\n precision: this.precision(),\r\n actual: totalDigits,\r\n },\r\n };\r\n }\r\n\r\n return baseErrors ?? null;\r\n }\r\n\r\n /**\r\n * Responsible to calculate the field maximum length considering the separators.\r\n */\r\n private calculateMaxLength(): void {\r\n const decSepLength = this.decimalSeparator()?.length ?? 0;\r\n const effectiveThousandSep = this.thousandsSeparator() ?? this.thousandSeparator();\r\n const thoSepLength = effectiveThousandSep?.length ?? 0;\r\n\r\n const DIGITS_GROUP_SIZE = 3;\r\n\r\n let maxLength = this.precision() + (this.scale() ? decSepLength : 0);\r\n maxLength +=\r\n Math.ceil((this.precision() - (this.scale() ? this.scale() : 0)) / DIGITS_GROUP_SIZE - 1) * thoSepLength;\r\n\r\n this.maxLength = maxLength;\r\n }\r\n\r\n private updatePlaceholder(): void {\r\n const scale = this.scale();\r\n if (!this.placeholder() && scale) {\r\n this.placeholder.set(`0${this.decimalSeparator()}${''.padEnd(scale, '0')}`);\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\n// NOSONAR - 'BignumberInputDirective' is deprecated.\r\nimport { BignumberInputDirective } from './bignumber-input.directive';\r\n\r\n@NgModule({\r\n imports: [BignumberInputDirective],\r\n // NOSONAR - 'BignumberInputDirective' is deprecated.\r\n exports: [BignumberInputDirective],\r\n})\r\nexport class BignumberInputModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-bignumber-input.mjs","sources":["../../projects/angular-components/bignumber-input/src/lib/bignumber-input/bignumber-input.directive.ts","../../projects/angular-components/bignumber-input/src/lib/bignumber-input/bignumber-input.module.ts","../../projects/angular-components/bignumber-input/src/seniorsistemas-angular-components-bignumber-input.ts"],"sourcesContent":["import { Directive, forwardRef, input, model, OnChanges, OnInit, output, SimpleChanges } from '@angular/core';\r\nimport { AbstractControl, NG_VALUE_ACCESSOR, ValidationErrors } from '@angular/forms';\r\n\r\nimport { NumericMaskDirective } from '@seniorsistemas/angular-components/numeric-mask';\r\n\r\n/**\r\n * @deprecated Este enum não tem mais efeito. O alinhamento do campo é sempre `'right'`.\r\n */\r\nexport enum BignumberAlignmentOption {\r\n RIGHT = 'right',\r\n LEFT = 'left',\r\n}\r\n\r\n/**\r\n * @deprecated Utilize a diretiva `BigNumberInput` ao invés desta.\r\n * @description Diretiva de máscara para campos de entrada de números de grande precisão,\r\n * adaptada do `CurrencyMaskDirective`. Permite configurar precisão, escala,\r\n * separadores decimais e de milhar de acordo com o locale da aplicação.\r\n *\r\n * @example\r\n * ```html\r\n * <input sBignumberInput [precision]=\"15\" [scale]=\"2\" [allowNegative]=\"false\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Directive({\r\n selector: 'input[sBignumberInput]',\r\n host: {\r\n '[attr.placeholder]': 'placeholder()',\r\n '[attr.maxLength]': 'maxLength',\r\n },\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n // NOSONAR - 'BignumberInputDirective' is deprecated.\r\n useExisting: forwardRef(() => BignumberInputDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class BignumberInputDirective extends NumericMaskDirective implements OnInit, OnChanges {\r\n /**\r\n * @description Número total de dígitos significativos aceitos pelo campo (parte inteira + parte decimal).\r\n *\r\n * Durante a digitação, o campo limita fisicamente o número de caracteres via `maxLength`.\r\n * Ao colar um valor que ultrapasse o limite, o evento `pasteRejected` é emitido e a colagem é cancelada.\r\n * Após sair do campo (blur) ou ao submeter o formulário, se o valor ultrapassar `precision`,\r\n * o campo ficará inválido com o erro `exceedsPrecision: { precision, actual }`.\r\n *\r\n * @default 15\r\n */\r\n public precision = input(15);\r\n\r\n /**\r\n * @deprecated Use `minDecimalPlaces` e `maxDecimalPlaces` ao invés deste.\r\n * @description Número de casas decimais exibidas e aceitas pelo campo.\r\n * Quando informado, repassa o valor para `minDecimalPlaces` e `maxDecimalPlaces`.\r\n *\r\n * @default 0\r\n */\r\n public scale = input(0);\r\n\r\n /**\r\n * @description Número mínimo de casas decimais exibidas.\r\n *\r\n * @default 0\r\n */\r\n public override minDecimalPlaces = model(0);\r\n\r\n /**\r\n * @description Número máximo de casas decimais aceitas.\r\n *\r\n * @default 0\r\n */\r\n public override maxDecimalPlaces = model(0);\r\n\r\n /**\r\n * @description Separador decimal personalizado. Quando não informado,\r\n * utiliza o separador definido pelo locale ativo da aplicação.\r\n */\r\n public override decimalSeparator = model(',');\r\n\r\n /**\r\n * @deprecated Use `thousandSeparator` ao invés deste.\r\n * @description Separador de milhar personalizado. Recomenda-se migrar para `thousandSeparator`.\r\n */\r\n public thousandsSeparator = input<string | undefined>(undefined);\r\n\r\n /**\r\n * @description Separador de milhar personalizado. Quando não informado,\r\n * utiliza o separador definido pelo locale ativo da aplicação.\r\n */\r\n public override thousandSeparator = model('.');\r\n\r\n /**\r\n * @deprecated Este input não tem mais efeito e pode ser removido.\r\n * O alinhamento do campo é sempre `'right'`, conforme o comportamento padrão da máscara numérica.\r\n */\r\n public alignTo = input<'left' | 'right'>('right');\r\n\r\n /**\r\n * @description Permite a entrada de valores negativos.\r\n *\r\n * @default true\r\n */\r\n public override allowNegative = input(true);\r\n\r\n /**\r\n * @description Texto de placeholder exibido quando o campo está vazio.\r\n */\r\n public placeholder = model<string | undefined>(undefined);\r\n\r\n public maxLength?: number;\r\n\r\n /**\r\n * @description Emitido quando uma colagem (paste) é rejeitada pela validação do campo.\r\n * Emite a string colada que foi recusada.\r\n */\r\n public pasteRejected = output<string>();\r\n\r\n private _decimalSeparatorExplicit = false;\r\n private _thousandSeparatorExplicit = false;\r\n private _lastAutoPlaceholder: string | undefined;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.updatePlaceholder();\r\n }\r\n\r\n // ngOnChanges handles all signal writes reactively, avoiding the need for\r\n // effect() with allowSignalWrites. The decimalSeparator/thousandSeparator inputs\r\n // have truthy defaults, so ngOnChanges is necessary to distinguish \"parent bound this\"\r\n // from \"it's just the default value\".\r\n public override ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['decimalSeparator'] && this.decimalSeparator()) {\r\n this._decimalSeparatorExplicit = true;\r\n }\r\n if (changes['thousandSeparator'] && this.thousandSeparator()) {\r\n this._thousandSeparatorExplicit = true;\r\n }\r\n if (changes['thousandsSeparator']) {\r\n const val = this.thousandsSeparator();\r\n if (val !== undefined) {\r\n this._thousandSeparatorExplicit = true;\r\n this.thousandSeparator.set(val);\r\n }\r\n }\r\n if (changes['scale']) {\r\n this.minDecimalPlaces.set(this.scale());\r\n this.maxDecimalPlaces.set(this.scale());\r\n }\r\n if (\r\n changes['scale'] ||\r\n changes['decimalSeparator'] ||\r\n changes['thousandSeparator'] ||\r\n changes['thousandsSeparator'] ||\r\n changes['precision']\r\n ) {\r\n this.calculateMaxLength();\r\n }\r\n if (changes['scale'] || changes['decimalSeparator']) {\r\n this.updatePlaceholder();\r\n }\r\n }\r\n\r\n /**\r\n * Overrides base paste handler to add precision validation.\r\n * If the pasted value exceeds `precision` digits, the paste is rejected.\r\n */\r\n public override onPaste(event: ClipboardEvent): void {\r\n const pastedText = event.clipboardData?.getData('text') ?? '';\r\n const effectiveThousandSep = this.thousandsSeparator() ?? this.thousandSeparator();\r\n const numericText = pastedText\r\n .replace(new RegExp(`\\\\${effectiveThousandSep}`, 'g'), '')\r\n .replace(this.decimalSeparator(), '.');\r\n const [intPart, decimalPart = ''] = numericText.split('.');\r\n const totalDigits = intPart.replace(/\\D/g, '').length + decimalPart.slice(0, this.scale()).length;\r\n\r\n if (totalDigits > this.precision()) {\r\n event.preventDefault();\r\n this.pasteRejected.emit(pastedText);\r\n return;\r\n }\r\n\r\n super.onPaste(event);\r\n }\r\n\r\n /**\r\n * Overrides locale-derived separators with explicitly set inputs, if provided.\r\n * If no explicit separator is set, the locale-derived value is used.\r\n */\r\n protected override updateSeparators(): void {\r\n const explicitDecimal = this._decimalSeparatorExplicit ? this.decimalSeparator() : undefined;\r\n const explicitThousand = this._thousandSeparatorExplicit\r\n ? (this.thousandsSeparator() ?? this.thousandSeparator())\r\n : undefined;\r\n\r\n super.updateSeparators();\r\n\r\n if (explicitDecimal !== undefined) {\r\n this.decimalSeparator.set(explicitDecimal);\r\n }\r\n if (explicitThousand !== undefined) {\r\n this.thousandSeparator.set(explicitThousand);\r\n }\r\n\r\n this.calculateMaxLength();\r\n this.updatePlaceholder();\r\n }\r\n\r\n /**\r\n * Overrides base validator to add precision validation.\r\n * If the total number of significant digits exceeds `precision`, returns an `exceedsPrecision` error.\r\n */\r\n public override validate(control: AbstractControl): ValidationErrors | null {\r\n const baseErrors = super.validate(control);\r\n\r\n if (!control.value || !this.precision()) {\r\n return baseErrors ?? null;\r\n }\r\n\r\n const numericStr = String(control.value).replace('-', '');\r\n const [intPart, decimalPart = ''] = numericStr.split('.');\r\n const totalDigits = intPart.length + decimalPart.length;\r\n\r\n if (totalDigits > this.precision()) {\r\n return {\r\n ...baseErrors,\r\n exceedsPrecision: {\r\n precision: this.precision(),\r\n actual: totalDigits,\r\n },\r\n };\r\n }\r\n\r\n return baseErrors ?? null;\r\n }\r\n\r\n /**\r\n * Responsible to calculate the field maximum length considering the separators.\r\n */\r\n private calculateMaxLength(): void {\r\n const decSepLength = this.decimalSeparator()?.length ?? 0;\r\n const effectiveThousandSep = this.thousandsSeparator() ?? this.thousandSeparator();\r\n const thoSepLength = effectiveThousandSep?.length ?? 0;\r\n\r\n const DIGITS_GROUP_SIZE = 3;\r\n\r\n let maxLength = this.precision() + (this.scale() ? decSepLength : 0);\r\n maxLength +=\r\n Math.ceil((this.precision() - (this.scale() ? this.scale() : 0)) / DIGITS_GROUP_SIZE - 1) * thoSepLength;\r\n\r\n this.maxLength = maxLength;\r\n }\r\n\r\n private updatePlaceholder(): void {\r\n const scale = this.scale();\r\n const autoPlaceholder = scale ? `0${this.decimalSeparator()}${''.padEnd(scale, '0')}` : '0';\r\n\r\n if (this.placeholder() === undefined || this.placeholder() === this._lastAutoPlaceholder) {\r\n this.placeholder.set(autoPlaceholder);\r\n }\r\n\r\n this._lastAutoPlaceholder = autoPlaceholder;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\n// NOSONAR - 'BignumberInputDirective' is deprecated.\r\nimport { BignumberInputDirective } from './bignumber-input.directive';\r\n\r\n@NgModule({\r\n imports: [BignumberInputDirective],\r\n // NOSONAR - 'BignumberInputDirective' is deprecated.\r\n exports: [BignumberInputDirective],\r\n})\r\nexport class BignumberInputModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|