@skyux/flyout 8.6.0 → 9.0.0-alpha.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/esm2022/lib/modules/flyout/flyout-adapter.service.mjs +69 -0
- package/esm2022/lib/modules/flyout/flyout-instance.mjs +122 -0
- package/esm2022/lib/modules/flyout/flyout-iterator.component.mjs +51 -0
- package/esm2022/lib/modules/flyout/flyout-media-query.service.mjs +68 -0
- package/esm2022/lib/modules/flyout/flyout.component.mjs +526 -0
- package/{esm2020 → esm2022}/lib/modules/flyout/flyout.module.mjs +21 -21
- package/esm2022/lib/modules/flyout/flyout.service.mjs +168 -0
- package/esm2022/lib/modules/shared/sky-flyout-resources.module.mjs +54 -0
- package/fesm2022/skyux-flyout.mjs +1098 -0
- package/{fesm2020 → fesm2022}/skyux-flyout.mjs.map +1 -1
- package/lib/modules/flyout/flyout-iterator.component.d.ts +1 -1
- package/package.json +16 -22
- package/esm2020/lib/modules/flyout/flyout-adapter.service.mjs +0 -72
- package/esm2020/lib/modules/flyout/flyout-instance.mjs +0 -119
- package/esm2020/lib/modules/flyout/flyout-iterator.component.mjs +0 -56
- package/esm2020/lib/modules/flyout/flyout-media-query.service.mjs +0 -71
- package/esm2020/lib/modules/flyout/flyout.component.mjs +0 -513
- package/esm2020/lib/modules/flyout/flyout.service.mjs +0 -167
- package/esm2020/lib/modules/shared/sky-flyout-resources.module.mjs +0 -54
- package/fesm2015/skyux-flyout.mjs +0 -1091
- package/fesm2015/skyux-flyout.mjs.map +0 -1
- package/fesm2020/skyux-flyout.mjs +0 -1087
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/flyout/types/flyout-action.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/flyout/types/flyout-before-close-handler.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/flyout/types/flyout-close-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/flyout/types/flyout-config-internal.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/flyout/types/flyout-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/flyout/types/flyout-message-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/flyout/types/flyout-message.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/flyout/types/flyout-permalink.mjs +0 -0
- /package/{esm2020 → esm2022}/skyux-flyout.mjs +0 -0
|
@@ -1,513 +0,0 @@
|
|
|
1
|
-
var _SkyFlyoutComponent_instances, _SkyFlyoutComponent_xCoord, _SkyFlyoutComponent_windowBufferSize, _SkyFlyoutComponent_flyoutInstance, _SkyFlyoutComponent_ngUnsubscribe, _SkyFlyoutComponent__messageStream, _SkyFlyoutComponent_adapter, _SkyFlyoutComponent_changeDetector, _SkyFlyoutComponent_injector, _SkyFlyoutComponent_resolver, _SkyFlyoutComponent_resourcesService, _SkyFlyoutComponent_flyoutMediaQueryService, _SkyFlyoutComponent_elementRef, _SkyFlyoutComponent_uiConfigService, _SkyFlyoutComponent_ngZone, _SkyFlyoutComponent_createFlyoutInstance, _SkyFlyoutComponent_handleIncomingMessages, _SkyFlyoutComponent_notifyClosed, _SkyFlyoutComponent_cleanTemplate, _SkyFlyoutComponent_updateBreakpointAndResponsiveClass, _SkyFlyoutComponent_setFullscreen, _SkyFlyoutComponent_setUserData, _SkyFlyoutComponent_checkInitialSize, _SkyFlyoutComponent_getString, _SkyFlyoutComponent_handleResizeKeyDown, _SkyFlyoutComponent_executeOnStable, _SkyFlyoutComponent_initFocusTrap;
|
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
-
import { animate, state, style, transition, trigger, } from '@angular/animations';
|
|
4
|
-
import { ChangeDetectionStrategy, Component, ElementRef, HostListener, Injector, ViewChild, ViewContainerRef, } from '@angular/core';
|
|
5
|
-
import { SKY_STACKING_CONTEXT, SkyMediaBreakpoints, SkyMediaQueryService, } from '@skyux/core';
|
|
6
|
-
import { BehaviorSubject, Subject, fromEvent } from 'rxjs';
|
|
7
|
-
import { take, takeUntil, takeWhile } from 'rxjs/operators';
|
|
8
|
-
import { SkyFlyoutAdapterService } from './flyout-adapter.service';
|
|
9
|
-
import { SkyFlyoutInstance } from './flyout-instance';
|
|
10
|
-
import { SkyFlyoutMediaQueryService } from './flyout-media-query.service';
|
|
11
|
-
import { SkyFlyoutBeforeCloseHandler } from './types/flyout-before-close-handler';
|
|
12
|
-
import { SkyFlyoutMessageType } from './types/flyout-message-type';
|
|
13
|
-
import * as i0 from "@angular/core";
|
|
14
|
-
import * as i1 from "./flyout-adapter.service";
|
|
15
|
-
import * as i2 from "@skyux/i18n";
|
|
16
|
-
import * as i3 from "./flyout-media-query.service";
|
|
17
|
-
import * as i4 from "@skyux/core";
|
|
18
|
-
import * as i5 from "@angular/cdk/a11y";
|
|
19
|
-
import * as i6 from "@angular/common";
|
|
20
|
-
import * as i7 from "@angular/router";
|
|
21
|
-
import * as i8 from "@skyux/indicators";
|
|
22
|
-
import * as i9 from "@skyux/theme";
|
|
23
|
-
import * as i10 from "@skyux/router";
|
|
24
|
-
import * as i11 from "./flyout-iterator.component";
|
|
25
|
-
const FLYOUT_OPEN_STATE = 'flyoutOpen';
|
|
26
|
-
const FLYOUT_CLOSED_STATE = 'flyoutClosed';
|
|
27
|
-
let nextId = 0;
|
|
28
|
-
/**
|
|
29
|
-
* @internal
|
|
30
|
-
*/
|
|
31
|
-
export class SkyFlyoutComponent {
|
|
32
|
-
get messageStream() {
|
|
33
|
-
return __classPrivateFieldGet(this, _SkyFlyoutComponent__messageStream, "f");
|
|
34
|
-
}
|
|
35
|
-
constructor(adapter, changeDetector, injector, resolver, resourcesService, flyoutMediaQueryService, elementRef, uiConfigService, ngZone) {
|
|
36
|
-
_SkyFlyoutComponent_instances.add(this);
|
|
37
|
-
this.config = {
|
|
38
|
-
defaultWidth: window.innerWidth / 2,
|
|
39
|
-
minWidth: 320,
|
|
40
|
-
maxWidth: window.innerWidth / 2,
|
|
41
|
-
providers: [],
|
|
42
|
-
};
|
|
43
|
-
this.enableTrapFocus = false;
|
|
44
|
-
this.enableTrapFocusAutoCapture = false;
|
|
45
|
-
this.flyoutId = `sky-flyout-${++nextId}`;
|
|
46
|
-
this.flyoutState = FLYOUT_CLOSED_STATE;
|
|
47
|
-
this.isOpen = false;
|
|
48
|
-
this.isOpening = false;
|
|
49
|
-
this.flyoutWidth = 0;
|
|
50
|
-
this.instanceReady = false;
|
|
51
|
-
this.isDragging = false;
|
|
52
|
-
this.isFullscreen = false;
|
|
53
|
-
this.resizeKeyControlActive = false;
|
|
54
|
-
_SkyFlyoutComponent_xCoord.set(this, 0);
|
|
55
|
-
_SkyFlyoutComponent_windowBufferSize.set(this, 20);
|
|
56
|
-
this.permalink = {};
|
|
57
|
-
this.permalinkLabel = '';
|
|
58
|
-
this.primaryAction = {};
|
|
59
|
-
this.primaryActionLabel = '';
|
|
60
|
-
/**
|
|
61
|
-
* @internal
|
|
62
|
-
*/
|
|
63
|
-
this.widthStep = 10;
|
|
64
|
-
this.zIndex$ = new BehaviorSubject(1001);
|
|
65
|
-
_SkyFlyoutComponent_flyoutInstance.set(this, void 0);
|
|
66
|
-
_SkyFlyoutComponent_ngUnsubscribe.set(this, new Subject());
|
|
67
|
-
_SkyFlyoutComponent__messageStream.set(this, new Subject());
|
|
68
|
-
_SkyFlyoutComponent_adapter.set(this, void 0);
|
|
69
|
-
_SkyFlyoutComponent_changeDetector.set(this, void 0);
|
|
70
|
-
_SkyFlyoutComponent_injector.set(this, void 0);
|
|
71
|
-
_SkyFlyoutComponent_resolver.set(this, void 0);
|
|
72
|
-
_SkyFlyoutComponent_resourcesService.set(this, void 0);
|
|
73
|
-
_SkyFlyoutComponent_flyoutMediaQueryService.set(this, void 0);
|
|
74
|
-
_SkyFlyoutComponent_elementRef.set(this, void 0);
|
|
75
|
-
_SkyFlyoutComponent_uiConfigService.set(this, void 0);
|
|
76
|
-
_SkyFlyoutComponent_ngZone.set(this, void 0);
|
|
77
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_adapter, adapter, "f");
|
|
78
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_changeDetector, changeDetector, "f");
|
|
79
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_injector, injector, "f");
|
|
80
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_resolver, resolver, "f");
|
|
81
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_resourcesService, resourcesService, "f");
|
|
82
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_flyoutMediaQueryService, flyoutMediaQueryService, "f");
|
|
83
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_elementRef, elementRef, "f");
|
|
84
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_uiConfigService, uiConfigService, "f");
|
|
85
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_ngZone, ngZone, "f");
|
|
86
|
-
// All commands flow through the message stream.
|
|
87
|
-
this.messageStream
|
|
88
|
-
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyFlyoutComponent_ngUnsubscribe, "f")))
|
|
89
|
-
.subscribe((message) => {
|
|
90
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_handleIncomingMessages).call(this, message);
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
ngOnInit() {
|
|
94
|
-
/* istanbul ignore else */
|
|
95
|
-
if (this.flyoutHeader) {
|
|
96
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_adapter, "f").adjustHeaderForHelp(this.flyoutHeader);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
ngOnDestroy() {
|
|
100
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_ngUnsubscribe, "f").next();
|
|
101
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_ngUnsubscribe, "f").complete();
|
|
102
|
-
}
|
|
103
|
-
onWindowResize(event) {
|
|
104
|
-
if (__classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutMediaQueryService, "f").isWidthWithinBreakpoint(event.target.innerWidth, SkyMediaBreakpoints.xs)) {
|
|
105
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_updateBreakpointAndResponsiveClass).call(this, event.target.innerWidth);
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_updateBreakpointAndResponsiveClass).call(this, this.flyoutWidth);
|
|
109
|
-
}
|
|
110
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_setFullscreen).call(this);
|
|
111
|
-
if (event.target.innerWidth - this.flyoutWidth < __classPrivateFieldGet(this, _SkyFlyoutComponent_windowBufferSize, "f")) {
|
|
112
|
-
this.flyoutWidth = event.target.innerWidth - __classPrivateFieldGet(this, _SkyFlyoutComponent_windowBufferSize, "f");
|
|
113
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_xCoord, __classPrivateFieldGet(this, _SkyFlyoutComponent_windowBufferSize, "f"), "f");
|
|
114
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_setUserData).call(this);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
attach(component, config) {
|
|
118
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_cleanTemplate).call(this);
|
|
119
|
-
// Emit the closed event on any previously opened flyout instance
|
|
120
|
-
if (__classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutInstance, "f")) {
|
|
121
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_notifyClosed).call(this);
|
|
122
|
-
}
|
|
123
|
-
this.config = Object.assign({
|
|
124
|
-
defaultWidth: window.innerWidth / 2,
|
|
125
|
-
minWidth: 320,
|
|
126
|
-
maxWidth: window.innerWidth / 2,
|
|
127
|
-
providers: [
|
|
128
|
-
{
|
|
129
|
-
provide: SKY_STACKING_CONTEXT,
|
|
130
|
-
useValue: {
|
|
131
|
-
zIndex: this.zIndex$
|
|
132
|
-
.asObservable()
|
|
133
|
-
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyFlyoutComponent_ngUnsubscribe, "f"))),
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
],
|
|
137
|
-
}, config);
|
|
138
|
-
if (config?.defaultWidth && !config?.maxWidth) {
|
|
139
|
-
this.config.maxWidth = config?.defaultWidth;
|
|
140
|
-
}
|
|
141
|
-
this.config.showIterator = this.config.showIterator || false;
|
|
142
|
-
this.config.iteratorNextButtonDisabled =
|
|
143
|
-
this.config.iteratorNextButtonDisabled || false;
|
|
144
|
-
this.config.iteratorPreviousButtonDisabled =
|
|
145
|
-
this.config.iteratorPreviousButtonDisabled || false;
|
|
146
|
-
this.permalink = this.config.permalink ?? {};
|
|
147
|
-
this.permalinkLabel =
|
|
148
|
-
this.config.permalink && this.config.permalink.label
|
|
149
|
-
? this.config.permalink.label
|
|
150
|
-
: __classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_getString).call(this, 'skyux_flyout_permalink_button');
|
|
151
|
-
this.primaryAction = this.config.primaryAction ?? {};
|
|
152
|
-
this.primaryActionLabel =
|
|
153
|
-
this.config.primaryAction && this.config.primaryAction.label
|
|
154
|
-
? this.config.primaryAction.label
|
|
155
|
-
: __classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_getString).call(this, 'skyux_flyout_primary_action_button');
|
|
156
|
-
const factory = __classPrivateFieldGet(this, _SkyFlyoutComponent_resolver, "f").resolveComponentFactory(component);
|
|
157
|
-
const injector = Injector.create({
|
|
158
|
-
parent: __classPrivateFieldGet(this, _SkyFlyoutComponent_injector, "f"),
|
|
159
|
-
providers: this.config.providers,
|
|
160
|
-
});
|
|
161
|
-
const componentRef = this.target?.createComponent(factory, undefined, injector);
|
|
162
|
-
/* safety check */
|
|
163
|
-
/* istanbul ignore if */
|
|
164
|
-
if (!componentRef) {
|
|
165
|
-
throw new Error("Flyout's internal component could not be created");
|
|
166
|
-
}
|
|
167
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_flyoutInstance, __classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_createFlyoutInstance).call(this, componentRef.instance), "f");
|
|
168
|
-
// This is used to ensure we do not render the flyout until we have attached the component.
|
|
169
|
-
// This allows the aria-labelledby to function correctly.
|
|
170
|
-
this.instanceReady = true;
|
|
171
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_changeDetector, "f").markForCheck();
|
|
172
|
-
// Open the flyout immediately.
|
|
173
|
-
this.messageStream.next({
|
|
174
|
-
type: SkyFlyoutMessageType.Open,
|
|
175
|
-
});
|
|
176
|
-
if (this.config.settingsKey) {
|
|
177
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_uiConfigService, "f")
|
|
178
|
-
.getConfig(this.config.settingsKey)
|
|
179
|
-
.pipe(take(1))
|
|
180
|
-
.subscribe((value) => {
|
|
181
|
-
if (value && value.flyoutWidth) {
|
|
182
|
-
this.flyoutWidth = value.flyoutWidth;
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
// Bad data, or config is the default config.
|
|
186
|
-
this.flyoutWidth = this.config.defaultWidth;
|
|
187
|
-
}
|
|
188
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_checkInitialSize).call(this);
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
this.flyoutWidth = this.config.defaultWidth;
|
|
193
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_checkInitialSize).call(this);
|
|
194
|
-
}
|
|
195
|
-
return __classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutInstance, "f");
|
|
196
|
-
}
|
|
197
|
-
close() {
|
|
198
|
-
this.messageStream.next({
|
|
199
|
-
type: SkyFlyoutMessageType.Close,
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
invokePrimaryAction() {
|
|
203
|
-
if (this.primaryAction.callback) {
|
|
204
|
-
this.primaryAction.callback();
|
|
205
|
-
if (this.primaryAction.closeAfterInvoking) {
|
|
206
|
-
this.close();
|
|
207
|
-
}
|
|
208
|
-
return false;
|
|
209
|
-
}
|
|
210
|
-
/* istanbul ignore next */
|
|
211
|
-
return true;
|
|
212
|
-
}
|
|
213
|
-
getAnimationState() {
|
|
214
|
-
return this.instanceReady && this.isOpening
|
|
215
|
-
? FLYOUT_OPEN_STATE
|
|
216
|
-
: FLYOUT_CLOSED_STATE;
|
|
217
|
-
}
|
|
218
|
-
animationDone(event) {
|
|
219
|
-
if (event.toState === FLYOUT_OPEN_STATE) {
|
|
220
|
-
this.isOpen = true;
|
|
221
|
-
}
|
|
222
|
-
if (event.toState === FLYOUT_CLOSED_STATE) {
|
|
223
|
-
this.isOpen = false;
|
|
224
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_notifyClosed).call(this);
|
|
225
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_cleanTemplate).call(this);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
onHeaderGrabHandleMouseDown(event) {
|
|
229
|
-
this.onResizeHandleMouseDown(event);
|
|
230
|
-
}
|
|
231
|
-
onHeaderGrabHandleKeyDown(event) {
|
|
232
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_handleResizeKeyDown).call(this, event);
|
|
233
|
-
}
|
|
234
|
-
onResizeHandleKeyDown(event) {
|
|
235
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_handleResizeKeyDown).call(this, event);
|
|
236
|
-
}
|
|
237
|
-
onResizeHandleMouseDown(event) {
|
|
238
|
-
event.preventDefault();
|
|
239
|
-
event.stopPropagation();
|
|
240
|
-
if (this.isFullscreen) {
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
this.isDragging = true;
|
|
244
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_xCoord, event.clientX, "f");
|
|
245
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_adapter, "f").toggleIframePointerEvents(false);
|
|
246
|
-
fromEvent(document, 'mousemove')
|
|
247
|
-
.pipe(takeWhile(() => {
|
|
248
|
-
return this.isDragging;
|
|
249
|
-
}))
|
|
250
|
-
.subscribe((moveEvent) => {
|
|
251
|
-
this.onMouseMove(moveEvent);
|
|
252
|
-
});
|
|
253
|
-
fromEvent(document, 'mouseup')
|
|
254
|
-
.pipe(takeWhile(() => {
|
|
255
|
-
return this.isDragging;
|
|
256
|
-
}))
|
|
257
|
-
.subscribe((mouseUpEvent) => {
|
|
258
|
-
this.onHandleRelease(mouseUpEvent);
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
onMouseMove(event) {
|
|
262
|
-
/* Sanity check */
|
|
263
|
-
/* istanbul ignore if */
|
|
264
|
-
if (!this.isDragging) {
|
|
265
|
-
return;
|
|
266
|
-
}
|
|
267
|
-
const offsetX = event.clientX - __classPrivateFieldGet(this, _SkyFlyoutComponent_xCoord, "f");
|
|
268
|
-
let width = this.flyoutWidth;
|
|
269
|
-
width -= offsetX;
|
|
270
|
-
if (width < this.config.minWidth || width > this.config.maxWidth) {
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
|
-
if (window.innerWidth - width < __classPrivateFieldGet(this, _SkyFlyoutComponent_windowBufferSize, "f")) {
|
|
274
|
-
width = window.innerWidth - __classPrivateFieldGet(this, _SkyFlyoutComponent_windowBufferSize, "f");
|
|
275
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_xCoord, __classPrivateFieldGet(this, _SkyFlyoutComponent_windowBufferSize, "f"), "f");
|
|
276
|
-
}
|
|
277
|
-
else {
|
|
278
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_xCoord, event.clientX, "f");
|
|
279
|
-
}
|
|
280
|
-
this.flyoutWidth = width;
|
|
281
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_updateBreakpointAndResponsiveClass).call(this, this.flyoutWidth);
|
|
282
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_changeDetector, "f").markForCheck();
|
|
283
|
-
}
|
|
284
|
-
onHandleRelease(event) {
|
|
285
|
-
fromEvent(document, 'click')
|
|
286
|
-
.pipe(take(1))
|
|
287
|
-
.subscribe(() => {
|
|
288
|
-
this.isDragging = false;
|
|
289
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_adapter, "f").toggleIframePointerEvents(true);
|
|
290
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_setUserData).call(this);
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
onIteratorPreviousButtonClick() {
|
|
294
|
-
/* istanbul ignore else */
|
|
295
|
-
if (__classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutInstance, "f")) {
|
|
296
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutInstance, "f").iteratorPreviousButtonClick.emit();
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
onIteratorNextButtonClick() {
|
|
300
|
-
/* istanbul ignore else */
|
|
301
|
-
if (__classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutInstance, "f")) {
|
|
302
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutInstance, "f").iteratorNextButtonClick.emit();
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
_SkyFlyoutComponent_xCoord = new WeakMap(), _SkyFlyoutComponent_windowBufferSize = new WeakMap(), _SkyFlyoutComponent_flyoutInstance = new WeakMap(), _SkyFlyoutComponent_ngUnsubscribe = new WeakMap(), _SkyFlyoutComponent__messageStream = new WeakMap(), _SkyFlyoutComponent_adapter = new WeakMap(), _SkyFlyoutComponent_changeDetector = new WeakMap(), _SkyFlyoutComponent_injector = new WeakMap(), _SkyFlyoutComponent_resolver = new WeakMap(), _SkyFlyoutComponent_resourcesService = new WeakMap(), _SkyFlyoutComponent_flyoutMediaQueryService = new WeakMap(), _SkyFlyoutComponent_elementRef = new WeakMap(), _SkyFlyoutComponent_uiConfigService = new WeakMap(), _SkyFlyoutComponent_ngZone = new WeakMap(), _SkyFlyoutComponent_instances = new WeakSet(), _SkyFlyoutComponent_createFlyoutInstance = function _SkyFlyoutComponent_createFlyoutInstance(component) {
|
|
307
|
-
const instance = new SkyFlyoutInstance(component);
|
|
308
|
-
instance.hostController
|
|
309
|
-
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyFlyoutComponent_ngUnsubscribe, "f")))
|
|
310
|
-
.subscribe((message) => {
|
|
311
|
-
this.messageStream.next(message);
|
|
312
|
-
});
|
|
313
|
-
return instance;
|
|
314
|
-
}, _SkyFlyoutComponent_handleIncomingMessages = function _SkyFlyoutComponent_handleIncomingMessages(message) {
|
|
315
|
-
switch (message.type) {
|
|
316
|
-
case SkyFlyoutMessageType.Open:
|
|
317
|
-
if (!this.isOpen) {
|
|
318
|
-
this.isOpen = false;
|
|
319
|
-
this.isOpening = true;
|
|
320
|
-
}
|
|
321
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_initFocusTrap).call(this);
|
|
322
|
-
break;
|
|
323
|
-
case SkyFlyoutMessageType.Close:
|
|
324
|
-
if (__classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutInstance, "f")?.beforeClose?.observers
|
|
325
|
-
.length === 0 ||
|
|
326
|
-
message.data?.ignoreBeforeClose) {
|
|
327
|
-
this.isOpen = true;
|
|
328
|
-
this.isOpening = false;
|
|
329
|
-
}
|
|
330
|
-
else {
|
|
331
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutInstance, "f")?.beforeClose?.next(new SkyFlyoutBeforeCloseHandler(() => {
|
|
332
|
-
this.isOpen = true;
|
|
333
|
-
this.isOpening = false;
|
|
334
|
-
}));
|
|
335
|
-
}
|
|
336
|
-
break;
|
|
337
|
-
case SkyFlyoutMessageType.EnableIteratorNextButton:
|
|
338
|
-
this.config.iteratorNextButtonDisabled = false;
|
|
339
|
-
break;
|
|
340
|
-
case SkyFlyoutMessageType.EnableIteratorPreviousButton:
|
|
341
|
-
this.config.iteratorPreviousButtonDisabled = false;
|
|
342
|
-
break;
|
|
343
|
-
case SkyFlyoutMessageType.DisableIteratorNextButton:
|
|
344
|
-
this.config.iteratorNextButtonDisabled = true;
|
|
345
|
-
break;
|
|
346
|
-
case SkyFlyoutMessageType.DisableIteratorPreviousButton:
|
|
347
|
-
this.config.iteratorPreviousButtonDisabled = true;
|
|
348
|
-
break;
|
|
349
|
-
}
|
|
350
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_changeDetector, "f").markForCheck();
|
|
351
|
-
}, _SkyFlyoutComponent_notifyClosed = function _SkyFlyoutComponent_notifyClosed() {
|
|
352
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutInstance, "f")?.closed.emit();
|
|
353
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutInstance, "f")?.closed.complete();
|
|
354
|
-
}, _SkyFlyoutComponent_cleanTemplate = function _SkyFlyoutComponent_cleanTemplate() {
|
|
355
|
-
this.target?.clear();
|
|
356
|
-
}, _SkyFlyoutComponent_updateBreakpointAndResponsiveClass = function _SkyFlyoutComponent_updateBreakpointAndResponsiveClass(width) {
|
|
357
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutMediaQueryService, "f").setBreakpointForWidth(width);
|
|
358
|
-
const newBreakpoint = __classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutMediaQueryService, "f").current;
|
|
359
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_adapter, "f").setResponsiveClass(__classPrivateFieldGet(this, _SkyFlyoutComponent_elementRef, "f"), newBreakpoint);
|
|
360
|
-
}, _SkyFlyoutComponent_setFullscreen = function _SkyFlyoutComponent_setFullscreen() {
|
|
361
|
-
if (window.innerWidth - __classPrivateFieldGet(this, _SkyFlyoutComponent_windowBufferSize, "f") < this.config.minWidth) {
|
|
362
|
-
this.isFullscreen = true;
|
|
363
|
-
}
|
|
364
|
-
else {
|
|
365
|
-
this.isFullscreen = false;
|
|
366
|
-
}
|
|
367
|
-
}, _SkyFlyoutComponent_setUserData = function _SkyFlyoutComponent_setUserData() {
|
|
368
|
-
if (this.config.settingsKey) {
|
|
369
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_uiConfigService, "f")
|
|
370
|
-
.setConfig(this.config.settingsKey, {
|
|
371
|
-
flyoutWidth: this.flyoutWidth,
|
|
372
|
-
})
|
|
373
|
-
.pipe(take(1))
|
|
374
|
-
.subscribe(
|
|
375
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
376
|
-
() => { }, (err) => {
|
|
377
|
-
console.warn('Could not save flyout data.');
|
|
378
|
-
console.warn(err);
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
}, _SkyFlyoutComponent_checkInitialSize = function _SkyFlyoutComponent_checkInitialSize() {
|
|
382
|
-
if (this.flyoutWidth < this.config.minWidth) {
|
|
383
|
-
this.flyoutWidth = this.config.minWidth;
|
|
384
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_setUserData).call(this);
|
|
385
|
-
}
|
|
386
|
-
else if (this.flyoutWidth > this.config.maxWidth) {
|
|
387
|
-
this.flyoutWidth = this.config.maxWidth;
|
|
388
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_setUserData).call(this);
|
|
389
|
-
}
|
|
390
|
-
// Ensure flyout does not load larger than the window and its buffer
|
|
391
|
-
if (window.innerWidth - this.flyoutWidth < __classPrivateFieldGet(this, _SkyFlyoutComponent_windowBufferSize, "f")) {
|
|
392
|
-
this.flyoutWidth = window.innerWidth - __classPrivateFieldGet(this, _SkyFlyoutComponent_windowBufferSize, "f");
|
|
393
|
-
__classPrivateFieldSet(this, _SkyFlyoutComponent_xCoord, __classPrivateFieldGet(this, _SkyFlyoutComponent_windowBufferSize, "f"), "f");
|
|
394
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_setUserData).call(this);
|
|
395
|
-
}
|
|
396
|
-
if (__classPrivateFieldGet(this, _SkyFlyoutComponent_flyoutMediaQueryService, "f").isWidthWithinBreakpoint(window.innerWidth, SkyMediaBreakpoints.xs)) {
|
|
397
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_updateBreakpointAndResponsiveClass).call(this, window.innerWidth);
|
|
398
|
-
}
|
|
399
|
-
else {
|
|
400
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_updateBreakpointAndResponsiveClass).call(this, this.flyoutWidth);
|
|
401
|
-
}
|
|
402
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_setFullscreen).call(this);
|
|
403
|
-
}, _SkyFlyoutComponent_getString = function _SkyFlyoutComponent_getString(key) {
|
|
404
|
-
// TODO: Need to implement the async `getString` method in a breaking change.
|
|
405
|
-
return __classPrivateFieldGet(this, _SkyFlyoutComponent_resourcesService, "f").getStringForLocale({ locale: 'en-US' }, key);
|
|
406
|
-
}, _SkyFlyoutComponent_handleResizeKeyDown = function _SkyFlyoutComponent_handleResizeKeyDown(event) {
|
|
407
|
-
/* istanbul ignore else */
|
|
408
|
-
if (event.key) {
|
|
409
|
-
const keyPressed = event.key.toLowerCase().replace('arrow', '');
|
|
410
|
-
switch (keyPressed) {
|
|
411
|
-
case 'enter':
|
|
412
|
-
case ' ':
|
|
413
|
-
this.resizeKeyControlActive = !this.resizeKeyControlActive;
|
|
414
|
-
break;
|
|
415
|
-
case 'tab':
|
|
416
|
-
/* istanbul ignore else */
|
|
417
|
-
if (this.resizeKeyControlActive) {
|
|
418
|
-
this.resizeKeyControlActive = false;
|
|
419
|
-
}
|
|
420
|
-
break;
|
|
421
|
-
case 'left':
|
|
422
|
-
if (this.resizeKeyControlActive) {
|
|
423
|
-
/* istanbul ignore else */
|
|
424
|
-
if (this.flyoutWidth < this.config.maxWidth) {
|
|
425
|
-
this.flyoutWidth = Math.min(this.flyoutWidth + this.widthStep, this.config.maxWidth);
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
break;
|
|
429
|
-
case 'right':
|
|
430
|
-
if (this.resizeKeyControlActive) {
|
|
431
|
-
/* istanbul ignore else */
|
|
432
|
-
if (this.flyoutWidth > this.config.minWidth) {
|
|
433
|
-
this.flyoutWidth = Math.max(this.flyoutWidth - this.widthStep, this.config.minWidth);
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
break;
|
|
437
|
-
/* istanbul ignore next */
|
|
438
|
-
default:
|
|
439
|
-
break;
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
}, _SkyFlyoutComponent_executeOnStable = function _SkyFlyoutComponent_executeOnStable(fn) {
|
|
443
|
-
if (__classPrivateFieldGet(this, _SkyFlyoutComponent_ngZone, "f").isStable) {
|
|
444
|
-
fn();
|
|
445
|
-
}
|
|
446
|
-
else {
|
|
447
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_ngZone, "f").onStable.pipe(take(1)).subscribe(fn);
|
|
448
|
-
}
|
|
449
|
-
}, _SkyFlyoutComponent_initFocusTrap = function _SkyFlyoutComponent_initFocusTrap() {
|
|
450
|
-
this.enableTrapFocusAutoCapture = false;
|
|
451
|
-
this.enableTrapFocus = false;
|
|
452
|
-
// Waiting for zone to be stable will avoid ExpressionChangeAfterCheckedError.
|
|
453
|
-
__classPrivateFieldGet(this, _SkyFlyoutComponent_instances, "m", _SkyFlyoutComponent_executeOnStable).call(this, () => {
|
|
454
|
-
this.enableTrapFocusAutoCapture = true;
|
|
455
|
-
this.enableTrapFocus = true;
|
|
456
|
-
});
|
|
457
|
-
};
|
|
458
|
-
SkyFlyoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyFlyoutComponent, deps: [{ token: i1.SkyFlyoutAdapterService }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ComponentFactoryResolver }, { token: i2.SkyLibResourcesService }, { token: i3.SkyFlyoutMediaQueryService }, { token: i0.ElementRef }, { token: i4.SkyUIConfigService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
459
|
-
SkyFlyoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SkyFlyoutComponent, selector: "sky-flyout", host: { listeners: { "window:resize": "onWindowResize($event)" } }, providers: [
|
|
460
|
-
SkyFlyoutAdapterService,
|
|
461
|
-
SkyFlyoutMediaQueryService,
|
|
462
|
-
{ provide: SkyMediaQueryService, useExisting: SkyFlyoutMediaQueryService },
|
|
463
|
-
], viewQueries: [{ propertyName: "flyoutRef", first: true, predicate: ["flyoutRef"], descendants: true, read: ElementRef, static: true }, { propertyName: "target", first: true, predicate: ["target"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "flyoutHeader", first: true, predicate: ["flyoutHeader"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div\n class=\"sky-flyout\"\n tabindex=\"-1\"\n [attr.role]=\"config.ariaRole ? config.ariaRole : 'dialog'\"\n [attr.aria-describedby]=\"config.ariaDescribedBy\"\n [attr.aria-label]=\"config.ariaLabel\"\n [attr.aria-labelledby]=\"config.ariaLabelledBy\"\n [attr.aria-modal]=\"\n config.ariaRole === 'dialog' || !config.ariaRole ? true : false\n \"\n [attr.hidden]=\"!instanceReady ? true : undefined\"\n [id]=\"flyoutId\"\n [ngClass]=\"{\n 'sky-flyout-hidden': !isOpen && !isOpening,\n 'sky-flyout-fullscreen': isFullscreen\n }\"\n [style.z-index]=\"zIndex$ | async\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-8': 'modern'\n }\"\n (@flyoutState.done)=\"animationDone($event)\"\n [@flyoutState]=\"getAnimationState()\"\n [style.width.px]=\"flyoutWidth\"\n #flyoutRef\n [cdkTrapFocus]=\"enableTrapFocus\"\n [cdkTrapFocusAutoCapture]=\"enableTrapFocusAutoCapture\"\n>\n <div\n class=\"sky-flyout-header\"\n [skyThemeClass]=\"{\n 'sky-padding-squish-large': 'default'\n }\"\n [style.z-index]=\"zIndex$ | async\"\n #flyoutHeader\n >\n <div class=\"sky-flyout-header-content\">\n <button\n *skyThemeIf=\"'modern'\"\n class=\"sky-btn sky-btn-icon-borderless sky-margin-inline-sm sky-flyout-header-grab-handle\"\n [attr.aria-label]=\"'skyux_flyout_resize_handle' | skyLibResources\"\n (keydown)=\"onHeaderGrabHandleKeyDown($event)\"\n (mousedown)=\"onHeaderGrabHandleMouseDown($event)\"\n >\n <sky-icon icon=\"tile-drag\" iconType=\"skyux\" size=\"lg\"> </sky-icon>\n </button>\n\n <sky-flyout-iterator\n *ngIf=\"config.showIterator\"\n [nextButtonDisabled]=\"config.iteratorNextButtonDisabled\"\n [previousButtonDisabled]=\"config.iteratorPreviousButtonDisabled\"\n (nextButtonClick)=\"onIteratorNextButtonClick()\"\n (previousButtonClick)=\"onIteratorPreviousButtonClick()\"\n >\n </sky-flyout-iterator>\n </div>\n <div class=\"sky-flyout-header-buttons\">\n <ng-container *ngTemplateOutlet=\"permalinkTemplate\"> </ng-container>\n <ng-container *ngTemplateOutlet=\"primaryActionTemplate\"> </ng-container>\n <button\n class=\"sky-btn sky-flyout-btn-close sky-label-icon-theme-default\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_flyout_close' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"close()\"\n >\n <sky-icon *skyThemeIf=\"'default'\" icon=\"close\"> </sky-icon>\n <sky-icon\n *skyThemeIf=\"'modern'\"\n icon=\"close\"\n iconType=\"skyux\"\n size=\"lg\"\n >\n </sky-icon>\n </button>\n </div>\n </div>\n <div class=\"sky-flyout-content\">\n <div #target></div>\n </div>\n <div\n class=\"sky-flyout-resize-handle\"\n role=\"separator\"\n tabindex=\"0\"\n type=\"range\"\n [attr.aria-controls]=\"flyoutId\"\n [attr.aria-label]=\"'skyux_flyout_resize_handle' | skyLibResources\"\n [attr.aria-valuemax]=\"config.maxWidth\"\n [attr.aria-valuemin]=\"config.minWidth\"\n [attr.aria-valuenow]=\"flyoutWidth\"\n (keydown)=\"onResizeHandleKeyDown($event)\"\n (mousedown)=\"onResizeHandleMouseDown($event)\"\n ></div>\n</div>\n\n<ng-template #permalinkTemplate>\n <ng-template [ngIf]=\"permalink\">\n <ng-template [ngIf]=\"permalink.url\">\n <a\n class=\"sky-btn sky-flyout-btn-permalink sky-margin-inline-default\"\n [skyHref]=\"permalink.url\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-borderless': 'modern'\n }\"\n (click)=\"close()\"\n >\n {{ permalinkLabel }}\n </a>\n </ng-template>\n <ng-template [ngIf]=\"permalink.route\">\n <a\n class=\"sky-btn sky-flyout-btn-permalink sky-margin-inline-default\"\n [routerLink]=\"permalink.route.commands\"\n [fragment]=\"permalink.route.extras?.fragment\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-borderless': 'modern'\n }\"\n [queryParams]=\"permalink.route.extras?.queryParams\"\n [queryParamsHandling]=\"permalink.route.extras?.queryParamsHandling\"\n [state]=\"permalink.route.extras?.state\"\n (click)=\"close()\"\n >\n {{ permalinkLabel }}\n </a>\n </ng-template>\n </ng-template>\n</ng-template>\n\n<ng-template #primaryActionTemplate>\n <ng-template [ngIf]=\"primaryAction && primaryAction.callback\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-flyout-btn-primary-action sky-margin-inline-default\"\n (click)=\"invokePrimaryAction()\"\n >\n {{ primaryActionLabel }}\n </button>\n </ng-template>\n</ng-template>\n", styles: [".sky-flyout{position:fixed;right:0;top:0;bottom:0;height:100%;background-color:#fff;--sky-background-color-page-default: #fff;border-left:6px solid #0974a1}.sky-flyout:focus{outline:none}.sky-flyout.sky-flyout-fullscreen{min-width:100%;max-width:100%}.sky-flyout.sky-flyout-fullscreen .sky-flyout-resize-handle{cursor:initial}.sky-flyout.sky-flyout-hidden{visibility:hidden}.sky-flyout .sky-flyout-input-aria-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0 0 0 0);outline:none}.sky-flyout-resize-handle{-webkit-appearance:none;-moz-appearance:none;height:100%;width:14px;position:absolute;left:-10px;cursor:ew-resize;padding:0;border:0;background:transparent;display:block;top:0;bottom:0;direction:rtl}.sky-flyout-resize-handle::-moz-range-thumb,.sky-flyout-resize-handle::-moz-range-track{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-flyout-resize-handle::-ms-thumb,.sky-flyout-resize-handle::-ms-track{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-flyout-resize-handle::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-flyout-header{border-bottom:1px solid #cdcfd2;width:inherit;background:#eeeeef;height:50px;display:flex;position:fixed;align-items:flex-start}.sky-flyout-header-content{flex-grow:1}.sky-flyout-btn-permalink:hover{text-decoration:none}.sky-flyout-help-shim{padding-right:8px}@media (min-width: 768px){.sky-flyout-help-shim{padding-right:50px}}.sky-flyout-content{overflow-y:auto;margin-top:50px;height:calc(100% - 50px)}:host-context(.sky-theme-modern) .sky-flyout{border-left:0}:host-context(.sky-theme-modern) .sky-flyout-header{border-bottom:none;background:#fff;padding:15px 10px}:host-context(.sky-theme-modern) .sky-flyout-header-grab-handle{cursor:move;cursor:-moz-grab}.sky-theme-modern .sky-flyout{border-left:0}.sky-theme-modern .sky-flyout-header{border-bottom:none;background:#fff;padding:15px 10px}.sky-theme-modern .sky-flyout-header-grab-handle{cursor:move;cursor:-moz-grab}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-flyout{background:#000;--sky-background-color-page-default: #000}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-flyout-header{background:#000}.sky-theme-modern.sky-theme-mode-dark .sky-flyout{background:#000;--sky-background-color-page-default: #000}.sky-theme-modern.sky-theme-mode-dark .sky-flyout-header{background:#000}\n"], dependencies: [{ kind: "directive", type: i5.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i8.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { kind: "directive", type: i9.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "directive", type: i9.λ3, selector: "[skyThemeIf]", inputs: ["skyThemeIf"] }, { kind: "directive", type: i10.λ1, selector: "[skyHref]", inputs: ["skyHref", "skyHrefElse"], outputs: ["skyHrefChange"] }, { kind: "component", type: i11.SkyFlyoutIteratorComponent, selector: "sky-flyout-iterator", inputs: ["nextButtonDisabled", "previousButtonDisabled"], outputs: ["previousButtonClick", "nextButtonClick"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.SkyLibResourcesPipe, name: "skyLibResources" }], animations: [
|
|
464
|
-
trigger('flyoutState', [
|
|
465
|
-
state(FLYOUT_OPEN_STATE, style({ transform: 'initial' })),
|
|
466
|
-
state(FLYOUT_CLOSED_STATE, style({ transform: 'translateX(100%)' })),
|
|
467
|
-
transition('void => *', [
|
|
468
|
-
style({ transform: 'translateX(100%)' }),
|
|
469
|
-
animate(250),
|
|
470
|
-
]),
|
|
471
|
-
transition(`* <=> *`, animate('250ms ease-in')),
|
|
472
|
-
]),
|
|
473
|
-
], changeDetection: i0.ChangeDetectionStrategy.Default });
|
|
474
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyFlyoutComponent, decorators: [{
|
|
475
|
-
type: Component,
|
|
476
|
-
args: [{ selector: 'sky-flyout', providers: [
|
|
477
|
-
SkyFlyoutAdapterService,
|
|
478
|
-
SkyFlyoutMediaQueryService,
|
|
479
|
-
{ provide: SkyMediaQueryService, useExisting: SkyFlyoutMediaQueryService },
|
|
480
|
-
], animations: [
|
|
481
|
-
trigger('flyoutState', [
|
|
482
|
-
state(FLYOUT_OPEN_STATE, style({ transform: 'initial' })),
|
|
483
|
-
state(FLYOUT_CLOSED_STATE, style({ transform: 'translateX(100%)' })),
|
|
484
|
-
transition('void => *', [
|
|
485
|
-
style({ transform: 'translateX(100%)' }),
|
|
486
|
-
animate(250),
|
|
487
|
-
]),
|
|
488
|
-
transition(`* <=> *`, animate('250ms ease-in')),
|
|
489
|
-
]),
|
|
490
|
-
], changeDetection: ChangeDetectionStrategy.Default, template: "<div\n class=\"sky-flyout\"\n tabindex=\"-1\"\n [attr.role]=\"config.ariaRole ? config.ariaRole : 'dialog'\"\n [attr.aria-describedby]=\"config.ariaDescribedBy\"\n [attr.aria-label]=\"config.ariaLabel\"\n [attr.aria-labelledby]=\"config.ariaLabelledBy\"\n [attr.aria-modal]=\"\n config.ariaRole === 'dialog' || !config.ariaRole ? true : false\n \"\n [attr.hidden]=\"!instanceReady ? true : undefined\"\n [id]=\"flyoutId\"\n [ngClass]=\"{\n 'sky-flyout-hidden': !isOpen && !isOpening,\n 'sky-flyout-fullscreen': isFullscreen\n }\"\n [style.z-index]=\"zIndex$ | async\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-8': 'modern'\n }\"\n (@flyoutState.done)=\"animationDone($event)\"\n [@flyoutState]=\"getAnimationState()\"\n [style.width.px]=\"flyoutWidth\"\n #flyoutRef\n [cdkTrapFocus]=\"enableTrapFocus\"\n [cdkTrapFocusAutoCapture]=\"enableTrapFocusAutoCapture\"\n>\n <div\n class=\"sky-flyout-header\"\n [skyThemeClass]=\"{\n 'sky-padding-squish-large': 'default'\n }\"\n [style.z-index]=\"zIndex$ | async\"\n #flyoutHeader\n >\n <div class=\"sky-flyout-header-content\">\n <button\n *skyThemeIf=\"'modern'\"\n class=\"sky-btn sky-btn-icon-borderless sky-margin-inline-sm sky-flyout-header-grab-handle\"\n [attr.aria-label]=\"'skyux_flyout_resize_handle' | skyLibResources\"\n (keydown)=\"onHeaderGrabHandleKeyDown($event)\"\n (mousedown)=\"onHeaderGrabHandleMouseDown($event)\"\n >\n <sky-icon icon=\"tile-drag\" iconType=\"skyux\" size=\"lg\"> </sky-icon>\n </button>\n\n <sky-flyout-iterator\n *ngIf=\"config.showIterator\"\n [nextButtonDisabled]=\"config.iteratorNextButtonDisabled\"\n [previousButtonDisabled]=\"config.iteratorPreviousButtonDisabled\"\n (nextButtonClick)=\"onIteratorNextButtonClick()\"\n (previousButtonClick)=\"onIteratorPreviousButtonClick()\"\n >\n </sky-flyout-iterator>\n </div>\n <div class=\"sky-flyout-header-buttons\">\n <ng-container *ngTemplateOutlet=\"permalinkTemplate\"> </ng-container>\n <ng-container *ngTemplateOutlet=\"primaryActionTemplate\"> </ng-container>\n <button\n class=\"sky-btn sky-flyout-btn-close sky-label-icon-theme-default\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_flyout_close' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"close()\"\n >\n <sky-icon *skyThemeIf=\"'default'\" icon=\"close\"> </sky-icon>\n <sky-icon\n *skyThemeIf=\"'modern'\"\n icon=\"close\"\n iconType=\"skyux\"\n size=\"lg\"\n >\n </sky-icon>\n </button>\n </div>\n </div>\n <div class=\"sky-flyout-content\">\n <div #target></div>\n </div>\n <div\n class=\"sky-flyout-resize-handle\"\n role=\"separator\"\n tabindex=\"0\"\n type=\"range\"\n [attr.aria-controls]=\"flyoutId\"\n [attr.aria-label]=\"'skyux_flyout_resize_handle' | skyLibResources\"\n [attr.aria-valuemax]=\"config.maxWidth\"\n [attr.aria-valuemin]=\"config.minWidth\"\n [attr.aria-valuenow]=\"flyoutWidth\"\n (keydown)=\"onResizeHandleKeyDown($event)\"\n (mousedown)=\"onResizeHandleMouseDown($event)\"\n ></div>\n</div>\n\n<ng-template #permalinkTemplate>\n <ng-template [ngIf]=\"permalink\">\n <ng-template [ngIf]=\"permalink.url\">\n <a\n class=\"sky-btn sky-flyout-btn-permalink sky-margin-inline-default\"\n [skyHref]=\"permalink.url\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-borderless': 'modern'\n }\"\n (click)=\"close()\"\n >\n {{ permalinkLabel }}\n </a>\n </ng-template>\n <ng-template [ngIf]=\"permalink.route\">\n <a\n class=\"sky-btn sky-flyout-btn-permalink sky-margin-inline-default\"\n [routerLink]=\"permalink.route.commands\"\n [fragment]=\"permalink.route.extras?.fragment\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-borderless': 'modern'\n }\"\n [queryParams]=\"permalink.route.extras?.queryParams\"\n [queryParamsHandling]=\"permalink.route.extras?.queryParamsHandling\"\n [state]=\"permalink.route.extras?.state\"\n (click)=\"close()\"\n >\n {{ permalinkLabel }}\n </a>\n </ng-template>\n </ng-template>\n</ng-template>\n\n<ng-template #primaryActionTemplate>\n <ng-template [ngIf]=\"primaryAction && primaryAction.callback\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-flyout-btn-primary-action sky-margin-inline-default\"\n (click)=\"invokePrimaryAction()\"\n >\n {{ primaryActionLabel }}\n </button>\n </ng-template>\n</ng-template>\n", styles: [".sky-flyout{position:fixed;right:0;top:0;bottom:0;height:100%;background-color:#fff;--sky-background-color-page-default: #fff;border-left:6px solid #0974a1}.sky-flyout:focus{outline:none}.sky-flyout.sky-flyout-fullscreen{min-width:100%;max-width:100%}.sky-flyout.sky-flyout-fullscreen .sky-flyout-resize-handle{cursor:initial}.sky-flyout.sky-flyout-hidden{visibility:hidden}.sky-flyout .sky-flyout-input-aria-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0 0 0 0);outline:none}.sky-flyout-resize-handle{-webkit-appearance:none;-moz-appearance:none;height:100%;width:14px;position:absolute;left:-10px;cursor:ew-resize;padding:0;border:0;background:transparent;display:block;top:0;bottom:0;direction:rtl}.sky-flyout-resize-handle::-moz-range-thumb,.sky-flyout-resize-handle::-moz-range-track{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-flyout-resize-handle::-ms-thumb,.sky-flyout-resize-handle::-ms-track{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-flyout-resize-handle::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-flyout-header{border-bottom:1px solid #cdcfd2;width:inherit;background:#eeeeef;height:50px;display:flex;position:fixed;align-items:flex-start}.sky-flyout-header-content{flex-grow:1}.sky-flyout-btn-permalink:hover{text-decoration:none}.sky-flyout-help-shim{padding-right:8px}@media (min-width: 768px){.sky-flyout-help-shim{padding-right:50px}}.sky-flyout-content{overflow-y:auto;margin-top:50px;height:calc(100% - 50px)}:host-context(.sky-theme-modern) .sky-flyout{border-left:0}:host-context(.sky-theme-modern) .sky-flyout-header{border-bottom:none;background:#fff;padding:15px 10px}:host-context(.sky-theme-modern) .sky-flyout-header-grab-handle{cursor:move;cursor:-moz-grab}.sky-theme-modern .sky-flyout{border-left:0}.sky-theme-modern .sky-flyout-header{border-bottom:none;background:#fff;padding:15px 10px}.sky-theme-modern .sky-flyout-header-grab-handle{cursor:move;cursor:-moz-grab}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-flyout{background:#000;--sky-background-color-page-default: #000}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-flyout-header{background:#000}.sky-theme-modern.sky-theme-mode-dark .sky-flyout{background:#000;--sky-background-color-page-default: #000}.sky-theme-modern.sky-theme-mode-dark .sky-flyout-header{background:#000}\n"] }]
|
|
491
|
-
}], ctorParameters: function () { return [{ type: i1.SkyFlyoutAdapterService }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i0.ComponentFactoryResolver }, { type: i2.SkyLibResourcesService }, { type: i3.SkyFlyoutMediaQueryService }, { type: i0.ElementRef }, { type: i4.SkyUIConfigService }, { type: i0.NgZone }]; }, propDecorators: { flyoutRef: [{
|
|
492
|
-
type: ViewChild,
|
|
493
|
-
args: ['flyoutRef', {
|
|
494
|
-
read: ElementRef,
|
|
495
|
-
static: true,
|
|
496
|
-
}]
|
|
497
|
-
}], target: [{
|
|
498
|
-
type: ViewChild,
|
|
499
|
-
args: ['target', {
|
|
500
|
-
read: ViewContainerRef,
|
|
501
|
-
static: true,
|
|
502
|
-
}]
|
|
503
|
-
}], flyoutHeader: [{
|
|
504
|
-
type: ViewChild,
|
|
505
|
-
args: ['flyoutHeader', {
|
|
506
|
-
read: ElementRef,
|
|
507
|
-
static: true,
|
|
508
|
-
}]
|
|
509
|
-
}], onWindowResize: [{
|
|
510
|
-
type: HostListener,
|
|
511
|
-
args: ['window:resize', ['$event']]
|
|
512
|
-
}] } });
|
|
513
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mbHlvdXQvc3JjL2xpYi9tb2R1bGVzL2ZseW91dC9mbHlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2ZseW91dC9zcmMvbGliL21vZHVsZXMvZmx5b3V0L2ZseW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCxPQUFPLEVBQ1AsS0FBSyxFQUNMLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxHQUNSLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBS1IsU0FBUyxFQUNULGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixvQkFBb0IsR0FFckIsTUFBTSxhQUFhLENBQUM7QUFHckIsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBSWxGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7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QkFEcEIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBbmltYXRpb25FdmVudCxcbiAgYW5pbWF0ZSxcbiAgc3RhdGUsXG4gIHN0eWxlLFxuICB0cmFuc2l0aW9uLFxuICB0cmlnZ2VyLFxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0b3IsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfU1RBQ0tJTkdfQ09OVEVYVCxcbiAgU2t5TWVkaWFCcmVha3BvaW50cyxcbiAgU2t5TWVkaWFRdWVyeVNlcnZpY2UsXG4gIFNreVVJQ29uZmlnU2VydmljZSxcbn0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCwgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lGbHlvdXRBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vZmx5b3V0LWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lGbHlvdXRJbnN0YW5jZSB9IGZyb20gJy4vZmx5b3V0LWluc3RhbmNlJztcbmltcG9ydCB7IFNreUZseW91dE1lZGlhUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi9mbHlvdXQtbWVkaWEtcXVlcnkuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lGbHlvdXRBY3Rpb24gfSBmcm9tICcuL3R5cGVzL2ZseW91dC1hY3Rpb24nO1xuaW1wb3J0IHsgU2t5Rmx5b3V0QmVmb3JlQ2xvc2VIYW5kbGVyIH0gZnJvbSAnLi90eXBlcy9mbHlvdXQtYmVmb3JlLWNsb3NlLWhhbmRsZXInO1xuaW1wb3J0IHsgU2t5Rmx5b3V0Q29uZmlnIH0gZnJvbSAnLi90eXBlcy9mbHlvdXQtY29uZmlnJztcbmltcG9ydCB7IFNreUZseW91dENvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi90eXBlcy9mbHlvdXQtY29uZmlnLWludGVybmFsJztcbmltcG9ydCB7IFNreUZseW91dE1lc3NhZ2UgfSBmcm9tICcuL3R5cGVzL2ZseW91dC1tZXNzYWdlJztcbmltcG9ydCB7IFNreUZseW91dE1lc3NhZ2VUeXBlIH0gZnJvbSAnLi90eXBlcy9mbHlvdXQtbWVzc2FnZS10eXBlJztcbmltcG9ydCB7IFNreUZseW91dFBlcm1hbGluayB9IGZyb20gJy4vdHlwZXMvZmx5b3V0LXBlcm1hbGluayc7XG5cbmNvbnN0IEZMWU9VVF9PUEVOX1NUQVRFID0gJ2ZseW91dE9wZW4nO1xuY29uc3QgRkxZT1VUX0NMT1NFRF9TVEFURSA9ICdmbHlvdXRDbG9zZWQnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWZseW91dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9mbHlvdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mbHlvdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU2t5Rmx5b3V0QWRhcHRlclNlcnZpY2UsXG4gICAgU2t5Rmx5b3V0TWVkaWFRdWVyeVNlcnZpY2UsXG4gICAgeyBwcm92aWRlOiBTa3lNZWRpYVF1ZXJ5U2VydmljZSwgdXNlRXhpc3Rpbmc6IFNreUZseW91dE1lZGlhUXVlcnlTZXJ2aWNlIH0sXG4gIF0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdmbHlvdXRTdGF0ZScsIFtcbiAgICAgIHN0YXRlKEZMWU9VVF9PUEVOX1NUQVRFLCBzdHlsZSh7IHRyYW5zZm9ybTogJ2luaXRpYWwnIH0pKSxcbiAgICAgIHN0YXRlKEZMWU9VVF9DTE9TRURfU1RBVEUsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgxMDAlKScgfSkpLFxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgW1xuICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMTAwJSknIH0pLFxuICAgICAgICBhbmltYXRlKDI1MCksXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oYCogPD0+ICpgLCBhbmltYXRlKCcyNTBtcyBlYXNlLWluJykpLFxuICAgIF0pLFxuICBdLFxuICAvLyBBbGxvdyBhdXRvbWF0aWMgY2hhbmdlIGRldGVjdGlvbiBmb3IgY2hpbGQgY29tcG9uZW50cy5cbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxufSlcbmV4cG9ydCBjbGFzcyBTa3lGbHlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIHB1YmxpYyBjb25maWc6IFNreUZseW91dENvbmZpZ0ludGVybmFsID0ge1xuICAgIGRlZmF1bHRXaWR0aDogd2luZG93LmlubmVyV2lkdGggLyAyLFxuICAgIG1pbldpZHRoOiAzMjAsXG4gICAgbWF4V2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoIC8gMixcbiAgICBwcm92aWRlcnM6IFtdLFxuICB9O1xuICBwdWJsaWMgZW5hYmxlVHJhcEZvY3VzID0gZmFsc2U7XG4gIHB1YmxpYyBlbmFibGVUcmFwRm9jdXNBdXRvQ2FwdHVyZSA9IGZhbHNlO1xuICBwdWJsaWMgZmx5b3V0SWQgPSBgc2t5LWZseW91dC0keysrbmV4dElkfWA7XG4gIHB1YmxpYyBmbHlvdXRTdGF0ZSA9IEZMWU9VVF9DTE9TRURfU1RBVEU7XG4gIHB1YmxpYyBpc09wZW4gPSBmYWxzZTtcbiAgcHVibGljIGlzT3BlbmluZyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBmbHlvdXRXaWR0aCA9IDA7XG4gIHB1YmxpYyBpbnN0YW5jZVJlYWR5ID0gZmFsc2U7XG4gIHB1YmxpYyBpc0RyYWdnaW5nID0gZmFsc2U7XG4gIHB1YmxpYyBpc0Z1bGxzY3JlZW4gPSBmYWxzZTtcbiAgcHVibGljIHJlc2l6ZUtleUNvbnRyb2xBY3RpdmUgPSBmYWxzZTtcblxuICAjeENvb3JkID0gMDtcbiAgI3dpbmRvd0J1ZmZlclNpemUgPSAyMDtcblxuICBwdWJsaWMgZ2V0IG1lc3NhZ2VTdHJlYW0oKTogU3ViamVjdDxTa3lGbHlvdXRNZXNzYWdlPiB7XG4gICAgcmV0dXJuIHRoaXMuI19tZXNzYWdlU3RyZWFtO1xuICB9XG5cbiAgcHVibGljIHBlcm1hbGluazogU2t5Rmx5b3V0UGVybWFsaW5rID0ge307XG5cbiAgcHVibGljIHBlcm1hbGlua0xhYmVsID0gJyc7XG5cbiAgcHVibGljIHByaW1hcnlBY3Rpb246IFNreUZseW91dEFjdGlvbiA9IHt9O1xuXG4gIHB1YmxpYyBwcmltYXJ5QWN0aW9uTGFiZWwgPSAnJztcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgd2lkdGhTdGVwID0gMTA7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQFZpZXdDaGlsZCgnZmx5b3V0UmVmJywge1xuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwdWJsaWMgZmx5b3V0UmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhcmdldCcsIHtcbiAgICByZWFkOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHVibGljIHRhcmdldDogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdmbHlvdXRIZWFkZXInLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIHB1YmxpYyBmbHlvdXRIZWFkZXI6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIHpJbmRleCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDEwMDEpO1xuXG4gICNmbHlvdXRJbnN0YW5jZTogU2t5Rmx5b3V0SW5zdGFuY2U8YW55PiB8IHVuZGVmaW5lZDtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI19tZXNzYWdlU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5Rmx5b3V0TWVzc2FnZT4oKTtcblxuICAjYWRhcHRlcjogU2t5Rmx5b3V0QWRhcHRlclNlcnZpY2U7XG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICNpbmplY3RvcjogSW5qZWN0b3I7XG4gICNyZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyO1xuICAjcmVzb3VyY2VzU2VydmljZTogU2t5TGliUmVzb3VyY2VzU2VydmljZTtcbiAgI2ZseW91dE1lZGlhUXVlcnlTZXJ2aWNlOiBTa3lGbHlvdXRNZWRpYVF1ZXJ5U2VydmljZTtcbiAgI2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICN1aUNvbmZpZ1NlcnZpY2U6IFNreVVJQ29uZmlnU2VydmljZTtcbiAgI25nWm9uZTogTmdab25lO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGFkYXB0ZXI6IFNreUZseW91dEFkYXB0ZXJTZXJ2aWNlLFxuICAgIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICByZXNvdXJjZXNTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlLFxuICAgIGZseW91dE1lZGlhUXVlcnlTZXJ2aWNlOiBTa3lGbHlvdXRNZWRpYVF1ZXJ5U2VydmljZSxcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHVpQ29uZmlnU2VydmljZTogU2t5VUlDb25maWdTZXJ2aWNlLFxuICAgIG5nWm9uZTogTmdab25lXG4gICkge1xuICAgIHRoaXMuI2FkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgdGhpcy4jaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICB0aGlzLiNyZXNvbHZlciA9IHJlc29sdmVyO1xuICAgIHRoaXMuI3Jlc291cmNlc1NlcnZpY2UgPSByZXNvdXJjZXNTZXJ2aWNlO1xuICAgIHRoaXMuI2ZseW91dE1lZGlhUXVlcnlTZXJ2aWNlID0gZmx5b3V0TWVkaWFRdWVyeVNlcnZpY2U7XG4gICAgdGhpcy4jZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgdGhpcy4jdWlDb25maWdTZXJ2aWNlID0gdWlDb25maWdTZXJ2aWNlO1xuICAgIHRoaXMuI25nWm9uZSA9IG5nWm9uZTtcblxuICAgIC8vIEFsbCBjb21tYW5kcyBmbG93IHRocm91Z2ggdGhlIG1lc3NhZ2Ugc3RyZWFtLlxuICAgIHRoaXMubWVzc2FnZVN0cmVhbVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobWVzc2FnZTogU2t5Rmx5b3V0TWVzc2FnZSkgPT4ge1xuICAgICAgICB0aGlzLiNoYW5kbGVJbmNvbWluZ01lc3NhZ2VzKG1lc3NhZ2UpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5mbHlvdXRIZWFkZXIpIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXIuYWRqdXN0SGVhZGVyRm9ySGVscCh0aGlzLmZseW91dEhlYWRlcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25XaW5kb3dSZXNpemUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuI2ZseW91dE1lZGlhUXVlcnlTZXJ2aWNlLmlzV2lkdGhXaXRoaW5CcmVha3BvaW50KFxuICAgICAgICBldmVudC50YXJnZXQuaW5uZXJXaWR0aCxcbiAgICAgICAgU2t5TWVkaWFCcmVha3BvaW50cy54c1xuICAgICAgKVxuICAgICkge1xuICAgICAgdGhpcy4jdXBkYXRlQnJlYWtwb2ludEFuZFJlc3BvbnNpdmVDbGFzcyhldmVudC50YXJnZXQuaW5uZXJXaWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI3VwZGF0ZUJyZWFrcG9pbnRBbmRSZXNwb25zaXZlQ2xhc3ModGhpcy5mbHlvdXRXaWR0aCk7XG4gICAgfVxuXG4gICAgdGhpcy4jc2V0RnVsbHNjcmVlbigpO1xuXG4gICAgaWYgKGV2ZW50LnRhcmdldC5pbm5lcldpZHRoIC0gdGhpcy5mbHlvdXRXaWR0aCA8IHRoaXMuI3dpbmRvd0J1ZmZlclNpemUpIHtcbiAgICAgIHRoaXMuZmx5b3V0V2lkdGggPSBldmVudC50YXJnZXQuaW5uZXJXaWR0aCAtIHRoaXMuI3dpbmRvd0J1ZmZlclNpemU7XG4gICAgICB0aGlzLiN4Q29vcmQgPSB0aGlzLiN3aW5kb3dCdWZmZXJTaXplO1xuICAgICAgdGhpcy4jc2V0VXNlckRhdGEoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXR0YWNoPFQ+KFxuICAgIGNvbXBvbmVudDogVHlwZTxUPixcbiAgICBjb25maWc/OiBTa3lGbHlvdXRDb25maWdcbiAgKTogU2t5Rmx5b3V0SW5zdGFuY2U8VD4ge1xuICAgIHRoaXMuI2NsZWFuVGVtcGxhdGUoKTtcblxuICAgIC8vIEVtaXQgdGhlIGNsb3NlZCBldmVudCBvbiBhbnkgcHJldmlvdXNseSBvcGVuZWQgZmx5b3V0IGluc3RhbmNlXG4gICAgaWYgKHRoaXMuI2ZseW91dEluc3RhbmNlKSB7XG4gICAgICB0aGlzLiNub3RpZnlDbG9zZWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIGRlZmF1bHRXaWR0aDogd2luZG93LmlubmVyV2lkdGggLyAyLFxuICAgICAgICBtaW5XaWR0aDogMzIwLFxuICAgICAgICBtYXhXaWR0aDogd2luZG93LmlubmVyV2lkdGggLyAyLFxuICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBTS1lfU1RBQ0tJTkdfQ09OVEVYVCxcbiAgICAgICAgICAgIHVzZVZhbHVlOiB7XG4gICAgICAgICAgICAgIHpJbmRleDogdGhpcy56SW5kZXgkXG4gICAgICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIGlmIChjb25maWc/LmRlZmF1bHRXaWR0aCAmJiAhY29uZmlnPy5tYXhXaWR0aCkge1xuICAgICAgdGhpcy5jb25maWcubWF4V2lkdGggPSBjb25maWc/LmRlZmF1bHRXaWR0aDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZy5zaG93SXRlcmF0b3IgPSB0aGlzLmNvbmZpZy5zaG93SXRlcmF0b3IgfHwgZmFsc2U7XG4gICAgdGhpcy5jb25maWcuaXRlcmF0b3JOZXh0QnV0dG9uRGlzYWJsZWQgPVxuICAgICAgdGhpcy5jb25maWcuaXRlcmF0b3JOZXh0QnV0dG9uRGlzYWJsZWQgfHwgZmFsc2U7XG4gICAgdGhpcy5jb25maWcuaXRlcmF0b3JQcmV2aW91c0J1dHRvbkRpc2FibGVkID1cbiAgICAgIHRoaXMuY29uZmlnLml0ZXJhdG9yUHJldmlvdXNCdXR0b25EaXNhYmxlZCB8fCBmYWxzZTtcblxuICAgIHRoaXMucGVybWFsaW5rID0gdGhpcy5jb25maWcucGVybWFsaW5rID8/IHt9O1xuICAgIHRoaXMucGVybWFsaW5rTGFiZWwgPVxuICAgICAgdGhpcy5jb25maWcucGVybWFsaW5rICYmIHRoaXMuY29uZmlnLnBlcm1hbGluay5sYWJlbFxuICAgICAgICA/IHRoaXMuY29uZmlnLnBlcm1hbGluay5sYWJlbFxuICAgICAgICA6IHRoaXMuI2dldFN0cmluZygnc2t5dXhfZmx5b3V0X3Blcm1hbGlua19idXR0b24nKTtcblxuICAgIHRoaXMucHJpbWFyeUFjdGlvbiA9IHRoaXMuY29uZmlnLnByaW1hcnlBY3Rpb24gPz8ge307XG4gICAgdGhpcy5wcmltYXJ5QWN0aW9uTGFiZWwgPVxuICAgICAgdGhpcy5jb25maWcucHJpbWFyeUFjdGlvbiAmJiB0aGlzLmNvbmZpZy5wcmltYXJ5QWN0aW9uLmxhYmVsXG4gICAgICAgID8gdGhpcy5jb25maWcucHJpbWFyeUFjdGlvbi5sYWJlbFxuICAgICAgICA6IHRoaXMuI2dldFN0cmluZygnc2t5dXhfZmx5b3V0X3ByaW1hcnlfYWN0aW9uX2J1dHRvbicpO1xuXG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuI3Jlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCk7XG5cbiAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwYXJlbnQ6IHRoaXMuI2luamVjdG9yLFxuICAgICAgcHJvdmlkZXJzOiB0aGlzLmNvbmZpZy5wcm92aWRlcnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLnRhcmdldD8uY3JlYXRlQ29tcG9uZW50KFxuICAgICAgZmFjdG9yeSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGluamVjdG9yXG4gICAgKTtcblxuICAgIC8qIHNhZmV0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY29tcG9uZW50UmVmKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGbHlvdXQncyBpbnRlcm5hbCBjb21wb25lbnQgY291bGQgbm90IGJlIGNyZWF0ZWRcIik7XG4gICAgfVxuXG4gICAgdGhpcy4jZmx5b3V0SW5zdGFuY2UgPSB0aGlzLiNjcmVhdGVGbHlvdXRJbnN0YW5jZTxUPihjb21wb25lbnRSZWYuaW5zdGFuY2UpO1xuXG4gICAgLy8gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkbyBub3QgcmVuZGVyIHRoZSBmbHlvdXQgdW50aWwgd2UgaGF2ZSBhdHRhY2hlZCB0aGUgY29tcG9uZW50LlxuICAgIC8vIFRoaXMgYWxsb3dzIHRoZSBhcmlhLWxhYmVsbGVkYnkgdG8gZnVuY3Rpb24gY29ycmVjdGx5LlxuICAgIHRoaXMuaW5zdGFuY2VSZWFkeSA9IHRydWU7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG5cbiAgICAvLyBPcGVuIHRoZSBmbHlvdXQgaW1tZWRpYXRlbHkuXG4gICAgdGhpcy5tZXNzYWdlU3RyZWFtLm5leHQoe1xuICAgICAgdHlwZTogU2t5Rmx5b3V0TWVzc2FnZVR5cGUuT3BlbixcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5zZXR0aW5nc0tleSkge1xuICAgICAgdGhpcy4jdWlDb25maWdTZXJ2aWNlXG4gICAgICAgIC5nZXRDb25maWcodGhpcy5jb25maWcuc2V0dGluZ3NLZXkpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuZmx5b3V0V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuZmx5b3V0V2lkdGggPSB2YWx1ZS5mbHlvdXRXaWR0aDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQmFkIGRhdGEsIG9yIGNvbmZpZyBpcyB0aGUgZGVmYXVsdCBjb25maWcuXG4gICAgICAgICAgICB0aGlzLmZseW91dFdpZHRoID0gdGhpcy5jb25maWcuZGVmYXVsdFdpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLiNjaGVja0luaXRpYWxTaXplKCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZseW91dFdpZHRoID0gdGhpcy5jb25maWcuZGVmYXVsdFdpZHRoO1xuICAgICAgdGhpcy4jY2hlY2tJbml0aWFsU2l6ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNmbHlvdXRJbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1lc3NhZ2VTdHJlYW0ubmV4dCh7XG4gICAgICB0eXBlOiBTa3lGbHlvdXRNZXNzYWdlVHlwZS5DbG9zZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbnZva2VQcmltYXJ5QWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnByaW1hcnlBY3Rpb24uY2FsbGJhY2spIHtcbiAgICAgIHRoaXMucHJpbWFyeUFjdGlvbi5jYWxsYmFjaygpO1xuXG4gICAgICBpZiAodGhpcy5wcmltYXJ5QWN0aW9uLmNsb3NlQWZ0ZXJJbnZva2luZykge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBbmltYXRpb25TdGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbmNlUmVhZHkgJiYgdGhpcy5pc09wZW5pbmdcbiAgICAgID8gRkxZT1VUX09QRU5fU1RBVEVcbiAgICAgIDogRkxZT1VUX0NMT1NFRF9TVEFURTtcbiAgfVxuXG4gIHB1YmxpYyBhbmltYXRpb25Eb25lKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC50b1N0YXRlID09PSBGTFlPVVRfT1BFTl9TVEFURSkge1xuICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChldmVudC50b1N0YXRlID09PSBGTFlPVVRfQ0xPU0VEX1NUQVRFKSB7XG4gICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy4jbm90aWZ5Q2xvc2VkKCk7XG4gICAgICB0aGlzLiNjbGVhblRlbXBsYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSGVhZGVyR3JhYkhhbmRsZU1vdXNlRG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMub25SZXNpemVIYW5kbGVNb3VzZURvd24oZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIG9uSGVhZGVyR3JhYkhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLiNoYW5kbGVSZXNpemVLZXlEb3duKGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZUhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLiNoYW5kbGVSZXNpemVLZXlEb3duKGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZUhhbmRsZU1vdXNlRG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5pc0Z1bGxzY3JlZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMuI3hDb29yZCA9IGV2ZW50LmNsaWVudFg7XG5cbiAgICB0aGlzLiNhZGFwdGVyLnRvZ2dsZUlmcmFtZVBvaW50ZXJFdmVudHMoZmFsc2UpO1xuXG4gICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vtb3ZlJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzRHJhZ2dpbmc7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChtb3ZlRXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uTW91c2VNb3ZlKG1vdmVFdmVudCk7XG4gICAgICB9KTtcblxuICAgIGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNldXAnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNEcmFnZ2luZztcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKG1vdXNlVXBFdmVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25IYW5kbGVSZWxlYXNlKG1vdXNlVXBFdmVudCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb2Zmc2V0WCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLiN4Q29vcmQ7XG4gICAgbGV0IHdpZHRoID0gdGhpcy5mbHlvdXRXaWR0aDtcblxuICAgIHdpZHRoIC09IG9mZnNldFg7XG5cbiAgICBpZiAod2lkdGggPCB0aGlzLmNvbmZpZy5taW5XaWR0aCB8fCB3aWR0aCA+IHRoaXMuY29uZmlnLm1heFdpZHRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIC0gd2lkdGggPCB0aGlzLiN3aW5kb3dCdWZmZXJTaXplKSB7XG4gICAgICB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gdGhpcy4jd2luZG93QnVmZmVyU2l6ZTtcbiAgICAgIHRoaXMuI3hDb29yZCA9IHRoaXMuI3dpbmRvd0J1ZmZlclNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI3hDb29yZCA9IGV2ZW50LmNsaWVudFg7XG4gICAgfVxuXG4gICAgdGhpcy5mbHlvdXRXaWR0aCA9IHdpZHRoO1xuXG4gICAgdGhpcy4jdXBkYXRlQnJlYWtwb2ludEFuZFJlc3BvbnNpdmVDbGFzcyh0aGlzLmZseW91dFdpZHRoKTtcblxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIG9uSGFuZGxlUmVsZWFzZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJylcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuI2FkYXB0ZXIudG9nZ2xlSWZyYW1lUG9pbnRlckV2ZW50cyh0cnVlKTtcbiAgICAgICAgdGhpcy4jc2V0VXNlckRhdGEoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uSXRlcmF0b3JQcmV2aW91c0J1dHRvbkNsaWNrKCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuI2ZseW91dEluc3RhbmNlKSB7XG4gICAgICB0aGlzLiNmbHlvdXRJbnN0YW5jZS5pdGVyYXRvclByZXZpb3VzQnV0dG9uQ2xpY2suZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkl0ZXJhdG9yTmV4dEJ1dHRvbkNsaWNrKCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuI2ZseW91dEluc3RhbmNlKSB7XG4gICAgICB0aGlzLiNmbHlvdXRJbnN0YW5jZS5pdGVyYXRvck5leHRCdXR0b25DbGljay5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgI2NyZWF0ZUZseW91dEluc3RhbmNlPFQ+KGNvbXBvbmVudDogVCk6IFNreUZseW91dEluc3RhbmNlPFQ+IHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBTa3lGbHlvdXRJbnN0YW5jZTxUPihjb21wb25lbnQpO1xuXG4gICAgaW5zdGFuY2UuaG9zdENvbnRyb2xsZXJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2U6IFNreUZseW91dE1lc3NhZ2UpID0+IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU3RyZWFtLm5leHQobWVzc2FnZSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gICNoYW5kbGVJbmNvbWluZ01lc3NhZ2VzKG1lc3NhZ2U6IFNreUZseW91dE1lc3NhZ2UpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgY2FzZSBTa3lGbHlvdXRNZXNzYWdlVHlwZS5PcGVuOlxuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzT3BlbmluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jaW5pdEZvY3VzVHJhcCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTa3lGbHlvdXRNZXNzYWdlVHlwZS5DbG9zZTpcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0aGlzLiNmbHlvdXRJbnN0YW5jZT8uYmVmb3JlQ2xvc2UgYXMgU3ViamVjdDxhbnk+KT8ub2JzZXJ2ZXJzXG4gICAgICAgICAgICAubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgbWVzc2FnZS5kYXRhPy5pZ25vcmVCZWZvcmVDbG9zZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc09wZW5pbmcgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAodGhpcy4jZmx5b3V0SW5zdGFuY2U/LmJlZm9yZUNsb3NlIGFzIFN1YmplY3Q8YW55Pik/Lm5leHQoXG4gICAgICAgICAgICBuZXcgU2t5Rmx5b3V0QmVmb3JlQ2xvc2VIYW5kbGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLmlzT3BlbmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNreUZseW91dE1lc3NhZ2VUeXBlLkVuYWJsZUl0ZXJhdG9yTmV4dEJ1dHRvbjpcbiAgICAgICAgdGhpcy5jb25maWcuaXRlcmF0b3JOZXh0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2t5Rmx5b3V0TWVzc2FnZVR5cGUuRW5hYmxlSXRlcmF0b3JQcmV2aW91c0J1dHRvbjpcbiAgICAgICAgdGhpcy5jb25maWcuaXRlcmF0b3JQcmV2aW91c0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNreUZseW91dE1lc3NhZ2VUeXBlLkRpc2FibGVJdGVyYXRvck5leHRCdXR0b246XG4gICAgICAgIHRoaXMuY29uZmlnLml0ZXJhdG9yTmV4dEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2t5Rmx5b3V0TWVzc2FnZVR5cGUuRGlzYWJsZUl0ZXJhdG9yUHJldmlvdXNCdXR0b246XG4gICAgICAgIHRoaXMuY29uZmlnLml0ZXJhdG9yUHJldmlvdXNCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgI25vdGlmeUNsb3NlZCgpOiB2b2lkIHtcbiAgICB0aGlzLiNmbHlvdXRJbnN0YW5jZT8uY2xvc2VkLmVtaXQoKTtcbiAgICB0aGlzLiNmbHlvdXRJbnN0YW5jZT8uY2xvc2VkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAjY2xlYW5UZW1wbGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhcmdldD8uY2xlYXIoKTtcbiAgfVxuXG4gICN1cGRhdGVCcmVha3BvaW50QW5kUmVzcG9uc2l2ZUNsYXNzKHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNmbHlvdXRNZWRpYVF1ZXJ5U2VydmljZS5zZXRCcmVha3BvaW50Rm9yV2lkdGgod2lkdGgpO1xuXG4gICAgY29uc3QgbmV3QnJlYWtwb2ludCA9IHRoaXMuI2ZseW91dE1lZGlhUXVlcnlTZXJ2aWNlLmN1cnJlbnQ7XG5cbiAgICB0aGlzLiNhZGFwdGVyLnNldFJlc3BvbnNpdmVDbGFzcyh0aGlzLiNlbGVtZW50UmVmLCBuZXdCcmVha3BvaW50KTtcbiAgfVxuXG4gICNzZXRGdWxsc2NyZWVuKCk6IHZvaWQge1xuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCAtIHRoaXMuI3dpbmRvd0J1ZmZlclNpemUgPCB0aGlzLmNvbmZpZy5taW5XaWR0aCkge1xuICAgICAgdGhpcy5pc0Z1bGxzY3JlZW4gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRnVsbHNjcmVlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gICNzZXRVc2VyRGF0YSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcuc2V0dGluZ3NLZXkpIHtcbiAgICAgIHRoaXMuI3VpQ29uZmlnU2VydmljZVxuICAgICAgICAuc2V0Q29uZmlnKHRoaXMuY29uZmlnLnNldHRpbmdzS2V5LCB7XG4gICAgICAgICAgZmx5b3V0V2lkdGg6IHRoaXMuZmx5b3V0V2lkdGgsXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgICAgICAgICgpID0+IHt9LFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQ291bGQgbm90IHNhdmUgZmx5b3V0IGRhdGEuJyk7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgI2NoZWNrSW5pdGlhbFNpemUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmx5b3V0V2lkdGggPCB0aGlzLmNvbmZpZy5taW5XaWR0aCkge1xuICAgICAgdGhpcy5mbHlvdXRXaWR0aCA9IHRoaXMuY29uZmlnLm1pbldpZHRoO1xuICAgICAgdGhpcy4jc2V0VXNlckRhdGEoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmx5b3V0V2lkdGggPiB0aGlzLmNvbmZpZy5tYXhXaWR0aCkge1xuICAgICAgdGhpcy5mbHlvdXRXaWR0aCA9IHRoaXMuY29uZmlnLm1heFdpZHRoO1xuICAgICAgdGhpcy4jc2V0VXNlckRhdGEoKTtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgZmx5b3V0IGRvZXMgbm90IGxvYWQgbGFyZ2VyIHRoYW4gdGhlIHdpbmRvdyBhbmQgaXRzIGJ1ZmZlclxuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCAtIHRoaXMuZmx5b3V0V2lkdGggPCB0aGlzLiN3aW5kb3dCdWZmZXJTaXplKSB7XG4gICAgICB0aGlzLmZseW91dFdpZHRoID0gd2luZG93LmlubmVyV2lkdGggLSB0aGlzLiN3aW5kb3dCdWZmZXJTaXplO1xuICAgICAgdGhpcy4jeENvb3JkID0gdGhpcy4jd2luZG93QnVmZmVyU2l6ZTtcbiAgICAgIHRoaXMuI3NldFVzZXJEYXRhKCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy4jZmx5b3V0TWVkaWFRdWVyeVNlcnZpY2UuaXNXaWR0aFdpdGhpbkJyZWFrcG9pbnQoXG4gICAgICAgIHdpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgICBTa3lNZWRpYUJyZWFrcG9pbnRzLnhzXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aGlzLiN1cGRhdGVCcmVha3BvaW50QW5kUmVzcG9uc2l2ZUNsYXNzKHdpbmRvdy5pbm5lcldpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jdXBkYXRlQnJlYWtwb2ludEFuZFJlc3BvbnNpdmVDbGFzcyh0aGlzLmZseW91dFdpZHRoKTtcbiAgICB9XG5cbiAgICB0aGlzLiNzZXRGdWxsc2NyZWVuKCk7XG4gIH1cblxuICAjZ2V0U3RyaW5nKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBUT0RPOiBOZWVkIHRvIGltcGxlbWVudCB0aGUgYXN5bmMgYGdldFN0cmluZ2AgbWV0aG9kIGluIGEgYnJlYWtpbmcgY2hhbmdlLlxuICAgIHJldHVybiB0aGlzLiNyZXNvdXJjZXNTZXJ2aWNlLmdldFN0cmluZ0ZvckxvY2FsZSh7IGxvY2FsZTogJ2VuLVVTJyB9LCBrZXkpO1xuICB9XG5cbiAgI2hhbmRsZVJlc2l6ZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChldmVudC5rZXkpIHtcbiAgICAgIGNvbnN0IGtleVByZXNzZWQgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdhcnJvdycsICcnKTtcbiAgICAgIHN3aXRjaCAoa2V5UHJlc3NlZCkge1xuICAgICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgIHRoaXMucmVzaXplS2V5Q29udHJvbEFjdGl2ZSA9ICF0aGlzLnJlc2l6ZUtleUNvbnRyb2xBY3RpdmU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RhYic6XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAodGhpcy5yZXNpemVLZXlDb250cm9sQWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUtleUNvbnRyb2xBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIGlmICh0aGlzLnJlc2l6ZUtleUNvbnRyb2xBY3RpdmUpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAodGhpcy5mbHlvdXRXaWR0aCA8IHRoaXMuY29uZmlnLm1heFdpZHRoKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmx5b3V0V2lkdGggPSBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICB0aGlzLmZseW91dFdpZHRoICsgdGhpcy53aWR0aFN0ZXAsXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubWF4V2lkdGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGlmICh0aGlzLnJlc2l6ZUtleUNvbnRyb2xBY3RpdmUpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAodGhpcy5mbHlvdXRXaWR0aCA+IHRoaXMuY29uZmlnLm1pbldpZHRoKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmx5b3V0V2lkdGggPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICB0aGlzLmZseW91dFdpZHRoIC0gdGhpcy53aWR0aFN0ZXAsXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubWluV2lkdGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogRXhlY3V0ZXMgYSBmdW5jdGlvbiB3aGVuIHRoZSB6b25lIGlzIHN0YWJsZS4gKi9cbiAgI2V4ZWN1dGVPblN0YWJsZShmbjogKCkgPT4gYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI25nWm9uZS5pc1N0YWJsZSkge1xuICAgICAgZm4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jbmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGZuKTtcbiAgICB9XG4gIH1cblxuICAjaW5pdEZvY3VzVHJhcCgpOiB2b2lkIHtcbiAgICB0aGlzLmVuYWJsZVRyYXBGb2N1c0F1dG9DYXB0dXJlID0gZmFsc2U7XG4gICAgdGhpcy5lbmFibGVUcmFwRm9jdXMgPSBmYWxzZTtcbiAgICAvLyBXYWl0aW5nIGZvciB6b25lIHRvIGJlIHN0YWJsZSB3aWxsIGF2b2lkIEV4cHJlc3Npb25DaGFuZ2VBZnRlckNoZWNrZWRFcnJvci5cbiAgICB0aGlzLiNleGVjdXRlT25TdGFibGUoKCkgPT4ge1xuICAgICAgdGhpcy5lbmFibGVUcmFwRm9jdXNBdXRvQ2FwdHVyZSA9IHRydWU7XG4gICAgICB0aGlzLmVuYWJsZVRyYXBGb2N1cyA9IHRydWU7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktZmx5b3V0XCJcbiAgdGFiaW5kZXg9XCItMVwiXG4gIFthdHRyLnJvbGVdPVwiY29uZmlnLmFyaWFSb2xlID8gY29uZmlnLmFyaWFSb2xlIDogJ2RpYWxvZydcIlxuICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNvbmZpZy5hcmlhRGVzY3JpYmVkQnlcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbmZpZy5hcmlhTGFiZWxcIlxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiY29uZmlnLmFyaWFMYWJlbGxlZEJ5XCJcbiAgW2F0dHIuYXJpYS1tb2RhbF09XCJcbiAgICBjb25maWcuYXJpYVJvbGUgPT09ICdkaWFsb2cnIHx8ICFjb25maWcuYXJpYVJvbGUgPyB0cnVlIDogZmFsc2VcbiAgXCJcbiAgW2F0dHIuaGlkZGVuXT1cIiFpbnN0YW5jZVJlYWR5ID8gdHJ1ZSA6IHVuZGVmaW5lZFwiXG4gIFtpZF09XCJmbHlvdXRJZFwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnc2t5LWZseW91dC1oaWRkZW4nOiAhaXNPcGVuICYmICFpc09wZW5pbmcsXG4gICAgJ3NreS1mbHlvdXQtZnVsbHNjcmVlbic6IGlzRnVsbHNjcmVlblxuICB9XCJcbiAgW3N0eWxlLnotaW5kZXhdPVwiekluZGV4JCB8IGFzeW5jXCJcbiAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICdza3ktc2hhZG93JzogJ2RlZmF1bHQnLFxuICAgICdza3ktZWxldmF0aW9uLTgnOiAnbW9kZXJuJ1xuICB9XCJcbiAgKEBmbHlvdXRTdGF0ZS5kb25lKT1cImFuaW1hdGlvbkRvbmUoJGV2ZW50KVwiXG4gIFtAZmx5b3V0U3RhdGVdPVwiZ2V0QW5pbWF0aW9uU3RhdGUoKVwiXG4gIFtzdHlsZS53aWR0aC5weF09XCJmbHlvdXRXaWR0aFwiXG4gICNmbHlvdXRSZWZcbiAgW2Nka1RyYXBGb2N1c109XCJlbmFibGVUcmFwRm9jdXNcIlxuICBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwiZW5hYmxlVHJhcEZvY3VzQXV0b0NhcHR1cmVcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktZmx5b3V0LWhlYWRlclwiXG4gICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgJ3NreS1wYWRkaW5nLXNxdWlzaC1sYXJnZSc6ICdkZWZhdWx0J1xuICAgIH1cIlxuICAgIFtzdHlsZS56LWluZGV4XT1cInpJbmRleCQgfCBhc3luY1wiXG4gICAgI2ZseW91dEhlYWRlclxuICA+XG4gICAgPGRpdiBjbGFzcz1cInNreS1mbHlvdXQtaGVhZGVyLWNvbnRlbnRcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKnNreVRoZW1lSWY9XCInbW9kZXJuJ1wiXG4gICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWljb24tYm9yZGVybGVzcyBza3ktbWFyZ2luLWlubGluZS1zbSBza3ktZmx5b3V0LWhlYWRlci1ncmFiLWhhbmRsZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3NreXV4X2ZseW91dF9yZXNpemVfaGFuZGxlJyB8IHNreUxpYlJlc291cmNlc1wiXG4gICAgICAgIChrZXlkb3duKT1cIm9uSGVhZGVyR3JhYkhhbmRsZUtleURvd24oJGV2ZW50KVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25IZWFkZXJHcmFiSGFuZGxlTW91c2VEb3duKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c2t5LWljb24gaWNvbj1cInRpbGUtZHJhZ1wiIGljb25UeXBlPVwic2t5dXhcIiBzaXplPVwibGdcIj4gPC9za3ktaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8c2t5LWZseW91dC1pdGVyYXRvclxuICAgICAgICAqbmdJZj1cImNvbmZpZy5zaG93SXRlcmF0b3JcIlxuICAgICAgICBbbmV4dEJ1dHRvbkRpc2FibGVkXT1cImNvbmZpZy5pdGVyYXRvck5leHRCdXR0b25EaXNhYmxlZFwiXG4gICAgICAgIFtwcmV2aW91c0J1dHRvbkRpc2FibGVkXT1cImNvbmZpZy5pdGVyYXRvclByZXZpb3VzQnV0dG9uRGlzYWJsZWRcIlxuICAgICAgICAobmV4dEJ1dHRvbkNsaWNrKT1cIm9uSXRlcmF0b3JOZXh0QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgIChwcmV2aW91c0J1dHRvbkNsaWNrKT1cIm9uSXRlcmF0b3JQcmV2aW91c0J1dHRvbkNsaWNrKClcIlxuICAgICAgPlxuICAgICAgPC9za3ktZmx5b3V0LWl0ZXJhdG9yPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJza3ktZmx5b3V0LWhlYWRlci1idXR0b25zXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVybWFsaW5rVGVtcGxhdGVcIj4gPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJpbWFyeUFjdGlvblRlbXBsYXRlXCI+IDwvbmctY29udGFpbmVyPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWZseW91dC1idG4tY2xvc2Ugc2t5LWxhYmVsLWljb24tdGhlbWUtZGVmYXVsdFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidza3l1eF9mbHlvdXRfY2xvc2UnIHwgc2t5TGliUmVzb3VyY2VzXCJcbiAgICAgICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgICAgICdza3ktYnRuLWRlZmF1bHQnOiAnZGVmYXVsdCcsXG4gICAgICAgICAgJ3NreS1idG4taWNvbi1ib3JkZXJsZXNzJzogJ21vZGVybidcbiAgICAgICAgfVwiXG4gICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgID5cbiAgICAgICAgPHNreS1pY29uICpza3lUaGVtZUlmPVwiJ2RlZmF1bHQnXCIgaWNvbj1cImNsb3NlXCI+IDwvc2t5LWljb24+XG4gICAgICAgIDxza3ktaWNvblxuICAgICAgICAgICpza3lUaGVtZUlmPVwiJ21vZGVybidcIlxuICAgICAgICAgIGljb249XCJjbG9zZVwiXG4gICAgICAgICAgaWNvblR5cGU9XCJza3l1eFwiXG4gICAgICAgICAgc2l6ZT1cImxnXCJcbiAgICAgICAgPlxuICAgICAgICA8L3NreS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwic2t5LWZseW91dC1jb250ZW50XCI+XG4gICAgPGRpdiAjdGFyZ2V0PjwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWZseW91dC1yZXNpemUtaGFuZGxlXCJcbiAgICByb2xlPVwic2VwYXJhdG9yXCJcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJmbHlvdXRJZFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInc2t5dXhfZmx5b3V0X3Jlc2l6ZV9oYW5kbGUnIHwgc2t5TGliUmVzb3VyY2VzXCJcbiAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cImNvbmZpZy5tYXhXaWR0aFwiXG4gICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCJjb25maWcubWluV2lkdGhcIlxuICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiZmx5b3V0V2lkdGhcIlxuICAgIChrZXlkb3duKT1cIm9uUmVzaXplSGFuZGxlS2V5RG93bigkZXZlbnQpXCJcbiAgICAobW91c2Vkb3duKT1cIm9uUmVzaXplSGFuZGxlTW91c2VEb3duKCRldmVudClcIlxuICA+PC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNwZXJtYWxpbmtUZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInBlcm1hbGlua1wiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJwZXJtYWxpbmsudXJsXCI+XG4gICAgICA8YVxuICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWZseW91dC1idG4tcGVybWFsaW5rIHNreS1tYXJnaW4taW5saW5lLWRlZmF1bHRcIlxuICAgICAgICBbc2t5SHJlZl09XCJwZXJtYWxpbmsudXJsXCJcbiAgICAgICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgICAgICdza3ktYnRuLWRlZmF1bHQnOiAnZGVmYXVsdCcsXG4gICAgICAgICAgJ3NreS1idG4tYm9yZGVybGVzcyc6ICdtb2Rlcm4nXG4gICAgICAgIH1cIlxuICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICA+XG4gICAgICAgIHt7IHBlcm1hbGlua0xhYmVsIH19XG4gICAgICA8L2E+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwicGVybWFsaW5rLnJvdXRlXCI+XG4gICAgICA8YVxuICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWZseW91dC1idG4tcGVybWFsaW5rIHNreS1tYXJnaW4taW5saW5lLWRlZmF1bHRcIlxuICAgICAgICBbcm91dGVyTGlua109XCJwZXJtYWxpbmsucm91dGUuY29tbWFuZHNcIlxuICAgICAgICBbZnJhZ21lbnRdPVwicGVybWFsaW5rLnJvdXRlLmV4dHJhcz8uZnJhZ21lbnRcIlxuICAgICAgICBbc2t5VGhlbWVDbGFzc109XCJ7XG4gICAgICAgICAgJ3NreS1idG4tZGVmYXVsdCc6ICdkZWZhdWx0JyxcbiAgICAgICAgICAnc2t5LWJ0bi1ib3JkZXJsZXNzJzogJ21vZGVybidcbiAgICAgICAgfVwiXG4gICAgICAgIFtxdWVyeVBhcmFtc109XCJwZXJtYWxpbmsucm91dGUuZXh0cmFzPy5xdWVyeVBhcmFtc1wiXG4gICAgICAgIFtxdWVyeVBhcmFtc0hhbmRsaW5nXT1cInBlcm1hbGluay5yb3V0ZS5leHRyYXM/LnF1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuICAgICAgICBbc3RhdGVdPVwicGVybWFsaW5rLnJvdXRlLmV4dHJhcz8uc3RhdGVcIlxuICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICA+XG4gICAgICAgIHt7IHBlcm1hbGlua0xhYmVsIH19XG4gICAgICA8L2E+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcHJpbWFyeUFjdGlvblRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwicHJpbWFyeUFjdGlvbiAmJiBwcmltYXJ5QWN0aW9uLmNhbGxiYWNrXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1mbHlvdXQtYnRuLXByaW1hcnktYWN0aW9uIHNreS1tYXJnaW4taW5saW5lLWRlZmF1bHRcIlxuICAgICAgKGNsaWNrKT1cImludm9rZVByaW1hcnlBY3Rpb24oKVwiXG4gICAgPlxuICAgICAge3sgcHJpbWFyeUFjdGlvbkxhYmVsIH19XG4gICAgPC9idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
|