phoenix-ui-components 2.8.0 → 2.11.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.
Files changed (71) hide show
  1. package/README.md +11 -3
  2. package/dist/README.md +11 -3
  3. package/dist/components/loader/loader.component.d.ts +4 -0
  4. package/dist/components/phoenix-menu/index.d.ts +1 -1
  5. package/dist/components/phoenix-menu/{pheonix-menu-item → phoenix-menu-item}/phoenix-menu-item.component.d.ts +0 -0
  6. package/dist/components/phoenix-ui.module.d.ts +60 -58
  7. package/dist/components/ui-menu/cycle-events/cycle-events.component.d.ts +16 -0
  8. package/dist/components/ui-menu/experiment-info/experiment-info.component.d.ts +4 -3
  9. package/dist/components/ui-menu/index.d.ts +2 -0
  10. package/dist/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.d.ts +2 -2
  11. package/dist/components/ui-menu/ui-menu-wrapper/ui-menu-wrapper.component.d.ts +6 -0
  12. package/dist/components/ui-menu/ui-menu.component.d.ts +0 -1
  13. package/dist/esm2020/components/embed-menu/embed-menu.component.mjs +3 -3
  14. package/dist/esm2020/components/embed-menu/experiment-link/experiment-link.component.mjs +3 -3
  15. package/dist/esm2020/components/file-explorer/file-explorer.component.mjs +3 -3
  16. package/dist/esm2020/components/loader/loader.component.mjs +15 -8
  17. package/dist/esm2020/components/nav/nav.component.mjs +3 -3
  18. package/dist/esm2020/components/phoenix-menu/config/config-slider/config-slider.component.mjs +3 -3
  19. package/dist/esm2020/components/phoenix-menu/index.mjs +2 -2
  20. package/dist/esm2020/components/phoenix-menu/phoenix-menu-item/phoenix-menu-item.component.mjs +36 -0
  21. package/dist/esm2020/components/phoenix-menu/phoenix-menu.component.mjs +4 -4
  22. package/dist/esm2020/components/phoenix-ui.module.mjs +33 -9
  23. package/dist/esm2020/components/ring-loader/ring-loader.component.mjs +3 -3
  24. package/dist/esm2020/components/ui-menu/animate-camera/animate-camera.component.mjs +7 -8
  25. package/dist/esm2020/components/ui-menu/animate-event/animate-event.component.mjs +3 -3
  26. package/dist/esm2020/components/ui-menu/ar-toggle/ar-toggle.component.mjs +3 -3
  27. package/dist/esm2020/components/ui-menu/auto-rotate/auto-rotate.component.mjs +3 -3
  28. package/dist/esm2020/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.mjs +3 -3
  29. package/dist/esm2020/components/ui-menu/collections-info/collections-info.component.mjs +3 -3
  30. package/dist/esm2020/components/ui-menu/cycle-events/cycle-events.component.mjs +36 -0
  31. package/dist/esm2020/components/ui-menu/dark-theme/dark-theme.component.mjs +3 -3
  32. package/dist/esm2020/components/ui-menu/event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component.mjs +3 -3
  33. package/dist/esm2020/components/ui-menu/event-data-explorer/event-data-explorer.component.mjs +3 -3
  34. package/dist/esm2020/components/ui-menu/event-selector/event-selector.component.mjs +3 -3
  35. package/dist/esm2020/components/ui-menu/experiment-info/experiment-info.component.mjs +9 -7
  36. package/dist/esm2020/components/ui-menu/index.mjs +3 -1
  37. package/dist/esm2020/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.mjs +3 -3
  38. package/dist/esm2020/components/ui-menu/info-panel/info-panel.component.mjs +3 -3
  39. package/dist/esm2020/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.mjs +43 -53
  40. package/dist/esm2020/components/ui-menu/io-options/io-options.component.mjs +3 -3
  41. package/dist/esm2020/components/ui-menu/main-view-toggle/main-view-toggle.component.mjs +3 -3
  42. package/dist/esm2020/components/ui-menu/menu-toggle/menu-toggle.component.mjs +3 -3
  43. package/dist/esm2020/components/ui-menu/object-clipping/object-clipping.component.mjs +5 -5
  44. package/dist/esm2020/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.mjs +3 -3
  45. package/dist/esm2020/components/ui-menu/object-selection/object-selection.component.mjs +3 -3
  46. package/dist/esm2020/components/ui-menu/overlay/overlay.component.mjs +3 -3
  47. package/dist/esm2020/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.mjs +3 -3
  48. package/dist/esm2020/components/ui-menu/overlay-view/overlay-view.component.mjs +3 -3
  49. package/dist/esm2020/components/ui-menu/performance-toggle/performance-toggle.component.mjs +3 -3
  50. package/dist/esm2020/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.mjs +3 -3
  51. package/dist/esm2020/components/ui-menu/share-link/share-link.component.mjs +3 -3
  52. package/dist/esm2020/components/ui-menu/ss-mode/ss-mode.component.mjs +4 -4
  53. package/dist/esm2020/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.mjs +3 -3
  54. package/dist/esm2020/components/ui-menu/tree-menu/tree-menu.component.mjs +3 -3
  55. package/dist/esm2020/components/ui-menu/ui-menu-wrapper/ui-menu-wrapper.component.mjs +16 -0
  56. package/dist/esm2020/components/ui-menu/ui-menu.component.mjs +25 -27
  57. package/dist/esm2020/components/ui-menu/view-options/view-options.component.mjs +3 -3
  58. package/dist/esm2020/components/ui-menu/vr-toggle/vr-toggle.component.mjs +3 -3
  59. package/dist/esm2020/components/ui-menu/zoom-controls/zoom-controls.component.mjs +3 -3
  60. package/dist/esm2020/services/error-message-service.mjs +32 -0
  61. package/dist/esm2020/services/event-display.service.mjs +3 -3
  62. package/dist/esm2020/services/extras/attribute.pipe.mjs +3 -3
  63. package/dist/esm2020/services/global-error-handler.mjs +29 -0
  64. package/dist/fesm2015/phoenix-ui-components.mjs +321 -201
  65. package/dist/fesm2015/phoenix-ui-components.mjs.map +1 -1
  66. package/dist/fesm2020/phoenix-ui-components.mjs +320 -204
  67. package/dist/fesm2020/phoenix-ui-components.mjs.map +1 -1
  68. package/dist/services/error-message-service.d.ts +17 -0
  69. package/dist/services/global-error-handler.d.ts +20 -0
  70. package/package.json +6 -6
  71. package/dist/esm2020/components/phoenix-menu/pheonix-menu-item/phoenix-menu-item.component.mjs +0 -36
@@ -15,9 +15,9 @@ export class DarkThemeComponent {
15
15
  this.eventDisplay.getUIManager().setDarkTheme(this.darkTheme);
16
16
  }
17
17
  }
