@coolon/angular-ui-powerups 16.1.0-aplpha.132 → 16.1.0-aplpha.133

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.
@@ -2,7 +2,7 @@ import { EventEmitter, QueryList } from "@angular/core";
2
2
  import { MatMenu, MatMenuTrigger } from "@angular/material/menu";
3
3
  import { Command, ValueModel } from "@coolon/pectin";
4
4
  import { DisposableComponent } from "../../../../disposable-component";
5
- import { FileDownloadComponent } from "../../../../file/file-download.component";
5
+ import { FileDownloadComponent } from "../../../../file/file-download/file-download.component";
6
6
  import { Track } from "../../../../track";
7
7
  import { CommandFace } from "../../../command-face";
8
8
  import { CommandComponent } from "../../../command/command.component";
@@ -54,7 +54,7 @@ import * as i52 from "./tables/renderer/table-more-menu/table-more-menu.componen
54
54
  import * as i53 from "./tables/renderer/table-more-menu/table-more-menu-popup/table-more-menu-popup.component";
55
55
  import * as i54 from "./forms/search-input/search-input.component";
56
56
  import * as i55 from "./tables/renderer/table-footer-row/table-footer-row.component";
57
- import * as i56 from "./file/file-download.component";
57
+ import * as i56 from "./file/file-download/file-download.component";
58
58
  import * as i57 from "@angular/common";
59
59
  import * as i58 from "@angular/platform-browser/animations";
60
60
  import * as i59 from "@angular/forms";
@@ -25,7 +25,7 @@ export * from "./commands/group/popup-menu/popup-menu.component";
25
25
  export * from "./commands/group/popup-menu/popup-menu-renderer/popup-menu-renderer.component";
26
26
  export * from "./commands/group/tool-bar/tool-bar.component";
27
27
  export * from "./empty-state/empty-state.component";
28
- export * from "./file/file-download.component";
28
+ export * from "./file/file-download/file-download.component";
29
29
  export * from "./focus-container/focus-container.component";
30
30
  export * from "./forms/abstract-input.component";
31
31
  export * from "./forms/abstract-list-input.component";
@@ -1,10 +1,10 @@
1
1
  import { ElementRef } from '@angular/core';
2
2
  import { CommandFace, ListModel, ValueModel, ValueModelChain } from '@coolon/pectin';
3
- import { HorizontalAlignment } from "../alignment";
4
- import { CommandContainer } from '../commands/group/command-container';
5
- import { PopupAwareComponent } from '../commands/group/popup-aware.component';
6
- import { PopupContainer } from '../commands/group/popup-container';
7
- import { CommandFace as CommandFaceUtil } from '../commands/command-face';
3
+ import { HorizontalAlignment } from "../../alignment";
4
+ import { CommandFace as CommandFaceUtil } from '../../commands/command-face';
5
+ import { CommandContainer } from '../../commands/group/command-container';
6
+ import { PopupAwareComponent } from '../../commands/group/popup-aware.component';
7
+ import { PopupContainer } from '../../commands/group/popup-container';
8
8
  import * as i0 from "@angular/core";
