@veloceapps/sdk 7.0.2-11 → 7.0.2-12
Sign up to get free protection for your applications and to get access to all the features.
- package/cms/components/element-tools-panel/element-tools-panel.component.d.ts +14 -0
- package/cms/components/preview/preview.module.d.ts +2 -1
- package/cms/modules/runtime/services/runtime-editor.service.d.ts +6 -4
- package/cms/modules/runtime/types/runtime.actions.d.ts +5 -2
- package/cms/plugins/element-hover.plugin.d.ts +30 -0
- package/cms/types/common.types.d.ts +3 -0
- package/esm2020/cms/cms.elements.mjs +14 -3
- package/esm2020/cms/components/element-drop-handle/element-drop-handle.component.mjs +2 -2
- package/esm2020/cms/components/element-tools-panel/element-tools-panel.component.mjs +35 -0
- package/esm2020/cms/components/preview/preview.module.mjs +22 -4
- package/esm2020/cms/modules/runtime/services/runtime-editor.service.mjs +5 -3
- package/esm2020/cms/modules/runtime/types/runtime.actions.mjs +1 -1
- package/esm2020/cms/plugins/element-hover.plugin.mjs +104 -0
- package/esm2020/cms/types/common.types.mjs +1 -1
- package/fesm2015/veloceapps-sdk-cms.mjs +166 -9
- package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-cms.mjs +162 -9
- package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
- package/package.json +1 -1
@@ -0,0 +1,14 @@
|
|
1
|
+
import { RuntimeEditorService } from '../../modules/runtime';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
export declare class ElementToolsPanelComponent {
|
4
|
+
private readonly metadata;
|
5
|
+
private readonly config;
|
6
|
+
private readonly elementRef;
|
7
|
+
runtimeEditorService?: RuntimeEditorService;
|
8
|
+
showDeleteButton: boolean;
|
9
|
+
constructor();
|
10
|
+
deleteHandler(): void;
|
11
|
+
showSettingsHandler(): void;
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ElementToolsPanelComponent, never>;
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ElementToolsPanelComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
14
|
+
}
|
@@ -5,8 +5,9 @@ import * as i3 from "@veloceapps/components";
|
|
5
5
|
import * as i4 from "../element-renderer/element-renderer.module";
|
6
6
|
import * as i5 from "../element-children/element-children.module";
|
7
7
|
import * as i6 from "../element-drop-handle/element-drop-handle.module";
|
8
|
+
import * as i7 from "../element-tools-panel/element-tools-panel.component";
|
8
9
|
export declare class PreviewModule {
|
9
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<PreviewModule, never>;
|
10
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<PreviewModule, [typeof i1.PreviewComponent], [typeof i2.CommonModule, typeof i3.LoaderModule, typeof i4.ElementRendererModule, typeof i5.ElementChildrenModule, typeof i6.ElementDropHandleModule], [typeof i1.PreviewComponent]>;
|
11
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<PreviewModule, [typeof i1.PreviewComponent], [typeof i2.CommonModule, typeof i3.LoaderModule, typeof i4.ElementRendererModule, typeof i5.ElementChildrenModule, typeof i6.ElementDropHandleModule, typeof i7.ElementToolsPanelComponent], [typeof i1.PreviewComponent]>;
|
11
12
|
static ɵinj: i0.ɵɵInjectorDeclaration<PreviewModule>;
|
12
13
|
}
|
@@ -1,15 +1,17 @@
|
|
1
1
|
import { Patch } from 'rfc6902';
|
2
2
|
import { BehaviorSubject, Observable, ReplaySubject } from 'rxjs';
|
3
|
-
import {
|
3
|
+
import { RuntimeElementDeleteEvent, RuntimeElementDropEvent, RuntimeShowSettingsEvent } from '../types/runtime.actions';
|
4
4
|
import { RuntimeService } from './runtime.service';
|
5
5
|
import * as i0 from "@angular/core";
|
6
6
|
export declare class RuntimeEditorService {
|
7
7
|
private runtimeService;
|
8
8
|
private editorModeSubj$;
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
onElementDropped$: ReplaySubject<RuntimeElementDropEvent>;
|
10
|
+
onElementDeleted$: ReplaySubject<RuntimeElementDeleteEvent>;
|
11
|
+
onElementSettingsToggled$: ReplaySubject<RuntimeShowSettingsEvent>;
|
12
12
|
editorMode$: Observable<boolean>;
|
13
|
+
dragMode$: BehaviorSubject<boolean>;
|
14
|
+
selectedElementPath$: BehaviorSubject<string | null>;
|
13
15
|
constructor(runtimeService: RuntimeService);
|
14
16
|
applyPatch$(patch: Patch): Observable<void>;
|
15
17
|
toggleEditorMode(): void;
|
@@ -1,9 +1,12 @@
|
|
1
1
|
import { ElementMetadata } from '../../../types';
|
2
|
-
export interface
|
2
|
+
export interface RuntimeElementDropEvent {
|
3
3
|
element: ElementMetadata;
|
4
4
|
path: string;
|
5
5
|
index: number;
|
6
6
|
}
|
7
|
-
export interface
|
7
|
+
export interface RuntimeElementDeleteEvent {
|
8
|
+
path: string;
|
9
|
+
}
|
10
|
+
export interface RuntimeShowSettingsEvent {
|
8
11
|
path: string;
|
9
12
|
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import { OnDestroy } from '@angular/core';
|
2
|
+
import { ElementComponent } from '../components/element.component';
|
3
|
+
import { PluginComponent } from '../components/plugin.component';
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
export declare class ElementHoverPlugin implements PluginComponent, OnDestroy {
|
6
|
+
host: ElementComponent;
|
7
|
+
private readonly hoverClassName;
|
8
|
+
private readonly metadata;
|
9
|
+
private readonly appRef;
|
10
|
+
private readonly el;
|
11
|
+
private readonly document;
|
12
|
+
private readonly runtimeEditorService;
|
13
|
+
private overlayEl?;
|
14
|
+
private isHovered$;
|
15
|
+
private isSelected$;
|
16
|
+
private destroyed$;
|
17
|
+
private mouseOverListenerBound;
|
18
|
+
private mouseLeaveListenerBound;
|
19
|
+
constructor(host: ElementComponent);
|
20
|
+
ngOnDestroy(): void;
|
21
|
+
private attachListeners;
|
22
|
+
private detachListeners;
|
23
|
+
private mouseOverListener;
|
24
|
+
private mouseLeaveListener;
|
25
|
+
private addHighlight;
|
26
|
+
private removeHighlight;
|
27
|
+
private updateHighlight;
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ElementHoverPlugin, never>;
|
29
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ElementHoverPlugin>;
|
30
|
+
}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { ElementComponent } from './components/element.component';
|
2
|
+
import { ElementHoverPlugin } from './plugins/element-hover.plugin';
|
2
3
|
import { IOPlugin } from './plugins/io.plugin';
|
3
4
|
import { RegionPlugin } from './plugins/region.plugin';
|
4
5
|
import { ScriptPlugin } from './plugins/script.plugin';
|
@@ -8,33 +9,43 @@ import { ScriptPlugin } from './plugins/script.plugin';
|
|
8
9
|
export const CONFIG = {
|
9
10
|
CUSTOM: {
|
10
11
|
component: ElementComponent,
|
11
|
-
plugins: [IOPlugin, ScriptPlugin],
|
12
|
+
plugins: [IOPlugin, ElementHoverPlugin, ScriptPlugin],
|
13
|
+
builder: {},
|
12
14
|
},
|
13
15
|
CONTAINER: {
|
14
16
|
component: ElementComponent,
|
15
17
|
defaultTemplate: '<element-children></element-children>',
|
16
18
|
plugins: [ScriptPlugin],
|
19
|
+
builder: {},
|
17
20
|
},
|
18
21
|
SERVICE: {
|
19
22
|
component: ElementComponent,
|
20
23
|
plugins: [IOPlugin, ScriptPlugin],
|
21
24
|
suppressTemplate: true,
|
22
25
|
suppressStyles: true,
|
26
|
+
builder: {},
|
23
27
|
},
|
24
28
|
REFERENCE: {
|
25
29
|
component: ElementComponent,
|
26
30
|
plugins: [IOPlugin, ScriptPlugin],
|
27
31
|
suppressTemplate: true,
|
32
|
+
builder: {},
|
28
33
|
},
|
29
34
|
PAGE: {
|
30
35
|
component: ElementComponent,
|
31
36
|
defaultTemplate: '<element-children></element-children>',
|
32
37
|
plugins: [IOPlugin, ScriptPlugin],
|
38
|
+
builder: {
|
39
|
+
suppressRemovable: true,
|
40
|
+
},
|
33
41
|
},
|
34
42
|
REGION: {
|
35
43
|
component: ElementComponent,
|
36
44
|
defaultTemplate: '<element-children></element-children>',
|
37
|
-
plugins: [IOPlugin,
|
45
|
+
plugins: [IOPlugin, RegionPlugin, ElementHoverPlugin, ScriptPlugin],
|
46
|
+
builder: {
|
47
|
+
suppressRemovable: true,
|
48
|
+
},
|
38
49
|
},
|
39
50
|
};
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21zLmVsZW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY21zL2Ntcy5lbGVtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd2RDs7R0FFRztBQUVILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBNkM7SUFDOUQsTUFBTSxFQUFFO1FBQ04sU0FBUyxFQUFFLGdCQUFnQjtRQUMzQixPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxDQUFDO1FBQ3JELE9BQU8sRUFBRSxFQUFFO0tBQ1o7SUFDRCxTQUFTLEVBQUU7UUFDVCxTQUFTLEVBQUUsZ0JBQWdCO1FBQzNCLGVBQWUsRUFBRSx1Q0FBdUM7UUFDeEQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxFQUFFO0tBQ1o7SUFDRCxPQUFPLEVBQUU7UUFDUCxTQUFTLEVBQUUsZ0JBQWdCO1FBQzNCLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUM7UUFDakMsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixjQUFjLEVBQUUsSUFBSTtRQUNwQixPQUFPLEVBQUUsRUFBRTtLQUNaO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsU0FBUyxFQUFFLGdCQUFnQjtRQUMzQixPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDO1FBQ2pDLGdCQUFnQixFQUFFLElBQUk7UUFDdEIsT0FBTyxFQUFFLEVBQUU7S0FDWjtJQUNELElBQUksRUFBRTtRQUNKLFNBQVMsRUFBRSxnQkFBZ0I7UUFDM0IsZUFBZSxFQUFFLHVDQUF1QztRQUN4RCxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDO1FBQ2pDLE9BQU8sRUFBRTtZQUNQLGlCQUFpQixFQUFFLElBQUk7U0FDeEI7S0FDRjtJQUNELE1BQU0sRUFBRTtRQUNOLFNBQVMsRUFBRSxnQkFBZ0I7UUFDM0IsZUFBZSxFQUFFLHVDQUF1QztRQUN4RCxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFlBQVksQ0FBQztRQUNuRSxPQUFPLEVBQUU7WUFDUCxpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbGVtZW50SG92ZXJQbHVnaW4gfSBmcm9tICcuL3BsdWdpbnMvZWxlbWVudC1ob3Zlci5wbHVnaW4nO1xuaW1wb3J0IHsgSU9QbHVnaW4gfSBmcm9tICcuL3BsdWdpbnMvaW8ucGx1Z2luJztcbmltcG9ydCB7IFJlZ2lvblBsdWdpbiB9IGZyb20gJy4vcGx1Z2lucy9yZWdpb24ucGx1Z2luJztcbmltcG9ydCB7IFNjcmlwdFBsdWdpbiB9IGZyb20gJy4vcGx1Z2lucy9zY3JpcHQucGx1Z2luJztcbmltcG9ydCB7IEVMRU1FTlRfVFlQRSwgRWxlbWVudENvbmZpZyB9IGZyb20gJy4vdHlwZXMvY29tbW9uLnR5cGVzJztcblxuLypcbiAqIFNjcmlwdFBsdWdpbiBtdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBwbHVnaW4gaW4gdGhlIGxpc3QgdG8gbWFrZSBzdXJlIHVzZXIgY29kZSBpcyBydW5uaW5nIGFmdGVyIGFsbCBwcmUtaW5pdGlhbGl6ZXJzLlxuICovXG5cbmV4cG9ydCBjb25zdCBDT05GSUc6IHsgW2tleSBpbiBFTEVNRU5UX1RZUEVdOiBFbGVtZW50Q29uZmlnIH0gPSB7XG4gIENVU1RPTToge1xuICAgIGNvbXBvbmVudDogRWxlbWVudENvbXBvbmVudCxcbiAgICBwbHVnaW5zOiBbSU9QbHVnaW4sIEVsZW1lbnRIb3ZlclBsdWdpbiwgU2NyaXB0UGx1Z2luXSxcbiAgICBidWlsZGVyOiB7fSxcbiAgfSxcbiAgQ09OVEFJTkVSOiB7XG4gICAgY29tcG9uZW50OiBFbGVtZW50Q29tcG9uZW50LFxuICAgIGRlZmF1bHRUZW1wbGF0ZTogJzxlbGVtZW50LWNoaWxkcmVuPjwvZWxlbWVudC1jaGlsZHJlbj4nLFxuICAgIHBsdWdpbnM6IFtTY3JpcHRQbHVnaW5dLFxuICAgIGJ1aWxkZXI6IHt9LFxuICB9LFxuICBTRVJWSUNFOiB7XG4gICAgY29tcG9uZW50OiBFbGVtZW50Q29tcG9uZW50LFxuICAgIHBsdWdpbnM6IFtJT1BsdWdpbiwgU2NyaXB0UGx1Z2luXSxcbiAgICBzdXBwcmVzc1RlbXBsYXRlOiB0cnVlLFxuICAgIHN1cHByZXNzU3R5bGVzOiB0cnVlLFxuICAgIGJ1aWxkZXI6IHt9LFxuICB9LFxuICBSRUZFUkVOQ0U6IHtcbiAgICBjb21wb25lbnQ6IEVsZW1lbnRDb21wb25lbnQsXG4gICAgcGx1Z2luczogW0lPUGx1Z2luLCBTY3JpcHRQbHVnaW5dLFxuICAgIHN1cHByZXNzVGVtcGxhdGU6IHRydWUsXG4gICAgYnVpbGRlcjoge30sXG4gIH0sXG4gIFBBR0U6IHtcbiAgICBjb21wb25lbnQ6IEVsZW1lbnRDb21wb25lbnQsXG4gICAgZGVmYXVsdFRlbXBsYXRlOiAnPGVsZW1lbnQtY2hpbGRyZW4+PC9lbGVtZW50LWNoaWxkcmVuPicsXG4gICAgcGx1Z2luczogW0lPUGx1Z2luLCBTY3JpcHRQbHVnaW5dLFxuICAgIGJ1aWxkZXI6IHtcbiAgICAgIHN1cHByZXNzUmVtb3ZhYmxlOiB0cnVlLFxuICAgIH0sXG4gIH0sXG4gIFJFR0lPTjoge1xuICAgIGNvbXBvbmVudDogRWxlbWVudENvbXBvbmVudCxcbiAgICBkZWZhdWx0VGVtcGxhdGU6ICc8ZWxlbWVudC1jaGlsZHJlbj48L2VsZW1lbnQtY2hpbGRyZW4+JyxcbiAgICBwbHVnaW5zOiBbSU9QbHVnaW4sIFJlZ2lvblBsdWdpbiwgRWxlbWVudEhvdmVyUGx1Z2luLCBTY3JpcHRQbHVnaW5dLFxuICAgIGJ1aWxkZXI6IHtcbiAgICAgIHN1cHByZXNzUmVtb3ZhYmxlOiB0cnVlLFxuICAgIH0sXG4gIH0sXG59O1xuIl19
|
@@ -8,7 +8,7 @@ export class ElementDropHandleComponent {
|
|
8
8
|
this.runtimeService = runtimeService;
|
9
9
|
}
|
10
10
|
handleDrop(e) {
|
11
|
-
this.runtimeService.
|
11
|
+
this.runtimeService.onElementDropped$.next({
|
12
12
|
element: e.data,
|
13
13
|
index: this.index,
|
14
14
|
path: this.parentPath,
|
@@ -25,4 +25,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
|
|
25
25
|
}], parentPath: [{
|
26
26
|
type: Input
|
27
27
|
}] } });
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1kcm9wLWhhbmRsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jbXMvY29tcG9uZW50cy9lbGVtZW50LWRyb3AtaGFuZGxlL2VsZW1lbnQtZHJvcC1oYW5kbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY21zL2NvbXBvbmVudHMvZWxlbWVudC1kcm9wLWhhbmRsZS9lbGVtZW50LWRyb3AtaGFuZGxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7O0FBUzdGLE1BQU0sT0FBTywwQkFBMEI7SUFJckMsWUFBb0IsY0FBb0M7UUFBcEMsbUJBQWMsR0FBZCxjQUFjLENBQXNCO0lBQUcsQ0FBQztJQUVyRCxVQUFVLENBQUMsQ0FBZTtRQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztZQUN6QyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQXVCO1lBQ2xDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7dUhBWlUsMEJBQTBCOzJHQUExQiwwQkFBMEIsb0hDWHZDLGtIQUdBOzJGRFFhLDBCQUEwQjtrQkFOdEMsU0FBUzsrQkFDRSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU07MkdBRy9CLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEbmREcm9wRXZlbnQgfSBmcm9tICduZ3gtZHJhZy1kcm9wJztcbmltcG9ydCB7IFJ1bnRpbWVFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9ydW50aW1lL3NlcnZpY2VzL3J1bnRpbWUtZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWxlbWVudE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29tbW9uLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmwtZWxlbWVudC1kcm9wLWhhbmRsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGVtZW50LWRyb3AtaGFuZGxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWxlbWVudC1kcm9wLWhhbmRsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRWxlbWVudERyb3BIYW5kbGVDb21wb25lbnQge1xuICBASW5wdXQoKSBwdWJsaWMgaW5kZXghOiBudW1iZXI7XG4gIEBJbnB1dCgpIHB1YmxpYyBwYXJlbnRQYXRoITogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcnVudGltZVNlcnZpY2U6IFJ1bnRpbWVFZGl0b3JTZXJ2aWNlKSB7fVxuXG4gIHB1YmxpYyBoYW5kbGVEcm9wKGU6IERuZERyb3BFdmVudCk6IHZvaWQge1xuICAgIHRoaXMucnVudGltZVNlcnZpY2Uub25FbGVtZW50RHJvcHBlZCQubmV4dCh7XG4gICAgICBlbGVtZW50OiBlLmRhdGEgYXMgRWxlbWVudE1ldGFkYXRhLFxuICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICBwYXRoOiB0aGlzLnBhcmVudFBhdGgsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBkbmREcm9wem9uZSAoZG5kRHJvcCk9XCJoYW5kbGVEcm9wKCRldmVudClcIj5cbiAgPGRpdiBjbGFzcz1cImhhbmRsZVwiPjwvZGl2PlxuPC9kaXY+XG4iXX0=
|