cps-ui-kit 18.11.0 → 19.2.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/fesm2022/cps-ui-kit.mjs +347 -307
- package/fesm2022/cps-ui-kit.mjs.map +1 -1
- package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +2 -2
- package/lib/components/cps-menu/cps-menu.component.d.ts +4 -3
- package/lib/components/cps-select/cps-select.component.d.ts +2 -2
- package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +25 -1
- package/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.d.ts +3 -3
- package/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.d.ts +3 -3
- package/package.json +6 -8
- package/styles/styles.scss +9 -0
- package/esm2022/cps-ui-kit.mjs +0 -5
- package/esm2022/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +0 -948
- package/esm2022/lib/components/cps-button/cps-button.component.mjs +0 -205
- package/esm2022/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +0 -239
- package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +0 -154
- package/esm2022/lib/components/cps-chip/cps-chip.component.mjs +0 -94
- package/esm2022/lib/components/cps-datepicker/cps-datepicker.component.mjs +0 -382
- package/esm2022/lib/components/cps-divider/cps-divider.component.mjs +0 -60
- package/esm2022/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +0 -213
- package/esm2022/lib/components/cps-file-upload/cps-file-upload.component.mjs +0 -182
- package/esm2022/lib/components/cps-icon/cps-icon.component.mjs +0 -203
- package/esm2022/lib/components/cps-info-circle/cps-info-circle.component.mjs +0 -61
- package/esm2022/lib/components/cps-input/cps-input.component.mjs +0 -385
- package/esm2022/lib/components/cps-loader/cps-loader.component.mjs +0 -58
- package/esm2022/lib/components/cps-menu/cps-menu.component.mjs +0 -572
- package/esm2022/lib/components/cps-paginator/cps-paginator.component.mjs +0 -118
- package/esm2022/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +0 -30
- package/esm2022/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +0 -51
- package/esm2022/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +0 -75
- package/esm2022/lib/components/cps-radio-group/cps-radio/cps-radio.component.mjs +0 -42
- package/esm2022/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +0 -77
- package/esm2022/lib/components/cps-radio-group/cps-radio-group.component.mjs +0 -225
- package/esm2022/lib/components/cps-scheduler/cps-scheduler.component.mjs +0 -682
- package/esm2022/lib/components/cps-scheduler/cps-scheduler.utils.mjs +0 -604
- package/esm2022/lib/components/cps-select/cps-select.component.mjs +0 -654
- package/esm2022/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +0 -110
- package/esm2022/lib/components/cps-switch/cps-switch.component.mjs +0 -131
- package/esm2022/lib/components/cps-tab-group/cps-tab/cps-tab.component.mjs +0 -86
- package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +0 -308
- package/esm2022/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +0 -79
- package/esm2022/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +0 -407
- package/esm2022/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +0 -147
- package/esm2022/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +0 -105
- package/esm2022/lib/components/cps-table/cps-column-filter-types.mjs +0 -29
- package/esm2022/lib/components/cps-table/cps-table.component.mjs +0 -1022
- package/esm2022/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +0 -181
- package/esm2022/lib/components/cps-table/directives/cps-table-column-resizable.directive.mjs +0 -22
- package/esm2022/lib/components/cps-table/directives/cps-table-column-sortable.directive.mjs +0 -47
- package/esm2022/lib/components/cps-table/directives/cps-table-header-selectable.directive.mjs +0 -32
- package/esm2022/lib/components/cps-table/directives/cps-table-row-selectable.directive.mjs +0 -35
- package/esm2022/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +0 -212
- package/esm2022/lib/components/cps-table/pipes/cps-table-detect-filter-type.pipe.mjs +0 -29
- package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +0 -121
- package/esm2022/lib/components/cps-textarea/cps-textarea.component.mjs +0 -290
- package/esm2022/lib/components/cps-timepicker/cps-timepicker.component.mjs +0 -370
- package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +0 -273
- package/esm2022/lib/components/cps-tree-select/cps-tree-select.component.mjs +0 -87
- package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +0 -1279
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.mjs +0 -174
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-column-resizable.directive.mjs +0 -22
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.mjs +0 -47
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-header-selectable.directive.mjs +0 -33
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.mjs +0 -36
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +0 -48
- package/esm2022/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +0 -352
- package/esm2022/lib/components/cps-tree-table/pipes/cps-tree-table-detect-filter-type.pipe.mjs +0 -30
- package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +0 -656
- package/esm2022/lib/directives/cps-tooltip/cps-tooltip.directive.mjs +0 -275
- package/esm2022/lib/pipes/internal/check-option-selected.pipe.mjs +0 -24
- package/esm2022/lib/pipes/internal/combine-labels.pipe.mjs +0 -25
- package/esm2022/lib/pipes/internal/label-by-value.pipe.mjs +0 -16
- package/esm2022/lib/services/cps-dialog/cps-dialog.service.mjs +0 -146
- package/esm2022/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.mjs +0 -25
- package/esm2022/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +0 -470
- package/esm2022/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.mjs +0 -18
- package/esm2022/lib/services/cps-dialog/utils/cps-dialog-config.mjs +0 -3
- package/esm2022/lib/services/cps-dialog/utils/cps-dialog-ref.mjs +0 -128
- package/esm2022/lib/services/cps-notification/cps-notification.service.mjs +0 -122
- package/esm2022/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +0 -95
- package/esm2022/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.mjs +0 -106
- package/esm2022/lib/services/cps-notification/utils/cps-notification-config.mjs +0 -27
- package/esm2022/lib/services/cps-notification/utils/internal/cps-notification-data.mjs +0 -12
- package/esm2022/lib/utils/colors-utils.mjs +0 -59
- package/esm2022/lib/utils/internal/size-utils.mjs +0 -24
- package/esm2022/public-api.mjs +0 -58
|
@@ -1,572 +0,0 @@
|
|
|
1
|
-
import { animate, state, style, transition, trigger } from '@angular/animations';
|
|
2
|
-
import { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';
|
|
3
|
-
import { RouterModule } from '@angular/router';
|
|
4
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, PLATFORM_ID, ViewEncapsulation } from '@angular/core';
|
|
5
|
-
import { SharedModule } from 'primeng/api';
|
|
6
|
-
import { ConnectedOverlayScrollHandler, DomHandler } from 'primeng/dom';
|
|
7
|
-
import { ZIndexUtils } from 'primeng/utils';
|
|
8
|
-
import { CpsIconComponent } from '../cps-icon/cps-icon.component';
|
|
9
|
-
import { CpsProgressCircularComponent } from '../cps-progress-circular/cps-progress-circular.component';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "primeng/api";
|
|
12
|
-
import * as i2 from "@angular/common";
|
|
13
|
-
import * as i3 from "@angular/router";
|
|
14
|
-
/**
|
|
15
|
-
* An enumeration of the different reasons for hiding the menu.
|
|
16
|
-
* @group Enums
|
|
17
|
-
*/
|
|
18
|
-
export var CpsMenuHideReason;
|
|
19
|
-
(function (CpsMenuHideReason) {
|
|
20
|
-
CpsMenuHideReason["FORCED"] = "forced";
|
|
21
|
-
CpsMenuHideReason["TOGGLE"] = "toggle";
|
|
22
|
-
CpsMenuHideReason["CLICK_ITEM"] = "click-item";
|
|
23
|
-
CpsMenuHideReason["CLICK_OUTSIDE"] = "click-outside";
|
|
24
|
-
CpsMenuHideReason["KEYDOWN_ESCAPE"] = "keydown-escape";
|
|
25
|
-
CpsMenuHideReason["SCROLL"] = "scroll";
|
|
26
|
-
CpsMenuHideReason["RESIZE"] = "resize";
|
|
27
|
-
CpsMenuHideReason["TARGET_NOT_CONNECTED"] = "target-not-connected";
|
|
28
|
-
})(CpsMenuHideReason || (CpsMenuHideReason = {}));
|
|
29
|
-
/**
|
|
30
|
-
* CpsMenuComponent is a popup element, that contains menu items or arbitrary content.
|
|
31
|
-
* @group Components
|
|
32
|
-
*/
|
|
33
|
-
export class CpsMenuComponent {
|
|
34
|
-
// eslint-disable-next-line no-useless-constructor
|
|
35
|
-
constructor(document, platformId, el, renderer, cd, zone, config, overlayService) {
|
|
36
|
-
this.document = document;
|
|
37
|
-
this.platformId = platformId;
|
|
38
|
-
this.el = el;
|
|
39
|
-
this.renderer = renderer;
|
|
40
|
-
this.cd = cd;
|
|
41
|
-
this.zone = zone;
|
|
42
|
-
this.config = config;
|
|
43
|
-
this.overlayService = overlayService;
|
|
44
|
-
/**
|
|
45
|
-
* Header title of the menu.
|
|
46
|
-
* @group Props
|
|
47
|
-
*/
|
|
48
|
-
this.header = '';
|
|
49
|
-
/**
|
|
50
|
-
* An array of menu items.
|
|
51
|
-
* @group Props
|
|
52
|
-
*/
|
|
53
|
-
this.items = [];
|
|
54
|
-
/**
|
|
55
|
-
* Determines whether to include top pointing arrow on the menu.
|
|
56
|
-
* @group Props
|
|
57
|
-
*/
|
|
58
|
-
this.withArrow = true;
|
|
59
|
-
/**
|
|
60
|
-
* Menu with prepared-colored items, without header and items description.
|
|
61
|
-
* @group Props
|
|
62
|
-
*/
|
|
63
|
-
this.compressed = false;
|
|
64
|
-
/**
|
|
65
|
-
* Determines whether the menu should show on target element focus.
|
|
66
|
-
* @group Props
|
|
67
|
-
*/
|
|
68
|
-
this.focusOnShow = true;
|
|
69
|
-
/**
|
|
70
|
-
* Determines whether the menu should be persistent.
|
|
71
|
-
* @group Props
|
|
72
|
-
*/
|
|
73
|
-
this.persistent = false;
|
|
74
|
-
/**
|
|
75
|
-
* Styling class of the menu container.
|
|
76
|
-
* @group Props
|
|
77
|
-
*/
|
|
78
|
-
this.containerClass = '';
|
|
79
|
-
/**
|
|
80
|
-
* Transition options of the show animation.
|
|
81
|
-
* @group Props
|
|
82
|
-
*/
|
|
83
|
-
this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
|
|
84
|
-
/**
|
|
85
|
-
* Transition options of the hide animation.
|
|
86
|
-
* @group Props
|
|
87
|
-
*/
|
|
88
|
-
this.hideTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
|
|
89
|
-
/**
|
|
90
|
-
* Callback to invoke when menu is shown.
|
|
91
|
-
* @group Emits
|
|
92
|
-
*/
|
|
93
|
-
this.menuShown = new EventEmitter();
|
|
94
|
-
/**
|
|
95
|
-
* Callback to invoke when menu is hidden.
|
|
96
|
-
* @param {CpsMenuHideReason} CpsMenuHideReason - reason for hiding the menu.
|
|
97
|
-
* @group Emits
|
|
98
|
-
*/
|
|
99
|
-
this.menuHidden = new EventEmitter();
|
|
100
|
-
/**
|
|
101
|
-
* Callback to invoke before menu is hidden.
|
|
102
|
-
* @param {CpsMenuHideReason} CpsMenuHideReason - reason for hiding the menu.
|
|
103
|
-
* @group Emits
|
|
104
|
-
*/
|
|
105
|
-
this.beforeMenuHidden = new EventEmitter();
|
|
106
|
-
/**
|
|
107
|
-
* Callback to invoke when content is clicked.
|
|
108
|
-
* @group Emits
|
|
109
|
-
*/
|
|
110
|
-
this.contentClicked = new EventEmitter();
|
|
111
|
-
this.withIcons = true;
|
|
112
|
-
this.autoZIndex = true;
|
|
113
|
-
this.baseZIndex = 0;
|
|
114
|
-
this.dismissable = true;
|
|
115
|
-
this.overlayVisible = false;
|
|
116
|
-
this.render = false;
|
|
117
|
-
this.isOverlayAnimationInProgress = false;
|
|
118
|
-
this.selfClick = false;
|
|
119
|
-
this.position = 'default';
|
|
120
|
-
this.itemsClasses = [];
|
|
121
|
-
this.window = this.document.defaultView;
|
|
122
|
-
this.resizeObserver = new ResizeObserver((entries) => {
|
|
123
|
-
if (this.target) {
|
|
124
|
-
entries.forEach((entry) => {
|
|
125
|
-
if (entry)
|
|
126
|
-
this.align();
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
ngOnChanges(changes) {
|
|
132
|
-
if (changes.items || changes.compressed) {
|
|
133
|
-
if (this.compressed)
|
|
134
|
-
this.withIcons = this.items.some((itm) => itm.icon);
|
|
135
|
-
this._setItemsClasses();
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
ngAfterViewInit() {
|
|
139
|
-
this.renderer.setStyle(this.el.nativeElement, 'display', 'none');
|
|
140
|
-
}
|
|
141
|
-
_setItemsClasses() {
|
|
142
|
-
if (this.items.length < 1)
|
|
143
|
-
return;
|
|
144
|
-
this.itemsClasses = this.items.map((item, index) => {
|
|
145
|
-
const res = ['cps-menu-item'];
|
|
146
|
-
if (item.disabled || item.loading)
|
|
147
|
-
res.push('cps-menu-item-disabled');
|
|
148
|
-
if (index === 0)
|
|
149
|
-
res.push('cps-menu-item-first');
|
|
150
|
-
if (this.compressed)
|
|
151
|
-
res.push('cps-menu-item-compressed');
|
|
152
|
-
if (this.compressed && this.withIcons)
|
|
153
|
-
res.push('cps-menu-item-compressed-with-icons');
|
|
154
|
-
return res.join(' ');
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
toggle(event, target, pos) {
|
|
158
|
-
if (this.isOverlayAnimationInProgress) {
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
if (this.overlayVisible) {
|
|
162
|
-
if (this.hasTargetChanged(event, target)) {
|
|
163
|
-
this.destroyCallback = () => {
|
|
164
|
-
this.show(null, target || event?.currentTarget || event?.target, pos);
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
this.hide(CpsMenuHideReason.TOGGLE);
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
this.show(event, target, pos);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
show(event, target, pos) {
|
|
174
|
-
target && event && event.stopPropagation();
|
|
175
|
-
if (this.isOverlayAnimationInProgress) {
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
this.target = target || event?.currentTarget || event?.target;
|
|
179
|
-
if (this.target)
|
|
180
|
-
this.resizeObserver.observe(this.target);
|
|
181
|
-
this.overlayVisible = true;
|
|
182
|
-
this.render = true;
|
|
183
|
-
this.position = pos || 'default';
|
|
184
|
-
this.cd.markForCheck();
|
|
185
|
-
}
|
|
186
|
-
hide(reason) {
|
|
187
|
-
if (!this.overlayVisible)
|
|
188
|
-
return;
|
|
189
|
-
this.hideReason = reason ?? CpsMenuHideReason.FORCED;
|
|
190
|
-
this.overlayVisible = false;
|
|
191
|
-
this.cd.markForCheck();
|
|
192
|
-
}
|
|
193
|
-
isVisible() {
|
|
194
|
-
return this.overlayVisible;
|
|
195
|
-
}
|
|
196
|
-
onItemClick(event, item) {
|
|
197
|
-
if (item.disabled)
|
|
198
|
-
return;
|
|
199
|
-
if (item.action) {
|
|
200
|
-
item.action({
|
|
201
|
-
originalEvent: event,
|
|
202
|
-
item
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
this.hide(CpsMenuHideReason.CLICK_ITEM);
|
|
206
|
-
}
|
|
207
|
-
bindDocumentKeydownListener() {
|
|
208
|
-
if (DomHandler.isTouchDevice())
|
|
209
|
-
return;
|
|
210
|
-
if (isPlatformBrowser(this.platformId)) {
|
|
211
|
-
if (!this.documentKeydownListener && this.dismissable) {
|
|
212
|
-
this.zone.runOutsideAngular(() => {
|
|
213
|
-
const documentTarget = this.el
|
|
214
|
-
? this.el.nativeElement.ownerDocument
|
|
215
|
-
: this.document;
|
|
216
|
-
this.documentKeydownListener = this.renderer.listen(documentTarget, 'keydown', (event) => {
|
|
217
|
-
// escape
|
|
218
|
-
if (event.keyCode === 27) {
|
|
219
|
-
this.zone.run(() => {
|
|
220
|
-
if (this.overlayVisible)
|
|
221
|
-
this.hide(CpsMenuHideReason.KEYDOWN_ESCAPE);
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
});
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
unbindDocumentKeydownListener() {
|
|
230
|
-
if (this.documentKeydownListener) {
|
|
231
|
-
this.documentKeydownListener();
|
|
232
|
-
this.documentKeydownListener = null;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
bindDocumentClickListener() {
|
|
236
|
-
if (isPlatformBrowser(this.platformId)) {
|
|
237
|
-
if (!this.documentClickListener && this.dismissable) {
|
|
238
|
-
this.zone.runOutsideAngular(() => {
|
|
239
|
-
const documentTarget = this.el
|
|
240
|
-
? this.el.nativeElement.ownerDocument
|
|
241
|
-
: this.document;
|
|
242
|
-
this.documentClickListener = this.renderer.listen(documentTarget, 'mousedown', (event) => {
|
|
243
|
-
if (!this.persistent &&
|
|
244
|
-
!this.container?.contains(event.target) &&
|
|
245
|
-
this.target !== event.target &&
|
|
246
|
-
!this.target.contains(event.target) &&
|
|
247
|
-
!this.selfClick) {
|
|
248
|
-
this.zone.run(() => {
|
|
249
|
-
this.hide(CpsMenuHideReason.CLICK_OUTSIDE);
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
this.selfClick = false;
|
|
253
|
-
this.cd.markForCheck();
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
unbindDocumentClickListener() {
|
|
260
|
-
if (this.documentClickListener) {
|
|
261
|
-
this.documentClickListener();
|
|
262
|
-
this.documentClickListener = null;
|
|
263
|
-
this.selfClick = false;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
onOverlayClick(event) {
|
|
267
|
-
this.overlayService.add({
|
|
268
|
-
originalEvent: event,
|
|
269
|
-
target: this.el.nativeElement
|
|
270
|
-
});
|
|
271
|
-
this.selfClick = true;
|
|
272
|
-
}
|
|
273
|
-
onContentClick() {
|
|
274
|
-
this.selfClick = true;
|
|
275
|
-
setTimeout(() => {
|
|
276
|
-
this.contentClicked.emit();
|
|
277
|
-
}, 100);
|
|
278
|
-
}
|
|
279
|
-
hasTargetChanged(event, target) {
|
|
280
|
-
return (this.target &&
|
|
281
|
-
this.target !== (target || event?.currentTarget || event?.target));
|
|
282
|
-
}
|
|
283
|
-
appendContainer() {
|
|
284
|
-
this.renderer.appendChild(this.document.body, this.container);
|
|
285
|
-
}
|
|
286
|
-
restoreAppend() {
|
|
287
|
-
if (this.container) {
|
|
288
|
-
this.renderer.appendChild(this.el.nativeElement, this.container);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
_setPosition(element, target) {
|
|
292
|
-
const getPos = () => {
|
|
293
|
-
const targetOffset = DomHandler.getOffset(target);
|
|
294
|
-
switch (this.position) {
|
|
295
|
-
case 'bl':
|
|
296
|
-
return {
|
|
297
|
-
top: Math.max(targetOffset.top + target.offsetHeight - element.offsetHeight, 0),
|
|
298
|
-
left: Math.max(0, targetOffset.left - element.offsetWidth)
|
|
299
|
-
};
|
|
300
|
-
case 'br':
|
|
301
|
-
return {
|
|
302
|
-
top: Math.max(targetOffset.top + target.offsetHeight - element.offsetHeight, 0),
|
|
303
|
-
left: Math.min(targetOffset.left + target.offsetWidth, this.window.innerWidth - element.offsetWidth)
|
|
304
|
-
};
|
|
305
|
-
case 'tl':
|
|
306
|
-
return {
|
|
307
|
-
top: Math.min(targetOffset.top, this.window.innerHeight - element.offsetHeight),
|
|
308
|
-
left: Math.max(0, targetOffset.left - element.offsetWidth)
|
|
309
|
-
};
|
|
310
|
-
case 'tr':
|
|
311
|
-
return {
|
|
312
|
-
top: Math.min(targetOffset.top, this.window.innerHeight - element.offsetHeight),
|
|
313
|
-
left: Math.min(targetOffset.left + target.offsetWidth, this.window.innerWidth - element.offsetWidth)
|
|
314
|
-
};
|
|
315
|
-
case 'default':
|
|
316
|
-
default:
|
|
317
|
-
DomHandler.absolutePosition(element, target);
|
|
318
|
-
return undefined;
|
|
319
|
-
}
|
|
320
|
-
};
|
|
321
|
-
if (!element || !target)
|
|
322
|
-
return;
|
|
323
|
-
const pos = getPos();
|
|
324
|
-
if (pos) {
|
|
325
|
-
element.style.top = (pos.top || 0) + 'px';
|
|
326
|
-
element.style.left = (pos.left || 0) + 'px';
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
align() {
|
|
330
|
-
if (!this.target.isConnected) {
|
|
331
|
-
this.hide(CpsMenuHideReason.TARGET_NOT_CONNECTED);
|
|
332
|
-
this._destroy();
|
|
333
|
-
return;
|
|
334
|
-
}
|
|
335
|
-
if (this.autoZIndex) {
|
|
336
|
-
ZIndexUtils.set('overlay', this.container, this.baseZIndex + this.config.zIndex.overlay);
|
|
337
|
-
}
|
|
338
|
-
this._setPosition(this.container, this.target);
|
|
339
|
-
const containerOffset = DomHandler.getOffset(this.container);
|
|
340
|
-
const targetOffset = DomHandler.getOffset(this.target);
|
|
341
|
-
if (this.withArrow) {
|
|
342
|
-
const borderRadius = this.document.defaultView
|
|
343
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
344
|
-
?.getComputedStyle(this.container)
|
|
345
|
-
?.getPropertyValue('border-radius') || '0';
|
|
346
|
-
let arrowLeft = 0;
|
|
347
|
-
const containerWidth = this.container?.offsetWidth || 0;
|
|
348
|
-
if (containerOffset.left < targetOffset.left) {
|
|
349
|
-
arrowLeft =
|
|
350
|
-
20 +
|
|
351
|
-
targetOffset.left -
|
|
352
|
-
containerOffset.left -
|
|
353
|
-
parseFloat(borderRadius) * 2;
|
|
354
|
-
}
|
|
355
|
-
else {
|
|
356
|
-
const targetWidth = this.target?.offsetWidth || 0;
|
|
357
|
-
arrowLeft = Math.min(targetWidth / 2, containerWidth / 2);
|
|
358
|
-
}
|
|
359
|
-
arrowLeft = Math.min(Math.max(arrowLeft, 12), containerWidth - 12);
|
|
360
|
-
this.container?.style.setProperty('--overlayArrowLeft', `${arrowLeft}px`);
|
|
361
|
-
}
|
|
362
|
-
if (containerOffset.top < targetOffset.top) {
|
|
363
|
-
DomHandler.addClass(this.container, 'cps-menu-container-flipped');
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
onAnimationStart(event) {
|
|
367
|
-
if (event.toState === 'close') {
|
|
368
|
-
this.beforeMenuHidden.emit(this.hideReason);
|
|
369
|
-
}
|
|
370
|
-
else if (event.toState === 'open') {
|
|
371
|
-
this.container = event.element;
|
|
372
|
-
if (this.container)
|
|
373
|
-
this.resizeObserver.observe(this.container);
|
|
374
|
-
this.appendContainer();
|
|
375
|
-
this.align();
|
|
376
|
-
this.bindDocumentClickListener();
|
|
377
|
-
this.bindDocumentKeydownListener();
|
|
378
|
-
this.bindDocumentResizeListener();
|
|
379
|
-
this.bindScrollListener();
|
|
380
|
-
if (this.focusOnShow) {
|
|
381
|
-
this.focus();
|
|
382
|
-
}
|
|
383
|
-
this.overlayEventListener = (e) => {
|
|
384
|
-
if (this.container && this.container.contains(e.target)) {
|
|
385
|
-
this.selfClick = true;
|
|
386
|
-
}
|
|
387
|
-
};
|
|
388
|
-
this.overlaySubscription = this.overlayService.clickObservable.subscribe(this.overlayEventListener);
|
|
389
|
-
this.menuShown.emit(null);
|
|
390
|
-
}
|
|
391
|
-
this.isOverlayAnimationInProgress = true;
|
|
392
|
-
}
|
|
393
|
-
onAnimationEnd(event) {
|
|
394
|
-
switch (event.toState) {
|
|
395
|
-
case 'void':
|
|
396
|
-
if (this.destroyCallback) {
|
|
397
|
-
this.destroyCallback();
|
|
398
|
-
this.destroyCallback = null;
|
|
399
|
-
}
|
|
400
|
-
if (this.overlaySubscription) {
|
|
401
|
-
this.overlaySubscription.unsubscribe();
|
|
402
|
-
}
|
|
403
|
-
break;
|
|
404
|
-
case 'close':
|
|
405
|
-
if (this.autoZIndex) {
|
|
406
|
-
ZIndexUtils.clear(this.container);
|
|
407
|
-
}
|
|
408
|
-
if (this.overlaySubscription) {
|
|
409
|
-
this.overlaySubscription.unsubscribe();
|
|
410
|
-
}
|
|
411
|
-
this.onContainerDestroy();
|
|
412
|
-
this.menuHidden.emit(this.hideReason);
|
|
413
|
-
this.render = false;
|
|
414
|
-
break;
|
|
415
|
-
}
|
|
416
|
-
this.isOverlayAnimationInProgress = false;
|
|
417
|
-
}
|
|
418
|
-
focus() {
|
|
419
|
-
const focusable = DomHandler.findSingle(this.container, '[autofocus]');
|
|
420
|
-
if (focusable) {
|
|
421
|
-
this.zone.runOutsideAngular(() => {
|
|
422
|
-
setTimeout(() => focusable.focus(), 5);
|
|
423
|
-
});
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
onWindowResize() {
|
|
427
|
-
if (this.overlayVisible && !DomHandler.isTouchDevice()) {
|
|
428
|
-
this.hide(CpsMenuHideReason.RESIZE);
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
bindDocumentResizeListener() {
|
|
432
|
-
if (isPlatformBrowser(this.platformId)) {
|
|
433
|
-
if (!this.documentResizeListener) {
|
|
434
|
-
const window = this.document.defaultView;
|
|
435
|
-
this.documentResizeListener = this.renderer.listen(window, 'resize', this.onWindowResize.bind(this));
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
unbindDocumentResizeListener() {
|
|
440
|
-
if (this.documentResizeListener) {
|
|
441
|
-
this.documentResizeListener();
|
|
442
|
-
this.documentResizeListener = null;
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
bindScrollListener() {
|
|
446
|
-
if (isPlatformBrowser(this.platformId)) {
|
|
447
|
-
if (!this.scrollHandler) {
|
|
448
|
-
this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {
|
|
449
|
-
if (this.overlayVisible) {
|
|
450
|
-
this.hide(CpsMenuHideReason.SCROLL);
|
|
451
|
-
}
|
|
452
|
-
});
|
|
453
|
-
}
|
|
454
|
-
this.scrollHandler.bindScrollListener();
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
unbindScrollListener() {
|
|
458
|
-
if (this.scrollHandler) {
|
|
459
|
-
this.scrollHandler.unbindScrollListener();
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
onContainerDestroy() {
|
|
463
|
-
if (!this.cd.destroyed) {
|
|
464
|
-
this.target = null;
|
|
465
|
-
}
|
|
466
|
-
this.unbindDocumentClickListener();
|
|
467
|
-
this.unbindDocumentKeydownListener();
|
|
468
|
-
this.unbindDocumentResizeListener();
|
|
469
|
-
this.unbindScrollListener();
|
|
470
|
-
}
|
|
471
|
-
_destroy() {
|
|
472
|
-
if (this.scrollHandler) {
|
|
473
|
-
this.scrollHandler.destroy();
|
|
474
|
-
this.scrollHandler = null;
|
|
475
|
-
}
|
|
476
|
-
if (this.container && this.autoZIndex) {
|
|
477
|
-
ZIndexUtils.clear(this.container);
|
|
478
|
-
}
|
|
479
|
-
if (!this.cd.destroyed) {
|
|
480
|
-
this.target = null;
|
|
481
|
-
}
|
|
482
|
-
this.destroyCallback = null;
|
|
483
|
-
if (this.container) {
|
|
484
|
-
this.restoreAppend();
|
|
485
|
-
this.onContainerDestroy();
|
|
486
|
-
}
|
|
487
|
-
this.overlaySubscription?.unsubscribe();
|
|
488
|
-
this.resizeObserver?.disconnect();
|
|
489
|
-
}
|
|
490
|
-
ngOnDestroy() {
|
|
491
|
-
this._destroy();
|
|
492
|
-
}
|
|
493
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CpsMenuComponent, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.PrimeNGConfig }, { token: i1.OverlayService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
494
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.3", type: CpsMenuComponent, isStandalone: true, selector: "cps-menu", inputs: { header: "header", items: "items", withArrow: "withArrow", compressed: "compressed", focusOnShow: "focusOnShow", persistent: "persistent", containerClass: "containerClass", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, outputs: { menuShown: "menuShown", menuHidden: "menuHidden", beforeMenuHidden: "beforeMenuHidden", contentClicked: "contentClicked" }, usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"render\"\n class=\"cps-menu-container\"\n [ngClass]=\"{ 'cps-menu-no-arrow': !withArrow }\"\n [class]=\"containerClass\"\n (mousedown)=\"onOverlayClick($event)\"\n [@animation]=\"{\n value: overlayVisible ? 'open' : 'close',\n params: {\n showTransitionParams: showTransitionOptions,\n hideTransitionParams: hideTransitionOptions\n }\n }\"\n (@animation.start)=\"onAnimationStart($event)\"\n (@animation.done)=\"onAnimationEnd($event)\">\n <div (mousedown)=\"onContentClick()\">\n <ng-container *ngIf=\"items.length < 1\">\n <ng-content></ng-content>\n </ng-container>\n <div\n *ngIf=\"items.length > 0\"\n class=\"cps-menu-content\"\n [ngClass]=\"{ 'cps-menu-content-compressed': compressed }\">\n <div *ngIf=\"header && !compressed\" class=\"cps-menu-header\">\n {{ header }}\n </div>\n\n <ng-container *ngFor=\"let item of items; let i = index\">\n <a\n *ngIf=\"!item.url\"\n (click)=\"onItemClick($event, item)\"\n [ngClass]=\"itemsClasses[i]\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </a>\n <a\n *ngIf=\"item.url && item.url.startsWith('/')\"\n (click)=\"onItemClick($event, item)\"\n [routerLink]=\"item.url\"\n [target]=\"item.target\"\n [ngClass]=\"itemsClasses[i]\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </a>\n <a\n *ngIf=\"item.url && !item.url.startsWith('/')\"\n (click)=\"onItemClick($event, item)\"\n [href]=\"item.url\"\n [attr.target]=\"item.target\"\n [ngClass]=\"itemsClasses[i]\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </a>\n </ng-container>\n </div>\n </div>\n</div>\n\n<ng-template #itemTemplate let-item=\"item\">\n <ng-container *ngIf=\"!item.loading; else spinnerMenuItem\">\n <div class=\"cps-menu-item-icon\" *ngIf=\"withIcons\">\n <cps-icon\n *ngIf=\"item.icon\"\n [icon]=\"item.icon\"\n [color]=\"item.disabled ? 'text-light' : 'text-dark'\"\n [size]=\"compressed ? 'small' : 'normal'\"></cps-icon>\n </div>\n <div class=\"cps-menu-item-content\">\n <span class=\"cps-menu-item-content-title\">{{ item.title }}</span>\n <span\n *ngIf=\"item.desc && !compressed\"\n class=\"cps-menu-item-content-desc\"\n >{{ item.desc }}</span\n >\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #spinnerMenuItem>\n <span class=\"cps-menu-item-spinner\">\n <cps-progress-circular\n [strokeWidth]=\"2\"\n [color]=\"compressed ? 'prepared' : 'calm'\"\n [diameter]=\"16\">\n </cps-progress-circular>\n </span>\n</ng-template>\n", styles: [".cps-menu-container{background:#fff;border:0 none;box-shadow:0 1px 3px #0000004d;position:absolute;margin-top:14px;top:0;left:0;font-family:Source Sans Pro,sans-serif}.cps-menu-container:not(.cps-menu-no-arrow):before{border-width:14px;margin-left:-14px;border:solid transparent;border-color:#fff0;border-bottom-color:var(--cps-color-line-light)}.cps-menu-container:not(.cps-menu-no-arrow):after,.cps-menu-container:not(.cps-menu-no-arrow):before{bottom:100%;left:var(--overlayArrowLeft, 12);content:\" \";height:0;width:0;position:absolute;pointer-events:none}.cps-menu-container .cps-menu-content{padding:.75rem}.cps-menu-container .cps-menu-content{font-family:Source Sans Pro,sans-serif;display:flex;flex-direction:column;-webkit-user-select:none;-ms-user-select:none;user-select:none}.cps-menu-container .cps-menu-content .cps-menu-header{display:flex;align-items:center;min-height:50px;padding-bottom:8px;font-weight:600;color:var(--cps-color-text-dark);cursor:default}.cps-menu-container .cps-menu-content .cps-menu-item{text-decoration:unset;display:flex;align-items:center;padding:8px 48px 8px 0;border-top:1px solid rgba(0,0,0,.1215686275);cursor:pointer;min-height:58px}.cps-menu-container .cps-menu-content .cps-menu-item .cps-menu-item-icon{width:48px;align-items:center;display:flex}.cps-menu-container .cps-menu-content .cps-menu-item .cps-menu-item-icon cps-icon{margin-left:8px}.cps-menu-container .cps-menu-content .cps-menu-item .cps-menu-item-content{display:flex;flex-direction:column}.cps-menu-container .cps-menu-content .cps-menu-item .cps-menu-item-content .cps-menu-item-content-title{font-weight:600;font-size:15px;line-height:150%;color:var(--cps-color-text-dark)}.cps-menu-container .cps-menu-content .cps-menu-item .cps-menu-item-content .cps-menu-item-content-desc{font-size:12px;line-height:150%;color:var(--cps-color-text-light)}.cps-menu-container .cps-menu-content .cps-menu-item .cps-menu-item-spinner{width:100%;display:flex;align-items:center;justify-content:center}.cps-menu-container .cps-menu-content .cps-menu-item.cps-menu-item-disabled{pointer-events:none}.cps-menu-container .cps-menu-content .cps-menu-item.cps-menu-item-disabled .cps-menu-item-content .cps-menu-item-content-title{color:var(--cps-color-text-light)}.cps-menu-container .cps-menu-content .cps-menu-item.cps-menu-item-disabled .cps-menu-item-content .cps-menu-item-content-desc{color:var(--cps-color-text-lightest)}.cps-menu-container .cps-menu-content .cps-menu-item:not(.cps-menu-item-disabled):hover{background:var(--cps-color-highlight-hover)}.cps-menu-container .cps-menu-content .cps-menu-item:not(.cps-menu-item-disabled):hover .cps-menu-item-content .cps-menu-item-content-title{color:var(--cps-color-calm)}.cps-menu-container .cps-menu-content .cps-menu-item:not(.cps-menu-item-disabled):hover .cps-menu-item-content .cps-menu-item-content-desc{color:var(--cps-color-text-mild)}.cps-menu-container .cps-menu-content .cps-menu-item:not(.cps-menu-item-disabled):not(.cps-menu-item-compressed):hover .cps-menu-item-icon cps-icon i{color:var(--cps-color-calm)!important}.cps-menu-container .cps-menu-content .cps-menu-item:not(.cps-menu-item-disabled):active{background:var(--cps-color-highlight-active)}.cps-menu-container .cps-menu-content .cps-menu-item.cps-menu-item-first{border-top:none}.cps-menu-container .cps-menu-content.cps-menu-content-compressed{padding:0}.cps-menu-container .cps-menu-content.cps-menu-content-compressed .cps-menu-item{padding:0 16px;min-height:40px}.cps-menu-container .cps-menu-content.cps-menu-content-compressed .cps-menu-item .cps-menu-item-icon{width:36px}.cps-menu-container .cps-menu-content.cps-menu-content-compressed .cps-menu-item .cps-menu-item-content .cps-menu-item-content-title{font-weight:500}.cps-menu-container .cps-menu-content.cps-menu-content-compressed .cps-menu-item.cps-menu-item-compressed.cps-menu-item-compressed-with-icons{padding:0 26px 0 16px}.cps-menu-container .cps-menu-content.cps-menu-content-compressed .cps-menu-item:not(.cps-menu-item-disabled) .cps-menu-item-icon cps-icon i{color:var(--cps-color-prepared)!important}.cps-menu-container .cps-menu-content.cps-menu-content-compressed .cps-menu-item:not(.cps-menu-item-disabled) .cps-menu-item-content .cps-menu-item-content-title{color:var(--cps-color-prepared)}.cps-menu-container:not(.cps-menu-no-arrow):after{border-width:12px;margin-left:-12px;border:solid transparent;border-color:#fff0;border-bottom-color:#fff}.cps-menu-container-flipped{margin-top:0;margin-bottom:10px}.cps-menu-container:not(.cps-menu-no-arrow):after{border-width:12px;margin-left:-12px}.cps-menu-container:not(.cps-menu-no-arrow):before{border-width:14px;margin-left:-14px}.cps-menu-container-flipped:not(.cps-menu-no-arrow):after,.cps-menu-container-flipped:not(.cps-menu-no-arrow):before{bottom:auto;top:100%}.cps-menu-container.cps-menu-container-flipped:not(.cps-menu-no-arrow):after{border-bottom-color:transparent}.cps-menu-container.cps-menu-container-flipped:not(.cps-menu-no-arrow):before{border-bottom-color:transparent}.cps-menu-no-arrow{margin-top:0;margin-bottom:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: SharedModule }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsProgressCircularComponent, selector: "cps-progress-circular", inputs: ["diameter", "strokeWidth", "color"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], animations: [
|
|
495
|
-
trigger('animation', [
|
|
496
|
-
state('void', style({
|
|
497
|
-
transform: 'scaleY(0.8)',
|
|
498
|
-
opacity: 0
|
|
499
|
-
})),
|
|
500
|
-
state('close', style({
|
|
501
|
-
transform: 'scaleY(0.8)',
|
|
502
|
-
opacity: 0
|
|
503
|
-
})),
|
|
504
|
-
state('open', style({
|
|
505
|
-
transform: 'translateY(0)',
|
|
506
|
-
opacity: 1
|
|
507
|
-
})),
|
|
508
|
-
transition('void => open', animate('{{showTransitionParams}}')),
|
|
509
|
-
transition('open => close', animate('{{hideTransitionParams}}'))
|
|
510
|
-
])
|
|
511
|
-
], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
512
|
-
}
|
|
513
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CpsMenuComponent, decorators: [{
|
|
514
|
-
type: Component,
|
|
515
|
-
args: [{ standalone: true, imports: [
|
|
516
|
-
CommonModule,
|
|
517
|
-
SharedModule,
|
|
518
|
-
CpsIconComponent,
|
|
519
|
-
CpsProgressCircularComponent,
|
|
520
|
-
RouterModule
|
|
521
|
-
], selector: 'cps-menu', animations: [
|
|
522
|
-
trigger('animation', [
|
|
523
|
-
state('void', style({
|
|
524
|
-
transform: 'scaleY(0.8)',
|
|
525
|
-
opacity: 0
|
|
526
|
-
})),
|
|
527
|
-
state('close', style({
|
|
528
|
-
transform: 'scaleY(0.8)',
|
|
529
|
-
opacity: 0
|
|
530
|
-
})),
|
|
531
|
-
state('open', style({
|
|
532
|
-
transform: 'translateY(0)',
|
|
533
|
-
opacity: 1
|
|
534
|
-
})),
|
|
535
|
-
transition('void => open', animate('{{showTransitionParams}}')),
|
|
536
|
-
transition('open => close', animate('{{hideTransitionParams}}'))
|
|
537
|
-
])
|
|
538
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n *ngIf=\"render\"\n class=\"cps-menu-container\"\n [ngClass]=\"{ 'cps-menu-no-arrow': !withArrow }\"\n [class]=\"containerClass\"\n (mousedown)=\"onOverlayClick($event)\"\n [@animation]=\"{\n value: overlayVisible ? 'open' : 'close',\n params: {\n showTransitionParams: showTransitionOptions,\n hideTransitionParams: hideTransitionOptions\n }\n }\"\n (@animation.start)=\"onAnimationStart($event)\"\n (@animation.done)=\"onAnimationEnd($event)\">\n <div (mousedown)=\"onContentClick()\">\n <ng-container *ngIf=\"items.length < 1\">\n <ng-content></ng-content>\n </ng-container>\n <div\n *ngIf=\"items.length > 0\"\n class=\"cps-menu-content\"\n [ngClass]=\"{ 'cps-menu-content-compressed': compressed }\">\n <div *ngIf=\"header && !compressed\" class=\"cps-menu-header\">\n {{ header }}\n </div>\n\n <ng-container *ngFor=\"let item of items; let i = index\">\n <a\n *ngIf=\"!item.url\"\n (click)=\"onItemClick($event, item)\"\n [ngClass]=\"itemsClasses[i]\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </a>\n <a\n *ngIf=\"item.url && item.url.startsWith('/')\"\n (click)=\"onItemClick($event, item)\"\n [routerLink]=\"item.url\"\n [target]=\"item.target\"\n [ngClass]=\"itemsClasses[i]\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </a>\n <a\n *ngIf=\"item.url && !item.url.startsWith('/')\"\n (click)=\"onItemClick($event, item)\"\n [href]=\"item.url\"\n [attr.target]=\"item.target\"\n [ngClass]=\"itemsClasses[i]\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </a>\n </ng-container>\n </div>\n </div>\n</div>\n\n<ng-template #itemTemplate let-item=\"item\">\n <ng-container *ngIf=\"!item.loading; else spinnerMenuItem\">\n <div class=\"cps-menu-item-icon\" *ngIf=\"withIcons\">\n <cps-icon\n *ngIf=\"item.icon\"\n [icon]=\"item.icon\"\n [color]=\"item.disabled ? 'text-light' : 'text-dark'\"\n [size]=\"compressed ? 'small' : 'normal'\"></cps-icon>\n </div>\n <div class=\"cps-menu-item-content\">\n <span class=\"cps-menu-item-content-title\">{{ item.title }}</span>\n <span\n *ngIf=\"item.desc && !compressed\"\n class=\"cps-menu-item-content-desc\"\n >{{ item.desc }}</span\n >\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #spinnerMenuItem>\n <span class=\"cps-menu-item-spinner\">\n <cps-progress-circular\n [strokeWidth]=\"2\"\n [color]=\"compressed ? 'prepared' : 'calm'\"\n [diameter]=\"16\">\n </cps-progress-circular>\n </span>\n</ng-template>\n", styles: [".cps-menu-container{background:#fff;border:0 none;box-shadow:0 1px 3px #0000004d;position:absolute;margin-top:14px;top:0;left:0;font-family:Source Sans Pro,sans-serif}.cps-menu-container:not(.cps-menu-no-arrow):before{border-width:14px;margin-left:-14px;border:solid transparent;border-color:#fff0;border-bottom-color:var(--cps-color-line-light)}.cps-menu-container:not(.cps-menu-no-arrow):after,.cps-menu-container:not(.cps-menu-no-arrow):before{bottom:100%;left:var(--overlayArrowLeft, 12);content:\" \";height:0;width:0;position:absolute;pointer-events:none}.cps-menu-container .cps-menu-content{padding:.75rem}.cps-menu-container .cps-menu-content{font-family:Source Sans Pro,sans-serif;display:flex;flex-direction:column;-webkit-user-select:none;-ms-user-select:none;user-select:none}.cps-menu-container .cps-menu-content .cps-menu-header{display:flex;align-items:center;min-height:50px;padding-bottom:8px;font-weight:600;color:var(--cps-color-text-dark);cursor:default}.cps-menu-container .cps-menu-content .cps-menu-item{text-decoration:unset;display:flex;align-items:center;padding:8px 48px 8px 0;border-top:1px solid rgba(0,0,0,.1215686275);cursor:pointer;min-height:58px}.cps-menu-container .cps-menu-content .cps-menu-item .cps-menu-item-icon{width:48px;align-items:center;display:flex}.cps-menu-container .cps-menu-content .cps-menu-item .cps-menu-item-icon cps-icon{margin-left:8px}.cps-menu-container .cps-menu-content .cps-menu-item .cps-menu-item-content{display:flex;flex-direction:column}.cps-menu-container .cps-menu-content .cps-menu-item .cps-menu-item-content .cps-menu-item-content-title{font-weight:600;font-size:15px;line-height:150%;color:var(--cps-color-text-dark)}.cps-menu-container .cps-menu-content .cps-menu-item .cps-menu-item-content .cps-menu-item-content-desc{font-size:12px;line-height:150%;color:var(--cps-color-text-light)}.cps-menu-container .cps-menu-content .cps-menu-item .cps-menu-item-spinner{width:100%;display:flex;align-items:center;justify-content:center}.cps-menu-container .cps-menu-content .cps-menu-item.cps-menu-item-disabled{pointer-events:none}.cps-menu-container .cps-menu-content .cps-menu-item.cps-menu-item-disabled .cps-menu-item-content .cps-menu-item-content-title{color:var(--cps-color-text-light)}.cps-menu-container .cps-menu-content .cps-menu-item.cps-menu-item-disabled .cps-menu-item-content .cps-menu-item-content-desc{color:var(--cps-color-text-lightest)}.cps-menu-container .cps-menu-content .cps-menu-item:not(.cps-menu-item-disabled):hover{background:var(--cps-color-highlight-hover)}.cps-menu-container .cps-menu-content .cps-menu-item:not(.cps-menu-item-disabled):hover .cps-menu-item-content .cps-menu-item-content-title{color:var(--cps-color-calm)}.cps-menu-container .cps-menu-content .cps-menu-item:not(.cps-menu-item-disabled):hover .cps-menu-item-content .cps-menu-item-content-desc{color:var(--cps-color-text-mild)}.cps-menu-container .cps-menu-content .cps-menu-item:not(.cps-menu-item-disabled):not(.cps-menu-item-compressed):hover .cps-menu-item-icon cps-icon i{color:var(--cps-color-calm)!important}.cps-menu-container .cps-menu-content .cps-menu-item:not(.cps-menu-item-disabled):active{background:var(--cps-color-highlight-active)}.cps-menu-container .cps-menu-content .cps-menu-item.cps-menu-item-first{border-top:none}.cps-menu-container .cps-menu-content.cps-menu-content-compressed{padding:0}.cps-menu-container .cps-menu-content.cps-menu-content-compressed .cps-menu-item{padding:0 16px;min-height:40px}.cps-menu-container .cps-menu-content.cps-menu-content-compressed .cps-menu-item .cps-menu-item-icon{width:36px}.cps-menu-container .cps-menu-content.cps-menu-content-compressed .cps-menu-item .cps-menu-item-content .cps-menu-item-content-title{font-weight:500}.cps-menu-container .cps-menu-content.cps-menu-content-compressed .cps-menu-item.cps-menu-item-compressed.cps-menu-item-compressed-with-icons{padding:0 26px 0 16px}.cps-menu-container .cps-menu-content.cps-menu-content-compressed .cps-menu-item:not(.cps-menu-item-disabled) .cps-menu-item-icon cps-icon i{color:var(--cps-color-prepared)!important}.cps-menu-container .cps-menu-content.cps-menu-content-compressed .cps-menu-item:not(.cps-menu-item-disabled) .cps-menu-item-content .cps-menu-item-content-title{color:var(--cps-color-prepared)}.cps-menu-container:not(.cps-menu-no-arrow):after{border-width:12px;margin-left:-12px;border:solid transparent;border-color:#fff0;border-bottom-color:#fff}.cps-menu-container-flipped{margin-top:0;margin-bottom:10px}.cps-menu-container:not(.cps-menu-no-arrow):after{border-width:12px;margin-left:-12px}.cps-menu-container:not(.cps-menu-no-arrow):before{border-width:14px;margin-left:-14px}.cps-menu-container-flipped:not(.cps-menu-no-arrow):after,.cps-menu-container-flipped:not(.cps-menu-no-arrow):before{bottom:auto;top:100%}.cps-menu-container.cps-menu-container-flipped:not(.cps-menu-no-arrow):after{border-bottom-color:transparent}.cps-menu-container.cps-menu-container-flipped:not(.cps-menu-no-arrow):before{border-bottom-color:transparent}.cps-menu-no-arrow{margin-top:0;margin-bottom:0}\n"] }]
|
|
539
|
-
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
540
|
-
type: Inject,
|
|
541
|
-
args: [DOCUMENT]
|
|
542
|
-
}] }, { type: undefined, decorators: [{
|
|
543
|
-
type: Inject,
|
|
544
|
-
args: [PLATFORM_ID]
|
|
545
|
-
}] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.PrimeNGConfig }, { type: i1.OverlayService }], propDecorators: { header: [{
|
|
546
|
-
type: Input
|
|
547
|
-
}], items: [{
|
|
548
|
-
type: Input
|
|
549
|
-
}], withArrow: [{
|
|
550
|
-
type: Input
|
|
551
|
-
}], compressed: [{
|
|
552
|
-
type: Input
|
|
553
|
-
}], focusOnShow: [{
|
|
554
|
-
type: Input
|
|
555
|
-
}], persistent: [{
|
|
556
|
-
type: Input
|
|
557
|
-
}], containerClass: [{
|
|
558
|
-
type: Input
|
|
559
|
-
}], showTransitionOptions: [{
|
|
560
|
-
type: Input
|
|
561
|
-
}], hideTransitionOptions: [{
|
|
562
|
-
type: Input
|
|
563
|
-
}], menuShown: [{
|
|
564
|
-
type: Output
|
|
565
|
-
}], menuHidden: [{
|
|
566
|
-
type: Output
|
|
567
|
-
}], beforeMenuHidden: [{
|
|
568
|
-
type: Output
|
|
569
|
-
}], contentClicked: [{
|
|
570
|
-
type: Output
|
|
571
|
-
}] } });
|
|
572
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLW1lbnUvY3BzLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLW1lbnUvY3BzLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE9BQU8sRUFFUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBQ04sV0FBVyxFQUdYLGlCQUFpQixFQUVsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWlDLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMERBQTBELENBQUM7Ozs7O0FBb0J4Rzs7O0dBR0c7QUFDSCxNQUFNLENBQU4sSUFBWSxpQkFTWDtBQVRELFdBQVksaUJBQWlCO0lBQzNCLHNDQUFpQixDQUFBO0lBQ2pCLHNDQUFp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QU1HLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFNRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBTUksU0FBUztzQkFBbEIsTUFBTTtnQkFPRyxVQUFVO3NCQUFuQixNQUFNO2dCQU9HLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFNRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYW5pbWF0ZSxcbiAgQW5pbWF0aW9uRXZlbnQsXG4gIHN0YXRlLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvbixcbiAgdHJpZ2dlclxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBWaWV3UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheVNlcnZpY2UsIFByaW1lTkdDb25maWcsIFNoYXJlZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IENvbm5lY3RlZE92ZXJsYXlTY3JvbGxIYW5kbGVyLCBEb21IYW5kbGVyIH0gZnJvbSAncHJpbWVuZy9kb20nO1xuaW1wb3J0IHsgWkluZGV4VXRpbHMgfSBmcm9tICdwcmltZW5nL3V0aWxzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ3BzSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1pY29uL2Nwcy1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNQcm9ncmVzc0NpcmN1bGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLXByb2dyZXNzLWNpcmN1bGFyL2Nwcy1wcm9ncmVzcy1jaXJjdWxhci5jb21wb25lbnQnO1xuXG50eXBlIE51bGxhYmxlPFQgPSB2b2lkPiA9IFQgfCBudWxsIHwgdW5kZWZpbmVkO1xudHlwZSBWb2lkTGlzdGVuZXIgPSAoKSA9PiB2b2lkIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcHNNZW51SXRlbSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgaXRlbXMgb2YgdGhlIENwc01lbnVDb21wb25lbnQuXG4gKiBAZ3JvdXAgVHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgQ3BzTWVudUl0ZW0gPSB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBhY3Rpb24/OiAoZXZlbnQ/OiBhbnkpID0+IHZvaWQ7XG4gIGljb24/OiBzdHJpbmc7XG4gIGRlc2M/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbiAgdGFyZ2V0Pzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGxvYWRpbmc/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBBbiBlbnVtZXJhdGlvbiBvZiB0aGUgZGlmZmVyZW50IHJlYXNvbnMgZm9yIGhpZGluZyB0aGUgbWVudS5cbiAqIEBncm91cCBFbnVtc1xuICovXG5leHBvcnQgZW51bSBDcHNNZW51SGlkZVJlYXNvbiB7XG4gIEZPUkNFRCA9ICdmb3JjZWQnLFxuICBUT0dHTEUgPSAndG9nZ2xlJyxcbiAgQ0xJQ0tfSVRFTSA9ICdjbGljay1pdGVtJyxcbiAgQ0xJQ0tfT1VUU0lERSA9ICdjbGljay1vdXRzaWRlJyxcbiAgS0VZRE9XTl9FU0NBUEUgPSAna2V5ZG93bi1lc2NhcGUnLFxuICBTQ1JPTEwgPSAnc2Nyb2xsJyxcbiAgUkVTSVpFID0gJ3Jlc2l6ZScsXG4gIFRBUkdFVF9OT1RfQ09OTkVDVEVEID0gJ3RhcmdldC1ub3QtY29ubmVjdGVkJ1xufVxuXG4vKipcbiAqIENwc01lbnVBdHRhY2hQb3NpdGlvbiBpcyB1c2VkIHRvIGRlZmluZSBhdHRhY2htZW50IHBvc2l0aW9uIG9mIHRoZSBDcHNNZW51Q29tcG9uZW50LlxuICogQGdyb3VwIFR5cGVzXG4gKi9cbmV4cG9ydCB0eXBlIENwc01lbnVBdHRhY2hQb3NpdGlvbiA9ICd0cicgfCAnYnInIHwgJ3RsJyB8ICdibCcgfCAnZGVmYXVsdCc7XG5cbi8qKlxuICogQ3BzTWVudUNvbXBvbmVudCBpcyBhIHBvcHVwIGVsZW1lbnQsIHRoYXQgY29udGFpbnMgbWVudSBpdGVtcyBvciBhcmJpdHJhcnkgY29udGVudC5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFNoYXJlZE1vZHVsZSxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc1Byb2dyZXNzQ2lyY3VsYXJDb21wb25lbnQsXG4gICAgUm91dGVyTW9kdWxlXG4gIF0sXG4gIHNlbGVjdG9yOiAnY3BzLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3BzLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcHMtbWVudS5jb21wb25lbnQuc2NzcyddLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignYW5pbWF0aW9uJywgW1xuICAgICAgc3RhdGUoXG4gICAgICAgICd2b2lkJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWSgwLjgpJyxcbiAgICAgICAgICBvcGFjaXR5OiAwXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgc3RhdGUoXG4gICAgICAgICdjbG9zZScsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZVkoMC44KScsXG4gICAgICAgICAgb3BhY2l0eTogMFxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHN0YXRlKFxuICAgICAgICAnb3BlbicsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJyxcbiAgICAgICAgICBvcGFjaXR5OiAxXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiBvcGVuJywgYW5pbWF0ZSgne3tzaG93VHJhbnNpdGlvblBhcmFtc319JykpLFxuICAgICAgdHJhbnNpdGlvbignb3BlbiA9PiBjbG9zZScsIGFuaW1hdGUoJ3t7aGlkZVRyYW5zaXRpb25QYXJhbXN9fScpKVxuICAgIF0pXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENwc01lbnVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBIZWFkZXIgdGl0bGUgb2YgdGhlIG1lbnUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGVhZGVyID0gJyc7XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIG1lbnUgaXRlbXMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaXRlbXM6IENwc01lbnVJdGVtW10gPSBbXTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGluY2x1ZGUgdG9wIHBvaW50aW5nIGFycm93IG9uIHRoZSBtZW51LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHdpdGhBcnJvdyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIE1lbnUgd2l0aCBwcmVwYXJlZC1jb2xvcmVkIGl0ZW1zLCB3aXRob3V0IGhlYWRlciBhbmQgaXRlbXMgZGVzY3JpcHRpb24uXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgY29tcHJlc3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG1lbnUgc2hvdWxkIHNob3cgb24gdGFyZ2V0IGVsZW1lbnQgZm9jdXMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZm9jdXNPblNob3cgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG1lbnUgc2hvdWxkIGJlIHBlcnNpc3RlbnQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcGVyc2lzdGVudCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTdHlsaW5nIGNsYXNzIG9mIHRoZSBtZW51IGNvbnRhaW5lci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBjb250YWluZXJDbGFzcyA9ICcnO1xuXG4gIC8qKlxuICAgKiBUcmFuc2l0aW9uIG9wdGlvbnMgb2YgdGhlIHNob3cgYW5pbWF0aW9uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dUcmFuc2l0aW9uT3B0aW9ucyA9ICcuMTJzIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpJztcblxuICAvKipcbiAgICogVHJhbnNpdGlvbiBvcHRpb25zIG9mIHRoZSBoaWRlIGFuaW1hdGlvbi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBoaWRlVHJhbnNpdGlvbk9wdGlvbnMgPSAnLjEycyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSc7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIG1lbnUgaXMgc2hvd24uXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIG1lbnVTaG93biA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gbWVudSBpcyBoaWRkZW4uXG4gICAqIEBwYXJhbSB7Q3BzTWVudUhpZGVSZWFzb259IENwc01lbnVIaWRlUmVhc29uIC0gcmVhc29uIGZvciBoaWRpbmcgdGhlIG1lbnUuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIG1lbnVIaWRkZW4gPSBuZXcgRXZlbnRFbWl0dGVyPENwc01lbnVIaWRlUmVhc29uPigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2UgYmVmb3JlIG1lbnUgaXMgaGlkZGVuLlxuICAgKiBAcGFyYW0ge0Nwc01lbnVIaWRlUmVhc29ufSBDcHNNZW51SGlkZVJlYXNvbiAtIHJlYXNvbiBmb3IgaGlkaW5nIHRoZSBtZW51LlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBiZWZvcmVNZW51SGlkZGVuID0gbmV3IEV2ZW50RW1pdHRlcjxDcHNNZW51SGlkZVJlYXNvbj4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gY29udGVudCBpcyBjbGlja2VkLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBjb250ZW50Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICB3aXRoSWNvbnMgPSB0cnVlO1xuICBhdXRvWkluZGV4ID0gdHJ1ZTtcbiAgYmFzZVpJbmRleCA9IDA7XG4gIGRpc21pc3NhYmxlID0gdHJ1ZTtcbiAgY29udGFpbmVyOiBOdWxsYWJsZTxIVE1MRGl2RWxlbWVudD47XG4gIG92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gIHJlbmRlciA9IGZhbHNlO1xuICBpc092ZXJsYXlBbmltYXRpb25JblByb2dyZXNzID0gZmFsc2U7XG4gIHNlbGZDbGljayA9IGZhbHNlO1xuICB0YXJnZXQ6IGFueTtcbiAgc2Nyb2xsSGFuZGxlcjogTnVsbGFibGU8Q29ubmVjdGVkT3ZlcmxheVNjcm9sbEhhbmRsZXI+O1xuICBwb3NpdGlvbjogQ3BzTWVudUF0dGFjaFBvc2l0aW9uID0gJ2RlZmF1bHQnO1xuXG4gIGRvY3VtZW50UmVzaXplTGlzdGVuZXIhOiBWb2lkTGlzdGVuZXIgfCBudWxsO1xuICBvdmVybGF5RXZlbnRMaXN0ZW5lcjogTnVsbGFibGU8KGV2ZW50PzogYW55KSA9PiB2b2lkPjtcbiAgZG9jdW1lbnRDbGlja0xpc3RlbmVyITogVm9pZExpc3RlbmVyIHwgbnVsbDtcbiAgZG9jdW1lbnRLZXlkb3duTGlzdGVuZXIhOiBWb2lkTGlzdGVuZXIgfCBudWxsO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gIGRlc3Ryb3lDYWxsYmFjazogTnVsbGFibGU8RnVuY3Rpb24+O1xuICBvdmVybGF5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuXG4gIGl0ZW1zQ2xhc3Nlczogc3RyaW5nW10gPSBbXTtcblxuICBoaWRlUmVhc29uOiBDcHNNZW51SGlkZVJlYXNvbiB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHdpbmRvdzogV2luZG93O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogYW55LFxuICAgIHB1YmxpYyBlbDogRWxlbWVudFJlZixcbiAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwdWJsaWMgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHB1YmxpYyBjb25maWc6IFByaW1lTkdDb25maWcsXG4gICAgcHVibGljIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5U2VydmljZVxuICApIHtcbiAgICB0aGlzLndpbmRvdyA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXcgYXMgV2luZG93O1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgICAgaWYgKGVudHJ5KSB0aGlzLmFsaWduKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLml0ZW1zIHx8IGNoYW5nZXMuY29tcHJlc3NlZCkge1xuICAgICAgaWYgKHRoaXMuY29tcHJlc3NlZCkgdGhpcy53aXRoSWNvbnMgPSB0aGlzLml0ZW1zLnNvbWUoKGl0bSkgPT4gaXRtLmljb24pO1xuICAgICAgdGhpcy5fc2V0SXRlbXNDbGFzc2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRJdGVtc0NsYXNzZXMoKSB7XG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoIDwgMSkgcmV0dXJuO1xuXG4gICAgdGhpcy5pdGVtc0NsYXNzZXMgPSB0aGlzLml0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IFsnY3BzLW1lbnUtaXRlbSddO1xuICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQgfHwgaXRlbS5sb2FkaW5nKSByZXMucHVzaCgnY3BzLW1lbnUtaXRlbS1kaXNhYmxlZCcpO1xuICAgICAgaWYgKGluZGV4ID09PSAwKSByZXMucHVzaCgnY3BzLW1lbnUtaXRlbS1maXJzdCcpO1xuICAgICAgaWYgKHRoaXMuY29tcHJlc3NlZCkgcmVzLnB1c2goJ2Nwcy1tZW51LWl0ZW0tY29tcHJlc3NlZCcpO1xuICAgICAgaWYgKHRoaXMuY29tcHJlc3NlZCAmJiB0aGlzLndpdGhJY29ucylcbiAgICAgICAgcmVzLnB1c2goJ2Nwcy1tZW51LWl0ZW0tY29tcHJlc3NlZC13aXRoLWljb25zJyk7XG5cbiAgICAgIHJldHVybiByZXMuam9pbignICcpO1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlKGV2ZW50PzogYW55LCB0YXJnZXQ/OiBhbnksIHBvcz86IENwc01lbnVBdHRhY2hQb3NpdGlvbikge1xuICAgIGlmICh0aGlzLmlzT3ZlcmxheUFuaW1hdGlvbkluUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgaWYgKHRoaXMuaGFzVGFyZ2V0Q2hhbmdlZChldmVudCwgdGFyZ2V0KSkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3cobnVsbCwgdGFyZ2V0IHx8IGV2ZW50Py5jdXJyZW50VGFyZ2V0IHx8IGV2ZW50Py50YXJnZXQsIHBvcyk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGlkZShDcHNNZW51SGlkZVJlYXNvbi5UT0dHTEUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3coZXZlbnQsIHRhcmdldCwgcG9zKTtcbiAgICB9XG4gIH1cblxuICBzaG93KGV2ZW50PzogYW55LCB0YXJnZXQ/OiBhbnksIHBvcz86IENwc01lbnVBdHRhY2hQb3NpdGlvbikge1xuICAgIHRhcmdldCAmJiBldmVudCAmJiBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5pc092ZXJsYXlBbmltYXRpb25JblByb2dyZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQgfHwgZXZlbnQ/LmN1cnJlbnRUYXJnZXQgfHwgZXZlbnQ/LnRhcmdldDtcbiAgICBpZiAodGhpcy50YXJnZXQpIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnRhcmdldCk7XG4gICAgdGhpcy5vdmVybGF5VmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5yZW5kZXIgPSB0cnVlO1xuICAgIHRoaXMucG9zaXRpb24gPSBwb3MgfHwgJ2RlZmF1bHQnO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBoaWRlKHJlYXNvbj86IENwc01lbnVIaWRlUmVhc29uKSB7XG4gICAgaWYgKCF0aGlzLm92ZXJsYXlWaXNpYmxlKSByZXR1cm47XG4gICAgdGhpcy5oaWRlUmVhc29uID0gcmVhc29uID8/IENwc01lbnVIaWRlUmVhc29uLkZPUkNFRDtcbiAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGlzVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vdmVybGF5VmlzaWJsZTtcbiAgfVxuXG4gIG9uSXRlbUNsaWNrKGV2ZW50OiBhbnksIGl0ZW06IENwc01lbnVJdGVtKSB7XG4gICAgaWYgKGl0ZW0uZGlzYWJsZWQpIHJldHVybjtcbiAgICBpZiAoaXRlbS5hY3Rpb24pIHtcbiAgICAgIGl0ZW0uYWN0aW9uKHtcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgIGl0ZW1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmhpZGUoQ3BzTWVudUhpZGVSZWFzb24uQ0xJQ0tfSVRFTSk7XG4gIH1cblxuICBiaW5kRG9jdW1lbnRLZXlkb3duTGlzdGVuZXIoKSB7XG4gICAgaWYgKERvbUhhbmRsZXIuaXNUb3VjaERldmljZSgpKSByZXR1cm47XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIGlmICghdGhpcy5kb2N1bWVudEtleWRvd25MaXN0ZW5lciAmJiB0aGlzLmRpc21pc3NhYmxlKSB7XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZG9jdW1lbnRUYXJnZXQ6IGFueSA9IHRoaXMuZWxcbiAgICAgICAgICAgID8gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm93bmVyRG9jdW1lbnRcbiAgICAgICAgICAgIDogdGhpcy5kb2N1bWVudDtcblxuICAgICAgICAgIHRoaXMuZG9jdW1lbnRLZXlkb3duTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICAgIGRvY3VtZW50VGFyZ2V0LFxuICAgICAgICAgICAgJ2tleWRvd24nLFxuICAgICAgICAgICAgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIC8vIGVzY2FwZVxuICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm92ZXJsYXlWaXNpYmxlKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoQ3BzTWVudUhpZGVSZWFzb24uS0VZRE9XTl9FU0NBUEUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdW5iaW5kRG9jdW1lbnRLZXlkb3duTGlzdGVuZXIoKSB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnRLZXlkb3duTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRLZXlkb3duTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZG9jdW1lbnRLZXlkb3duTGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGJpbmREb2N1bWVudENsaWNrTGlzdGVuZXIoKSB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIGlmICghdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIgJiYgdGhpcy5kaXNtaXNzYWJsZSkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRvY3VtZW50VGFyZ2V0OiBhbnkgPSB0aGlzLmVsXG4gICAgICAgICAgICA/IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50XG4gICAgICAgICAgICA6IHRoaXMuZG9jdW1lbnQ7XG5cbiAgICAgICAgICB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgZG9jdW1lbnRUYXJnZXQsXG4gICAgICAgICAgICAnbW91c2Vkb3duJyxcbiAgICAgICAgICAgIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXRoaXMucGVyc2lzdGVudCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLmNvbnRhaW5lcj8uY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0ICE9PSBldmVudC50YXJnZXQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy50YXJnZXQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnNlbGZDbGlja1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZShDcHNNZW51SGlkZVJlYXNvbi5DTElDS19PVVRTSURFKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuc2VsZkNsaWNrID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdW5iaW5kRG9jdW1lbnRDbGlja0xpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyID0gbnVsbDtcbiAgICAgIHRoaXMuc2VsZkNsaWNrID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb25PdmVybGF5Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmFkZCh7XG4gICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgIHRhcmdldDogdGhpcy5lbC5uYXRpdmVFbGVtZW50XG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGZDbGljayA9IHRydWU7XG4gIH1cblxuICBvbkNvbnRlbnRDbGljaygpIHtcbiAgICB0aGlzLnNlbGZDbGljayA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbnRlbnRDbGlja2VkLmVtaXQoKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgaGFzVGFyZ2V0Q2hhbmdlZChldmVudD86IGFueSwgdGFyZ2V0PzogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudGFyZ2V0ICYmXG4gICAgICB0aGlzLnRhcmdldCAhPT0gKHRhcmdldCB8fCBldmVudD8uY3VycmVudFRhcmdldCB8fCBldmVudD8udGFyZ2V0KVxuICAgICk7XG4gIH1cblxuICBhcHBlbmRDb250YWluZXIoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmRvY3VtZW50LmJvZHksIHRoaXMuY29udGFpbmVyKTtcbiAgfVxuXG4gIHJlc3RvcmVBcHBlbmQoKSB7XG4gICAgaWYgKHRoaXMuY29udGFpbmVyKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgdGhpcy5jb250YWluZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldFBvc2l0aW9uKGVsZW1lbnQ6IGFueSwgdGFyZ2V0OiBhbnkpIHtcbiAgICBjb25zdCBnZXRQb3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXRPZmZzZXQgPSBEb21IYW5kbGVyLmdldE9mZnNldCh0YXJnZXQpO1xuICAgICAgc3dpdGNoICh0aGlzLnBvc2l0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2JsJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wOiBNYXRoLm1heChcbiAgICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0LnRvcCArIHRhcmdldC5vZmZzZXRIZWlnaHQgLSBlbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGxlZnQ6IE1hdGgubWF4KDAsIHRhcmdldE9mZnNldC5sZWZ0IC0gZWxlbWVudC5vZmZzZXRXaWR0aClcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdicic6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcDogTWF0aC5tYXgoXG4gICAgICAgICAgICAgIHRhcmdldE9mZnNldC50b3AgKyB0YXJnZXQub2Zmc2V0SGVpZ2h0IC0gZWxlbWVudC5vZmZzZXRIZWlnaHQsXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBsZWZ0OiBNYXRoLm1pbihcbiAgICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0LmxlZnQgKyB0YXJnZXQub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICAgIHRoaXMud2luZG93LmlubmVyV2lkdGggLSBlbGVtZW50Lm9mZnNldFdpZHRoXG4gICAgICAgICAgICApXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAndGwnOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3A6IE1hdGgubWluKFxuICAgICAgICAgICAgICB0YXJnZXRPZmZzZXQudG9wLFxuICAgICAgICAgICAgICB0aGlzLndpbmRvdy5pbm5lckhlaWdodCAtIGVsZW1lbnQub2Zmc2V0SGVpZ2h0XG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbGVmdDogTWF0aC5tYXgoMCwgdGFyZ2V0T2Zmc2V0LmxlZnQgLSBlbGVtZW50Lm9mZnNldFdpZHRoKVxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wOiBNYXRoLm1pbihcbiAgICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0LnRvcCxcbiAgICAgICAgICAgICAgdGhpcy53aW5kb3cuaW5uZXJIZWlnaHQgLSBlbGVtZW50Lm9mZnNldEhlaWdodFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGxlZnQ6IE1hdGgubWluKFxuICAgICAgICAgICAgICB0YXJnZXRPZmZzZXQubGVmdCArIHRhcmdldC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgICAgdGhpcy53aW5kb3cuaW5uZXJXaWR0aCAtIGVsZW1lbnQub2Zmc2V0V2lkdGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdkZWZhdWx0JzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBEb21IYW5kbGVyLmFic29sdXRlUG9zaXRpb24oZWxlbWVudCwgdGFyZ2V0KTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWVsZW1lbnQgfHwgIXRhcmdldCkgcmV0dXJuO1xuICAgIGNvbnN0IHBvcyA9IGdldFBvcygpO1xuICAgIGlmIChwb3MpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gKHBvcy50b3AgfHwgMCkgKyAncHgnO1xuICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gKHBvcy5sZWZ0IHx8IDApICsgJ3B4JztcbiAgICB9XG4gIH1cblxuICBhbGlnbigpIHtcbiAgICBpZiAoIXRoaXMudGFyZ2V0LmlzQ29ubmVjdGVkKSB7XG4gICAgICB0aGlzLmhpZGUoQ3BzTWVudUhpZGVSZWFzb24uVEFSR0VUX05PVF9DT05ORUNURUQpO1xuICAgICAgdGhpcy5fZGVzdHJveSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmF1dG9aSW5kZXgpIHtcbiAgICAgIFpJbmRleFV0aWxzLnNldChcbiAgICAgICAgJ292ZXJsYXknLFxuICAgICAgICB0aGlzLmNvbnRhaW5lcixcbiAgICAgICAgdGhpcy5iYXNlWkluZGV4ICsgdGhpcy5jb25maWcuekluZGV4Lm92ZXJsYXlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0UG9zaXRpb24odGhpcy5jb250YWluZXIsIHRoaXMudGFyZ2V0KTtcblxuICAgIGNvbnN0IGNvbnRhaW5lck9mZnNldCA9IERvbUhhbmRsZXIuZ2V0T2Zmc2V0KHRoaXMuY29udGFpbmVyKTtcbiAgICBjb25zdCB0YXJnZXRPZmZzZXQgPSBEb21IYW5kbGVyLmdldE9mZnNldCh0aGlzLnRhcmdldCk7XG5cbiAgICBpZiAodGhpcy53aXRoQXJyb3cpIHtcbiAgICAgIGNvbnN0IGJvcmRlclJhZGl1cyA9XG4gICAgICAgIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXdcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgID8uZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRhaW5lciEpXG4gICAgICAgICAgPy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItcmFkaXVzJykgfHwgJzAnO1xuXG4gICAgICBsZXQgYXJyb3dMZWZ0ID0gMDtcblxuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmNvbnRhaW5lcj8ub2Zmc2V0V2lkdGggfHwgMDtcblxuICAgICAgaWYgKGNvbnRhaW5lck9mZnNldC5sZWZ0IDwgdGFyZ2V0T2Zmc2V0LmxlZnQpIHtcbiAgICAgICAgYXJyb3dMZWZ0ID1cbiAgICAgICAgICAyMCArXG4gICAgICAgICAgdGFyZ2V0T2Zmc2V0LmxlZnQgLVxuICAgICAgICAgIGNvbnRhaW5lck9mZnNldC5sZWZ0IC1cbiAgICAgICAgICBwYXJzZUZsb2F0KGJvcmRlclJhZGl1cykgKiAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0V2lkdGggPSB0aGlzLnRhcmdldD8ub2Zmc2V0V2lkdGggfHwgMDtcbiAgICAgICAgYXJyb3dMZWZ0ID0gTWF0aC5taW4odGFyZ2V0V2lkdGggLyAyLCBjb250YWluZXJXaWR0aCAvIDIpO1xuICAgICAgfVxuICAgICAgYXJyb3dMZWZ0ID0gTWF0aC5taW4oTWF0aC5tYXgoYXJyb3dMZWZ0LCAxMiksIGNvbnRhaW5lcldpZHRoIC0gMTIpO1xuICAgICAgdGhpcy5jb250YWluZXI/LnN0eWxlLnNldFByb3BlcnR5KCctLW92ZXJsYXlBcnJvd0xlZnQnLCBgJHthcnJvd0xlZnR9cHhgKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbmVyT2Zmc2V0LnRvcCA8IHRhcmdldE9mZnNldC50b3ApIHtcbiAgICAgIERvbUhhbmRsZXIuYWRkQ2xhc3ModGhpcy5jb250YWluZXIsICdjcHMtbWVudS1jb250YWluZXItZmxpcHBlZCcpO1xuICAgIH1cbiAgfVxuXG4gIG9uQW5pbWF0aW9uU3RhcnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICdjbG9zZScpIHtcbiAgICAgIHRoaXMuYmVmb3JlTWVudUhpZGRlbi5lbWl0KHRoaXMuaGlkZVJlYXNvbik7XG4gICAgfSBlbHNlIGlmIChldmVudC50b1N0YXRlID09PSAnb3BlbicpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyID0gZXZlbnQuZWxlbWVudDtcbiAgICAgIGlmICh0aGlzLmNvbnRhaW5lcikgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuY29udGFpbmVyKTtcbiAgICAgIHRoaXMuYXBwZW5kQ29udGFpbmVyKCk7XG4gICAgICB0aGlzLmFsaWduKCk7XG4gICAgICB0aGlzLmJpbmREb2N1bWVudENsaWNrTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuYmluZERvY3VtZW50S2V5ZG93bkxpc3RlbmVyKCk7XG4gICAgICB0aGlzLmJpbmREb2N1bWVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICB0aGlzLmJpbmRTY3JvbGxMaXN0ZW5lcigpO1xuXG4gICAgICBpZiAodGhpcy5mb2N1c09uU2hvdykge1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3ZlcmxheUV2ZW50TGlzdGVuZXIgPSAoZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb250YWluZXIgJiYgdGhpcy5jb250YWluZXIuY29udGFpbnMoZS50YXJnZXQpKSB7XG4gICAgICAgICAgdGhpcy5zZWxmQ2xpY2sgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm92ZXJsYXlTdWJzY3JpcHRpb24gPSB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNsaWNrT2JzZXJ2YWJsZS5zdWJzY3JpYmUoXG4gICAgICAgIHRoaXMub3ZlcmxheUV2ZW50TGlzdGVuZXJcbiAgICAgICk7XG4gICAgICB0aGlzLm1lbnVTaG93bi5lbWl0KG51bGwpO1xuICAgIH1cblxuICAgIHRoaXMuaXNPdmVybGF5QW5pbWF0aW9uSW5Qcm9ncmVzcyA9IHRydWU7XG4gIH1cblxuICBvbkFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LnRvU3RhdGUpIHtcbiAgICAgIGNhc2UgJ3ZvaWQnOlxuICAgICAgICBpZiAodGhpcy5kZXN0cm95Q2FsbGJhY2spIHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3lDYWxsYmFjaygpO1xuICAgICAgICAgIHRoaXMuZGVzdHJveUNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnY2xvc2UnOlxuICAgICAgICBpZiAodGhpcy5hdXRvWkluZGV4KSB7XG4gICAgICAgICAgWkluZGV4VXRpbHMuY2xlYXIodGhpcy5jb250YWluZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgIHRoaXMub3ZlcmxheVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNvbnRhaW5lckRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5tZW51SGlkZGVuLmVtaXQodGhpcy5oaWRlUmVhc29uKTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5pc092ZXJsYXlBbmltYXRpb25JblByb2dyZXNzID0gZmFsc2U7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICBjb25zdCBmb2N1c2FibGUgPSBEb21IYW5kbGVyLmZpbmRTaW5nbGUodGhpcy5jb250YWluZXIsICdbYXV0b2ZvY3VzXScpO1xuICAgIGlmIChmb2N1c2FibGUpIHtcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZm9jdXNhYmxlLmZvY3VzKCksIDUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25XaW5kb3dSZXNpemUoKSB7XG4gICAgaWYgKHRoaXMub3ZlcmxheVZpc2libGUgJiYgIURvbUhhbmRsZXIuaXNUb3VjaERldmljZSgpKSB7XG4gICAgICB0aGlzLmhpZGUoQ3BzTWVudUhpZGVSZWFzb24uUkVTSVpFKTtcbiAgICB9XG4gIH1cblxuICBiaW5kRG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgaWYgKCF0aGlzLmRvY3VtZW50UmVzaXplTGlzdGVuZXIpIHtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldyBhcyBXaW5kb3c7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgIHdpbmRvdyxcbiAgICAgICAgICAncmVzaXplJyxcbiAgICAgICAgICB0aGlzLm9uV2luZG93UmVzaXplLmJpbmQodGhpcylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1bmJpbmREb2N1bWVudFJlc2l6ZUxpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLmRvY3VtZW50UmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBiaW5kU2Nyb2xsTGlzdGVuZXIoKSB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIGlmICghdGhpcy5zY3JvbGxIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsSGFuZGxlciA9IG5ldyBDb25uZWN0ZWRPdmVybGF5U2Nyb2xsSGFuZGxlcihcbiAgICAgICAgICB0aGlzLnRhcmdldCxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgICAgICAgICB0aGlzLmhpZGUoQ3BzTWVudUhpZGVSZWFzb24uU0NST0xMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsSGFuZGxlci5iaW5kU2Nyb2xsTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICB1bmJpbmRTY3JvbGxMaXN0ZW5lcigpIHtcbiAgICBpZiAodGhpcy5zY3JvbGxIYW5kbGVyKSB7XG4gICAgICB0aGlzLnNjcm9sbEhhbmRsZXIudW5iaW5kU2Nyb2xsTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbnRhaW5lckRlc3Ryb3koKSB7XG4gICAgaWYgKCEodGhpcy5jZCBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnVuYmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lcigpO1xuICAgIHRoaXMudW5iaW5kRG9jdW1lbnRLZXlkb3duTGlzdGVuZXIoKTtcbiAgICB0aGlzLnVuYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKTtcbiAgICB0aGlzLnVuYmluZFNjcm9sbExpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIF9kZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnNjcm9sbEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuc2Nyb2xsSGFuZGxlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLnNjcm9sbEhhbmRsZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnRhaW5lciAmJiB0aGlzLmF1dG9aSW5kZXgpIHtcbiAgICAgIFpJbmRleFV0aWxzLmNsZWFyKHRoaXMuY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBpZiAoISh0aGlzLmNkIGFzIFZpZXdSZWYpLmRlc3Ryb3llZCkge1xuICAgICAgdGhpcy50YXJnZXQgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuZGVzdHJveUNhbGxiYWNrID0gbnVsbDtcbiAgICBpZiAodGhpcy5jb250YWluZXIpIHtcbiAgICAgIHRoaXMucmVzdG9yZUFwcGVuZCgpO1xuICAgICAgdGhpcy5vbkNvbnRhaW5lckRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLm92ZXJsYXlTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95KCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgKm5nSWY9XCJyZW5kZXJcIlxuICBjbGFzcz1cImNwcy1tZW51LWNvbnRhaW5lclwiXG4gIFtuZ0NsYXNzXT1cInsgJ2Nwcy1tZW51LW5vLWFycm93JzogIXdpdGhBcnJvdyB9XCJcbiAgW2NsYXNzXT1cImNvbnRhaW5lckNsYXNzXCJcbiAgKG1vdXNlZG93bik9XCJvbk92ZXJsYXlDbGljaygkZXZlbnQpXCJcbiAgW0BhbmltYXRpb25dPVwie1xuICAgIHZhbHVlOiBvdmVybGF5VmlzaWJsZSA/ICdvcGVuJyA6ICdjbG9zZScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBzaG93VHJhbnNpdGlvblBhcmFtczogc2hvd1RyYW5zaXRpb25PcHRpb25zLFxuICAgICAgaGlkZVRyYW5zaXRpb25QYXJhbXM6IGhpZGVUcmFuc2l0aW9uT3B0aW9uc1xuICAgIH1cbiAgfVwiXG4gIChAYW5pbWF0aW9uLnN0YXJ0KT1cIm9uQW5pbWF0aW9uU3RhcnQoJGV2ZW50KVwiXG4gIChAYW5pbWF0aW9uLmRvbmUpPVwib25BbmltYXRpb25FbmQoJGV2ZW50KVwiPlxuICA8ZGl2IChtb3VzZWRvd24pPVwib25Db250ZW50Q2xpY2soKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtcy5sZW5ndGggPCAxXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJpdGVtcy5sZW5ndGggPiAwXCJcbiAgICAgIGNsYXNzPVwiY3BzLW1lbnUtY29udGVudFwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdjcHMtbWVudS1jb250ZW50LWNvbXByZXNzZWQnOiBjb21wcmVzc2VkIH1cIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJoZWFkZXIgJiYgIWNvbXByZXNzZWRcIiBjbGFzcz1cImNwcy1tZW51LWhlYWRlclwiPlxuICAgICAgICB7eyBoZWFkZXIgfX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgKm5nSWY9XCIhaXRlbS51cmxcIlxuICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJpdGVtc0NsYXNzZXNbaV1cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICBpdGVtVGVtcGxhdGU7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBpdGVtOiBpdGVtXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxhXG4gICAgICAgICAgKm5nSWY9XCJpdGVtLnVybCAmJiBpdGVtLnVybC5zdGFydHNXaXRoKCcvJylcIlxuICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnVybFwiXG4gICAgICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbXNDbGFzc2VzW2ldXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgaXRlbVRlbXBsYXRlO1xuICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgaXRlbTogaXRlbVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YVxuICAgICAgICAgICpuZ0lmPVwiaXRlbS51cmwgJiYgIWl0ZW0udXJsLnN0YXJ0c1dpdGgoJy8nKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgIFtocmVmXT1cIml0ZW0udXJsXCJcbiAgICAgICAgICBbYXR0ci50YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW1zQ2xhc3Nlc1tpXVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIGl0ZW1UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLmxvYWRpbmc7IGVsc2Ugc3Bpbm5lck1lbnVJdGVtXCI+XG4gICAgPGRpdiBjbGFzcz1cImNwcy1tZW51LWl0ZW0taWNvblwiICpuZ0lmPVwid2l0aEljb25zXCI+XG4gICAgICA8Y3BzLWljb25cbiAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxuICAgICAgICBbaWNvbl09XCJpdGVtLmljb25cIlxuICAgICAgICBbY29sb3JdPVwiaXRlbS5kaXNhYmxlZCA/ICd0ZXh0LWxpZ2h0JyA6ICd0ZXh0LWRhcmsnXCJcbiAgICAgICAgW3NpemVdPVwiY29tcHJlc3NlZCA/ICdzbWFsbCcgOiAnbm9ybWFsJ1wiPjwvY3BzLWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNwcy1tZW51LWl0ZW0tY29udGVudFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtbWVudS1pdGVtLWNvbnRlbnQtdGl0bGVcIj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgKm5nSWY9XCJpdGVtLmRlc2MgJiYgIWNvbXByZXNzZWRcIlxuICAgICAgICBjbGFzcz1cImNwcy1tZW51LWl0ZW0tY29udGVudC1kZXNjXCJcbiAgICAgICAgPnt7IGl0ZW0uZGVzYyB9fTwvc3BhblxuICAgICAgPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3Bpbm5lck1lbnVJdGVtPlxuICA8c3BhbiBjbGFzcz1cImNwcy1tZW51LWl0ZW0tc3Bpbm5lclwiPlxuICAgIDxjcHMtcHJvZ3Jlc3MtY2lyY3VsYXJcbiAgICAgIFtzdHJva2VXaWR0aF09XCIyXCJcbiAgICAgIFtjb2xvcl09XCJjb21wcmVzc2VkID8gJ3ByZXBhcmVkJyA6ICdjYWxtJ1wiXG4gICAgICBbZGlhbWV0ZXJdPVwiMTZcIj5cbiAgICA8L2Nwcy1wcm9ncmVzcy1jaXJjdWxhcj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|