9
9
  /**
10
10
  *
@@ -24,15 +24,20 @@ export declare class FileDownloadComponent extends PopupAwareComponent {
24
24
  static ɵcmp: i0.ɵɵComponentDeclaration<FileDownloadComponent, "aup-file-download", never, { "download$": { "alias": "download$"; "required": false; }; "download": { "alias": "download"; "required": false; }; "alignFace": { "alias": "alignFace"; "required": false; }; }, {}, never, never, false, never>;
25
25
  }
26
26
  export declare namespace FileDownloadComponent {
27
- function createInfo(face: CommandFace, url: string, saveAs: string): {
27
+ function createInfo(options: {
28
+ face: CommandFace;
28
29
  url: string;
29
30
  saveAs: string;
31
+ }): {
30
32
  text?(): string;
31
33
  icon?(): string;
32
34
  iconPosition?(): string;
33
35
  tooltip?(): string;
34
36
  color?(): string;
35
37
  style?(): string;
38
+ face: CommandFace;
39
+ url: string;
40
+ saveAs: string;
36
41
  };
37
42
  interface DownloadInfo extends CommandFace {
38
43
  saveAs: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coolon/angular-ui-powerups",
3
- "version": "16.1.0-aplpha.132",
3
+ "version": "16.1.0-aplpha.133",
4
4
  "peerDependencies": {
5
5
  "@angular/animations": "^16.2.9",
6
6
  "@angular/common": "^16.2.9",
@@ -1,92 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { Component, ElementRef, HostBinding, Inject, Input, Optional } from '@angular/core';
3
- import { Dsl, proxify, Proxify, StoreInValueModel, ValueModel } from '@coolon/pectin';
4
- import { HorizontalAlignment } from "../alignment";
5
- import { CommandContainer } from '../commands/group/command-container';
6
- import { PopupAwareComponent } from '../commands/group/popup-aware.component';
7
- import { POPUP_CONTAINER } from '../commands/group/popup-container';
8
- import { CommandFace as CommandFaceUtil } from '../commands/command-face';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "../commands/group/command-container";
11
- import * as i2 from "@angular/common";
12
- import * as i3 from "@angular/material/button";
13
- import * as i4 from "@angular/material/tooltip";
14
- import * as i5 from "../commands/command-face/command-face.component";
15
- // TODO: this is an ugly copy and paste hack from the Command component.
16
- /**
17
- *
18
- */
19
- export class FileDownloadComponent extends PopupAwareComponent {
20
- containerParent;
21
- CommandFaceUtil = CommandFaceUtil;
22
- #download$_accessor_storage = proxify((ValueModel));
23
- get download$() { return this.#download$_accessor_storage; }
24
- set download$(value) { this.#download$_accessor_storage = value; }
25
- #download_accessor_storage;
26
- get download() { return this.#download_accessor_storage; }
27
- set download(value) { this.#download_accessor_storage = value; }
28
- alignFace = HorizontalAlignment.CENTER;
29
- faces$;
30
- buttonStyle$;
31
- color$;
32
- tooltip$;
33
- constructor(element, popupContainer, containerParent) {
34
- super(element, popupContainer);
35
- this.containerParent = containerParent;
36
- const { chain } = Dsl.disposeWith(this);
37
- this.faces$ = chain(this.download$).map(it => {
38
- return it.icon ? it : {
39
- ...it,
40
- icon() {
41
- return 'mat:file_download';
42
- },
43
- };
44
- }).mapToList();
45
- this.buttonStyle$ = chain(this.download$).map(f => CommandFaceUtil.getStyleOf(f));
46
- this.color$ = chain(this.download$).map(f => CommandFaceUtil.getColorOf(f));
47
- this.tooltip$ = chain(this.download$).map(f => CommandFaceUtil.getTooltipOf(f));
48
- }
49
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: FileDownloadComponent, deps: [{ token: i0.ElementRef }, { token: POPUP_CONTAINER, optional: true }, { token: i1.CommandContainer, optional: true }], target: i0.ɵɵFactoryTarget.Component });
50
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: FileDownloadComponent, selector: "aup-file-download", inputs: { download$: "download$", download: "download", alignFace: "alignFace" }, host: { properties: { "class": "this.alignFace" } }, usesInheritance: true, ngImport: i0, template: "<ng-container [ngSwitch]=\"buttonStyle$.value\">\n <ng-container *ngSwitchCase=\"CommandFaceUtil.Style.STROKED\">\n <a mat-stroked-button [href]=\"download?.url\" [download]=\"download?.saveAs\" [color]=\"color$.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </a>\n </ng-container>\n <ng-container *ngSwitchCase=\"CommandFaceUtil.Style.RAISED\">\n <a mat-raised-button [href]=\"download?.url\" [download]=\"download?.saveAs\" [color]=\"color$.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </a>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <a mat-button [href]=\"download?.url\" [download]=\"download?.saveAs\" [color]=\"color$.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </a>\n </ng-container>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i5.CommandFaceComponent, selector: "aup-command-face", inputs: ["faces", "face", "ignoreIcon", "ignoreText", "includeMissingIconInLayout"] }] });
51
- }
52
- __decorate([
53
- Proxify(),
54
- __metadata("design:type", ValueModel)
55
- ], FileDownloadComponent.prototype, "download$", null);
56
- __decorate([
57
- StoreInValueModel(),
58
- __metadata("design:type", Object)
59
- ], FileDownloadComponent.prototype, "download", null);
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: FileDownloadComponent, decorators: [{
61
- type: Component,
62
- args: [{ selector: 'aup-file-download', template: "<ng-container [ngSwitch]=\"buttonStyle$.value\">\n <ng-container *ngSwitchCase=\"CommandFaceUtil.Style.STROKED\">\n <a mat-stroked-button [href]=\"download?.url\" [download]=\"download?.saveAs\" [color]=\"color$.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </a>\n </ng-container>\n <ng-container *ngSwitchCase=\"CommandFaceUtil.Style.RAISED\">\n <a mat-raised-button [href]=\"download?.url\" [download]=\"download?.saveAs\" [color]=\"color$.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </a>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <a mat-button [href]=\"download?.url\" [download]=\"download?.saveAs\" [color]=\"color$.value\"\n [matTooltip]=\"tooltip$.value\">\n <aup-command-face [class]=\"alignFace\" [faces]=\"faces$.value\"></aup-command-face>\n </a>\n </ng-container>\n</ng-container>\n" }]
63
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
64
- type: Optional
65
- }, {
66
- type: Inject,
67
- args: [POPUP_CONTAINER]
68
- }] }, { type: i1.CommandContainer, decorators: [{
69
- type: Optional
70
- }] }]; }, propDecorators: { download$: [{
71
- type: Input
72
- }], download: [{
73
- type: Input
74
- }], alignFace: [{
75
- type: Input
76
- }, {
77
- type: HostBinding,
78
- args: ["class"]
79
- }] } });
80
- (function (FileDownloadComponent) {
81
- function createInfo(face, url, saveAs) {
82
- const info = {
83
- ...face,
84
- url,
85
- saveAs,
86
- };
87
- console.log(info);
88
- return info;
89
- }
90
- FileDownloadComponent.createInfo = createInfo;
91
- })(FileDownloadComponent || (FileDownloadComponent = {}));
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1kb3dubG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUvZmlsZS1kb3dubG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUvZmlsZS1kb3dubG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFFTCxHQUFHLEVBR0gsT0FBTyxFQUNQLE9BQU8sRUFDUCxpQkFBaUIsRUFDakIsVUFBVSxFQUVYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxlQUFlLEVBQWlCLE1BQU0sbUNBQW1DLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsSUFBSSxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQUV6RSx3RUFBd0U7QUFDeEU7O0dBRUc7QUFNSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsbUJBQW1CO0lBdUJuQjtJQXJCdEIsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUc1Qyw4QkFBNEQsT0FBTyxDQUFDLENBQUEsVUFBOEMsQ0FBQSxDQUFDLENBQUM7SUFBcEgsSUFBQSxTQUFTLCtDQUEyRztJQUFwSCxJQUFBLFNBQVMscURBQTJHO0lBR3BILDJCQUE2QztJQUE3QyxJQUFBLFFBQVEsOENBQXFDO0lBQTdDLElBQUEsUUFBUSxvREFBcUM7SUFJdEQsU0FBUyxHQUF3QixtQkFBbUIsQ0FBQyxNQUFNLENBQUM7SUFHbkQsTUFBTSxDQUFnRDtJQUU1QyxZQUFZLENBQTBCO0lBQ3RDLE1BQU0sQ0FBMEI7SUFDaEMsUUFBUSxDQUEwQjtJQUVyRCxZQUFZLE9BQW1CLEVBQ2tCLGNBQThCLEVBQ3RDLGVBQWtDO1FBQ3pFLEtBQUssQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFEUSxvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFFekUsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUMzQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLEdBQUcsRUFBRTtnQkFDTCxJQUFJO29CQUNGLE9BQU8sbUJBQW1CLENBQUE7Z0JBQzVCLENBQUM7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRixDQUFDO3VHQXRDVSxxQkFBcUIsNENBc0JBLGVBQWU7MkZBdEJwQyxxQkFBcUIsdU5DM0JsQyw4aENBb0JBOztBRFlXO0lBREMsT0FBTyxFQUFFOzhCQUNDLFVBQVU7c0RBQStGO0FBR3BIO0lBREMsaUJBQWlCLEVBQUU7O3FEQUN5QjsyRkFSM0MscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjs7MEJBMEJoQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWU7OzBCQUNsQyxRQUFROzRDQWxCWixTQUFTO3NCQURqQixLQUFLO2dCQUlHLFFBQVE7c0JBRGhCLEtBQUs7Z0JBS04sU0FBUztzQkFGUixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLE9BQU87O0FBZ0N0QixXQUFpQixxQkFBcUI7SUFFcEMsU0FBZ0IsVUFBVSxDQUFDLElBQWlCLEVBQUUsR0FBVyxFQUFFLE1BQWM7UUFDdkUsTUFBTSxJQUFJLEdBQUc7WUFDWCxHQUFHLElBQUk7WUFDUCxHQUFHO1lBQ0gsTUFBTTtTQUNQLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQVJlLGdDQUFVLGFBUXpCLENBQUE7QUFNSCxDQUFDLEVBaEJnQixxQkFBcUIsS0FBckIscUJBQXFCLFFBZ0JyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29tbWFuZEZhY2UsXG4gIERzbCxcbiAgTGlzdE1vZGVsLFxuICBMaXN0TW9kZWxDaGFpbixcbiAgcHJveGlmeSxcbiAgUHJveGlmeSxcbiAgU3RvcmVJblZhbHVlTW9kZWwsXG4gIFZhbHVlTW9kZWwsXG4gIFZhbHVlTW9kZWxDaGFpblxufSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQge0hvcml6b250YWxBbGlnbm1lbnR9IGZyb20gXCIuLi9hbGlnbm1lbnRcIjtcbmltcG9ydCB7Q29tbWFuZENvbnRhaW5lcn0gZnJvbSAnLi4vY29tbWFuZHMvZ3JvdXAvY29tbWFuZC1jb250YWluZXInO1xuaW1wb3J0IHtQb3B1cEF3YXJlQ29tcG9uZW50fSBmcm9tICcuLi9jb21tYW5kcy9ncm91cC9wb3B1cC1hd2FyZS5jb21wb25lbnQnO1xuaW1wb3J0IHtQT1BVUF9DT05UQUlORVIsIFBvcHVwQ29udGFpbmVyfSBmcm9tICcuLi9jb21tYW5kcy9ncm91cC9wb3B1cC1jb250YWluZXInO1xuaW1wb3J0IHsgQ29tbWFuZEZhY2UgYXMgQ29tbWFuZEZhY2VVdGlsfSBmcm9tICcuLi9jb21tYW5kcy9jb21tYW5kLWZhY2UnO1xuXG4vLyBUT0RPOiB0aGlzIGlzIGFuIHVnbHkgY29weSBhbmQgcGFzdGUgaGFjayBmcm9tIHRoZSBDb21tYW5kIGNvbXBvbmVudC5cbi8qKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXVwLWZpbGUtZG93bmxvYWQnLFxuICB0ZW1wbGF0ZVVybDogXCJmaWxlLWRvd25sb2FkLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiZmlsZS1kb3dubG9hZC5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlRG93bmxvYWRDb21wb25lbnQgZXh0ZW5kcyBQb3B1cEF3YXJlQ29tcG9uZW50IHtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgQ29tbWFuZEZhY2VVdGlsID0gQ29tbWFuZEZhY2VVdGlsO1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3IgZG93bmxvYWQkOiBWYWx1ZU1vZGVsPEZpbGVEb3dubG9hZENvbXBvbmVudC5Eb3dubG9hZEluZm8+ID0gcHJveGlmeShWYWx1ZU1vZGVsPEZpbGVEb3dubG9hZENvbXBvbmVudC5Eb3dubG9hZEluZm8+KTtcblxuICBASW5wdXQoKSBAU3RvcmVJblZhbHVlTW9kZWwoKVxuICBhY2Nlc3NvciBkb3dubG9hZDogRmlsZURvd25sb2FkQ29tcG9uZW50LkRvd25sb2FkSW5mbztcblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoXCJjbGFzc1wiKVxuICBhbGlnbkZhY2U6IEhvcml6b250YWxBbGlnbm1lbnQgPSBIb3Jpem9udGFsQWxpZ25tZW50LkNFTlRFUjtcblxuXG4gIHJlYWRvbmx5IGZhY2VzJDogTGlzdE1vZGVsPEZpbGVEb3dubG9hZENvbXBvbmVudC5Eb3dubG9hZEluZm8+O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBidXR0b25TdHlsZSQ6IFZhbHVlTW9kZWxDaGFpbjxzdHJpbmc+O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29sb3IkOiBWYWx1ZU1vZGVsQ2hhaW48c3RyaW5nPjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvb2x0aXAkOiBWYWx1ZU1vZGVsQ2hhaW48c3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFBPUFVQX0NPTlRBSU5FUikgcG9wdXBDb250YWluZXI6IFBvcHVwQ29udGFpbmVyLFxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lclBhcmVudD86IENvbW1hbmRDb250YWluZXIpIHtcbiAgICBzdXBlcihlbGVtZW50LCBwb3B1cENvbnRhaW5lcik7XG4gICAgY29uc3Qge2NoYWlufSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcblxuICAgIHRoaXMuZmFjZXMkID0gY2hhaW4odGhpcy5kb3dubG9hZCQpLm1hcChpdCA9PiB7XG4gICAgICByZXR1cm4gaXQuaWNvbiA/IGl0IDoge1xuICAgICAgICAuLi5pdCxcbiAgICAgICAgaWNvbigpIHtcbiAgICAgICAgICByZXR1cm4gJ21hdDpmaWxlX2Rvd25sb2FkJ1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9KS5tYXBUb0xpc3QoKTtcbiAgICB0aGlzLmJ1dHRvblN0eWxlJCA9IGNoYWluKHRoaXMuZG93bmxvYWQkKS5tYXAoZiA9PiBDb21tYW5kRmFjZVV0aWwuZ2V0U3R5bGVPZihmKSk7XG4gICAgdGhpcy5jb2xvciQgPSBjaGFpbih0aGlzLmRvd25sb2FkJCkubWFwKGYgPT4gQ29tbWFuZEZhY2VVdGlsLmdldENvbG9yT2YoZikpO1xuICAgIHRoaXMudG9vbHRpcCQgPSBjaGFpbih0aGlzLmRvd25sb2FkJCkubWFwKGYgPT4gQ29tbWFuZEZhY2VVdGlsLmdldFRvb2x0aXBPZihmKSk7XG4gIH1cblxuXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmlsZURvd25sb2FkQ29tcG9uZW50IHtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5mbyhmYWNlOiBDb21tYW5kRmFjZSwgdXJsOiBzdHJpbmcsIHNhdmVBczogc3RyaW5nKSB7XG4gICAgY29uc3QgaW5mbyA9IHtcbiAgICAgIC4uLmZhY2UsXG4gICAgICB1cmwsXG4gICAgICBzYXZlQXMsXG4gICAgfTtcbiAgICBjb25zb2xlLmxvZyhpbmZvKTtcbiAgICByZXR1cm4gaW5mb1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBEb3dubG9hZEluZm8gZXh0ZW5kcyBDb21tYW5kRmFjZSB7XG4gICAgc2F2ZUFzOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImJ1dHRvblN0eWxlJC52YWx1ZVwiPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJDb21tYW5kRmFjZVV0aWwuU3R5bGUuU1RST0tFRFwiPlxuICAgIDxhIG1hdC1zdHJva2VkLWJ1dHRvbiBbaHJlZl09XCJkb3dubG9hZD8udXJsXCIgW2Rvd25sb2FkXT1cImRvd25sb2FkPy5zYXZlQXNcIiBbY29sb3JdPVwiY29sb3IkLnZhbHVlXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInRvb2x0aXAkLnZhbHVlXCI+XG4gICAgICA8YXVwLWNvbW1hbmQtZmFjZSBbY2xhc3NdPVwiYWxpZ25GYWNlXCIgW2ZhY2VzXT1cImZhY2VzJC52YWx1ZVwiPjwvYXVwLWNvbW1hbmQtZmFjZT5cbiAgICA8L2E+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJDb21tYW5kRmFjZVV0aWwuU3R5bGUuUkFJU0VEXCI+XG4gICAgPGEgbWF0LXJhaXNlZC1idXR0b24gW2hyZWZdPVwiZG93bmxvYWQ/LnVybFwiIFtkb3dubG9hZF09XCJkb3dubG9hZD8uc2F2ZUFzXCIgW2NvbG9yXT1cImNvbG9yJC52YWx1ZVwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJ0b29sdGlwJC52YWx1ZVwiPlxuICAgICAgPGF1cC1jb21tYW5kLWZhY2UgW2NsYXNzXT1cImFsaWduRmFjZVwiIFtmYWNlc109XCJmYWNlcyQudmFsdWVcIj48L2F1cC1jb21tYW5kLWZhY2U+XG4gICAgPC9hPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgIDxhIG1hdC1idXR0b24gW2hyZWZdPVwiZG93bmxvYWQ/LnVybFwiIFtkb3dubG9hZF09XCJkb3dubG9hZD8uc2F2ZUFzXCIgW2NvbG9yXT1cImNvbG9yJC52YWx1ZVwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJ0b29sdGlwJC52YWx1ZVwiPlxuICAgICAgPGF1cC1jb21tYW5kLWZhY2UgW2NsYXNzXT1cImFsaWduRmFjZVwiIFtmYWNlc109XCJmYWNlcyQudmFsdWVcIj48L2F1cC1jb21tYW5kLWZhY2U+XG4gICAgPC9hPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19