@dotglitch/ngx-common 1.1.18 → 1.1.20
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/components/command-palette/breadcrumb/breadcrumb.component.d.ts +16 -0
- package/components/command-palette/command-palette.component.d.ts +21 -3
- package/components/command-palette/shortcut/shortcut.component.d.ts +1 -1
- package/components/parallax-card/parallax-card.component.d.ts +57 -0
- package/directives/image-cache.directive.d.ts +46 -0
- package/esm2022/components/command-palette/breadcrumb/breadcrumb.component.mjs +30 -0
- package/esm2022/components/command-palette/command-palette.component.mjs +191 -54
- package/esm2022/components/command-palette/shortcut/shortcut.component.mjs +5 -5
- package/esm2022/components/dynamic-html/dynamic-html.component.mjs +3 -3
- package/esm2022/components/dynamic-html/dynamic-html.module.mjs +4 -4
- package/esm2022/components/dynamic-html/dynamic-html.service.mjs +3 -3
- package/esm2022/components/filemanager/file-grid/file-grid.component.mjs +3 -3
- package/esm2022/components/filemanager/filemanager.component.mjs +3 -3
- package/esm2022/components/filemanager/folder-rename/folder-rename.component.mjs +3 -3
- package/esm2022/components/filemanager/toolbar/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/components/filemanager/toolbar/icon-button/icon-button.component.mjs +3 -3
- package/esm2022/components/filemanager/toolbar/toolbar.component.mjs +3 -3
- package/esm2022/components/filemanager/tree-view/tree-view.component.mjs +3 -3
- package/esm2022/components/lazy-loader/lazy-loader.component.mjs +3 -3
- package/esm2022/components/lazy-loader/lazy-loader.module.mjs +4 -4
- package/esm2022/components/lazy-loader/lazy-loader.service.mjs +3 -3
- package/esm2022/components/menu/menu.component.mjs +3 -3
- package/esm2022/components/parallax-card/parallax-card.component.mjs +135 -0
- package/esm2022/components/react-magic-wrapper/react-magic-wrapper.component.mjs +3 -3
- package/esm2022/components/tabulator/tabulator.component.mjs +3 -3
- package/esm2022/components/tooltip/tooltip.component.mjs +3 -3
- package/esm2022/components/vscode/vscode.component.mjs +3 -3
- package/esm2022/directives/image-cache.directive.mjs +143 -0
- package/esm2022/directives/menu.directive.mjs +3 -3
- package/esm2022/directives/tooltip.directive.mjs +3 -3
- package/esm2022/pipes/html-bypass.pipe.mjs +3 -3
- package/esm2022/pipes/resource-bypass.pipe.mjs +3 -3
- package/esm2022/pipes/script-bypass.pipe.mjs +3 -3
- package/esm2022/pipes/style-bypass.pipe.mjs +3 -3
- package/esm2022/pipes/url-bypass.pipe.mjs +3 -3
- package/esm2022/public-api.mjs +3 -1
- package/esm2022/services/command-palette.service.mjs +8 -5
- package/esm2022/services/dependency.service.mjs +3 -3
- package/esm2022/services/dialog.service.mjs +3 -3
- package/esm2022/services/fetch.service.mjs +3 -3
- package/esm2022/services/file.service.mjs +3 -3
- package/esm2022/services/keyboard.service.mjs +3 -3
- package/esm2022/services/navigation.service.mjs +3 -3
- package/esm2022/services/theme.service.mjs +3 -3
- package/fesm2022/{dotglitch-ngx-common-folder-rename.component-0RqscdRS.mjs → dotglitch-ngx-common-folder-rename.component-VI_uH5-6.mjs} +8 -7
- package/fesm2022/dotglitch-ngx-common-folder-rename.component-VI_uH5-6.mjs.map +1 -0
- package/fesm2022/dotglitch-ngx-common.mjs +599 -162
- package/fesm2022/dotglitch-ngx-common.mjs.map +1 -1
- package/package.json +5 -4
- package/public-api.d.ts +2 -0
- package/services/command-palette.service.d.ts +20 -1
- package/fesm2022/dotglitch-ngx-common-folder-rename.component-0RqscdRS.mjs.map +0 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CommandPaletteComponent } from '../command-palette.component';
|
|
2
|
+
import { CommandAction } from '../../../services/command-palette.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class BreadcrumbComponent {
|
|
5
|
+
private commandPalette;
|
|
6
|
+
breadcrumbs: {
|
|
7
|
+
action: CommandAction;
|
|
8
|
+
commands: CommandAction[];
|
|
9
|
+
destroying: boolean;
|
|
10
|
+
selectedIndex: number;
|
|
11
|
+
}[];
|
|
12
|
+
constructor(commandPalette: CommandPaletteComponent);
|
|
13
|
+
selectBreadcrumb(crumb: any): void;
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BreadcrumbComponent, never>;
|
|
15
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BreadcrumbComponent, "ngx-commandpalette-breadcrumb", never, { "breadcrumbs": { "alias": "breadcrumbs"; "required": false; }; }, {}, never, never, true, never>;
|
|
16
|
+
}
|
|
@@ -1,20 +1,38 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
1
|
+
import { ChangeDetectorRef, ElementRef, OnInit } from '@angular/core';
|
|
2
2
|
import { CommandAction, CommandPaletteService } from '../../services/command-palette.service';
|
|
3
3
|
import { MatDialogRef } from '@angular/material/dialog';
|
|
4
|
+
import { NgScrollbar } from 'ngx-scrollbar';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export declare class CommandPaletteComponent implements OnInit {
|
|
6
7
|
private readonly commandPalette;
|
|
7
8
|
private readonly dialog;
|
|
9
|
+
private readonly elementRef;
|
|
10
|
+
private readonly changeDetector;
|
|
11
|
+
scrollbar: NgScrollbar;
|
|
12
|
+
textInput: ElementRef<HTMLInputElement>;
|
|
8
13
|
contextElement: HTMLElement;
|
|
14
|
+
get el(): HTMLElement;
|
|
15
|
+
readonly MAT_ICON_REGEX: RegExp;
|
|
9
16
|
queryString: string;
|
|
10
17
|
activeIndex: number;
|
|
18
|
+
readonly rowHeight = 29;
|
|
19
|
+
readonly padding = 6;
|
|
11
20
|
commands: CommandAction[];
|
|
12
21
|
filteredCommands: CommandAction[];
|
|
13
|
-
|
|
22
|
+
breadcrumbs: {
|
|
23
|
+
action: CommandAction;
|
|
24
|
+
commands: CommandAction[];
|
|
25
|
+
destroying: boolean;
|
|
26
|
+
selectedIndex: number;
|
|
27
|
+
}[];
|
|
28
|
+
constructor(commandPalette: CommandPaletteService, dialog: MatDialogRef<any>, elementRef: ElementRef, changeDetector: ChangeDetectorRef, data: any);
|
|
14
29
|
ngOnInit(): void;
|
|
15
30
|
onKeyDown(evt: KeyboardEvent): void;
|
|
31
|
+
private filterResults;
|
|
32
|
+
setCommandList(commands: CommandAction[]): void;
|
|
33
|
+
private focusRow;
|
|
16
34
|
executeCommand(command: CommandAction): void;
|
|
17
35
|
onBlur(): void;
|
|
18
36
|
static ɵfac: i0.ɵɵFactoryDeclaration<CommandPaletteComponent, never>;
|
|
19
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CommandPaletteComponent, "
|
|
37
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CommandPaletteComponent, "ngx-command-palette", never, { "contextElement": { "alias": "contextElement"; "required": false; }; }, {}, never, never, true, never>;
|
|
20
38
|
}
|
|
@@ -5,5 +5,5 @@ export declare class ShortcutComponent {
|
|
|
5
5
|
keys: string[];
|
|
6
6
|
ngOnChanges(): void;
|
|
7
7
|
static ɵfac: i0.ɵɵFactoryDeclaration<ShortcutComponent, never>;
|
|
8
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ShortcutComponent, "
|
|
8
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ShortcutComponent, "ngx-commandpalette-shortcut", never, { "shortcut": { "alias": "shortcut"; "required": false; }; }, {}, never, never, true, never>;
|
|
9
9
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { ElementRef, EventEmitter, TemplateRef } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
type CSSUnitString = 'px' | '%' | 'em' | 'in' | '';
|
|
4
|
+
type CSSUnit = `${number}${CSSUnitString}` | `var(--${string})`;
|
|
5
|
+
type CSSString = CSSUnit | `calc(${CSSUnit | ''}${'' | ' '}${'+' | '-' | '/' | '*'}${'' | ' '}${CSSUnit | ''})`;
|
|
6
|
+
export declare class ParallaxCardComponent {
|
|
7
|
+
private readonly element;
|
|
8
|
+
content: TemplateRef<ElementRef>;
|
|
9
|
+
background: TemplateRef<ElementRef>;
|
|
10
|
+
backContent: TemplateRef<ElementRef>;
|
|
11
|
+
backBackground: TemplateRef<ElementRef>;
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
loaded: EventEmitter<any>;
|
|
16
|
+
/**
|
|
17
|
+
* Width of the card
|
|
18
|
+
* @default `240px`
|
|
19
|
+
*/
|
|
20
|
+
width: CSSString;
|
|
21
|
+
/**
|
|
22
|
+
* Height of the card
|
|
23
|
+
* @default `320px`
|
|
24
|
+
*/
|
|
25
|
+
height: CSSString;
|
|
26
|
+
/**
|
|
27
|
+
* Inset padding of the parallax
|
|
28
|
+
* @default 80
|
|
29
|
+
*/
|
|
30
|
+
bgInset: number;
|
|
31
|
+
/**
|
|
32
|
+
* Duration for the flip animation in ms
|
|
33
|
+
* @default 80
|
|
34
|
+
*/
|
|
35
|
+
flipAnimationDuration: number;
|
|
36
|
+
renderCardFront: boolean;
|
|
37
|
+
renderCardBack: boolean;
|
|
38
|
+
showBackOfCard: boolean;
|
|
39
|
+
private get wrapper();
|
|
40
|
+
private get cardFront();
|
|
41
|
+
private get cardBack();
|
|
42
|
+
private get backgroundElement();
|
|
43
|
+
private get backfaceBackgroundElement();
|
|
44
|
+
private pointerX;
|
|
45
|
+
private pointerY;
|
|
46
|
+
private pointerLeave;
|
|
47
|
+
constructor(element: ElementRef);
|
|
48
|
+
ngAfterViewInit(): void;
|
|
49
|
+
onPointerMove(e: PointerEvent): void;
|
|
50
|
+
onPointerEnter(): void;
|
|
51
|
+
onPointerLeave(): void;
|
|
52
|
+
onClick(): void;
|
|
53
|
+
render: () => void;
|
|
54
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ParallaxCardComponent, never>;
|
|
55
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ParallaxCardComponent, "ngx-parallax-card", never, { "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "bgInset": { "alias": "bgInset"; "required": false; }; "flipAnimationDuration": { "alias": "flipAnimationDuration"; "required": false; }; }, { "loaded": "loaded"; }, ["content", "background", "backContent", "backBackground"], ["*"], true, never>;
|
|
56
|
+
}
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ElementRef, InjectionToken } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export type NgxImageCacheConfig = {
|
|
4
|
+
/**
|
|
5
|
+
* Image to use as a placeholder while loading the main image
|
|
6
|
+
* Recommended to use inlined SVG or a base64 encoded image
|
|
7
|
+
*/
|
|
8
|
+
loadingPlaceholder?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Image to use as a placeholder where images fail to load
|
|
11
|
+
* Recommended to use inlined SVG or a base64 encoded image
|
|
12
|
+
*/
|
|
13
|
+
brokenPlaceholder?: string;
|
|
14
|
+
};
|
|
15
|
+
export declare const NGX_IMAGE_CACHE_CONFIG: InjectionToken<NgxImageCacheConfig>;
|
|
16
|
+
export type NgxImageCacheConfiguration = {
|
|
17
|
+
/**
|
|
18
|
+
* Max age to cache an image in milliseconds.
|
|
19
|
+
* If set to `0` or a negative number, images will never expire.
|
|
20
|
+
*/
|
|
21
|
+
maxAge: number;
|
|
22
|
+
/**
|
|
23
|
+
* Set to `false` to disable memory caching for the image
|
|
24
|
+
* If both `cacheInMemory` and `cacheInIndexedDB` are false,
|
|
25
|
+
* no caching will happen. (You'll still get the loader)
|
|
26
|
+
*/
|
|
27
|
+
cacheInMemory: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Set to `false` to disable indexedDB caching for the image
|
|
30
|
+
* If both `cacheInMemory` and `cacheInIndexedDB` are false,
|
|
31
|
+
* no caching will happen. (You'll still get the loader)
|
|
32
|
+
*/
|
|
33
|
+
cacheInIndexedDB: boolean;
|
|
34
|
+
};
|
|
35
|
+
export declare class NgxImageCacheDirective {
|
|
36
|
+
private readonly element;
|
|
37
|
+
private readonly cacheConfig;
|
|
38
|
+
url: string;
|
|
39
|
+
configuration: NgxImageCacheConfiguration;
|
|
40
|
+
private get el();
|
|
41
|
+
constructor(element: ElementRef, cacheConfig: NgxImageCacheConfig);
|
|
42
|
+
ngOnChanges(): void;
|
|
43
|
+
getCachedImage(): Promise<void>;
|
|
44
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgxImageCacheDirective, [null, { optional: true; }]>;
|
|
45
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgxImageCacheDirective, "img[ngx-cache]", never, { "url": { "alias": "source"; "required": false; }; "configuration": { "alias": "ngx-cache-config"; "required": false; }; }, {}, never, never, true, never>;
|
|
46
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../command-palette.component";
|
|
4
|
+
export class BreadcrumbComponent {
|
|
5
|
+
constructor(commandPalette) {
|
|
6
|
+
this.commandPalette = commandPalette;
|
|
7
|
+
this.breadcrumbs = [];
|
|
8
|
+
}
|
|
9
|
+
selectBreadcrumb(crumb) {
|
|
10
|
+
const index = this.breadcrumbs.indexOf(crumb);
|
|
11
|
+
if (index == -1)
|
|
12
|
+
throw new Error("Something terrible happened.");
|
|
13
|
+
const layer = this.breadcrumbs.at(-1);
|
|
14
|
+
layer.destroying = true;
|
|
15
|
+
setTimeout(() => {
|
|
16
|
+
this.commandPalette.setCommandList(this.breadcrumbs.at(-2).commands);
|
|
17
|
+
this.commandPalette.breadcrumbs.pop();
|
|
18
|
+
this.commandPalette.activeIndex = layer.selectedIndex;
|
|
19
|
+
}, 190);
|
|
20
|
+
}
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: BreadcrumbComponent, deps: [{ token: i1.CommandPaletteComponent }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: BreadcrumbComponent, isStandalone: true, selector: "ngx-commandpalette-breadcrumb", inputs: { breadcrumbs: "breadcrumbs" }, ngImport: i0, template: "@for (crumb of breadcrumbs; track crumb; let i = $index) {\n <div class=\"crumb\">\n <div\n class=\"crumb_inner\"\n [class.destroy]=\"crumb.destroying\"\n [class.root]=\"i == 0\"\n (click)=\"selectBreadcrumb(crumb)\"\n >\n {{crumb.action.label}}\n </div>\n </div>\n}\n", styles: [":host{display:flex}.crumb{overflow:hidden;height:26px;padding:0 16px;margin:0 -16px}.crumb .crumb_inner{--background-color: #3498db;color:#fff;position:relative;background:var(--background-color);padding:2px 5px 0 6px;margin-right:12px;text-align:center;white-space:pre;font-size:14px;-webkit-user-select:none;user-select:none;cursor:pointer;transition:transform var(--transition),opacity var(--transition),width var(--transition);animation:crumbIn var(--transition) 1}.crumb .crumb_inner.destroy{animation:crumbOut var(--transition) 1}.crumb .crumb_inner:before,.crumb .crumb_inner:after{content:\"\";position:absolute;top:0;border:0 solid var(--background-color);border-width:14px 8px;width:0;height:0}.crumb .crumb_inner:before{left:-14px;border-left-color:#0000}.crumb .crumb_inner:after{left:100%;border-color:#0000;border-left-color:var(--background-color)}.crumb .crumb_inner:hover{--background-color: #1abc9c}.crumb .crumb_inner:active{--background-color: #16a085}.crumb:nth-child(2n) .crumb_inner{--background-color: #2980b9}.crumb:first-child .crumb_inner{padding-left:6px;border-radius:4px 0 0 4px}.crumb:first-child .crumb_inner:before{border:none}.crumb:last-child:not(:only-child) .crumb_inner{padding-right:6px;border-radius:0 4px 4px 0}.crumb:last-child:not(:only-child) .crumb_inner:after{border:none}@keyframes crumbIn{0%{transform:translate(-10px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes crumbOut{to{transform:translate(-10px);opacity:0}0%{transform:translate(0);opacity:1}}mat-form-field input{transition:width .2s ease,opacity .15s 0ms cubic-bezier(.4,0,.2,1)!important}\n"] }); }
|
|
23
|
+
}
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: BreadcrumbComponent, decorators: [{
|
|
25
|
+
type: Component,
|
|
26
|
+
args: [{ selector: 'ngx-commandpalette-breadcrumb', standalone: true, template: "@for (crumb of breadcrumbs; track crumb; let i = $index) {\n <div class=\"crumb\">\n <div\n class=\"crumb_inner\"\n [class.destroy]=\"crumb.destroying\"\n [class.root]=\"i == 0\"\n (click)=\"selectBreadcrumb(crumb)\"\n >\n {{crumb.action.label}}\n </div>\n </div>\n}\n", styles: [":host{display:flex}.crumb{overflow:hidden;height:26px;padding:0 16px;margin:0 -16px}.crumb .crumb_inner{--background-color: #3498db;color:#fff;position:relative;background:var(--background-color);padding:2px 5px 0 6px;margin-right:12px;text-align:center;white-space:pre;font-size:14px;-webkit-user-select:none;user-select:none;cursor:pointer;transition:transform var(--transition),opacity var(--transition),width var(--transition);animation:crumbIn var(--transition) 1}.crumb .crumb_inner.destroy{animation:crumbOut var(--transition) 1}.crumb .crumb_inner:before,.crumb .crumb_inner:after{content:\"\";position:absolute;top:0;border:0 solid var(--background-color);border-width:14px 8px;width:0;height:0}.crumb .crumb_inner:before{left:-14px;border-left-color:#0000}.crumb .crumb_inner:after{left:100%;border-color:#0000;border-left-color:var(--background-color)}.crumb .crumb_inner:hover{--background-color: #1abc9c}.crumb .crumb_inner:active{--background-color: #16a085}.crumb:nth-child(2n) .crumb_inner{--background-color: #2980b9}.crumb:first-child .crumb_inner{padding-left:6px;border-radius:4px 0 0 4px}.crumb:first-child .crumb_inner:before{border:none}.crumb:last-child:not(:only-child) .crumb_inner{padding-right:6px;border-radius:0 4px 4px 0}.crumb:last-child:not(:only-child) .crumb_inner:after{border:none}@keyframes crumbIn{0%{transform:translate(-10px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes crumbOut{to{transform:translate(-10px);opacity:0}0%{transform:translate(0);opacity:1}}mat-form-field input{transition:width .2s ease,opacity .15s 0ms cubic-bezier(.4,0,.2,1)!important}\n"] }]
|
|
27
|
+
}], ctorParameters: () => [{ type: i1.CommandPaletteComponent }], propDecorators: { breadcrumbs: [{
|
|
28
|
+
type: Input
|
|
29
|
+
}] } });
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvY29tbWFuZC1wYWxldHRlL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvY29tbWFuZC1wYWxldHRlL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBVWpELE1BQU0sT0FBTyxtQkFBbUI7SUFTNUIsWUFDWSxjQUF1QztRQUF2QyxtQkFBYyxHQUFkLGNBQWMsQ0FBeUI7UUFSMUMsZ0JBQVcsR0FLZCxFQUFFLENBQUM7SUFNVCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBSztRQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFFcEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN4QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQzFELENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNYLENBQUM7OEdBM0JRLG1CQUFtQjtrR0FBbkIsbUJBQW1CLGlJQ1ZoQyxvV0FZQTs7MkZERmEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNJLCtCQUErQixjQUc3QixJQUFJOzRGQUlQLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tYW5kUGFsZXR0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1hbmQtcGFsZXR0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbWFuZEFjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvbW1hbmQtcGFsZXR0ZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3gtY29tbWFuZHBhbGV0dGUtYnJlYWRjcnVtYicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2JyZWFkY3J1bWIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWJDb21wb25lbnQge1xuXG4gICAgQElucHV0KCkgYnJlYWRjcnVtYnM6IHtcbiAgICAgICAgYWN0aW9uOiBDb21tYW5kQWN0aW9uLFxuICAgICAgICBjb21tYW5kczogQ29tbWFuZEFjdGlvbltdLFxuICAgICAgICBkZXN0cm95aW5nOiBib29sZWFuLFxuICAgICAgICBzZWxlY3RlZEluZGV4OiBudW1iZXJcbiAgICB9W10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNvbW1hbmRQYWxldHRlOiBDb21tYW5kUGFsZXR0ZUNvbXBvbmVudFxuICAgICkge1xuXG4gICAgfVxuXG4gICAgc2VsZWN0QnJlYWRjcnVtYihjcnVtYikge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYnJlYWRjcnVtYnMuaW5kZXhPZihjcnVtYik7XG4gICAgICAgIGlmIChpbmRleCA9PSAtMSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvbWV0aGluZyB0ZXJyaWJsZSBoYXBwZW5lZC5cIik7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmJyZWFkY3J1bWJzLmF0KC0xKTtcbiAgICAgICAgbGF5ZXIuZGVzdHJveWluZyA9IHRydWU7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21tYW5kUGFsZXR0ZS5zZXRDb21tYW5kTGlzdCh0aGlzLmJyZWFkY3J1bWJzLmF0KC0yKS5jb21tYW5kcyk7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRQYWxldHRlLmJyZWFkY3J1bWJzLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5jb21tYW5kUGFsZXR0ZS5hY3RpdmVJbmRleCA9IGxheWVyLnNlbGVjdGVkSW5kZXg7XG4gICAgICAgIH0sIDE5MClcbiAgICB9XG59XG4iLCJAZm9yIChjcnVtYiBvZiBicmVhZGNydW1iczsgdHJhY2sgY3J1bWI7IGxldCBpID0gJGluZGV4KSB7XG4gICAgPGRpdiBjbGFzcz1cImNydW1iXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY3J1bWJfaW5uZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmRlc3Ryb3ldPVwiY3J1bWIuZGVzdHJveWluZ1wiXG4gICAgICAgICAgICBbY2xhc3Mucm9vdF09XCJpID09IDBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEJyZWFkY3J1bWIoY3J1bWIpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7Y3J1bWIuYWN0aW9uLmxhYmVsfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG59XG4iXX0=
|