18
- DarkThemeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DarkThemeComponent, deps: [{ token: i1.EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
19
- DarkThemeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: DarkThemeComponent, selector: "app-dark-theme", ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Dark theme\"\n [active]=\"darkTheme\"\n icon=\"dark\"\n (click)=\"setDarkTheme()\"\n>\n</app-menu-toggle>\n", styles: [""], components: [{ type: i2.MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DarkThemeComponent, decorators: [{
18
+ DarkThemeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: DarkThemeComponent, deps: [{ token: i1.EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
19
+ DarkThemeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: DarkThemeComponent, selector: "app-dark-theme", ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Dark theme\"\n [active]=\"darkTheme\"\n icon=\"dark\"\n (click)=\"setDarkTheme()\"\n>\n</app-menu-toggle>\n", styles: [""], components: [{ type: i2.MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: DarkThemeComponent, decorators: [{
21
21
  type: Component,
22
22
  args: [{ selector: 'app-dark-theme', template: "<app-menu-toggle\n tooltip=\"Dark theme\"\n [active]=\"darkTheme\"\n icon=\"dark\"\n (click)=\"setDarkTheme()\"\n>\n</app-menu-toggle>\n", styles: [""] }]
23
23
  }], ctorParameters: function () { return [{ type: i1.EventDisplayService }]; } });
@@ -94,9 +94,9 @@ export class EventDataExplorerDialogComponent {
94
94
  return rootNode;
95
95
  }
96
96
  }
97
- EventDataExplorerDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EventDataExplorerDialogComponent, deps: [{ token: i1.EventDisplayService }, { token: i2.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
98
- EventDataExplorerDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: EventDataExplorerDialogComponent, selector: "app-event-data-explorer-dialog", ngImport: i0, template: "<div class=\"dialog\">\n <div class=\"d-flex\">\n <h1 mat-dialog-title>Event data from directory</h1>\n <app-ring-loader *ngIf=\"loading\"></app-ring-loader>\n </div>\n <div mat-dialog-content class=\"dialog-content\">\n <div *ngIf=\"error\">Error processing request.</div>\n <mat-tab-group\n *ngIf=\"!error\"\n mat-align-tabs=\"start\"\n animationDuration=\"0ms\"\n disableRipple\n color=\"transparent\"\n >\n <mat-tab label=\"Event data\">\n <div class=\"py-3\">\n <app-file-explorer\n [rootFileNode]=\"eventDataFileNode\"\n (onFileSelect)=\"loadEvent($event)\"\n ></app-file-explorer>\n </div>\n </mat-tab>\n <mat-tab label=\"Config\">\n <div class=\"py-3\">\n <app-file-explorer\n [rootFileNode]=\"configFileNode\"\n (onFileSelect)=\"loadConfig($event)\"\n ></app-file-explorer>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n <div mat-dialog-actions>\n <button mat-button (click)=\"onClose()\" cdkFocusInitial>Close</button>\n </div>\n</div>\n", styles: [".dialog{width:30rem;max-width:95%}.file-path-button{width:100%;color:var(--phoenix-text-color);background:var(--phoenix-background-color-tertiary);text-align:left;border-radius:1rem;margin-bottom:.5rem;padding:.5rem 1rem}.file-path-button:last-child{margin-bottom:0}.file-path-button:hover{background:var(--phoenix-background-color-secondary)}.file-path-button:focus{border:1px solid var(--phoenix-text-color-secondary);box-shadow:none}\n"], components: [{ type: i3.RingLoaderComponent, selector: "app-ring-loader" }, { type: i4.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i4.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { type: i5.FileExplorerComponent, selector: "app-file-explorer", inputs: ["rootFileNode"], outputs: ["onFileSelect"] }, { type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }] });
99
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EventDataExplorerDialogComponent, decorators: [{
97
+ EventDataExplorerDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: EventDataExplorerDialogComponent, deps: [{ token: i1.EventDisplayService }, { token: i2.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
98
+ EventDataExplorerDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: EventDataExplorerDialogComponent, selector: "app-event-data-explorer-dialog", ngImport: i0, template: "<div class=\"dialog\">\n <div class=\"d-flex\">\n <h1 mat-dialog-title>Event data from directory</h1>\n <app-ring-loader *ngIf=\"loading\"></app-ring-loader>\n </div>\n <div mat-dialog-content class=\"dialog-content\">\n <div *ngIf=\"error\">Error processing request.</div>\n <mat-tab-group\n *ngIf=\"!error\"\n mat-align-tabs=\"start\"\n animationDuration=\"0ms\"\n disableRipple\n color=\"transparent\"\n >\n <mat-tab label=\"Event data\">\n <div class=\"py-3\">\n <app-file-explorer\n [rootFileNode]=\"eventDataFileNode\"\n (onFileSelect)=\"loadEvent($event)\"\n ></app-file-explorer>\n </div>\n </mat-tab>\n <mat-tab label=\"Config\">\n <div class=\"py-3\">\n <app-file-explorer\n [rootFileNode]=\"configFileNode\"\n (onFileSelect)=\"loadConfig($event)\"\n ></app-file-explorer>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n <div mat-dialog-actions>\n <button mat-button (click)=\"onClose()\" cdkFocusInitial>Close</button>\n </div>\n</div>\n", styles: [".dialog{width:30rem;max-width:95%}.file-path-button{width:100%;color:var(--phoenix-text-color);background:var(--phoenix-background-color-tertiary);text-align:left;border-radius:1rem;margin-bottom:.5rem;padding:.5rem 1rem}.file-path-button:last-child{margin-bottom:0}.file-path-button:hover{background:var(--phoenix-background-color-secondary)}.file-path-button:focus{border:1px solid var(--phoenix-text-color-secondary);box-shadow:none}\n"], components: [{ type: i3.RingLoaderComponent, selector: "app-ring-loader" }, { type: i4.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i4.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { type: i5.FileExplorerComponent, selector: "app-file-explorer", inputs: ["rootFileNode"], outputs: ["onFileSelect"] }, { type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }] });
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: EventDataExplorerDialogComponent, decorators: [{
100
100
  type: Component,
101
101
  args: [{ selector: 'app-event-data-explorer-dialog', template: "<div class=\"dialog\">\n <div class=\"d-flex\">\n <h1 mat-dialog-title>Event data from directory</h1>\n <app-ring-loader *ngIf=\"loading\"></app-ring-loader>\n </div>\n <div mat-dialog-content class=\"dialog-content\">\n <div *ngIf=\"error\">Error processing request.</div>\n <mat-tab-group\n *ngIf=\"!error\"\n mat-align-tabs=\"start\"\n animationDuration=\"0ms\"\n disableRipple\n color=\"transparent\"\n >\n <mat-tab label=\"Event data\">\n <div class=\"py-3\">\n <app-file-explorer\n [rootFileNode]=\"eventDataFileNode\"\n (onFileSelect)=\"loadEvent($event)\"\n ></app-file-explorer>\n </div>\n </mat-tab>\n <mat-tab label=\"Config\">\n <div class=\"py-3\">\n <app-file-explorer\n [rootFileNode]=\"configFileNode\"\n (onFileSelect)=\"loadConfig($event)\"\n ></app-file-explorer>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n <div mat-dialog-actions>\n <button mat-button (click)=\"onClose()\" cdkFocusInitial>Close</button>\n </div>\n</div>\n", styles: [".dialog{width:30rem;max-width:95%}.file-path-button{width:100%;color:var(--phoenix-text-color);background:var(--phoenix-background-color-tertiary);text-align:left;border-radius:1rem;margin-bottom:.5rem;padding:.5rem 1rem}.file-path-button:last-child{margin-bottom:0}.file-path-button:hover{background:var(--phoenix-background-color-secondary)}.file-path-button:focus{border:1px solid var(--phoenix-text-color-secondary);box-shadow:none}\n"] }]
102
102
  }], ctorParameters: function () { return [{ type: i1.EventDisplayService }, { type: i2.MatDialogRef }, { type: undefined, decorators: [{
@@ -15,9 +15,9 @@ export class EventDataExplorerComponent {
15
15
  });
16
16
  }
17
17
  }
18
- EventDataExplorerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EventDataExplorerComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
19
- EventDataExplorerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: EventDataExplorerComponent, selector: "app-event-data-explorer", inputs: { apiURL: "apiURL" }, ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Browse events in data directory\"\n icon=\"server\"\n [active]=\"false\"\n (click)=\"openEventDataExplorerDialog()\"\n>\n</app-menu-toggle>\n", styles: [""], components: [{ type: i2.MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EventDataExplorerComponent, decorators: [{
18
+ EventDataExplorerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: EventDataExplorerComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
19
+ EventDataExplorerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: EventDataExplorerComponent, selector: "app-event-data-explorer", inputs: { apiURL: "apiURL" }, ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Browse events in data directory\"\n icon=\"server\"\n [active]=\"false\"\n (click)=\"openEventDataExplorerDialog()\"\n>\n</app-menu-toggle>\n", styles: [""], components: [{ type: i2.MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: EventDataExplorerComponent, decorators: [{
21
21
  type: Component,
22
22
  args: [{ selector: 'app-event-data-explorer', template: "<app-menu-toggle\n tooltip=\"Browse events in data directory\"\n icon=\"server\"\n [active]=\"false\"\n (click)=\"openEventDataExplorerDialog()\"\n>\n</app-menu-toggle>\n", styles: [""] }]
23
23
  }], ctorParameters: function () { return [{ type: i1.MatDialog }]; }, propDecorators: { apiURL: [{
@@ -15,9 +15,9 @@ export class EventSelectorComponent {
15
15
  this.eventDisplay.loadEvent(value);
16
16
  }
17
17
  }
18
- EventSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EventSelectorComponent, deps: [{ token: i1.EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
19
- EventSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: EventSelectorComponent, selector: "app-event-selector", ngImport: i0, template: "<div\n class=\"eventSelector mx-2\"\n *ngIf=\"events != null\"\n matTooltip=\"Event selector\"\n matTooltipPosition=\"above\"\n>\n <select name=\"event\" (change)=\"changeEvent($event)\">\n <option *ngFor=\"let event of events\" [value]=\"event\">\n {{ event }}\n </option>\n </select>\n</div>\n", styles: [".eventSelector select{width:9rem;padding:5px 10px;font-size:12px;border:1px solid rgba(88,88,88,.08);box-shadow:var(--phoenix-icon-shadow);background-color:var(--phoenix-background-color-tertiary);color:var(--phoenix-text-color-secondary)}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: EventSelectorComponent, decorators: [{
18
+ EventSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: EventSelectorComponent, deps: [{ token: i1.EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
19
+ EventSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: EventSelectorComponent, selector: "app-event-selector", ngImport: i0, template: "<div\n class=\"eventSelector mx-2\"\n *ngIf=\"events != null\"\n matTooltip=\"Event selector\"\n matTooltipPosition=\"above\"\n>\n <select name=\"event\" (change)=\"changeEvent($event)\">\n <option *ngFor=\"let event of events\" [value]=\"event\">\n {{ event }}\n </option>\n </select>\n</div>\n", styles: [".eventSelector select{width:9rem;padding:5px 10px;font-size:12px;border:1px solid rgba(88,88,88,.08);box-shadow:var(--phoenix-icon-shadow);background-color:var(--phoenix-background-color-tertiary);color:var(--phoenix-text-color-secondary)}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: EventSelectorComponent, decorators: [{
21
21
  type: Component,
22
22
  args: [{ selector: 'app-event-selector', template: "<div\n class=\"eventSelector mx-2\"\n *ngIf=\"events != null\"\n matTooltip=\"Event selector\"\n matTooltipPosition=\"above\"\n>\n <select name=\"event\" (change)=\"changeEvent($event)\">\n <option *ngFor=\"let event of events\" [value]=\"event\">\n {{ event }}\n </option>\n </select>\n</div>\n", styles: [".eventSelector select{width:9rem;padding:5px 10px;font-size:12px;border:1px solid rgba(88,88,88,.08);box-shadow:var(--phoenix-icon-shadow);background-color:var(--phoenix-background-color-tertiary);color:var(--phoenix-text-color-secondary)}\n"] }]
23
23
  }], ctorParameters: function () { return [{ type: i1.EventDisplayService }]; } });
@@ -13,14 +13,16 @@ export class ExperimentInfoComponent {
13
13
  });
14
14
  }
15
15
  }
16
- ExperimentInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ExperimentInfoComponent, deps: [{ token: i1.EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
17
- ExperimentInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: ExperimentInfoComponent, selector: "app-experiment-info", inputs: { experiment: "experiment", experimentTagline: "experimentTagline" }, ngImport: i0, template: "<div id=\"experimentInfo\" class=\"experimentInfo\" cdkDrag cdkDragBoundary=\"body\">\n <a\n class=\"experimentLogoWrapper\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n *ngIf=\"experiment\"\n href=\"https://home.cern/science/experiments/{{ experiment }}\"\n >\n <img\n class=\"experimentLogo\"\n src=\"assets/images/{{ experiment }}.svg\"\n alt=\"\"\n />\n </a>\n <div class=\"textInfo\">\n <p *ngIf=\"experimentTagline\">\n <b>{{ experimentTagline }}</b>\n </p>\n <p *ngFor=\"let infoField of experimentInfo\">\n <ng-container *ngIf=\"infoField.label\">\n <b>{{ infoField.label }}: </b>{{ infoField.value }}\n </ng-container>\n <ng-container *ngIf=\"!infoField.label\">\n {{ infoField }}\n </ng-container>\n </p>\n </div>\n</div>\n", styles: [".experimentInfo{position:absolute;top:5rem;left:1rem;display:flex;flex-direction:row;justify-items:flex-end;justify-content:flex-end;align-items:center;align-content:center;cursor:move}.experimentLogoWrapper{width:6rem}.experimentLogoWrapper .experimentLogo{width:100%;height:100%}.textInfo{margin-left:1rem}.textInfo p{color:var(--phoenix-text-color-secondary);font-size:.8rem;margin-bottom:.5rem;-webkit-user-select:none;user-select:none}@media screen and (max-width: 768px){.experimentInfo{top:4rem;max-width:40%}.experimentLogoWrapper{height:4rem}.textInfo{display:none}}\n"], directives: [{ type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ExperimentInfoComponent, decorators: [{
16
+ ExperimentInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ExperimentInfoComponent, deps: [{ token: i1.EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
17
+ ExperimentInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: ExperimentInfoComponent, selector: "app-experiment-info", inputs: { url: "url", logo: "logo", tagline: "tagline" }, ngImport: i0, template: "<div id=\"experimentInfo\" class=\"experimentInfo\" cdkDrag cdkDragBoundary=\"body\">\n <a\n class=\"experimentLogoWrapper\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n *ngIf=\"url\"\n [href]=\"url\"\n >\n <img class=\"experimentLogo\" [src]=\"logo\" alt=\"\" />\n </a>\n <div class=\"textInfo\">\n <p *ngIf=\"tagline\">\n <b>{{ tagline }}</b>\n </p>\n <p *ngFor=\"let infoField of experimentInfo\">\n <ng-container *ngIf=\"infoField.label\">\n <b>{{ infoField.label }}: </b>{{ infoField.value }}\n </ng-container>\n <ng-container *ngIf=\"!infoField.label\">\n {{ infoField }}\n </ng-container>\n </p>\n </div>\n</div>\n", styles: [".experimentInfo{position:absolute;top:5rem;left:1rem;display:flex;flex-direction:row;justify-items:flex-end;justify-content:flex-end;align-items:center;align-content:center;cursor:move}.experimentLogoWrapper{width:6rem}.experimentLogoWrapper .experimentLogo{width:100%;height:100%}.textInfo{margin-left:1rem}.textInfo p{color:var(--phoenix-text-color-secondary);font-size:.8rem;margin-bottom:.5rem;-webkit-user-select:none;user-select:none}@media screen and (max-width: 768px){.experimentInfo{top:4rem;max-width:40%}.experimentLogoWrapper{height:4rem}.textInfo{display:none}}\n"], directives: [{ type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ExperimentInfoComponent, decorators: [{
19
19
  type: Component,
20
- args: [{ selector: 'app-experiment-info', template: "<div id=\"experimentInfo\" class=\"experimentInfo\" cdkDrag cdkDragBoundary=\"body\">\n <a\n class=\"experimentLogoWrapper\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n *ngIf=\"experiment\"\n href=\"https://home.cern/science/experiments/{{ experiment }}\"\n >\n <img\n class=\"experimentLogo\"\n src=\"assets/images/{{ experiment }}.svg\"\n alt=\"\"\n />\n </a>\n <div class=\"textInfo\">\n <p *ngIf=\"experimentTagline\">\n <b>{{ experimentTagline }}</b>\n </p>\n <p *ngFor=\"let infoField of experimentInfo\">\n <ng-container *ngIf=\"infoField.label\">\n <b>{{ infoField.label }}: </b>{{ infoField.value }}\n </ng-container>\n <ng-container *ngIf=\"!infoField.label\">\n {{ infoField }}\n </ng-container>\n </p>\n </div>\n</div>\n", styles: [".experimentInfo{position:absolute;top:5rem;left:1rem;display:flex;flex-direction:row;justify-items:flex-end;justify-content:flex-end;align-items:center;align-content:center;cursor:move}.experimentLogoWrapper{width:6rem}.experimentLogoWrapper .experimentLogo{width:100%;height:100%}.textInfo{margin-left:1rem}.textInfo p{color:var(--phoenix-text-color-secondary);font-size:.8rem;margin-bottom:.5rem;-webkit-user-select:none;user-select:none}@media screen and (max-width: 768px){.experimentInfo{top:4rem;max-width:40%}.experimentLogoWrapper{height:4rem}.textInfo{display:none}}\n"] }]
21
- }], ctorParameters: function () { return [{ type: i1.EventDisplayService }]; }, propDecorators: { experiment: [{
20
+ args: [{ selector: 'app-experiment-info', template: "<div id=\"experimentInfo\" class=\"experimentInfo\" cdkDrag cdkDragBoundary=\"body\">\n <a\n class=\"experimentLogoWrapper\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n *ngIf=\"url\"\n [href]=\"url\"\n >\n <img class=\"experimentLogo\" [src]=\"logo\" alt=\"\" />\n </a>\n <div class=\"textInfo\">\n <p *ngIf=\"tagline\">\n <b>{{ tagline }}</b>\n </p>\n <p *ngFor=\"let infoField of experimentInfo\">\n <ng-container *ngIf=\"infoField.label\">\n <b>{{ infoField.label }}: </b>{{ infoField.value }}\n </ng-container>\n <ng-container *ngIf=\"!infoField.label\">\n {{ infoField }}\n </ng-container>\n </p>\n </div>\n</div>\n", styles: [".experimentInfo{position:absolute;top:5rem;left:1rem;display:flex;flex-direction:row;justify-items:flex-end;justify-content:flex-end;align-items:center;align-content:center;cursor:move}.experimentLogoWrapper{width:6rem}.experimentLogoWrapper .experimentLogo{width:100%;height:100%}.textInfo{margin-left:1rem}.textInfo p{color:var(--phoenix-text-color-secondary);font-size:.8rem;margin-bottom:.5rem;-webkit-user-select:none;user-select:none}@media screen and (max-width: 768px){.experimentInfo{top:4rem;max-width:40%}.experimentLogoWrapper{height:4rem}.textInfo{display:none}}\n"] }]
21
+ }], ctorParameters: function () { return [{ type: i1.EventDisplayService }]; }, propDecorators: { url: [{
22
22
  type: Input
23
- }], experimentTagline: [{
23
+ }], logo: [{
24
+ type: Input
25
+ }], tagline: [{
24
26
  type: Input
25
27
  }] } });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZXJpbWVudC1pbmZvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3VpLW1lbnUvZXhwZXJpbWVudC1pbmZvL2V4cGVyaW1lbnQtaW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L2V4cGVyaW1lbnQtaW5mby9leHBlcmltZW50LWluZm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBUXpELE1BQU0sT0FBTyx1QkFBdUI7SUFLbEMsWUFBb0IsWUFBaUM7UUFBakMsaUJBQVksR0FBWixZQUFZLENBQXFCO0lBQUcsQ0FBQztJQUV6RCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLEVBQUU7WUFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztvSEFYVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qix5SUNScEMsazBCQTRCQTsyRkRwQmEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQjswR0FNdEIsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50RGlzcGxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ldmVudC1kaXNwbGF5LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZXhwZXJpbWVudC1pbmZvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2V4cGVyaW1lbnQtaW5mby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2V4cGVyaW1lbnQtaW5mby5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBFeHBlcmltZW50SW5mb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGV4cGVyaW1lbnRJbmZvOiBhbnlbXTtcbiAgQElucHV0KCkgZXhwZXJpbWVudDogc3RyaW5nO1xuICBASW5wdXQoKSBleHBlcmltZW50VGFnbGluZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXZlbnREaXNwbGF5OiBFdmVudERpc3BsYXlTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwbGF5Lmxpc3RlblRvRGlzcGxheWVkRXZlbnRDaGFuZ2UoKCkgPT4ge1xuICAgICAgdGhpcy5leHBlcmltZW50SW5mbyA9IHRoaXMuZXZlbnREaXNwbGF5LmdldEV2ZW50TWV0YWRhdGEoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBpZD1cImV4cGVyaW1lbnRJbmZvXCIgY2xhc3M9XCJleHBlcmltZW50SW5mb1wiIGNka0RyYWcgY2RrRHJhZ0JvdW5kYXJ5PVwiYm9keVwiPlxuICA8YVxuICAgIGNsYXNzPVwiZXhwZXJpbWVudExvZ29XcmFwcGVyXCJcbiAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICpuZ0lmPVwiZXhwZXJpbWVudFwiXG4gICAgaHJlZj1cImh0dHBzOi8vaG9tZS5jZXJuL3NjaWVuY2UvZXhwZXJpbWVudHMve3sgZXhwZXJpbWVudCB9fVwiXG4gID5cbiAgICA8aW1nXG4gICAgICBjbGFzcz1cImV4cGVyaW1lbnRMb2dvXCJcbiAgICAgIHNyYz1cImFzc2V0cy9pbWFnZXMve3sgZXhwZXJpbWVudCB9fS5zdmdcIlxuICAgICAgYWx0PVwiXCJcbiAgICAvPlxuICA8L2E+XG4gIDxkaXYgY2xhc3M9XCJ0ZXh0SW5mb1wiPlxuICAgIDxwICpuZ0lmPVwiZXhwZXJpbWVudFRhZ2xpbmVcIj5cbiAgICAgIDxiPnt7IGV4cGVyaW1lbnRUYWdsaW5lIH19PC9iPlxuICAgIDwvcD5cbiAgICA8cCAqbmdGb3I9XCJsZXQgaW5mb0ZpZWxkIG9mIGV4cGVyaW1lbnRJbmZvXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5mb0ZpZWxkLmxhYmVsXCI+XG4gICAgICAgIDxiPnt7IGluZm9GaWVsZC5sYWJlbCB9fTogPC9iPnt7IGluZm9GaWVsZC52YWx1ZSB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWluZm9GaWVsZC5sYWJlbFwiPlxuICAgICAgICB7eyBpbmZvRmllbGQgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvcD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZXJpbWVudC1pbmZvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3VpLW1lbnUvZXhwZXJpbWVudC1pbmZvL2V4cGVyaW1lbnQtaW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L2V4cGVyaW1lbnQtaW5mby9leHBlcmltZW50LWluZm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBUXpELE1BQU0sT0FBTyx1QkFBdUI7SUFNbEMsWUFBb0IsWUFBaUM7UUFBakMsaUJBQVksR0FBWixZQUFZLENBQXFCO0lBQUcsQ0FBQztJQUV6RCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLEVBQUU7WUFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztvSEFaVSx1QkFBdUI7d0dBQXZCLHVCQUF1QixxSENScEMsZ3NCQXdCQTsyRkRoQmEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQjswR0FNdEIsR0FBRztzQkFBWCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50RGlzcGxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ldmVudC1kaXNwbGF5LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZXhwZXJpbWVudC1pbmZvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2V4cGVyaW1lbnQtaW5mby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2V4cGVyaW1lbnQtaW5mby5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBFeHBlcmltZW50SW5mb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGV4cGVyaW1lbnRJbmZvOiBhbnlbXTtcbiAgQElucHV0KCkgdXJsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxvZ286IHN0cmluZztcbiAgQElucHV0KCkgdGFnbGluZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXZlbnREaXNwbGF5OiBFdmVudERpc3BsYXlTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwbGF5Lmxpc3RlblRvRGlzcGxheWVkRXZlbnRDaGFuZ2UoKCkgPT4ge1xuICAgICAgdGhpcy5leHBlcmltZW50SW5mbyA9IHRoaXMuZXZlbnREaXNwbGF5LmdldEV2ZW50TWV0YWRhdGEoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBpZD1cImV4cGVyaW1lbnRJbmZvXCIgY2xhc3M9XCJleHBlcmltZW50SW5mb1wiIGNka0RyYWcgY2RrRHJhZ0JvdW5kYXJ5PVwiYm9keVwiPlxuICA8YVxuICAgIGNsYXNzPVwiZXhwZXJpbWVudExvZ29XcmFwcGVyXCJcbiAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICpuZ0lmPVwidXJsXCJcbiAgICBbaHJlZl09XCJ1cmxcIlxuICA+XG4gICAgPGltZyBjbGFzcz1cImV4cGVyaW1lbnRMb2dvXCIgW3NyY109XCJsb2dvXCIgYWx0PVwiXCIgLz5cbiAgPC9hPlxuICA8ZGl2IGNsYXNzPVwidGV4dEluZm9cIj5cbiAgICA8cCAqbmdJZj1cInRhZ2xpbmVcIj5cbiAgICAgIDxiPnt7IHRhZ2xpbmUgfX08L2I+XG4gICAgPC9wPlxuICAgIDxwICpuZ0Zvcj1cImxldCBpbmZvRmllbGQgb2YgZXhwZXJpbWVudEluZm9cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmZvRmllbGQubGFiZWxcIj5cbiAgICAgICAgPGI+e3sgaW5mb0ZpZWxkLmxhYmVsIH19OiA8L2I+e3sgaW5mb0ZpZWxkLnZhbHVlIH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaW5mb0ZpZWxkLmxhYmVsXCI+XG4gICAgICAgIHt7IGluZm9GaWVsZCB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9wPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -31,4 +31,6 @@ export * from './share-link/share-link.component';
31
31
  export * from './share-link/share-link-dialog/share-link-dialog.component';
32
32
  export * from './event-data-explorer/event-data-explorer.component';
33
33
  export * from './event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component';
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxnRkFBZ0YsQ0FBQztBQUMvRixjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDREQUE0RCxDQUFDO0FBQzNFLGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxnRkFBZ0YsQ0FBQztBQUMvRixjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxrRUFBa0UsQ0FBQztBQUNqRixjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsNERBQTRELENBQUM7QUFDM0UsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLHVGQUF1RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hbmltYXRlLWNhbWVyYS9hbmltYXRlLWNhbWVyYS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9hbmltYXRlLWV2ZW50L2FuaW1hdGUtZXZlbnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYXV0by1yb3RhdGUvYXV0by1yb3RhdGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY29sbGVjdGlvbnMtaW5mby9jb2xsZWN0aW9ucy1pbmZvLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbGxlY3Rpb25zLWluZm8vY29sbGVjdGlvbnMtaW5mby1vdmVybGF5L2NvbGxlY3Rpb25zLWluZm8tb3ZlcmxheS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXJrLXRoZW1lL2RhcmstdGhlbWUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZXZlbnQtc2VsZWN0b3IvZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZXhwZXJpbWVudC1pbmZvL2V4cGVyaW1lbnQtaW5mby5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmZvLXBhbmVsL2luZm8tcGFuZWwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaW5mby1wYW5lbC9pbmZvLXBhbmVsLW92ZXJsYXkvaW5mby1wYW5lbC1vdmVybGF5LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2lvLW9wdGlvbnMvaW8tb3B0aW9ucy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pby1vcHRpb25zL2lvLW9wdGlvbnMtZGlhbG9nL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL21haW4tdmlldy10b2dnbGUvbWFpbi12aWV3LXRvZ2dsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9tZW51LXRvZ2dsZS9tZW51LXRvZ2dsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9vYmplY3QtY2xpcHBpbmcvb2JqZWN0LWNsaXBwaW5nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL29iamVjdC1zZWxlY3Rpb24vb2JqZWN0LXNlbGVjdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9vYmplY3Qtc2VsZWN0aW9uL29iamVjdC1zZWxlY3Rpb24tb3ZlcmxheS9vYmplY3Qtc2VsZWN0aW9uLW92ZXJsYXkuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vb3ZlcmxheS9vdmVybGF5LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL292ZXJsYXktdmlldy9vdmVybGF5LXZpZXcuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vb3ZlcmxheS12aWV3L292ZXJsYXktdmlldy13aW5kb3cvb3ZlcmxheS12aWV3LXdpbmRvdy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90cmVlLW1lbnUvdHJlZS1tZW51LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RyZWUtbWVudS90cmVlLW1lbnUtaXRlbS90cmVlLW1lbnUtaXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi92aWV3LW9wdGlvbnMvdmlldy1vcHRpb25zLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3ZyLXRvZ2dsZS92ci10b2dnbGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYXItdG9nZ2xlL2FyLXRvZ2dsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi96b29tLWNvbnRyb2xzL3pvb20tY29udHJvbHMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3MtbW9kZS9zcy1tb2RlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3BlcmZvcm1hbmNlLXRvZ2dsZS9wZXJmb3JtYW5jZS10b2dnbGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdWktbWVudS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zaGFyZS1saW5rL3NoYXJlLWxpbmsuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2hhcmUtbGluay9zaGFyZS1saW5rLWRpYWxvZy9zaGFyZS1saW5rLWRpYWxvZy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudC1kYXRhLWV4cGxvcmVyL2V2ZW50LWRhdGEtZXhwbG9yZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZXZlbnQtZGF0YS1leHBsb3Jlci9ldmVudC1kYXRhLWV4cGxvcmVyLWRpYWxvZy9ldmVudC1kYXRhLWV4cGxvcmVyLWRpYWxvZy5jb21wb25lbnQnO1xuIl19
34
+ export * from './cycle-events/cycle-events.component';
35
+ export * from './ui-menu-wrapper/ui-menu-wrapper.component';
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxnRkFBZ0YsQ0FBQztBQUMvRixjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDREQUE0RCxDQUFDO0FBQzNFLGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxnRkFBZ0YsQ0FBQztBQUMvRixjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxrRUFBa0UsQ0FBQztBQUNqRixjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsNERBQTRELENBQUM7QUFDM0UsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLHVGQUF1RixDQUFDO0FBQ3RHLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyw2Q0FBNkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYW5pbWF0ZS1jYW1lcmEvYW5pbWF0ZS1jYW1lcmEuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYW5pbWF0ZS1ldmVudC9hbmltYXRlLWV2ZW50LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2F1dG8tcm90YXRlL2F1dG8tcm90YXRlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbGxlY3Rpb25zLWluZm8vY29sbGVjdGlvbnMtaW5mby5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xsZWN0aW9ucy1pbmZvL2NvbGxlY3Rpb25zLWluZm8tb3ZlcmxheS9jb2xsZWN0aW9ucy1pbmZvLW92ZXJsYXkuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZGFyay10aGVtZS9kYXJrLXRoZW1lLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2V2ZW50LXNlbGVjdG9yL2V2ZW50LXNlbGVjdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2V4cGVyaW1lbnQtaW5mby9leHBlcmltZW50LWluZm8uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaW5mby1wYW5lbC9pbmZvLXBhbmVsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2luZm8tcGFuZWwvaW5mby1wYW5lbC1vdmVybGF5L2luZm8tcGFuZWwtb3ZlcmxheS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pby1vcHRpb25zL2lvLW9wdGlvbnMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaW8tb3B0aW9ucy9pby1vcHRpb25zLWRpYWxvZy9pby1vcHRpb25zLWRpYWxvZy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9tYWluLXZpZXctdG9nZ2xlL21haW4tdmlldy10b2dnbGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbWVudS10b2dnbGUvbWVudS10b2dnbGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0LWNsaXBwaW5nL29iamVjdC1jbGlwcGluZy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9vYmplY3Qtc2VsZWN0aW9uL29iamVjdC1zZWxlY3Rpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0LXNlbGVjdGlvbi9vYmplY3Qtc2VsZWN0aW9uLW92ZXJsYXkvb2JqZWN0LXNlbGVjdGlvbi1vdmVybGF5LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL292ZXJsYXkvb3ZlcmxheS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9vdmVybGF5LXZpZXcvb3ZlcmxheS12aWV3LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL292ZXJsYXktdmlldy9vdmVybGF5LXZpZXctd2luZG93L292ZXJsYXktdmlldy13aW5kb3cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdHJlZS1tZW51L3RyZWUtbWVudS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90cmVlLW1lbnUvdHJlZS1tZW51LWl0ZW0vdHJlZS1tZW51LWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdmlldy1vcHRpb25zL3ZpZXctb3B0aW9ucy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi92ci10b2dnbGUvdnItdG9nZ2xlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2FyLXRvZ2dsZS9hci10b2dnbGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vem9vbS1jb250cm9scy96b29tLWNvbnRyb2xzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NzLW1vZGUvc3MtbW9kZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJmb3JtYW5jZS10b2dnbGUvcGVyZm9ybWFuY2UtdG9nZ2xlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3VpLW1lbnUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2hhcmUtbGluay9zaGFyZS1saW5rLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NoYXJlLWxpbmsvc2hhcmUtbGluay1kaWFsb2cvc2hhcmUtbGluay1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZXZlbnQtZGF0YS1leHBsb3Jlci9ldmVudC1kYXRhLWV4cGxvcmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2V2ZW50LWRhdGEtZXhwbG9yZXIvZXZlbnQtZGF0YS1leHBsb3Jlci1kaWFsb2cvZXZlbnQtZGF0YS1leHBsb3Jlci1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY3ljbGUtZXZlbnRzL2N5Y2xlLWV2ZW50cy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi91aS1tZW51LXdyYXBwZXIvdWktbWVudS13cmFwcGVyLmNvbXBvbmVudCc7XG4iXX0=
@@ -26,9 +26,9 @@ export class InfoPanelOverlayComponent {
26
26
  this.actionsList = this.eventDisplay.getInfoLogger().getInfoLoggerList();
27
27
  }
28
28
  }
29
- InfoPanelOverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: InfoPanelOverlayComponent, deps: [{ token: i1.EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
30
- InfoPanelOverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: InfoPanelOverlayComponent, selector: "app-info-panel-overlay", inputs: { showInfoPanel: "showInfoPanel" }, ngImport: i0, template: "<app-overlay\n overlayTitle=\"Info Panel\"\n icon=\"info-panel\"\n [resizable]=\"true\"\n [active]=\"showInfoPanel\"\n>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item\">\n <!-- Show Phoenix Current Version (ON by Default) -->\n Phoenix Version: {{ version }}\n </li>\n <li class=\"list-group-item\" *ngIf=\"actionsList.length === 0\">\n No actions.\n </li>\n <li class=\"list-group-item\" *ngFor=\"let action of actionsList\">\n {{ action }}\n </li>\n </ul>\n</app-overlay>\n", styles: [".list-group-item{font-size:.8rem;padding:.5rem 1rem}\n"], components: [{ type: i2.OverlayComponent, selector: "app-overlay", inputs: ["overlayTitle", "active", "icon", "resizable", "transparentBody"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: InfoPanelOverlayComponent, decorators: [{
29
+ InfoPanelOverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: InfoPanelOverlayComponent, deps: [{ token: i1.EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
30
+ InfoPanelOverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: InfoPanelOverlayComponent, selector: "app-info-panel-overlay", inputs: { showInfoPanel: "showInfoPanel" }, ngImport: i0, template: "<app-overlay\n overlayTitle=\"Info Panel\"\n icon=\"info-panel\"\n [resizable]=\"true\"\n [active]=\"showInfoPanel\"\n>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item\">\n <!-- Show Phoenix Current Version (ON by Default) -->\n Phoenix Version: {{ version }}\n </li>\n <li class=\"list-group-item\" *ngIf=\"actionsList.length === 0\">\n No actions.\n </li>\n <li class=\"list-group-item\" *ngFor=\"let action of actionsList\">\n {{ action }}\n </li>\n </ul>\n</app-overlay>\n", styles: [".list-group-item{font-size:.8rem;padding:.5rem 1rem}\n"], components: [{ type: i2.OverlayComponent, selector: "app-overlay", inputs: ["overlayTitle", "active", "icon", "resizable", "transparentBody"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: InfoPanelOverlayComponent, decorators: [{
32
32
  type: Component,
33
33
  args: [{ selector: 'app-info-panel-overlay', template: "<app-overlay\n overlayTitle=\"Info Panel\"\n icon=\"info-panel\"\n [resizable]=\"true\"\n [active]=\"showInfoPanel\"\n>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item\">\n <!-- Show Phoenix Current Version (ON by Default) -->\n Phoenix Version: {{ version }}\n </li>\n <li class=\"list-group-item\" *ngIf=\"actionsList.length === 0\">\n No actions.\n </li>\n <li class=\"list-group-item\" *ngFor=\"let action of actionsList\">\n {{ action }}\n </li>\n </ul>\n</app-overlay>\n", styles: [".list-group-item{font-size:.8rem;padding:.5rem 1rem}\n"] }]
34
34
  }], ctorParameters: function () { return [{ type: i1.EventDisplayService }]; }, propDecorators: { showInfoPanel: [{
@@ -40,9 +40,9 @@ export class InfoPanelComponent {
40
40
  this.overlayWindow.instance.showInfoPanel = this.showInfoPanel;
41
41
  }
42
42
  }
43
- InfoPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: InfoPanelComponent, deps: [{ token: i1.Overlay }], target: i0.ɵɵFactoryTarget.Component });
44
- InfoPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: InfoPanelComponent, selector: "app-info-panel", ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Info panel\"\n icon=\"info-panel\"\n [active]=\"showInfoPanel\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n", styles: [""], components: [{ type: i2.MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: InfoPanelComponent, decorators: [{
43
+ InfoPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: InfoPanelComponent, deps: [{ token: i1.Overlay }], target: i0.ɵɵFactoryTarget.Component });
44
+ InfoPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: InfoPanelComponent, selector: "app-info-panel", ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Info panel\"\n icon=\"info-panel\"\n [active]=\"showInfoPanel\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n", styles: [""], components: [{ type: i2.MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: InfoPanelComponent, decorators: [{
46
46
  type: Component,
47
47
  args: [{ selector: 'app-info-panel', template: "<app-menu-toggle\n tooltip=\"Info panel\"\n icon=\"info-panel\"\n [active]=\"showInfoPanel\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n", styles: [""] }]
48
48
  }], ctorParameters: function () { return [{ type: i1.Overlay }]; } });
@@ -1,5 +1,5 @@
1
1
  import { Component, Input } from '@angular/core';
2
- import { CMSLoader, JiveXMLLoader, ScriptLoader } from 'phoenix-event-display';
2
+ import { CMSLoader, JiveXMLLoader } from 'phoenix-event-display';
3
3
  import JSZip from 'jszip';
4
4
  import { EventDataFormat, ImportOption, } from '../../../../services/extras/event-data-import';
5
5
  import * as i0 from "@angular/core";
@@ -86,26 +86,18 @@ export class IOOptionsDialogComponent {
86
86
  };
87
87
  this.handleFileInput(files[0], 'phnx', callback);
88
88
  }
89
- handleROOTInput(files) {
90
- ScriptLoader.loadJSRootScripts().then((JSROOT) => {
91
- const objectName = prompt('Enter object name in ROOT file');
92
- JSROOT.openFile(files[0]).then((file) => {
93
- file.readObject(objectName).then((obj) => {
94
- this.eventDisplay.loadJSONGeometry(JSROOT.GEO.build(obj, { dflt_colors: true }).toJSON(), files[0].name.split('.')[0]);
95
- });
96
- });
97
- });
89
+ async handleROOTInput(files) {
90
+ const rootObjectName = prompt('Enter object name in ROOT file');
91
+ await this.eventDisplay.loadRootGeometry(URL.createObjectURL(files[0]), rootObjectName, files[0].name.split('.')[0]);
98
92
  this.onClose();
99
93
  }
100
- handleRootJSONInput(files) {
101
- ScriptLoader.loadJSRootScripts().then((JSROOT) => {
102
- const callback = (content, name) => {
103
- this.eventDisplay.loadJSONGeometry(JSROOT.GEO.build(JSROOT.parse(content), {
104
- dflt_colors: true,
105
- }).toJSON(), name);
106
- };
107
- this.handleFileInput(files[0], 'gz', callback);
108
- });
94
+ async handleRootJSONInput(files) {
95
+ if (!this.isFileOfExtension(files[0], 'gz')) {
96
+ return;
97
+ }
98
+ const name = files[0].name.split('.')[0];
99
+ await this.eventDisplay.loadRootJSONGeometry(URL.createObjectURL(files[0]), name);
100
+ this.onClose();
109
101
  }
110
102
  handleIgEventDataInput(files) {
111
103
  const cmsLoader = new CMSLoader();
@@ -116,32 +108,29 @@ export class IOOptionsDialogComponent {
116
108
  });
117
109
  }
118
110
  handleZipEventDataInput(files) {
119
- if (this.isFileOfExtension(files[0], 'zip')) {
120
- this.handleZipInput(files[0], (allFilesWithData) => {
121
- const allEventsObject = {};
122
- // JSON event data
123
- Object.keys(allFilesWithData)
124
- .filter((fileName) => fileName.endsWith('.json'))
125
- .forEach((fileName) => {
126
- Object.assign(allEventsObject, JSON.parse(allFilesWithData[fileName]));
127
- });
128
- // JiveXML event data
129
- const jiveloader = new JiveXMLLoader();
130
- Object.keys(allFilesWithData)
131
- .filter((fileName) => fileName.endsWith('.xml'))
132
- .forEach((fileName) => {
133
- jiveloader.process(allFilesWithData[fileName]);
134
- const eventData = jiveloader.getEventData();
135
- Object.assign(allEventsObject, { [fileName]: eventData });
136
- });
137
- this.eventDisplay.parsePhoenixEvents(allEventsObject);
138
- this.onClose();
139
- });
140
- }
141
- else {
142
- console.error('Error: Invalid file format!');
143
- this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');
111
+ if (!this.isFileOfExtension(files[0], 'zip')) {
112
+ return;
144
113
  }
114
+ this.handleZipInput(files[0], (allFilesWithData) => {
115
+ const allEventsObject = {};
116
+ // JSON event data
117
+ Object.keys(allFilesWithData)
118
+ .filter((fileName) => fileName.endsWith('.json'))
119
+ .forEach((fileName) => {
120
+ Object.assign(allEventsObject, JSON.parse(allFilesWithData[fileName]));
121
+ });
122
+ // JiveXML event data
123
+ const jiveloader = new JiveXMLLoader();
124
+ Object.keys(allFilesWithData)
125
+ .filter((fileName) => fileName.endsWith('.xml'))
126
+ .forEach((fileName) => {
127
+ jiveloader.process(allFilesWithData[fileName]);
128
+ const eventData = jiveloader.getEventData();
129
+ Object.assign(allEventsObject, { [fileName]: eventData });
130
+ });
131
+ this.eventDisplay.parsePhoenixEvents(allEventsObject);
132
+ this.onClose();
133
+ });
145
134
  }
146
135
  async handleZipInput(file, callback) {
147
136
  const allFilesWithData = {};
@@ -169,14 +158,15 @@ export class IOOptionsDialogComponent {
169
158
  };
170
159
  reader.readAsText(file);
171
160
  }
172
- else {
173
- console.error('Error: Invalid file format!');
174
- this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');
175
- }
176
161
  this.onClose();
177
162
  }
178
163
  isFileOfExtension(file, extension) {
179
- return file.name.split('.').pop() === extension;
164
+ if (file.name.split('.').pop() === extension) {
165
+ return true;
166
+ }
167
+ console.error('Error: Invalid file format!');
168
+ this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');
169
+ return false;
180
170
  }
181
171
  saveScene() {
182
172
  this.eventDisplay.exportPhoenixDisplay();
@@ -185,12 +175,12 @@ export class IOOptionsDialogComponent {
185
175
  this.eventDisplay.exportToOBJ();
186
176
  }
187
177
  }
188
- IOOptionsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IOOptionsDialogComponent, deps: [{ token: i1.EventDisplayService }, { token: i2.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
189
- IOOptionsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: IOOptionsDialogComponent, selector: "app-io-options-dialog", inputs: { eventDataImportOptions: "eventDataImportOptions" }, ngImport: i0, template: "<div class=\"dialog\">\n <h1 mat-dialog-title>Import and export options</h1>\n <div mat-dialog-content class=\"dialog-content\">\n <div *ngIf=\"eventDataImportOptions.length > 0\">\n <h5>Import</h5>\n\n <h6 class=\"text-center\">Event data</h6>\n\n <div class=\"row centered\">\n <ng-container\n *ngFor=\"let eventDataImportOption of eventDataOptionsWithHandler\"\n >\n <input\n #eventDataFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n [accept]=\"eventDataImportOption.accept\"\n (change)=\"eventDataImportOption.handler($event.target.files)\"\n />\n <button\n class=\"file-input-button\"\n (click)=\"eventDataFileInput.click()\"\n >\n <img src=\"assets/icons/eventData.svg\" alt=\"Event data icon\" />\n Load {{ eventDataImportOption.fileType }}\n </button>\n </ng-container>\n </div>\n\n <p class=\"text-center\">\n Supported formats: {{ getSupportedEventDataFormats() }}\n </p>\n </div>\n\n <h6 class=\"text-center\">Geometries</h6>\n\n <div class=\"row centered\">\n <input\n #objFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".obj\"\n name=\"image\"\n (change)=\"handleOBJInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"objFileInput.click()\">\n <img src=\"assets/icons/obj.svg\" alt=\"\" /> Load .obj\n </button>\n\n <input\n #gltfFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".gltf\"\n name=\"image\"\n (change)=\"handleGLTFInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"gltfFileInput.click()\">\n <img src=\"assets/icons/gltf.svg\" alt=\"\" /> Load .gltf\n </button>\n\n <input\n #rootFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".root\"\n (change)=\"handleROOTInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"rootFileInput.click()\">\n <img src=\"assets/icons/file-import.svg\" alt=\"\" /> Load .root\n </button>\n\n <input\n #rootJSONFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".json.gz\"\n (change)=\"handleRootJSONInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"rootJSONFileInput.click()\">\n <img src=\"assets/icons/file-import.svg\" alt=\"\" /> Load .json.gz\n </button>\n </div>\n\n <p class=\"text-center\">Supported formats: OBJ, GLTF, ROOT, ROOT JSON</p>\n\n <h5>Import / export scene</h5>\n\n <div class=\"row centered\">\n <button\n class=\"file-input-button load-export\"\n id=\"exportScene\"\n (click)=\"saveScene()\"\n >\n <img src=\"assets/icons/save.svg\" alt=\"\" /> Save scene\n </button>\n\n <input\n #loadSceneInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".phnx\"\n name=\"image\"\n (change)=\"handlePhoenixInput($event.target.files)\"\n />\n <button\n class=\"file-input-button load-export\"\n id=\"importScene\"\n (click)=\"loadSceneInput.click()\"\n >\n <img src=\"assets/icons/upload.svg\" alt=\"\" /> Load scene\n </button>\n\n <button\n class=\"file-input-button export-button\"\n id=\"exportOBJ\"\n (click)=\"exportOBJ()\"\n >\n <img src=\"assets/icons/obj.svg\" alt=\"\" /> Save OBJ\n </button>\n </div>\n </div>\n <div mat-dialog-actions>\n <button mat-button (click)=\"onClose()\" cdkFocusInitial>Close</button>\n </div>\n</div>\n", styles: [".row{justify-content:center;margin:1rem 0}.file-input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.file-input-button{font-size:1em;font-weight:700;color:#fff;background-color:#6eaece;padding:1em .5em;border:none;border-radius:10px;width:8rem;margin:0 .4rem}.file-input-button.load-export{padding:.8em .2em;width:7rem}.file-input-button.load-export img{max-height:1.2em}.file-input-button.export-button{background-color:#cb7133}.file-input-button.export-button:hover{background-color:#ad5b2d}.file-input-button img{max-height:2em;display:block;width:100%}.file-input-button:hover{background-color:#118ab2}#exportScene{background-color:#5bd99e}#exportScene:hover{background-color:#05c292}#importScene{background-color:#ecc25e}#importScene:hover{background-color:#d6b44d}\n"], components: [{ type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }] });
190
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IOOptionsDialogComponent, decorators: [{
178
+ IOOptionsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: IOOptionsDialogComponent, deps: [{ token: i1.EventDisplayService }, { token: i2.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
179
+ IOOptionsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: IOOptionsDialogComponent, selector: "app-io-options-dialog", inputs: { eventDataImportOptions: "eventDataImportOptions" }, ngImport: i0, template: "<div class=\"dialog\">\n <h1 mat-dialog-title>Import and export options</h1>\n <div mat-dialog-content class=\"dialog-content\">\n <div *ngIf=\"eventDataImportOptions.length > 0\">\n <h5>Import</h5>\n\n <h6 class=\"text-center\">Event data</h6>\n\n <div class=\"row centered\">\n <ng-container\n *ngFor=\"let eventDataImportOption of eventDataOptionsWithHandler\"\n >\n <input\n #eventDataFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n [accept]=\"eventDataImportOption.accept\"\n (change)=\"eventDataImportOption.handler($event.target.files)\"\n />\n <button\n class=\"file-input-button\"\n (click)=\"eventDataFileInput.click()\"\n >\n <img src=\"assets/icons/eventData.svg\" alt=\"Event data icon\" />\n Load {{ eventDataImportOption.fileType }}\n </button>\n </ng-container>\n </div>\n\n <p class=\"text-center\">\n Supported formats: {{ getSupportedEventDataFormats() }}\n </p>\n </div>\n\n <h6 class=\"text-center\">Geometries</h6>\n\n <div class=\"row centered\">\n <input\n #objFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".obj\"\n name=\"image\"\n (change)=\"handleOBJInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"objFileInput.click()\">\n <img src=\"assets/icons/obj.svg\" alt=\"\" /> Load .obj\n </button>\n\n <input\n #gltfFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".gltf\"\n name=\"image\"\n (change)=\"handleGLTFInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"gltfFileInput.click()\">\n <img src=\"assets/icons/gltf.svg\" alt=\"\" /> Load .gltf\n </button>\n\n <input\n #rootFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".root\"\n (change)=\"handleROOTInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"rootFileInput.click()\">\n <img src=\"assets/icons/file-import.svg\" alt=\"\" /> Load .root\n </button>\n\n <input\n #rootJSONFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".json.gz\"\n (change)=\"handleRootJSONInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"rootJSONFileInput.click()\">\n <img src=\"assets/icons/file-import.svg\" alt=\"\" /> Load .json.gz\n </button>\n </div>\n\n <p class=\"text-center\">Supported formats: OBJ, GLTF, ROOT, ROOT JSON</p>\n\n <h5>Import / export scene</h5>\n\n <div class=\"row centered\">\n <button\n class=\"file-input-button load-export\"\n id=\"exportScene\"\n (click)=\"saveScene()\"\n >\n <img src=\"assets/icons/save.svg\" alt=\"\" /> Save scene\n </button>\n\n <input\n #loadSceneInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".phnx\"\n name=\"image\"\n (change)=\"handlePhoenixInput($event.target.files)\"\n />\n <button\n class=\"file-input-button load-export\"\n id=\"importScene\"\n (click)=\"loadSceneInput.click()\"\n >\n <img src=\"assets/icons/upload.svg\" alt=\"\" /> Load scene\n </button>\n\n <button\n class=\"file-input-button export-button\"\n id=\"exportOBJ\"\n (click)=\"exportOBJ()\"\n >\n <img src=\"assets/icons/obj.svg\" alt=\"\" /> Save OBJ\n </button>\n </div>\n </div>\n <div mat-dialog-actions>\n <button mat-button (click)=\"onClose()\" cdkFocusInitial>Close</button>\n </div>\n</div>\n", styles: [".row{justify-content:center;margin:1rem 0}.file-input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.file-input-button{font-size:1em;font-weight:700;color:#fff;background-color:#6eaece;padding:1em .5em;border:none;border-radius:10px;width:8rem;margin:0 .4rem}.file-input-button.load-export{padding:.8em .2em;width:7rem}.file-input-button.load-export img{max-height:1.2em}.file-input-button.export-button{background-color:#cb7133}.file-input-button.export-button:hover{background-color:#ad5b2d}.file-input-button img{max-height:2em;display:block;width:100%}.file-input-button:hover{background-color:#118ab2}#exportScene{background-color:#5bd99e}#exportScene:hover{background-color:#05c292}#importScene{background-color:#ecc25e}#importScene:hover{background-color:#d6b44d}\n"], components: [{ type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }] });
180
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: IOOptionsDialogComponent, decorators: [{
191
181
  type: Component,
192
182
  args: [{ selector: 'app-io-options-dialog', template: "<div class=\"dialog\">\n <h1 mat-dialog-title>Import and export options</h1>\n <div mat-dialog-content class=\"dialog-content\">\n <div *ngIf=\"eventDataImportOptions.length > 0\">\n <h5>Import</h5>\n\n <h6 class=\"text-center\">Event data</h6>\n\n <div class=\"row centered\">\n <ng-container\n *ngFor=\"let eventDataImportOption of eventDataOptionsWithHandler\"\n >\n <input\n #eventDataFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n [accept]=\"eventDataImportOption.accept\"\n (change)=\"eventDataImportOption.handler($event.target.files)\"\n />\n <button\n class=\"file-input-button\"\n (click)=\"eventDataFileInput.click()\"\n >\n <img src=\"assets/icons/eventData.svg\" alt=\"Event data icon\" />\n Load {{ eventDataImportOption.fileType }}\n </button>\n </ng-container>\n </div>\n\n <p class=\"text-center\">\n Supported formats: {{ getSupportedEventDataFormats() }}\n </p>\n </div>\n\n <h6 class=\"text-center\">Geometries</h6>\n\n <div class=\"row centered\">\n <input\n #objFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".obj\"\n name=\"image\"\n (change)=\"handleOBJInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"objFileInput.click()\">\n <img src=\"assets/icons/obj.svg\" alt=\"\" /> Load .obj\n </button>\n\n <input\n #gltfFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".gltf\"\n name=\"image\"\n (change)=\"handleGLTFInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"gltfFileInput.click()\">\n <img src=\"assets/icons/gltf.svg\" alt=\"\" /> Load .gltf\n </button>\n\n <input\n #rootFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".root\"\n (change)=\"handleROOTInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"rootFileInput.click()\">\n <img src=\"assets/icons/file-import.svg\" alt=\"\" /> Load .root\n </button>\n\n <input\n #rootJSONFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".json.gz\"\n (change)=\"handleRootJSONInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"rootJSONFileInput.click()\">\n <img src=\"assets/icons/file-import.svg\" alt=\"\" /> Load .json.gz\n </button>\n </div>\n\n <p class=\"text-center\">Supported formats: OBJ, GLTF, ROOT, ROOT JSON</p>\n\n <h5>Import / export scene</h5>\n\n <div class=\"row centered\">\n <button\n class=\"file-input-button load-export\"\n id=\"exportScene\"\n (click)=\"saveScene()\"\n >\n <img src=\"assets/icons/save.svg\" alt=\"\" /> Save scene\n </button>\n\n <input\n #loadSceneInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".phnx\"\n name=\"image\"\n (change)=\"handlePhoenixInput($event.target.files)\"\n />\n <button\n class=\"file-input-button load-export\"\n id=\"importScene\"\n (click)=\"loadSceneInput.click()\"\n >\n <img src=\"assets/icons/upload.svg\" alt=\"\" /> Load scene\n </button>\n\n <button\n class=\"file-input-button export-button\"\n id=\"exportOBJ\"\n (click)=\"exportOBJ()\"\n >\n <img src=\"assets/icons/obj.svg\" alt=\"\" /> Save OBJ\n </button>\n </div>\n </div>\n <div mat-dialog-actions>\n <button mat-button (click)=\"onClose()\" cdkFocusInitial>Close</button>\n </div>\n</div>\n", styles: [".row{justify-content:center;margin:1rem 0}.file-input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.file-input-button{font-size:1em;font-weight:700;color:#fff;background-color:#6eaece;padding:1em .5em;border:none;border-radius:10px;width:8rem;margin:0 .4rem}.file-input-button.load-export{padding:.8em .2em;width:7rem}.file-input-button.load-export img{max-height:1.2em}.file-input-button.export-button{background-color:#cb7133}.file-input-button.export-button:hover{background-color:#ad5b2d}.file-input-button img{max-height:2em;display:block;width:100%}.file-input-button:hover{background-color:#118ab2}#exportScene{background-color:#5bd99e}#exportScene:hover{background-color:#05c292}#importScene{background-color:#ecc25e}#importScene:hover{background-color:#d6b44d}\n"] }]
193
183
  }], ctorParameters: function () { return [{ type: i1.EventDisplayService }, { type: i2.MatDialogRef }]; }, propDecorators: { eventDataImportOptions: [{
194
184
  type: Input
195
185
  }] } });
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbXBvbmVudHMvdWktbWVudS9pby1vcHRpb25zL2lvLW9wdGlvbnMtZGlhbG9nL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3VpLW1lbnUvaW8tb3B0aW9ucy9pby1vcHRpb25zLWRpYWxvZy9pby1vcHRpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFHMUIsT0FBTyxFQUNMLGVBQWUsRUFFZixZQUFZLEdBQ2IsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7O0FBT3ZELE1BQU0sT0FBTyx3QkFBd0I7SUFpQ25DLFlBQ1UsWUFBaUMsRUFDbEMsU0FBaUQ7UUFEaEQsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2xDLGNBQVMsR0FBVCxTQUFTLENBQXdDO1FBakMxRCwyQkFBc0IsR0FBNEIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFJakUsOEJBQXlCLEdBQUc7WUFDbEMsSUFBSSxZQUFZLENBQ2QsZUFBZSxDQUFDLElBQUksRUFDcEIsT0FBTyxFQUNQLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3hDLGtCQUFrQixDQUNuQjtZQUNELElBQUksWUFBWSxDQUNkLGVBQWUsQ0FBQyxPQUFPLEVBQ3ZCLE1BQU0sRUFDTixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUN0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QUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxJQUFVLEVBQUUsU0FBaUI7UUFDckQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxTQUFTLENBQUM7SUFDbEQsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7O3FIQXBQVSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwySENoQnJDLHM3SEFvSUE7MkZEcEhhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSx1QkFBdUI7cUlBTWpDLHNCQUFzQjtzQkFEckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9uSW5pdCwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ01TTG9hZGVyLCBKaXZlWE1MTG9hZGVyLCBTY3JpcHRMb2FkZXIgfSBmcm9tICdwaG9lbml4LWV2ZW50LWRpc3BsYXknO1xuaW1wb3J0IEpTWmlwIGZyb20gJ2pzemlwJztcbmltcG9ydCB7IEV2ZW50RGlzcGxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9ldmVudC1kaXNwbGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7XG4gIEV2ZW50RGF0YUZvcm1hdCxcbiAgRXZlbnREYXRhSW1wb3J0T3B0aW9uLFxuICBJbXBvcnRPcHRpb24sXG59IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2V4dHJhcy9ldmVudC1kYXRhLWltcG9ydCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pby1vcHRpb25zLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pby1vcHRpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIElPT3B0aW9uc0RpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIGV2ZW50RGF0YUltcG9ydE9wdGlvbnM6IEV2ZW50RGF0YUltcG9ydE9wdGlvbltdID0gW0V2ZW50RGF0YUZvcm1hdC5KU09OXTtcblxuICBldmVudERhdGFPcHRpb25zV2l0aEhhbmRsZXI6IEltcG9ydE9wdGlvbltdO1xuXG4gIHByaXZhdGUgc3VwcG9ydGVkRXZlbnREYXRhRm9ybWF0cyA9IFtcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LkpTT04sXG4gICAgICAnLmpzb24nLFxuICAgICAgdGhpcy5oYW5kbGVKU09ORXZlbnREYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5KSVZFWE1MLFxuICAgICAgJy54bWwnLFxuICAgICAgdGhpcy5oYW5kbGVKaXZlWE1MRGF0YUlucHV0LmJpbmQodGhpcyksXG4gICAgICAndGV4dC94bWwnXG4gICAgKSxcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LlpJUCxcbiAgICAgICcuemlwJyxcbiAgICAgIHRoaXMuaGFuZGxlWmlwRXZlbnREYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICcuemlwJ1xuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5JRyxcbiAgICAgICcuaWcnLFxuICAgICAgdGhpcy5oYW5kbGVJZ0V2ZW50RGF0YUlucHV0LmJpbmQodGhpcyksXG4gICAgICAnLmlnJ1xuICAgICksXG4gIF07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBldmVudERpc3BsYXk6IEV2ZW50RGlzcGxheVNlcnZpY2UsXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPElPT3B0aW9uc0RpYWxvZ0NvbXBvbmVudD5cbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZXZlbnREYXRhT3B0aW9uc1dpdGhIYW5kbGVyID0gdGhpcy5zdXBwb3J0ZWRFdmVudERhdGFGb3JtYXRzLmZpbHRlcihcbiAgICAgIChldmVudERhdGFGb3JtYXQpID0+XG4gICAgICAgIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9ucy5pbmNsdWRlcyhcbiAgICAgICAgICBldmVudERhdGFGb3JtYXQuZm9ybWF0IGFzIEV2ZW50RGF0YUZvcm1hdFxuICAgICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9ucy5mb3JFYWNoKChldmVudERhdGFJbXBvcnRPcHRpb24pID0+IHtcbiAgICAgIGlmIChldmVudERhdGFJbXBvcnRPcHRpb24gaW5zdGFuY2VvZiBJbXBvcnRPcHRpb24pIHtcbiAgICAgICAgY29uc3QgaW1wb3J0SGFuZGxlciA9IGV2ZW50RGF0YUltcG9ydE9wdGlvbi5oYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgIGV2ZW50RGF0YUltcG9ydE9wdGlvbi5oYW5kbGVyID0gKGZpbGVzOiBGaWxlTGlzdCkgPT4ge1xuICAgICAgICAgIGltcG9ydEhhbmRsZXIoZmlsZXMpO1xuICAgICAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhT3B0aW9uc1dpdGhIYW5kbGVyLnB1c2goZXZlbnREYXRhSW1wb3J0T3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFN1cHBvcnRlZEV2ZW50RGF0YUZvcm1hdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9uc1xuICAgICAgLm1hcCgoZm9ybWF0KSA9PiB7XG4gICAgICAgIGlmIChmb3JtYXQgaW5zdGFuY2VvZiBJbXBvcnRPcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0LmZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZm9ybWF0KSA9PiBmb3JtYXQgIT09ICdaSVAnKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBoYW5kbGVKU09ORXZlbnREYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBqc29uID0gdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShjb250ZW50KSA6IGNvbnRlbnQ7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoanNvbik7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ2pzb24nLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVKaXZlWE1MRGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgaml2ZWxvYWRlciA9IG5ldyBKaXZlWE1MTG9hZGVyKCk7XG4gICAgICBqaXZlbG9hZGVyLnByb2Nlc3MoY29udGVudCk7XG4gICAgICBjb25zdCBldmVudERhdGEgPSBqaXZlbG9hZGVyLmdldEV2ZW50RGF0YSgpO1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkuYnVpbGRFdmVudERhdGFGcm9tSlNPTihldmVudERhdGEpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICd4bWwnLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVPQkpJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnksIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VPQkpHZW9tZXRyeShjb250ZW50LCBuYW1lKTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAnb2JqJywgY2FsbGJhY2spO1xuICB9XG5cbiAgaGFuZGxlU2NlbmVJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peERpc3BsYXkoY29udGVudCk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ3BobngnLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVHTFRGSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55LCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlR0xURkdlb21ldHJ5KGNvbnRlbnQsIG5hbWUpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICdnbHRmJywgY2FsbGJhY2spO1xuICB9XG5cbiAgaGFuZGxlUGhvZW5peElucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VQaG9lbml4RGlzcGxheShjb250ZW50KTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAncGhueCcsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZVJPT1RJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBTY3JpcHRMb2FkZXIubG9hZEpTUm9vdFNjcmlwdHMoKS50aGVuKChKU1JPT1Q6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0TmFtZSA9IHByb21wdCgnRW50ZXIgb2JqZWN0IG5hbWUgaW4gUk9PVCBmaWxlJyk7XG4gICAgICBKU1JPT1Qub3BlbkZpbGUoZmlsZXNbMF0pLnRoZW4oKGZpbGU6IGFueSkgPT4ge1xuICAgICAgICBmaWxlLnJlYWRPYmplY3Qob2JqZWN0TmFtZSkudGhlbigob2JqOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGxheS5sb2FkSlNPTkdlb21ldHJ5KFxuICAgICAgICAgICAgSlNST09ULkdFTy5idWlsZChvYmosIHsgZGZsdF9jb2xvcnM6IHRydWUgfSkudG9KU09OKCksXG4gICAgICAgICAgICBmaWxlc1swXS5uYW1lLnNwbGl0KCcuJylbMF1cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgaGFuZGxlUm9vdEpTT05JbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBTY3JpcHRMb2FkZXIubG9hZEpTUm9vdFNjcmlwdHMoKS50aGVuKChKU1JPT1Q6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55LCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5ldmVudERpc3BsYXkubG9hZEpTT05HZW9tZXRyeShcbiAgICAgICAgICBKU1JPT1QuR0VPLmJ1aWxkKEpTUk9PVC5wYXJzZShjb250ZW50KSwge1xuICAgICAgICAgICAgZGZsdF9jb2xvcnM6IHRydWUsXG4gICAgICAgICAgfSkudG9KU09OKCksXG4gICAgICAgICAgbmFtZVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAnZ3onLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVJZ0V2ZW50RGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNtc0xvYWRlciA9IG5ldyBDTVNMb2FkZXIoKTtcbiAgICBjbXNMb2FkZXIucmVhZElnQXJjaGl2ZShmaWxlc1swXSwgKGFsbEV2ZW50czogYW55W10pID0+IHtcbiAgICAgIGNvbnN0IGFsbEV2ZW50c0RhdGEgPSBjbXNMb2FkZXIuZ2V0QWxsRXZlbnRzRGF0YShhbGxFdmVudHMpO1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VQaG9lbml4RXZlbnRzKGFsbEV2ZW50c0RhdGEpO1xuICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVaaXBFdmVudERhdGFJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBpZiAodGhpcy5pc0ZpbGVPZkV4dGVuc2lvbihmaWxlc1swXSwgJ3ppcCcpKSB7XG4gICAgICB0aGlzLmhhbmRsZVppcElucHV0KGZpbGVzWzBdLCAoYWxsRmlsZXNXaXRoRGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBhbGxFdmVudHNPYmplY3QgPSB7fTtcblxuICAgICAgICAvLyBKU09OIGV2ZW50IGRhdGFcbiAgICAgICAgT2JqZWN0LmtleXMoYWxsRmlsZXNXaXRoRGF0YSlcbiAgICAgICAgICAuZmlsdGVyKChmaWxlTmFtZSkgPT4gZmlsZU5hbWUuZW5kc1dpdGgoJy5qc29uJykpXG4gICAgICAgICAgLmZvckVhY2goKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICBhbGxFdmVudHNPYmplY3QsXG4gICAgICAgICAgICAgIEpTT04ucGFyc2UoYWxsRmlsZXNXaXRoRGF0YVtmaWxlTmFtZV0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEppdmVYTUwgZXZlbnQgZGF0YVxuICAgICAgICBjb25zdCBqaXZlbG9hZGVyID0gbmV3IEppdmVYTUxMb2FkZXIoKTtcbiAgICAgICAgT2JqZWN0LmtleXMoYWxsRmlsZXNXaXRoRGF0YSlcbiAgICAgICAgICAuZmlsdGVyKChmaWxlTmFtZSkgPT4gZmlsZU5hbWUuZW5kc1dpdGgoJy54bWwnKSlcbiAgICAgICAgICAuZm9yRWFjaCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgICAgIGppdmVsb2FkZXIucHJvY2VzcyhhbGxGaWxlc1dpdGhEYXRhW2ZpbGVOYW1lXSk7XG4gICAgICAgICAgICBjb25zdCBldmVudERhdGEgPSBqaXZlbG9hZGVyLmdldEV2ZW50RGF0YSgpO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhbGxFdmVudHNPYmplY3QsIHsgW2ZpbGVOYW1lXTogZXZlbnREYXRhIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peEV2ZW50cyhhbGxFdmVudHNPYmplY3QpO1xuXG4gICAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiBJbnZhbGlkIGZpbGUgZm9ybWF0IScpO1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkuZ2V0SW5mb0xvZ2dlcigpLmFkZCgnSW52YWxpZCBmaWxlIGZvcm1hdCEnLCAnRXJyb3InKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVaaXBJbnB1dChcbiAgICBmaWxlOiBGaWxlLFxuICAgIGNhbGxiYWNrOiAoYWxsRmlsZXNXaXRoRGF0YTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkgPT4gdm9pZFxuICApIHtcbiAgICBjb25zdCBhbGxGaWxlc1dpdGhEYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgLy8gVXNpbmcgYSB0cnkgY2F0Y2ggYmxvY2sgdG8gY2F0Y2ggYW55IGVycm9ycyBpbiBQcm9taXNlc1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB6aXBBcmNoaXZlID0gbmV3IEpTWmlwKCk7XG4gICAgICBhd2FpdCB6aXBBcmNoaXZlLmxvYWRBc3luYyhmaWxlKTtcbiAgICAgIGNvbnN0IGFsbEZpbGVzID0gT2JqZWN0LmtleXMoemlwQXJjaGl2ZS5maWxlcyk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmdsZUZpbGUgb2YgYWxsRmlsZXMpIHtcbiAgICAgICAgY29uc3QgZmlsZURhdGEgPSBhd2FpdCB6aXBBcmNoaXZlLmZpbGUoc2luZ2xlRmlsZSkuYXN5bmMoJ3N0cmluZycpO1xuICAgICAgICBhbGxGaWxlc1dpdGhEYXRhW3NpbmdsZUZpbGVdID0gZmlsZURhdGE7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhhbGxGaWxlc1dpdGhEYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgcmVhZGluZyB6aXAnLCBlcnJvcik7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRJbmZvTG9nZ2VyKCkuYWRkKCdDb3VsZCBub3QgcmVhZCB6aXAgZmlsZScsICdFcnJvcicpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZpbGVJbnB1dChcbiAgICBmaWxlOiBGaWxlLFxuICAgIGV4dGVuc2lvbjogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiAocmVzdWx0OiBzdHJpbmcsIGZpbGVOYW1lPzogc3RyaW5nKSA9PiB2b2lkXG4gICkge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgaWYgKHRoaXMuaXNGaWxlT2ZFeHRlbnNpb24oZmlsZSwgZXh0ZW5zaW9uKSkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY2FsbGJhY2socmVhZGVyLnJlc3VsdC50b1N0cmluZygpLCBmaWxlLm5hbWUuc3BsaXQoJy4nKVswXSk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiBJbnZhbGlkIGZpbGUgZm9ybWF0IScpO1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkuZ2V0SW5mb0xvZ2dlcigpLmFkZCgnSW52YWxpZCBmaWxlIGZvcm1hdCEnLCAnRXJyb3InKTtcbiAgICB9XG4gICAgdGhpcy5vbkNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGlzRmlsZU9mRXh0ZW5zaW9uKGZpbGU6IEZpbGUsIGV4dGVuc2lvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpID09PSBleHRlbnNpb247XG4gIH1cblxuICBzYXZlU2NlbmUoKSB7XG4gICAgdGhpcy5ldmVudERpc3BsYXkuZXhwb3J0UGhvZW5peERpc3BsYXkoKTtcbiAgfVxuXG4gIGV4cG9ydE9CSigpIHtcbiAgICB0aGlzLmV2ZW50RGlzcGxheS5leHBvcnRUb09CSigpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGlhbG9nXCI+XG4gIDxoMSBtYXQtZGlhbG9nLXRpdGxlPkltcG9ydCBhbmQgZXhwb3J0IG9wdGlvbnM8L2gxPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cImRpYWxvZy1jb250ZW50XCI+XG4gICAgPGRpdiAqbmdJZj1cImV2ZW50RGF0YUltcG9ydE9wdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgPGg1PkltcG9ydDwvaDU+XG5cbiAgICAgIDxoNiBjbGFzcz1cInRleHQtY2VudGVyXCI+RXZlbnQgZGF0YTwvaDY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyZWRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBldmVudERhdGFJbXBvcnRPcHRpb24gb2YgZXZlbnREYXRhT3B0aW9uc1dpdGhIYW5kbGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2V2ZW50RGF0YUZpbGVJbnB1dFxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXRcIlxuICAgICAgICAgICAgW2FjY2VwdF09XCJldmVudERhdGFJbXBvcnRPcHRpb24uYWNjZXB0XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZXZlbnREYXRhSW1wb3J0T3B0aW9uLmhhbmRsZXIoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXZlbnREYXRhRmlsZUlucHV0LmNsaWNrKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2V2ZW50RGF0YS5zdmdcIiBhbHQ9XCJFdmVudCBkYXRhIGljb25cIiAvPlxuICAgICAgICAgICAgTG9hZCB7eyBldmVudERhdGFJbXBvcnRPcHRpb24uZmlsZVR5cGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICBTdXBwb3J0ZWQgZm9ybWF0czoge3sgZ2V0U3VwcG9ydGVkRXZlbnREYXRhRm9ybWF0cygpIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8aDYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPkdlb21ldHJpZXM8L2g2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvdyBjZW50ZXJlZFwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNvYmpGaWxlSW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0XCJcbiAgICAgICAgYWNjZXB0PVwiLm9ialwiXG4gICAgICAgIG5hbWU9XCJpbWFnZVwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlT0JKSW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJvYmpGaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9vYmouc3ZnXCIgYWx0PVwiXCIgLz4gTG9hZCAub2JqXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGlucHV0XG4gICAgICAgICNnbHRmRmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5nbHRmXCJcbiAgICAgICAgbmFtZT1cImltYWdlXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVHTFRGSW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJnbHRmRmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvZ2x0Zi5zdmdcIiBhbHQ9XCJcIiAvPiBMb2FkIC5nbHRmXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGlucHV0XG4gICAgICAgICNyb290RmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5yb290XCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVST09USW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJyb290RmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvZmlsZS1pbXBvcnQuc3ZnXCIgYWx0PVwiXCIgLz4gTG9hZCAucm9vdFxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjcm9vdEpTT05GaWxlSW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0XCJcbiAgICAgICAgYWNjZXB0PVwiLmpzb24uZ3pcIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVJvb3RKU09OSW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJyb290SlNPTkZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2ZpbGUtaW1wb3J0LnN2Z1wiIGFsdD1cIlwiIC8+IExvYWQgLmpzb24uZ3pcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlN1cHBvcnRlZCBmb3JtYXRzOiBPQkosIEdMVEYsIFJPT1QsIFJPT1QgSlNPTjwvcD5cblxuICAgIDxoNT5JbXBvcnQgLyBleHBvcnQgc2NlbmU8L2g1PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvdyBjZW50ZXJlZFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXQtYnV0dG9uIGxvYWQtZXhwb3J0XCJcbiAgICAgICAgaWQ9XCJleHBvcnRTY2VuZVwiXG4gICAgICAgIChjbGljayk9XCJzYXZlU2NlbmUoKVwiXG4gICAgICA+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL3NhdmUuc3ZnXCIgYWx0PVwiXCIgLz4gU2F2ZSBzY2VuZVxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjbG9hZFNjZW5lSW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0XCJcbiAgICAgICAgYWNjZXB0PVwiLnBobnhcIlxuICAgICAgICBuYW1lPVwiaW1hZ2VcIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVBob2VuaXhJbnB1dCgkZXZlbnQudGFyZ2V0LmZpbGVzKVwiXG4gICAgICAvPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXQtYnV0dG9uIGxvYWQtZXhwb3J0XCJcbiAgICAgICAgaWQ9XCJpbXBvcnRTY2VuZVwiXG4gICAgICAgIChjbGljayk9XCJsb2FkU2NlbmVJbnB1dC5jbGljaygpXCJcbiAgICAgID5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvdXBsb2FkLnN2Z1wiIGFsdD1cIlwiIC8+IExvYWQgc2NlbmVcbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b24gZXhwb3J0LWJ1dHRvblwiXG4gICAgICAgIGlkPVwiZXhwb3J0T0JKXCJcbiAgICAgICAgKGNsaWNrKT1cImV4cG9ydE9CSigpXCJcbiAgICAgID5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvb2JqLnN2Z1wiIGFsdD1cIlwiIC8+IFNhdmUgT0JKXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwib25DbG9zZSgpXCIgY2RrRm9jdXNJbml0aWFsPkNsb3NlPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbXBvbmVudHMvdWktbWVudS9pby1vcHRpb25zL2lvLW9wdGlvbnMtZGlhbG9nL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3VpLW1lbnUvaW8tb3B0aW9ucy9pby1vcHRpb25zLWRpYWxvZy9pby1vcHRpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUcxQixPQUFPLEVBQ0wsZUFBZSxFQUVmLFlBQVksR0FDYixNQUFNLCtDQUErQyxDQUFDOzs7Ozs7QUFPdkQsTUFBTSxPQUFPLHdCQUF3QjtJQWlDbkMsWUFDVSxZQUFpQyxFQUNsQyxTQUFpRDtRQURoRCxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDbEMsY0FBUyxHQUFULFNBQVMsQ0FBd0M7UUFqQzFELDJCQUFzQixHQUE0QixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUlqRSw4QkFBeUIsR0FBRztZQUNsQyxJQUFJLFlBQVksQ0FDZCxlQUFlLENBQUMsSUFBSSxFQUNwQixPQUFPLEVBQ1AsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDeEMsa0JBQWtCLENBQ25CO1lBQ0QsSUFBSSxZQUFZLENBQ2QsZUFBZSxDQUFDLE9BQU8sRUFDdkIsTUFBTSxFQUNOLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3RDLFVBQVUsQ0FD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eyBPbkluaXQsIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENNU0xvYWRlciwgSml2ZVhNTExvYWRlciB9IGZyb20gJ3Bob2VuaXgtZXZlbnQtZGlzcGxheSc7XG5pbXBvcnQgSlNaaXAgZnJvbSAnanN6aXAnO1xuaW1wb3J0IHsgRXZlbnREaXNwbGF5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2V2ZW50LWRpc3BsYXkuc2VydmljZSc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtcbiAgRXZlbnREYXRhRm9ybWF0LFxuICBFdmVudERhdGFJbXBvcnRPcHRpb24sXG4gIEltcG9ydE9wdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZXh0cmFzL2V2ZW50LWRhdGEtaW1wb3J0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWlvLW9wdGlvbnMtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgSU9PcHRpb25zRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgZXZlbnREYXRhSW1wb3J0T3B0aW9uczogRXZlbnREYXRhSW1wb3J0T3B0aW9uW10gPSBbRXZlbnREYXRhRm9ybWF0LkpTT05dO1xuXG4gIGV2ZW50RGF0YU9wdGlvbnNXaXRoSGFuZGxlcjogSW1wb3J0T3B0aW9uW107XG5cbiAgcHJpdmF0ZSBzdXBwb3J0ZWRFdmVudERhdGFGb3JtYXRzID0gW1xuICAgIG5ldyBJbXBvcnRPcHRpb24oXG4gICAgICBFdmVudERhdGFGb3JtYXQuSlNPTixcbiAgICAgICcuanNvbicsXG4gICAgICB0aGlzLmhhbmRsZUpTT05FdmVudERhdGFJbnB1dC5iaW5kKHRoaXMpLFxuICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgKSxcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LkpJVkVYTUwsXG4gICAgICAnLnhtbCcsXG4gICAgICB0aGlzLmhhbmRsZUppdmVYTUxEYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICd0ZXh0L3htbCdcbiAgICApLFxuICAgIG5ldyBJbXBvcnRPcHRpb24oXG4gICAgICBFdmVudERhdGFGb3JtYXQuWklQLFxuICAgICAgJy56aXAnLFxuICAgICAgdGhpcy5oYW5kbGVaaXBFdmVudERhdGFJbnB1dC5iaW5kKHRoaXMpLFxuICAgICAgJy56aXAnXG4gICAgKSxcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LklHLFxuICAgICAgJy5pZycsXG4gICAgICB0aGlzLmhhbmRsZUlnRXZlbnREYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICcuaWcnXG4gICAgKSxcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGV2ZW50RGlzcGxheTogRXZlbnREaXNwbGF5U2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8SU9PcHRpb25zRGlhbG9nQ29tcG9uZW50PlxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ldmVudERhdGFPcHRpb25zV2l0aEhhbmRsZXIgPSB0aGlzLnN1cHBvcnRlZEV2ZW50RGF0YUZvcm1hdHMuZmlsdGVyKFxuICAgICAgKGV2ZW50RGF0YUZvcm1hdCkgPT5cbiAgICAgICAgdGhpcy5ldmVudERhdGFJbXBvcnRPcHRpb25zLmluY2x1ZGVzKFxuICAgICAgICAgIGV2ZW50RGF0YUZvcm1hdC5mb3JtYXQgYXMgRXZlbnREYXRhRm9ybWF0XG4gICAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5ldmVudERhdGFJbXBvcnRPcHRpb25zLmZvckVhY2goKGV2ZW50RGF0YUltcG9ydE9wdGlvbikgPT4ge1xuICAgICAgaWYgKGV2ZW50RGF0YUltcG9ydE9wdGlvbiBpbnN0YW5jZW9mIEltcG9ydE9wdGlvbikge1xuICAgICAgICBjb25zdCBpbXBvcnRIYW5kbGVyID0gZXZlbnREYXRhSW1wb3J0T3B0aW9uLmhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgZXZlbnREYXRhSW1wb3J0T3B0aW9uLmhhbmRsZXIgPSAoZmlsZXM6IEZpbGVMaXN0KSA9PiB7XG4gICAgICAgICAgaW1wb3J0SGFuZGxlcihmaWxlcyk7XG4gICAgICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGFPcHRpb25zV2l0aEhhbmRsZXIucHVzaChldmVudERhdGFJbXBvcnRPcHRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3VwcG9ydGVkRXZlbnREYXRhRm9ybWF0cygpIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudERhdGFJbXBvcnRPcHRpb25zXG4gICAgICAubWFwKChmb3JtYXQpID0+IHtcbiAgICAgICAgaWYgKGZvcm1hdCBpbnN0YW5jZW9mIEltcG9ydE9wdGlvbikge1xuICAgICAgICAgIHJldHVybiBmb3JtYXQuZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChmb3JtYXQpID0+IGZvcm1hdCAhPT0gJ1pJUCcpXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUpTT05FdmVudERhdGFJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGpzb24gPSB0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGNvbnRlbnQpIDogY29udGVudDtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peEV2ZW50cyhqc29uKTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAnanNvbicsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZUppdmVYTUxEYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBqaXZlbG9hZGVyID0gbmV3IEppdmVYTUxMb2FkZXIoKTtcbiAgICAgIGppdmVsb2FkZXIucHJvY2Vzcyhjb250ZW50KTtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IGppdmVsb2FkZXIuZ2V0RXZlbnREYXRhKCk7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5idWlsZEV2ZW50RGF0YUZyb21KU09OKGV2ZW50RGF0YSk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ3htbCcsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZU9CSklucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZU9CSkdlb21ldHJ5KGNvbnRlbnQsIG5hbWUpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICdvYmonLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVTY2VuZUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VQaG9lbml4RGlzcGxheShjb250ZW50KTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAncGhueCcsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZUdMVEZJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnksIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VHTFRGR2VvbWV0cnkoY29udGVudCwgbmFtZSk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ2dsdGYnLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVQaG9lbml4SW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhEaXNwbGF5KGNvbnRlbnQpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICdwaG54JywgY2FsbGJhY2spO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlUk9PVElucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IHJvb3RPYmplY3ROYW1lID0gcHJvbXB0KCdFbnRlciBvYmplY3QgbmFtZSBpbiBST09UIGZpbGUnKTtcblxuICAgIGF3YWl0IHRoaXMuZXZlbnREaXNwbGF5LmxvYWRSb290R2VvbWV0cnkoXG4gICAgICBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGVzWzBdKSxcbiAgICAgIHJvb3RPYmplY3ROYW1lLFxuICAgICAgZmlsZXNbMF0ubmFtZS5zcGxpdCgnLicpWzBdXG4gICAgKTtcblxuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlUm9vdEpTT05JbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBpZiAoIXRoaXMuaXNGaWxlT2ZFeHRlbnNpb24oZmlsZXNbMF0sICdneicpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IGZpbGVzWzBdLm5hbWUuc3BsaXQoJy4nKVswXTtcbiAgICBhd2FpdCB0aGlzLmV2ZW50RGlzcGxheS5sb2FkUm9vdEpTT05HZW9tZXRyeShcbiAgICAgIFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZXNbMF0pLFxuICAgICAgbmFtZVxuICAgICk7XG5cbiAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUlnRXZlbnREYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY21zTG9hZGVyID0gbmV3IENNU0xvYWRlcigpO1xuICAgIGNtc0xvYWRlci5yZWFkSWdBcmNoaXZlKGZpbGVzWzBdLCAoYWxsRXZlbnRzOiBhbnlbXSkgPT4ge1xuICAgICAgY29uc3QgYWxsRXZlbnRzRGF0YSA9IGNtc0xvYWRlci5nZXRBbGxFdmVudHNEYXRhKGFsbEV2ZW50cyk7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoYWxsRXZlbnRzRGF0YSk7XG4gICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVppcEV2ZW50RGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGlmICghdGhpcy5pc0ZpbGVPZkV4dGVuc2lvbihmaWxlc1swXSwgJ3ppcCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVaaXBJbnB1dChmaWxlc1swXSwgKGFsbEZpbGVzV2l0aERhdGEpID0+IHtcbiAgICAgIGNvbnN0IGFsbEV2ZW50c09iamVjdCA9IHt9O1xuXG4gICAgICAvLyBKU09OIGV2ZW50IGRhdGFcbiAgICAgIE9iamVjdC5rZXlzKGFsbEZpbGVzV2l0aERhdGEpXG4gICAgICAgIC5maWx0ZXIoKGZpbGVOYW1lKSA9PiBmaWxlTmFtZS5lbmRzV2l0aCgnLmpzb24nKSlcbiAgICAgICAgLmZvckVhY2goKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIGFsbEV2ZW50c09iamVjdCxcbiAgICAgICAgICAgIEpTT04ucGFyc2UoYWxsRmlsZXNXaXRoRGF0YVtmaWxlTmFtZV0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIEppdmVYTUwgZXZlbnQgZGF0YVxuICAgICAgY29uc3Qgaml2ZWxvYWRlciA9IG5ldyBKaXZlWE1MTG9hZGVyKCk7XG4gICAgICBPYmplY3Qua2V5cyhhbGxGaWxlc1dpdGhEYXRhKVxuICAgICAgICAuZmlsdGVyKChmaWxlTmFtZSkgPT4gZmlsZU5hbWUuZW5kc1dpdGgoJy54bWwnKSlcbiAgICAgICAgLmZvckVhY2goKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgICAgaml2ZWxvYWRlci5wcm9jZXNzKGFsbEZpbGVzV2l0aERhdGFbZmlsZU5hbWVdKTtcbiAgICAgICAgICBjb25zdCBldmVudERhdGEgPSBqaXZlbG9hZGVyLmdldEV2ZW50RGF0YSgpO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oYWxsRXZlbnRzT2JqZWN0LCB7IFtmaWxlTmFtZV06IGV2ZW50RGF0YSB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peEV2ZW50cyhhbGxFdmVudHNPYmplY3QpO1xuXG4gICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVppcElucHV0KFxuICAgIGZpbGU6IEZpbGUsXG4gICAgY2FsbGJhY2s6IChhbGxGaWxlc1dpdGhEYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSA9PiB2b2lkXG4gICkge1xuICAgIGNvbnN0IGFsbEZpbGVzV2l0aERhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAvLyBVc2luZyBhIHRyeSBjYXRjaCBibG9jayB0byBjYXRjaCBhbnkgZXJyb3JzIGluIFByb21pc2VzXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHppcEFyY2hpdmUgPSBuZXcgSlNaaXAoKTtcbiAgICAgIGF3YWl0IHppcEFyY2hpdmUubG9hZEFzeW5jKGZpbGUpO1xuICAgICAgY29uc3QgYWxsRmlsZXMgPSBPYmplY3Qua2V5cyh6aXBBcmNoaXZlLmZpbGVzKTtcbiAgICAgIGZvciAoY29uc3Qgc2luZ2xlRmlsZSBvZiBhbGxGaWxlcykge1xuICAgICAgICBjb25zdCBmaWxlRGF0YSA9IGF3YWl0IHppcEFyY2hpdmUuZmlsZShzaW5nbGVGaWxlKS5hc3luYygnc3RyaW5nJyk7XG4gICAgICAgIGFsbEZpbGVzV2l0aERhdGFbc2luZ2xlRmlsZV0gPSBmaWxlRGF0YTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKGFsbEZpbGVzV2l0aERhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSByZWFkaW5nIHppcCcsIGVycm9yKTtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LmdldEluZm9Mb2dnZXIoKS5hZGQoJ0NvdWxkIG5vdCByZWFkIHppcCBmaWxlJywgJ0Vycm9yJyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRmlsZUlucHV0KFxuICAgIGZpbGU6IEZpbGUsXG4gICAgZXh0ZW5zaW9uOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IChyZXN1bHQ6IHN0cmluZywgZmlsZU5hbWU/OiBzdHJpbmcpID0+IHZvaWRcbiAgKSB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIGlmICh0aGlzLmlzRmlsZU9mRXh0ZW5zaW9uKGZpbGUsIGV4dGVuc2lvbikpIHtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKHJlYWRlci5yZXN1bHQudG9TdHJpbmcoKSwgZmlsZS5uYW1lLnNwbGl0KCcuJylbMF0pO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xuICAgIH1cblxuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpbGVPZkV4dGVuc2lvbihmaWxlOiBGaWxlLCBleHRlbnNpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKSA9PT0gZXh0ZW5zaW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogSW52YWxpZCBmaWxlIGZvcm1hdCEnKTtcbiAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRJbmZvTG9nZ2VyKCkuYWRkKCdJbnZhbGlkIGZpbGUgZm9ybWF0IScsICdFcnJvcicpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2F2ZVNjZW5lKCkge1xuICAgIHRoaXMuZXZlbnREaXNwbGF5LmV4cG9ydFBob2VuaXhEaXNwbGF5KCk7XG4gIH1cblxuICBleHBvcnRPQkooKSB7XG4gICAgdGhpcy5ldmVudERpc3BsYXkuZXhwb3J0VG9PQkooKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRpYWxvZ1wiPlxuICA8aDEgbWF0LWRpYWxvZy10aXRsZT5JbXBvcnQgYW5kIGV4cG9ydCBvcHRpb25zPC9oMT5cbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJkaWFsb2ctY29udGVudFwiPlxuICAgIDxkaXYgKm5nSWY9XCJldmVudERhdGFJbXBvcnRPcHRpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxoNT5JbXBvcnQ8L2g1PlxuXG4gICAgICA8aDYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPkV2ZW50IGRhdGE8L2g2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGNlbnRlcmVkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZXZlbnREYXRhSW1wb3J0T3B0aW9uIG9mIGV2ZW50RGF0YU9wdGlvbnNXaXRoSGFuZGxlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNldmVudERhdGFGaWxlSW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0XCJcbiAgICAgICAgICAgIFthY2NlcHRdPVwiZXZlbnREYXRhSW1wb3J0T3B0aW9uLmFjY2VwdFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImV2ZW50RGF0YUltcG9ydE9wdGlvbi5oYW5kbGVyKCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV2ZW50RGF0YUZpbGVJbnB1dC5jbGljaygpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9ldmVudERhdGEuc3ZnXCIgYWx0PVwiRXZlbnQgZGF0YSBpY29uXCIgLz5cbiAgICAgICAgICAgIExvYWQge3sgZXZlbnREYXRhSW1wb3J0T3B0aW9uLmZpbGVUeXBlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgU3VwcG9ydGVkIGZvcm1hdHM6IHt7IGdldFN1cHBvcnRlZEV2ZW50RGF0YUZvcm1hdHMoKSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPGg2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5HZW9tZXRyaWVzPC9oNj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyZWRcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjb2JqRmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5vYmpcIlxuICAgICAgICBuYW1lPVwiaW1hZ2VcIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZU9CSklucHV0KCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIiAoY2xpY2spPVwib2JqRmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvb2JqLnN2Z1wiIGFsdD1cIlwiIC8+IExvYWQgLm9ialxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjZ2x0ZkZpbGVJbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXRcIlxuICAgICAgICBhY2NlcHQ9XCIuZ2x0ZlwiXG4gICAgICAgIG5hbWU9XCJpbWFnZVwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlR0xURklucHV0KCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIiAoY2xpY2spPVwiZ2x0ZkZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2dsdGYuc3ZnXCIgYWx0PVwiXCIgLz4gTG9hZCAuZ2x0ZlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjcm9vdEZpbGVJbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXRcIlxuICAgICAgICBhY2NlcHQ9XCIucm9vdFwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlUk9PVElucHV0KCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIiAoY2xpY2spPVwicm9vdEZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2ZpbGUtaW1wb3J0LnN2Z1wiIGFsdD1cIlwiIC8+IExvYWQgLnJvb3RcbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgI3Jvb3RKU09ORmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5qc29uLmd6XCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVSb290SlNPTklucHV0KCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIiAoY2xpY2spPVwicm9vdEpTT05GaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9maWxlLWltcG9ydC5zdmdcIiBhbHQ9XCJcIiAvPiBMb2FkIC5qc29uLmd6XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxwIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5TdXBwb3J0ZWQgZm9ybWF0czogT0JKLCBHTFRGLCBST09ULCBST09UIEpTT048L3A+XG5cbiAgICA8aDU+SW1wb3J0IC8gZXhwb3J0IHNjZW5lPC9oNT5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyZWRcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvbiBsb2FkLWV4cG9ydFwiXG4gICAgICAgIGlkPVwiZXhwb3J0U2NlbmVcIlxuICAgICAgICAoY2xpY2spPVwic2F2ZVNjZW5lKClcIlxuICAgICAgPlxuICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9zYXZlLnN2Z1wiIGFsdD1cIlwiIC8+IFNhdmUgc2NlbmVcbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgI2xvYWRTY2VuZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5waG54XCJcbiAgICAgICAgbmFtZT1cImltYWdlXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVQaG9lbml4SW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvbiBsb2FkLWV4cG9ydFwiXG4gICAgICAgIGlkPVwiaW1wb3J0U2NlbmVcIlxuICAgICAgICAoY2xpY2spPVwibG9hZFNjZW5lSW5wdXQuY2xpY2soKVwiXG4gICAgICA+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL3VwbG9hZC5zdmdcIiBhbHQ9XCJcIiAvPiBMb2FkIHNjZW5lXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXQtYnV0dG9uIGV4cG9ydC1idXR0b25cIlxuICAgICAgICBpZD1cImV4cG9ydE9CSlwiXG4gICAgICAgIChjbGljayk9XCJleHBvcnRPQkooKVwiXG4gICAgICA+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL29iai5zdmdcIiBhbHQ9XCJcIiAvPiBTYXZlIE9CSlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cIm9uQ2xvc2UoKVwiIGNka0ZvY3VzSW5pdGlhbD5DbG9zZTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -17,9 +17,9 @@ export class IoOptionsComponent {
17
17
  this.eventDataImportOptions;
18
18
  }
19
19
  }
20
- IoOptionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IoOptionsComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
21
- IoOptionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: IoOptionsComponent, selector: "app-io-options", inputs: { eventDataImportOptions: "eventDataImportOptions" }, ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Import and export options\"\n icon=\"import\"\n [active]=\"false\"\n (click)=\"openIODialog()\"\n>\n</app-menu-toggle>\n", styles: [""], components: [{ type: i2.MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IoOptionsComponent, decorators: [{
20
+ IoOptionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: IoOptionsComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
21
+ IoOptionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: IoOptionsComponent, selector: "app-io-options", inputs: { eventDataImportOptions: "eventDataImportOptions" }, ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Import and export options\"\n icon=\"import\"\n [active]=\"false\"\n (click)=\"openIODialog()\"\n>\n</app-menu-toggle>\n", styles: [""], components: [{ type: i2.MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: IoOptionsComponent, decorators: [{
23
23
  type: Component,
24
24
  args: [{ selector: 'app-io-options', template: "<app-menu-toggle\n tooltip=\"Import and export options\"\n icon=\"import\"\n [active]=\"false\"\n (click)=\"openIODialog()\"\n>\n</app-menu-toggle>\n", styles: [""] }]
25
25
  }], ctorParameters: function () { return [{ type: i1.MatDialog }]; }, propDecorators: { eventDataImportOptions: [{
@@ -15,9 +15,9 @@ export class MainViewToggleComponent {
15
15
  .toggleOrthographicView(this.orthographicView);
16
16
  }
17
17
  }
18
- MainViewToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MainViewToggleComponent, deps: [{ token: i1.EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
19
- MainViewToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: MainViewToggleComponent, selector: "app-main-view-toggle", ngImport: i0, template: "<app-menu-toggle\n [icon]=\"orthographicView ? 'perspective' : 'orthographic'\"\n [matTooltip]=\"\n 'Switch to ' + (orthographicView ? 'perspective' : 'orthographic') + ' view'\n \"\n (click)=\"switchMainView()\"\n>\n</app-menu-toggle>\n", styles: [""], components: [{ type: i2.MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MainViewToggleComponent, decorators: [{
18
+ MainViewToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: MainViewToggleComponent, deps: [{ token: i1.EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
19
+ MainViewToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: MainViewToggleComponent, selector: "app-main-view-toggle", ngImport: i0, template: "<app-menu-toggle\n [icon]=\"orthographicView ? 'perspective' : 'orthographic'\"\n [matTooltip]=\"\n 'Switch to ' + (orthographicView ? 'perspective' : 'orthographic') + ' view'\n \"\n (click)=\"switchMainView()\"\n>\n</app-menu-toggle>\n", styles: [""], components: [{ type: i2.MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: MainViewToggleComponent, decorators: [{
21
21
  type: Component,
22
22
  args: [{ selector: 'app-main-view-toggle', template: "<app-menu-toggle\n [icon]=\"orthographicView ? 'perspective' : 'orthographic'\"\n [matTooltip]=\"\n 'Switch to ' + (orthographicView ? 'perspective' : 'orthographic') + ' view'\n \"\n (click)=\"switchMainView()\"\n>\n</app-menu-toggle>\n", styles: [""] }]
23
23
  }], ctorParameters: function () { return [{ type: i1.EventDisplayService }]; } });
@@ -7,9 +7,9 @@ export class MenuToggleComponent {
7
7
  this.disabled = false;
8
8
  }
9
9
  }
10
- MenuToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MenuToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11
- MenuToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: { icon: "icon", active: "active", tooltip: "tooltip", disabled: "disabled" }, ngImport: i0, template: "<button\n class=\"menu-toggle\"\n [ngClass]=\"{ disabled: disabled }\"\n [matTooltip]=\"tooltip\"\n matTooltipPosition=\"above\"\n matTooltipTouchGestures=\"off\"\n>\n <svg class=\"menu-toggle-icon\" [ngClass]=\"{ 'active-icon': active }\">\n <use attr.href=\"assets/icons/{{ icon }}.svg#{{ icon }}\"></use>\n </svg>\n</button>\n", styles: [":host{display:flex;margin:0 .6rem}:host .menu-toggle{display:flex;background:unset;border:none;height:2.5rem;width:2.5rem;min-height:2.5rem;min-width:2.5rem;padding:.65rem;cursor:pointer;align-self:center;transition:all .4s}:host .menu-toggle-icon{width:100%;height:100%}:host .menu-toggle-icon.active-icon{--phoenix-options-icon-path: #00bcd4}:host .menu-toggle:hover{background-color:var(--phoenix-options-icon-bg);border-radius:40%;transition:all .4s}:host .menu-toggle.disabled{cursor:not-allowed;opacity:.4}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MenuToggleComponent, decorators: [{
10
+ MenuToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: MenuToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11
+ MenuToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: { icon: "icon", active: "active", tooltip: "tooltip", disabled: "disabled" }, ngImport: i0, template: "<button\n class=\"menu-toggle\"\n [ngClass]=\"{ disabled: disabled }\"\n [matTooltip]=\"tooltip\"\n matTooltipPosition=\"above\"\n matTooltipTouchGestures=\"off\"\n>\n <svg class=\"menu-toggle-icon\" [ngClass]=\"{ 'active-icon': active }\">\n <use attr.href=\"assets/icons/{{ icon }}.svg#{{ icon }}\"></use>\n </svg>\n</button>\n", styles: [":host{display:flex;margin:0 .6rem}:host .menu-toggle{display:flex;background:unset;border:none;height:2.5rem;width:2.5rem;min-height:2.5rem;min-width:2.5rem;padding:.65rem;cursor:pointer;align-self:center;transition:all .4s}:host .menu-toggle-icon{width:100%;height:100%}:host .menu-toggle-icon.active-icon{--phoenix-options-icon-path: #00bcd4}:host .menu-toggle:hover{background-color:var(--phoenix-options-icon-bg);border-radius:40%;transition:all .4s}:host .menu-toggle.disabled{cursor:not-allowed;opacity:.4}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: MenuToggleComponent, decorators: [{
13
13
  type: Component,
14
14
  args: [{ selector: 'app-menu-toggle', template: "<button\n class=\"menu-toggle\"\n [ngClass]=\"{ disabled: disabled }\"\n [matTooltip]=\"tooltip\"\n matTooltipPosition=\"above\"\n matTooltipTouchGestures=\"off\"\n>\n <svg class=\"menu-toggle-icon\" [ngClass]=\"{ 'active-icon': active }\">\n <use attr.href=\"assets/icons/{{ icon }}.svg#{{ icon }}\"></use>\n </svg>\n</button>\n", styles: [":host{display:flex;margin:0 .6rem}:host .menu-toggle{display:flex;background:unset;border:none;height:2.5rem;width:2.5rem;min-height:2.5rem;min-width:2.5rem;padding:.65rem;cursor:pointer;align-self:center;transition:all .4s}:host .menu-toggle-icon{width:100%;height:100%}:host .menu-toggle-icon.active-icon{--phoenix-options-icon-path: #00bcd4}:host .menu-toggle:hover{background-color:var(--phoenix-options-icon-bg);border-radius:40%;transition:all .4s}:host .menu-toggle.disabled{cursor:not-allowed;opacity:.4}\n"] }]
15
15
  }], propDecorators: { icon: [{