c3-components 0.0.2 → 0.0.4
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/README.md +67 -13
- package/esm2020/lib/c3-file-viewer/c3-file-viewer.module.mjs +19 -6
- package/esm2020/lib/c3-file-viewer/components/public/c3-file-viewer/c3-file-viewer.component.mjs +86 -0
- package/esm2020/lib/c3-file-viewer/components/public/c3-file-viewer-dialog/c3-file-viewer-dialog.component.mjs +37 -0
- package/esm2020/lib/c3-file-viewer/components/public/c3-file-viewer-dialog/c3-file-viewer-dialog.mjs +26 -0
- package/esm2020/lib/c3-file-viewer/models/file-viewer.mjs +6 -5
- package/esm2020/public-api.mjs +4 -2
- package/fesm2015/c3-components.mjs +86 -23
- package/fesm2015/c3-components.mjs.map +1 -1
- package/fesm2020/c3-components.mjs +87 -22
- package/fesm2020/c3-components.mjs.map +1 -1
- package/lib/c3-file-viewer/c3-file-viewer.module.d.ts +8 -5
- package/lib/c3-file-viewer/components/{c3-file-viewer → public/c3-file-viewer}/c3-file-viewer.component.d.ts +4 -3
- package/lib/c3-file-viewer/components/public/c3-file-viewer-dialog/c3-file-viewer-dialog.component.d.ts +12 -0
- package/lib/c3-file-viewer/components/public/c3-file-viewer-dialog/c3-file-viewer-dialog.d.ts +8 -0
- package/lib/c3-file-viewer/models/file-viewer.d.ts +1 -4
- package/package.json +5 -1
- package/public-api.d.ts +3 -1
- package/esm2020/lib/c3-file-viewer/components/c3-file-viewer/c3-file-viewer.component.mjs +0 -84
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
import * as i1 from "./directives/full-screen.directive";
|
|
3
|
-
import * as i2 from "./components/c3-file-viewer/c3-file-viewer.component";
|
|
3
|
+
import * as i2 from "./components/public/c3-file-viewer/c3-file-viewer.component";
|
|
4
4
|
import * as i3 from "./components/c3-file-viewer-actions/c3-file-viewer-actions.component";
|
|
5
5
|
import * as i4 from "./components/c3-file-viewer-image/c3-file-viewer-image.component";
|
|
6
6
|
import * as i5 from "./components/c3-file-viewer-pdf/c3-file-viewer-pdf.component";
|
|
7
7
|
import * as i6 from "./components/c3-file-viewer-video/c3-file-viewer-video.component";
|
|
8
|
-
import * as i7 from "
|
|
9
|
-
import * as i8 from "
|
|
10
|
-
import * as i9 from "
|
|
8
|
+
import * as i7 from "./components/public/c3-file-viewer-dialog/c3-file-viewer-dialog.component";
|
|
9
|
+
import * as i8 from "./components/public/c3-file-viewer-dialog/c3-file-viewer-dialog";
|
|
10
|
+
import * as i9 from "@angular/common";
|
|
11
|
+
import * as i10 from "@angular/common/http";
|
|
12
|
+
import * as i11 from "../c3-safe-url/pipes/c3-safe-url.pipe";
|
|
13
|
+
import * as i12 from "@angular/material/dialog";
|
|
11
14
|
export declare class C3FileViewerModule {
|
|
12
15
|
static ɵfac: i0.ɵɵFactoryDeclaration<C3FileViewerModule, never>;
|
|
13
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<C3FileViewerModule, [typeof i1.FullScreenDirective, typeof i2.C3FileViewerComponent, typeof i3.C3FileViewerActionsComponent, typeof i4.C3FileViewerImageComponent, typeof i5.C3FileViewerPdfComponent, typeof i6.C3FileViewerVideoComponent], [typeof
|
|
16
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<C3FileViewerModule, [typeof i1.FullScreenDirective, typeof i2.C3FileViewerComponent, typeof i3.C3FileViewerActionsComponent, typeof i4.C3FileViewerImageComponent, typeof i5.C3FileViewerPdfComponent, typeof i6.C3FileViewerVideoComponent, typeof i7.C3FileViewerDialogComponent, typeof i8.C3FileViewerDialog], [typeof i9.CommonModule, typeof i10.HttpClientModule, typeof i11.C3SafeUrlPipe, typeof i12.MatDialogModule], [typeof i1.FullScreenDirective, typeof i2.C3FileViewerComponent, typeof i7.C3FileViewerDialogComponent]>;
|
|
14
17
|
static ɵinj: i0.ɵɵInjectorDeclaration<C3FileViewerModule>;
|
|
15
18
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { EventEmitter, OnInit, SimpleChanges } from '@angular/core';
|
|
2
|
-
import { C3FileViewerConfig } from '
|
|
3
|
-
import { CustomFileEvent } from '
|
|
2
|
+
import { C3FileViewerConfig } from '../../../models/file-viewer-config.model';
|
|
3
|
+
import { CustomFileEvent } from '../../../models/custom-file-event.model';
|
|
4
4
|
import { HttpClient } from '@angular/common/http';
|
|
5
|
-
import { C3FileViewer } from '
|
|
5
|
+
import { C3FileViewer } from '../../../models/file-viewer';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export declare class C3FileViewerComponent implements OnInit {
|
|
8
8
|
moduleConfig: C3FileViewerConfig;
|
|
@@ -19,6 +19,7 @@ export declare class C3FileViewerComponent implements OnInit {
|
|
|
19
19
|
ngOnChanges(changes: SimpleChanges): void;
|
|
20
20
|
next(event: KeyboardEvent): void;
|
|
21
21
|
previous(event: KeyboardEvent): void;
|
|
22
|
+
defineStyleHeight(): void;
|
|
22
23
|
static ɵfac: i0.ɵɵFactoryDeclaration<C3FileViewerComponent, [{ optional: true; }, null]>;
|
|
23
24
|
static ɵcmp: i0.ɵɵComponentDeclaration<C3FileViewerComponent, "c3-file-viewer", never, { "screenHeightOccupied": "screenHeightOccupied"; "fileViewer": "fileViewer"; }, { "indexChange": "indexChange"; "configChange": "configChange"; "customFileEvent": "customFileEvent"; }, never, never, false, never>;
|
|
24
25
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { MatDialog, MatDialogConfig } from '@angular/material/dialog';
|
|
2
|
+
import { C3FileViewer } from '../../../models/file-viewer';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class C3FileViewerDialogComponent {
|
|
5
|
+
private _dialog;
|
|
6
|
+
fileViewer: C3FileViewer;
|
|
7
|
+
dialogConfig: Partial<MatDialogConfig>;
|
|
8
|
+
constructor(_dialog: MatDialog);
|
|
9
|
+
openDialog(): void;
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<C3FileViewerDialogComponent, never>;
|
|
11
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<C3FileViewerDialogComponent, "c3-file-viewer-dialog", never, { "fileViewer": "fileViewer"; "dialogConfig": "dialogConfig"; }, {}, never, ["*"], false, never>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { C3FileViewer } from '../../../models/file-viewer';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class C3FileViewerDialog {
|
|
4
|
+
fileViewer: C3FileViewer;
|
|
5
|
+
constructor(fileViewer: C3FileViewer);
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<C3FileViewerDialog, never>;
|
|
7
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<C3FileViewerDialog, "ng-component", never, {}, {}, never, never, false, never>;
|
|
8
|
+
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
2
2
|
import { C3FileViewerConfig } from './file-viewer-config.model';
|
|
3
|
-
import { HttpClient } from '@angular/common/http';
|
|
4
3
|
import { FileMetadata } from './file-metadata';
|
|
5
4
|
export declare class C3FileViewer {
|
|
6
5
|
private _config;
|
|
@@ -39,9 +38,7 @@ export declare class C3FileViewer {
|
|
|
39
38
|
private translateY;
|
|
40
39
|
private prevX;
|
|
41
40
|
private prevY;
|
|
42
|
-
|
|
43
|
-
constructor({ http, config, files, }: {
|
|
44
|
-
http?: HttpClient;
|
|
41
|
+
constructor({ config, files, }: {
|
|
45
42
|
config?: C3FileViewerConfig;
|
|
46
43
|
files?: FileMetadata[];
|
|
47
44
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "c3-components",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
|
+
"description": "C3 Components Library",
|
|
5
|
+
"author": "Kroenen62",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"homepage": "https://github.com/Kroenen62/c3-components",
|
|
4
8
|
"peerDependencies": {
|
|
5
9
|
"@angular/common": "^15.2.0",
|
|
6
10
|
"@angular/core": "^15.2.0",
|
package/public-api.d.ts
CHANGED
|
@@ -16,7 +16,9 @@ export * from './lib/c3-dialog/c3-dialog.module';
|
|
|
16
16
|
/**
|
|
17
17
|
* File Viewer
|
|
18
18
|
*/
|
|
19
|
-
export * from './lib/c3-file-viewer/components/c3-file-viewer/c3-file-viewer.component';
|
|
19
|
+
export * from './lib/c3-file-viewer/components/public/c3-file-viewer/c3-file-viewer.component';
|
|
20
|
+
export * from './lib/c3-file-viewer/components/public/c3-file-viewer-dialog/c3-file-viewer-dialog.component';
|
|
21
|
+
export * from './lib/c3-file-viewer/components/public/c3-file-viewer-dialog/c3-file-viewer-dialog';
|
|
20
22
|
export * from './lib/c3-file-viewer/directives/full-screen.directive';
|
|
21
23
|
export * from './lib/c3-file-viewer/models/custom-file-event.model';
|
|
22
24
|
export * from './lib/c3-file-viewer/models/file-viewer-config.model';
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, HostListener, Inject, Input, Optional, Output, ViewEncapsulation, } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/common/http";
|
|
4
|
-
import * as i2 from "@angular/common";
|
|
5
|
-
import * as i3 from "../../directives/full-screen.directive";
|
|
6
|
-
import * as i4 from "../c3-file-viewer-actions/c3-file-viewer-actions.component";
|
|
7
|
-
import * as i5 from "../c3-file-viewer-image/c3-file-viewer-image.component";
|
|
8
|
-
import * as i6 from "../c3-file-viewer-pdf/c3-file-viewer-pdf.component";
|
|
9
|
-
import * as i7 from "../c3-file-viewer-video/c3-file-viewer-video.component";
|
|
10
|
-
export class C3FileViewerComponent {
|
|
11
|
-
constructor(moduleConfig, _http) {
|
|
12
|
-
this.moduleConfig = moduleConfig;
|
|
13
|
-
this._http = _http;
|
|
14
|
-
this.indexChange = new EventEmitter();
|
|
15
|
-
this.configChange = new EventEmitter();
|
|
16
|
-
this.customFileEvent = new EventEmitter();
|
|
17
|
-
}
|
|
18
|
-
ngOnInit() {
|
|
19
|
-
if (!this.fileViewer.http)
|
|
20
|
-
this.fileViewer.http = this._http;
|
|
21
|
-
this.fileViewer.customFile$.subscribe((event) => {
|
|
22
|
-
this.customFileEvent.emit(event);
|
|
23
|
-
});
|
|
24
|
-
this.fileViewer.index$.subscribe((index) => {
|
|
25
|
-
this.indexChange.emit(index);
|
|
26
|
-
});
|
|
27
|
-
this.fileViewer.config$.subscribe((config) => {
|
|
28
|
-
this.configChange.emit(config);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
onMouseOver() {
|
|
32
|
-
this.fileViewer.hovered = true;
|
|
33
|
-
}
|
|
34
|
-
onMouseLeave() {
|
|
35
|
-
this.fileViewer.hovered = false;
|
|
36
|
-
}
|
|
37
|
-
ngOnChanges(changes) {
|
|
38
|
-
if (changes['screenHeightOccupied'] && this.fileViewer)
|
|
39
|
-
this.fileViewer.styleHeight =
|
|
40
|
-
'calc(100% - ' + this.screenHeightOccupied + 'px)';
|
|
41
|
-
}
|
|
42
|
-
next(event) {
|
|
43
|
-
this.fileViewer.nextImage(event);
|
|
44
|
-
}
|
|
45
|
-
previous(event) {
|
|
46
|
-
this.fileViewer.previousImage(event);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
C3FileViewerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: C3FileViewerComponent, deps: [{ token: 'config', optional: true }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Component });
|
|
50
|
-
C3FileViewerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: C3FileViewerComponent, selector: "c3-file-viewer", inputs: { screenHeightOccupied: "screenHeightOccupied", fileViewer: "fileViewer" }, outputs: { indexChange: "indexChange", configChange: "configChange", customFileEvent: "customFileEvent" }, host: { listeners: { "mouseover": "onMouseOver()", "mouseleave": "onMouseLeave()", "window:keyup.ArrowRight": "next($event)", "window:keyup.ArrowLeft": "previous($event)" }, classAttribute: "c3-file-viewer" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"container\"\n *ngIf=\"fileViewer\"\n [c3-full-screen]=\"fileViewer.fullscreen$ | async\"\n [style.height]=\"fileViewer.styleHeight\"\n [style.backgroundColor]=\"fileViewer.config.containerBackgroundColor\"\n (wheel)=\"fileViewer.scrollZoom($event)\"\n (dragover)=\"fileViewer.onDragOver($event)\"\n>\n <c3-file-viewer-image\n *ngIf=\"fileViewer.currentFile.type.startsWith('image')\"\n [fileViewer]=\"fileViewer\"\n [style]=\"fileViewer.style\"\n (dragstart)=\"fileViewer.onDragStart($event)\"\n />\n\n <c3-file-viewer-video\n *ngIf=\"fileViewer.currentFile.type.startsWith('video')\"\n />\n\n <c3-file-viewer-pdf\n *ngIf=\"fileViewer.currentFile.type.startsWith('application/pdf')\"\n [fileViewer]=\"fileViewer\"\n />\n <!-- Div below will be used to hide the 'ghost' image when dragging -->\n <div></div>\n <div class=\"spinner-container\" *ngIf=\"fileViewer.loading\">\n <div class=\"spinner\"></div>\n </div>\n\n <c3-file-viewer-actions [fileViewer]=\"fileViewer\" />\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.FullScreenDirective, selector: "[C3FullScreen], [c3-full-screen]", inputs: ["c3Screenfull", "c3-full-screen"] }, { kind: "component", type: i4.C3FileViewerActionsComponent, selector: "c3-file-viewer-actions", inputs: ["fileViewer"] }, { kind: "component", type: i5.C3FileViewerImageComponent, selector: "c3-file-viewer-image, [c3-file-viewer-image]", inputs: ["fileViewer"], outputs: ["dragstart"] }, { kind: "component", type: i6.C3FileViewerPdfComponent, selector: "c3-file-viewer-pdf", inputs: ["fileViewer"], outputs: ["dragstart"] }, { kind: "component", type: i7.C3FileViewerVideoComponent, selector: "c3-file-viewer-video", inputs: ["file", "fileViewer"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None });
|
|
51
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: C3FileViewerComponent, decorators: [{
|
|
52
|
-
type: Component,
|
|
53
|
-
args: [{ selector: 'c3-file-viewer', encapsulation: ViewEncapsulation.None, host: {
|
|
54
|
-
class: 'c3-file-viewer',
|
|
55
|
-
}, template: "<div\n class=\"container\"\n *ngIf=\"fileViewer\"\n [c3-full-screen]=\"fileViewer.fullscreen$ | async\"\n [style.height]=\"fileViewer.styleHeight\"\n [style.backgroundColor]=\"fileViewer.config.containerBackgroundColor\"\n (wheel)=\"fileViewer.scrollZoom($event)\"\n (dragover)=\"fileViewer.onDragOver($event)\"\n>\n <c3-file-viewer-image\n *ngIf=\"fileViewer.currentFile.type.startsWith('image')\"\n [fileViewer]=\"fileViewer\"\n [style]=\"fileViewer.style\"\n (dragstart)=\"fileViewer.onDragStart($event)\"\n />\n\n <c3-file-viewer-video\n *ngIf=\"fileViewer.currentFile.type.startsWith('video')\"\n />\n\n <c3-file-viewer-pdf\n *ngIf=\"fileViewer.currentFile.type.startsWith('application/pdf')\"\n [fileViewer]=\"fileViewer\"\n />\n <!-- Div below will be used to hide the 'ghost' image when dragging -->\n <div></div>\n <div class=\"spinner-container\" *ngIf=\"fileViewer.loading\">\n <div class=\"spinner\"></div>\n </div>\n\n <c3-file-viewer-actions [fileViewer]=\"fileViewer\" />\n</div>\n" }]
|
|
56
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
57
|
-
type: Optional
|
|
58
|
-
}, {
|
|
59
|
-
type: Inject,
|
|
60
|
-
args: ['config']
|
|
61
|
-
}] }, { type: i1.HttpClient }]; }, propDecorators: { screenHeightOccupied: [{
|
|
62
|
-
type: Input
|
|
63
|
-
}], fileViewer: [{
|
|
64
|
-
type: Input
|
|
65
|
-
}], indexChange: [{
|
|
66
|
-
type: Output
|
|
67
|
-
}], configChange: [{
|
|
68
|
-
type: Output
|
|
69
|
-
}], customFileEvent: [{
|
|
70
|
-
type: Output
|
|
71
|
-
}], onMouseOver: [{
|
|
72
|
-
type: HostListener,
|
|
73
|
-
args: ['mouseover']
|
|
74
|
-
}], onMouseLeave: [{
|
|
75
|
-
type: HostListener,
|
|
76
|
-
args: ['mouseleave']
|
|
77
|
-
}], next: [{
|
|
78
|
-
type: HostListener,
|
|
79
|
-
args: ['window:keyup.ArrowRight', ['$event']]
|
|
80
|
-
}], previous: [{
|
|
81
|
-
type: HostListener,
|
|
82
|
-
args: ['window:keyup.ArrowLeft', ['$event']]
|
|
83
|
-
}] } });
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYzMtZmlsZS12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYzMtY29tcG9uZW50cy9zcmMvbGliL2MzLWZpbGUtdmlld2VyL2NvbXBvbmVudHMvYzMtZmlsZS12aWV3ZXIvYzMtZmlsZS12aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYzMtY29tcG9uZW50cy9zcmMvbGliL2MzLWZpbGUtdmlld2VyL2NvbXBvbmVudHMvYzMtZmlsZS12aWV3ZXIvYzMtZmlsZS12aWV3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFFTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7OztBQWV2QixNQUFNLE9BQU8scUJBQXFCO0lBZ0JoQyxZQUN1QyxZQUFnQyxFQUM5RCxLQUFpQjtRQURhLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQUM5RCxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBVm5CLGdCQUFXLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHdkQsaUJBQVksR0FBcUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUdwRSxvQkFBZSxHQUFrQyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBS3hFLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSTtZQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUdELFlBQVk7UUFDVixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVO1lBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztnQkFDekIsY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDekQsQ0FBQztJQUdELElBQUksQ0FBQyxLQUFvQjtRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBR0QsUUFBUSxDQUFDLEtBQW9CO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7O2tIQTdEVSxxQkFBcUIsa0JBaUJWLFFBQVE7c0dBakJuQixxQkFBcUIsNGRDMUJsQyxnaENBZ0NBOzJGRE5hLHFCQUFxQjtrQkFUakMsU0FBUzsrQkFDRSxnQkFBZ0IsaUJBR1gsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUsZ0JBQWdCO3FCQUN4Qjs7MEJBbUJFLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsUUFBUTtxRUFmdkIsb0JBQW9CO3NCQUQxQixLQUFLO2dCQUlDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsTUFBTTtnQkFJQSxZQUFZO3NCQURsQixNQUFNO2dCQUlBLGVBQWU7c0JBRHJCLE1BQU07Z0JBeUJQLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXO2dCQU16QixZQUFZO3NCQURYLFlBQVk7dUJBQUMsWUFBWTtnQkFZMUIsSUFBSTtzQkFESCxZQUFZO3VCQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU1uRCxRQUFRO3NCQURQLFlBQVk7dUJBQUMsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEMzRmlsZVZpZXdlckNvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVscy9maWxlLXZpZXdlci1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgQ3VzdG9tRmlsZUV2ZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2N1c3RvbS1maWxlLWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDM0ZpbGVWaWV3ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmlsZS12aWV3ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjMy1maWxlLXZpZXdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jMy1maWxlLXZpZXdlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2MzLWZpbGUtdmlld2VyJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQzNGaWxlVmlld2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHVibGljIHNjcmVlbkhlaWdodE9jY3VwaWVkPzogMDsgLy8gSW4gUHhcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZmlsZVZpZXdlciE6IEMzRmlsZVZpZXdlcjtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGluZGV4Q2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNvbmZpZ0NoYW5nZTogRXZlbnRFbWl0dGVyPEMzRmlsZVZpZXdlckNvbmZpZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBjdXN0b21GaWxlRXZlbnQ6IEV2ZW50RW1pdHRlcjxDdXN0b21GaWxlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoJ2NvbmZpZycpIHB1YmxpYyBtb2R1bGVDb25maWc6IEMzRmlsZVZpZXdlckNvbmZpZyxcbiAgICBwdWJsaWMgX2h0dHA6IEh0dHBDbGllbnRcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5maWxlVmlld2VyLmh0dHApIHRoaXMuZmlsZVZpZXdlci5odHRwID0gdGhpcy5faHR0cDtcblxuICAgIHRoaXMuZmlsZVZpZXdlci5jdXN0b21GaWxlJC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmN1c3RvbUZpbGVFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmlsZVZpZXdlci5pbmRleCQuc3Vic2NyaWJlKChpbmRleCkgPT4ge1xuICAgICAgdGhpcy5pbmRleENoYW5nZS5lbWl0KGluZGV4KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmlsZVZpZXdlci5jb25maWckLnN1YnNjcmliZSgoY29uZmlnKSA9PiB7XG4gICAgICB0aGlzLmNvbmZpZ0NoYW5nZS5lbWl0KGNvbmZpZyk7XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZW92ZXInKVxuICBvbk1vdXNlT3ZlcigpIHtcbiAgICB0aGlzLmZpbGVWaWV3ZXIuaG92ZXJlZCA9IHRydWU7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJylcbiAgb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuZmlsZVZpZXdlci5ob3ZlcmVkID0gZmFsc2U7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ3NjcmVlbkhlaWdodE9jY3VwaWVkJ10gJiYgdGhpcy5maWxlVmlld2VyKVxuICAgICAgdGhpcy5maWxlVmlld2VyLnN0eWxlSGVpZ2h0ID1cbiAgICAgICAgJ2NhbGMoMTAwJSAtICcgKyB0aGlzLnNjcmVlbkhlaWdodE9jY3VwaWVkICsgJ3B4KSc7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAuQXJyb3dSaWdodCcsIFsnJGV2ZW50J10pXG4gIG5leHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICB0aGlzLmZpbGVWaWV3ZXIubmV4dEltYWdlKGV2ZW50KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cC5BcnJvd0xlZnQnLCBbJyRldmVudCddKVxuICBwcmV2aW91cyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMuZmlsZVZpZXdlci5wcmV2aW91c0ltYWdlKGV2ZW50KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImNvbnRhaW5lclwiXG4gICpuZ0lmPVwiZmlsZVZpZXdlclwiXG4gIFtjMy1mdWxsLXNjcmVlbl09XCJmaWxlVmlld2VyLmZ1bGxzY3JlZW4kIHwgYXN5bmNcIlxuICBbc3R5bGUuaGVpZ2h0XT1cImZpbGVWaWV3ZXIuc3R5bGVIZWlnaHRcIlxuICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImZpbGVWaWV3ZXIuY29uZmlnLmNvbnRhaW5lckJhY2tncm91bmRDb2xvclwiXG4gICh3aGVlbCk9XCJmaWxlVmlld2VyLnNjcm9sbFpvb20oJGV2ZW50KVwiXG4gIChkcmFnb3Zlcik9XCJmaWxlVmlld2VyLm9uRHJhZ092ZXIoJGV2ZW50KVwiXG4+XG4gIDxjMy1maWxlLXZpZXdlci1pbWFnZVxuICAgICpuZ0lmPVwiZmlsZVZpZXdlci5jdXJyZW50RmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlJylcIlxuICAgIFtmaWxlVmlld2VyXT1cImZpbGVWaWV3ZXJcIlxuICAgIFtzdHlsZV09XCJmaWxlVmlld2VyLnN0eWxlXCJcbiAgICAoZHJhZ3N0YXJ0KT1cImZpbGVWaWV3ZXIub25EcmFnU3RhcnQoJGV2ZW50KVwiXG4gIC8+XG5cbiAgPGMzLWZpbGUtdmlld2VyLXZpZGVvXG4gICAgKm5nSWY9XCJmaWxlVmlld2VyLmN1cnJlbnRGaWxlLnR5cGUuc3RhcnRzV2l0aCgndmlkZW8nKVwiXG4gIC8+XG5cbiAgPGMzLWZpbGUtdmlld2VyLXBkZlxuICAgICpuZ0lmPVwiZmlsZVZpZXdlci5jdXJyZW50RmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL3BkZicpXCJcbiAgICBbZmlsZVZpZXdlcl09XCJmaWxlVmlld2VyXCJcbiAgLz5cbiAgPCEtLSBEaXYgYmVsb3cgd2lsbCBiZSB1c2VkIHRvIGhpZGUgdGhlICdnaG9zdCcgaW1hZ2Ugd2hlbiBkcmFnZ2luZyAtLT5cbiAgPGRpdj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInNwaW5uZXItY29udGFpbmVyXCIgKm5nSWY9XCJmaWxlVmlld2VyLmxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PlxuICA8L2Rpdj5cblxuICA8YzMtZmlsZS12aWV3ZXItYWN0aW9ucyBbZmlsZVZpZXdlcl09XCJmaWxlVmlld2VyXCIgLz5cbjwvZGl2PlxuIl19
|