phoenix-ui-components 2.11.3 → 2.12.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 (100) hide show
  1. package/dist/components/embed-menu/embed-menu.component.d.ts +1 -1
  2. package/dist/components/embed-menu/experiment-link/experiment-link.component.d.ts +1 -1
  3. package/dist/components/file-explorer/file-explorer.component.d.ts +1 -1
  4. package/dist/components/loader/loader.component.d.ts +1 -1
  5. package/dist/components/nav/nav.component.d.ts +1 -1
  6. package/dist/components/phoenix-menu/config/config-slider/config-slider.component.d.ts +1 -1
  7. package/dist/components/phoenix-menu/phoenix-menu-item/phoenix-menu-item.component.d.ts +1 -1
  8. package/dist/components/phoenix-menu/phoenix-menu.component.d.ts +1 -1
  9. package/dist/components/ring-loader/ring-loader.component.d.ts +1 -1
  10. package/dist/components/ui-menu/animate-camera/animate-camera.component.d.ts +1 -1
  11. package/dist/components/ui-menu/animate-event/animate-event.component.d.ts +1 -1
  12. package/dist/components/ui-menu/ar-toggle/ar-toggle.component.d.ts +1 -1
  13. package/dist/components/ui-menu/auto-rotate/auto-rotate.component.d.ts +1 -1
  14. package/dist/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.d.ts +1 -1
  15. package/dist/components/ui-menu/collections-info/collections-info.component.d.ts +1 -1
  16. package/dist/components/ui-menu/cycle-events/cycle-events.component.d.ts +1 -1
  17. package/dist/components/ui-menu/dark-theme/dark-theme.component.d.ts +1 -1
  18. package/dist/components/ui-menu/event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component.d.ts +3 -2
  19. package/dist/components/ui-menu/event-data-explorer/event-data-explorer.component.d.ts +1 -1
  20. package/dist/components/ui-menu/event-selector/event-selector.component.d.ts +1 -1
  21. package/dist/components/ui-menu/experiment-info/experiment-info.component.d.ts +1 -1
  22. package/dist/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.d.ts +1 -1
  23. package/dist/components/ui-menu/info-panel/info-panel.component.d.ts +1 -1
  24. package/dist/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.d.ts +3 -5
  25. package/dist/components/ui-menu/io-options/io-options.component.d.ts +1 -1
  26. package/dist/components/ui-menu/main-view-toggle/main-view-toggle.component.d.ts +1 -1
  27. package/dist/components/ui-menu/menu-toggle/menu-toggle.component.d.ts +1 -1
  28. package/dist/components/ui-menu/object-clipping/object-clipping.component.d.ts +3 -4
  29. package/dist/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.d.ts +1 -1
  30. package/dist/components/ui-menu/object-selection/object-selection.component.d.ts +1 -1
  31. package/dist/components/ui-menu/overlay/overlay.component.d.ts +1 -1
  32. package/dist/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.d.ts +1 -1
  33. package/dist/components/ui-menu/overlay-view/overlay-view.component.d.ts +1 -1
  34. package/dist/components/ui-menu/performance-toggle/performance-toggle.component.d.ts +1 -1
  35. package/dist/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.d.ts +1 -1
  36. package/dist/components/ui-menu/share-link/share-link.component.d.ts +1 -1
  37. package/dist/components/ui-menu/ss-mode/ss-mode.component.d.ts +1 -1
  38. package/dist/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.d.ts +1 -1
  39. package/dist/components/ui-menu/tree-menu/tree-menu.component.d.ts +1 -1
  40. package/dist/components/ui-menu/ui-menu-wrapper/ui-menu-wrapper.component.d.ts +1 -1
  41. package/dist/components/ui-menu/ui-menu.component.d.ts +1 -1
  42. package/dist/components/ui-menu/view-options/view-options.component.d.ts +1 -1
  43. package/dist/components/ui-menu/vr-toggle/vr-toggle.component.d.ts +1 -1
  44. package/dist/components/ui-menu/zoom-controls/zoom-controls.component.d.ts +1 -1
  45. package/dist/esm2020/components/embed-menu/embed-menu.component.mjs +11 -7
  46. package/dist/esm2020/components/embed-menu/experiment-link/experiment-link.component.mjs +11 -7
  47. package/dist/esm2020/components/file-explorer/file-explorer.component.mjs +59 -11
  48. package/dist/esm2020/components/loader/loader.component.mjs +53 -11
  49. package/dist/esm2020/components/nav/nav.component.mjs +11 -7
  50. package/dist/esm2020/components/phoenix-menu/config/config-slider/config-slider.component.mjs +42 -22
  51. package/dist/esm2020/components/phoenix-menu/phoenix-menu-item/phoenix-menu-item.component.mjs +281 -12
  52. package/dist/esm2020/components/phoenix-menu/phoenix-menu.component.mjs +16 -9
  53. package/dist/esm2020/components/phoenix-ui.module.mjs +68 -67
  54. package/dist/esm2020/components/ring-loader/ring-loader.component.mjs +11 -7
  55. package/dist/esm2020/components/ui-menu/animate-camera/animate-camera.component.mjs +34 -9
  56. package/dist/esm2020/components/ui-menu/animate-event/animate-event.component.mjs +13 -7
  57. package/dist/esm2020/components/ui-menu/ar-toggle/ar-toggle.component.mjs +41 -7
  58. package/dist/esm2020/components/ui-menu/auto-rotate/auto-rotate.component.mjs +13 -7
  59. package/dist/esm2020/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.mjs +188 -9
  60. package/dist/esm2020/components/ui-menu/collections-info/collections-info.component.mjs +13 -7
  61. package/dist/esm2020/components/ui-menu/cycle-events/cycle-events.component.mjs +15 -9
  62. package/dist/esm2020/components/ui-menu/dark-theme/dark-theme.component.mjs +13 -7
  63. package/dist/esm2020/components/ui-menu/event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component.mjs +83 -13
  64. package/dist/esm2020/components/ui-menu/event-data-explorer/event-data-explorer.component.mjs +15 -9
  65. package/dist/esm2020/components/ui-menu/event-selector/event-selector.component.mjs +32 -7
  66. package/dist/esm2020/components/ui-menu/experiment-info/experiment-info.component.mjs +81 -13
  67. package/dist/esm2020/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.mjs +38 -9
  68. package/dist/esm2020/components/ui-menu/info-panel/info-panel.component.mjs +13 -7
  69. package/dist/esm2020/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.mjs +147 -46
  70. package/dist/esm2020/components/ui-menu/io-options/io-options.component.mjs +15 -9
  71. package/dist/esm2020/components/ui-menu/main-view-toggle/main-view-toggle.component.mjs +13 -7
  72. package/dist/esm2020/components/ui-menu/menu-toggle/menu-toggle.component.mjs +29 -15
  73. package/dist/esm2020/components/ui-menu/object-clipping/object-clipping.component.mjs +42 -11
  74. package/dist/esm2020/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.mjs +40 -9
  75. package/dist/esm2020/components/ui-menu/object-selection/object-selection.component.mjs +13 -7
  76. package/dist/esm2020/components/ui-menu/overlay/overlay.component.mjs +102 -23
  77. package/dist/esm2020/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.mjs +38 -12
  78. package/dist/esm2020/components/ui-menu/overlay-view/overlay-view.component.mjs +13 -7
  79. package/dist/esm2020/components/ui-menu/performance-toggle/performance-toggle.component.mjs +13 -7
  80. package/dist/esm2020/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.mjs +94 -10
  81. package/dist/esm2020/components/ui-menu/share-link/share-link.component.mjs +13 -7
  82. package/dist/esm2020/components/ui-menu/ss-mode/ss-mode.component.mjs +13 -7
  83. package/dist/esm2020/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.mjs +69 -12
  84. package/dist/esm2020/components/ui-menu/tree-menu/tree-menu.component.mjs +14 -7
  85. package/dist/esm2020/components/ui-menu/ui-menu-wrapper/ui-menu-wrapper.component.mjs +26 -7
  86. package/dist/esm2020/components/ui-menu/ui-menu.component.mjs +23 -11
  87. package/dist/esm2020/components/ui-menu/view-options/view-options.component.mjs +54 -7
  88. package/dist/esm2020/components/ui-menu/vr-toggle/vr-toggle.component.mjs +13 -7
  89. package/dist/esm2020/components/ui-menu/zoom-controls/zoom-controls.component.mjs +19 -7
  90. package/dist/esm2020/services/error-message-service.mjs +9 -9
  91. package/dist/esm2020/services/event-display.service.mjs +9 -9
  92. package/dist/esm2020/services/extras/attribute.pipe.mjs +9 -9
  93. package/dist/esm2020/services/extras/event-data-import.mjs +2 -1
  94. package/dist/esm2020/services/global-error-handler.mjs +6 -6
  95. package/dist/fesm2015/phoenix-ui-components.mjs +2235 -365
  96. package/dist/fesm2015/phoenix-ui-components.mjs.map +1 -1
  97. package/dist/fesm2020/phoenix-ui-components.mjs +1943 -499
  98. package/dist/fesm2020/phoenix-ui-components.mjs.map +1 -1
  99. package/dist/services/extras/event-data-import.d.ts +1 -0
  100. package/package.json +9 -6
@@ -14,7 +14,7 @@ import * as i4 from '@angular/material/checkbox';
14
14
  import { MatCheckboxModule } from '@angular/material/checkbox';
15
15
  import * as i5 from '@rp3e11/ngx-slider';
16
16
  import { NgxSliderModule } from '@rp3e11/ngx-slider';
17
- import { EventDisplay, SceneManager, PrettySymbols, JiveXMLLoader, CMSLoader, VRManager, XRSessionType, ARManager, phoenixURLOptions, ActiveVariable } from 'phoenix-event-display';
17
+ import { EventDisplay, SceneManager, PrettySymbols, Edm4hepJsonLoader, JiveXMLLoader, CMSLoader, readZipFile, VRManager, XRSessionType, ARManager, phoenixURLOptions, ActiveVariable } from 'phoenix-event-display';
18
18
  import * as i3$1 from '@angular/material/menu';
19
19
  import { MatMenuModule } from '@angular/material/menu';
20
20
  import * as i2$3 from '@angular/material/tooltip';
@@ -27,7 +27,6 @@ import * as i1$1 from '@angular/cdk/overlay';
27
27
  import { OverlayModule } from '@angular/cdk/overlay';
28
28
  import packageJson from 'phoenix-event-display/package.json';
29
29
  import { __awaiter } from 'tslib';
30
- import JSZip from 'jszip';
31
30
  import * as i1$2 from '@angular/material/dialog';
32
31
  import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
33
32
  import * as i4$1 from '@angular/material/icon';
@@ -36,6 +35,7 @@ import QRCode from 'qrcode';
36
35
  import * as i2$5 from '@angular/cdk/tree';
37
36
  import { NestedTreeControl, CdkTreeModule } from '@angular/cdk/tree';
38
37
  import { MatTreeNestedDataSource } from '@angular/material/tree';
38
+ import JSZip from 'jszip';
39
39
  import * as i5$1 from '@angular/material/tabs';
40
40
  import { MatTabsModule } from '@angular/material/tabs';
41
41
 
@@ -43,13 +43,33 @@ class NavComponent {
43
43
  constructor() { }
44
44
  ngOnInit() { }
45
45
  }
46
- NavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: NavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
47
- NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: NavComponent, selector: "app-nav", ngImport: i0, template: "<a id=\"mainLogo\" class=\"main-logo fixed-top p-2 mx-auto mt-2\" routerLink=\"/\">\n <img src=\"assets/images/logo-text.svg\" />\n</a>\n", styles: [".main-logo{width:140px;z-index:9999}.main-logo img{transition:all .5s}.main-logo:hover img{filter:drop-shadow(0px 0px 10px var(--phoenix-text-color));transition:all .5s}\n"], dependencies: [{ kind: "directive", type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: NavComponent, decorators: [{
46
+ NavComponent.ɵfac = function NavComponent_Factory(t) { return new (t || NavComponent)(); };
47
+ NavComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NavComponent, selectors: [["app-nav"]], decls: 2, vars: 0, consts: [["id", "mainLogo", "routerLink", "/", 1, "main-logo", "fixed-top", "p-2", "mx-auto", "mt-2"], ["src", "assets/images/logo-text.svg"]], template: function NavComponent_Template(rf, ctx) {
48
+ if (rf & 1) {
49
+ i0.ɵɵelementStart(0, "a", 0);
50
+ i0.ɵɵelement(1, "img", 1);
51
+ i0.ɵɵelementEnd();
52
+ }
53
+ }, dependencies: [i1.RouterLink], styles: [".main-logo[_ngcontent-%COMP%]{width:140px;z-index:9999}.main-logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{transition:all .5s}.main-logo[_ngcontent-%COMP%]:hover img[_ngcontent-%COMP%]{filter:drop-shadow(0px 0px 10px var(--phoenix-text-color));transition:all .5s}"] });
54
+ (function () {
55
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NavComponent, [{
49
56
  type: Component,
50
57
  args: [{ selector: 'app-nav', template: "<a id=\"mainLogo\" class=\"main-logo fixed-top p-2 mx-auto mt-2\" routerLink=\"/\">\n <img src=\"assets/images/logo-text.svg\" />\n</a>\n", styles: [".main-logo{width:140px;z-index:9999}.main-logo img{transition:all .5s}.main-logo:hover img{filter:drop-shadow(0px 0px 10px var(--phoenix-text-color));transition:all .5s}\n"] }]
51
- }], ctorParameters: function () { return []; } });
58
+ }], function () { return []; }, null);
59
+ })();
52
60
 
61
+ function ConfigSliderComponent_input_3_Template(rf, ctx) {
62
+ if (rf & 1) {
63
+ const _r2 = i0.ɵɵgetCurrentView();
64
+ i0.ɵɵelementStart(0, "input", 4);
65
+ i0.ɵɵlistener("input", function ConfigSliderComponent_input_3_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onValueChange($event.target.value)); });
66
+ i0.ɵɵelementEnd();
67
+ }
68
+ if (rf & 2) {
69
+ const ctx_r0 = i0.ɵɵnextContext();
70
+ i0.ɵɵproperty("value", ctx_r0.value);
71
+ }
72
+ }
53
73
  class ConfigSliderComponent {
54
74
  constructor() {
55
75
  this.value = 0;
@@ -60,17 +80,32 @@ class ConfigSliderComponent {
60
80
  this.onChange = new EventEmitter();
61
81
  }
62
82
  onValueChange(value) {
63
- if (value) {
64
- this.onChange.emit(value);
65
- }
83
+ value && this.onChange.emit(value);
66
84
  }
67
85
  }
68
- ConfigSliderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ConfigSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
69
- ConfigSliderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: ConfigSliderComponent, selector: "app-config-slider", inputs: { value: "value", min: "min", max: "max", step: "step", allowCustomValue: "allowCustomValue" }, outputs: { onChange: "onChange" }, ngImport: i0, template: "<div class=\"d-flex flex-row align-items-center\">\n <mat-slider\n #configSlider\n class=\"mx-2\"\n [value]=\"value\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n thumbLabel\n (click)=\"$event.stopPropagation()\"\n (input)=\"onValueChange($event.value)\"\n >\n </mat-slider>\n <input\n #configSliderInput\n *ngIf=\"allowCustomValue\"\n class=\"config-slider-input\"\n type=\"number\"\n [value]=\"value\"\n (input)=\"onValueChange($event.target.value)\"\n />\n</div>\n", styles: [".config-slider-input{background:transparent;color:var(--phoenix-text-color);border:none;border-bottom:1px solid var(--phoenix-text-color);width:25%;-moz-appearance:textfield}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "displayWith", "valueText", "vertical"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }] });
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ConfigSliderComponent, decorators: [{
86
+ ConfigSliderComponent.ɵfac = function ConfigSliderComponent_Factory(t) { return new (t || ConfigSliderComponent)(); };
87
+ ConfigSliderComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConfigSliderComponent, selectors: [["app-config-slider"]], inputs: { value: "value", min: "min", max: "max", step: "step", allowCustomValue: "allowCustomValue" }, outputs: { onChange: "onChange" }, decls: 4, vars: 5, consts: [[1, "d-flex", "flex-row", "align-items-center"], ["thumbLabel", "", 1, "mx-2", 3, "min", "max", "step"], ["matSliderThumb", "", 3, "value", "valueChange"], ["class", "config-slider-input", "type", "number", 3, "value", "input", 4, "ngIf"], ["type", "number", 1, "config-slider-input", 3, "value", "input"]], template: function ConfigSliderComponent_Template(rf, ctx) {
88
+ if (rf & 1) {
89
+ i0.ɵɵelementStart(0, "div", 0)(1, "mat-slider", 1)(2, "input", 2);
90
+ i0.ɵɵlistener("valueChange", function ConfigSliderComponent_Template_input_valueChange_2_listener($event) { return ctx.onValueChange($event); });
91
+ i0.ɵɵelementEnd()();
92
+ i0.ɵɵtemplate(3, ConfigSliderComponent_input_3_Template, 1, 1, "input", 3);
93
+ i0.ɵɵelementEnd();
94
+ }
95
+ if (rf & 2) {
96
+ i0.ɵɵadvance(1);
97
+ i0.ɵɵproperty("min", ctx.min)("max", ctx.max)("step", ctx.step);
98
+ i0.ɵɵadvance(1);
99
+ i0.ɵɵproperty("value", ctx.value);
100
+ i0.ɵɵadvance(1);
101
+ i0.ɵɵproperty("ngIf", ctx.allowCustomValue);
102
+ }
103
+ }, dependencies: [i2.NgIf, i2$1.MatSlider, i2$1.MatSliderThumb], styles: [".config-slider-input[_ngcontent-%COMP%]{background:transparent;color:var(--phoenix-text-color);border:none;border-bottom:1px solid var(--phoenix-text-color);width:25%;-moz-appearance:textfield}input[_ngcontent-%COMP%]::-webkit-outer-spin-button, input[_ngcontent-%COMP%]::-webkit-inner-spin-button{-webkit-appearance:none}"] });
104
+ (function () {
105
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConfigSliderComponent, [{
71
106
  type: Component,
72
- args: [{ selector: 'app-config-slider', template: "<div class=\"d-flex flex-row align-items-center\">\n <mat-slider\n #configSlider\n class=\"mx-2\"\n [value]=\"value\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n thumbLabel\n (click)=\"$event.stopPropagation()\"\n (input)=\"onValueChange($event.value)\"\n >\n </mat-slider>\n <input\n #configSliderInput\n *ngIf=\"allowCustomValue\"\n class=\"config-slider-input\"\n type=\"number\"\n [value]=\"value\"\n (input)=\"onValueChange($event.target.value)\"\n />\n</div>\n", styles: [".config-slider-input{background:transparent;color:var(--phoenix-text-color);border:none;border-bottom:1px solid var(--phoenix-text-color);width:25%;-moz-appearance:textfield}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none}\n"] }]
73
- }], propDecorators: { value: [{
107
+ args: [{ selector: 'app-config-slider', template: "<div class=\"d-flex flex-row align-items-center\">\n <mat-slider class=\"mx-2\" [min]=\"min\" [max]=\"max\" [step]=\"step\" thumbLabel>\n <input\n matSliderThumb\n [value]=\"value\"\n (valueChange)=\"onValueChange($event)\"\n />\n </mat-slider>\n <input\n *ngIf=\"allowCustomValue\"\n class=\"config-slider-input\"\n type=\"number\"\n [value]=\"value\"\n (input)=\"onValueChange($event.target.value)\"\n />\n</div>\n", styles: [".config-slider-input{background:transparent;color:var(--phoenix-text-color);border:none;border-bottom:1px solid var(--phoenix-text-color);width:25%;-moz-appearance:textfield}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none}\n"] }]
108
+ }], null, { value: [{
74
109
  type: Input
75
110
  }], min: [{
76
111
  type: Input
@@ -82,8 +117,311 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImpor
82
117
  type: Input
83
118
  }], onChange: [{
84
119
  type: Output
85
- }] } });
120
+ }] });
121
+ })();
86
122
 
123
+ const _c0$9 = ["phoenixMenuItem"];
124
+ function PhoenixMenuItemComponent_ng_container_3_ng_container_2_Template(rf, ctx) {
125
+ if (rf & 1) {
126
+ i0.ɵɵelementContainer(0);
127
+ }
128
+ }
129
+ function PhoenixMenuItemComponent_ng_container_3_Template(rf, ctx) {
130
+ if (rf & 1) {
131
+ const _r9 = i0.ɵɵgetCurrentView();
132
+ i0.ɵɵelementContainerStart(0);
133
+ i0.ɵɵelementStart(1, "mat-slide-toggle", 9);
134
+ i0.ɵɵlistener("change", function PhoenixMenuItemComponent_ng_container_3_Template_mat_slide_toggle_change_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r8.currentNode.toggleSelfAndDescendants($event.checked)); });
135
+ i0.ɵɵtemplate(2, PhoenixMenuItemComponent_ng_container_3_ng_container_2_Template, 1, 0, "ng-container", 10);
136
+ i0.ɵɵelementEnd();
137
+ i0.ɵɵelementContainerEnd();
138
+ }
139
+ if (rf & 2) {
140
+ const ctx_r1 = i0.ɵɵnextContext();
141
+ const _r2 = i0.ɵɵreference(5);
142
+ i0.ɵɵadvance(1);
143
+ i0.ɵɵproperty("checked", ctx_r1.currentNode.toggleState);
144
+ i0.ɵɵadvance(1);
145
+ i0.ɵɵproperty("ngTemplateOutlet", _r2);
146
+ }
147
+ }
148
+ function PhoenixMenuItemComponent_ng_template_4_span_1_Template(rf, ctx) {
149
+ if (rf & 1) {
150
+ i0.ɵɵelementStart(0, "span", 14);
151
+ i0.ɵɵnamespaceSVG();
152
+ i0.ɵɵelementStart(1, "svg");
153
+ i0.ɵɵelement(2, "use");
154
+ i0.ɵɵelementEnd()();
155
+ }
156
+ if (rf & 2) {
157
+ const ctx_r10 = i0.ɵɵnextContext(2);
158
+ i0.ɵɵadvance(2);
159
+ i0.ɵɵattributeInterpolate2("href", "assets/icons/", ctx_r10.currentNode.icon, ".svg#", ctx_r10.currentNode.icon, "");
160
+ }
161
+ }
162
+ function PhoenixMenuItemComponent_ng_template_4_Template(rf, ctx) {
163
+ if (rf & 1) {
164
+ i0.ɵɵelementStart(0, "span", 11);
165
+ i0.ɵɵtemplate(1, PhoenixMenuItemComponent_ng_template_4_span_1_Template, 3, 2, "span", 12);
166
+ i0.ɵɵelementStart(2, "span", 13);
167
+ i0.ɵɵtext(3);
168
+ i0.ɵɵelementEnd()();
169
+ }
170
+ if (rf & 2) {
171
+ const ctx_r3 = i0.ɵɵnextContext();
172
+ i0.ɵɵadvance(1);
173
+ i0.ɵɵproperty("ngIf", ctx_r3.currentNode.icon);
174
+ i0.ɵɵadvance(1);
175
+ i0.ɵɵproperty("title", ctx_r3.currentNode.name);
176
+ i0.ɵɵadvance(1);
177
+ i0.ɵɵtextInterpolate(ctx_r3.currentNode.name);
178
+ }
179
+ }
180
+ function PhoenixMenuItemComponent_div_7_div_4_Template(rf, ctx) {
181
+ if (rf & 1) {
182
+ const _r14 = i0.ɵɵgetCurrentView();
183
+ i0.ɵɵnamespaceSVG();
184
+ i0.ɵɵnamespaceHTML();
185
+ i0.ɵɵelementStart(0, "div", 20);
186
+ i0.ɵɵlistener("click", function PhoenixMenuItemComponent_div_7_div_4_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r13.currentNode.configActive = false); });
187
+ i0.ɵɵelementEnd();
188
+ }
189
+ }
190
+ const _c1$4 = function (a0) { return { "font-weight-bold w-100": a0 }; };
191
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_span_1_Template(rf, ctx) {
192
+ if (rf & 1) {
193
+ i0.ɵɵelementStart(0, "span", 26);
194
+ i0.ɵɵtext(1);
195
+ i0.ɵɵelementEnd();
196
+ }
197
+ if (rf & 2) {
198
+ const config_r15 = i0.ɵɵnextContext(2).$implicit;
199
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c1$4, config_r15.type === "label"));
200
+ i0.ɵɵadvance(1);
201
+ i0.ɵɵtextInterpolate1(" ", config_r15.label, " ");
202
+ }
203
+ }
204
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_mat_checkbox_1_Template(rf, ctx) {
205
+ if (rf & 1) {
206
+ const _r28 = i0.ɵɵgetCurrentView();
207
+ i0.ɵɵelementStart(0, "mat-checkbox", 9);
208
+ i0.ɵɵlistener("change", function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_mat_checkbox_1_Template_mat_checkbox_change_0_listener($event) { i0.ɵɵrestoreView(_r28); const config_r15 = i0.ɵɵnextContext(3).$implicit; config_r15.onChange($event.checked); return i0.ɵɵresetView(config_r15.isChecked = $event.checked); });
209
+ i0.ɵɵelementEnd();
210
+ }
211
+ if (rf & 2) {
212
+ const config_r15 = i0.ɵɵnextContext(3).$implicit;
213
+ i0.ɵɵproperty("checked", config_r15.isChecked);
214
+ }
215
+ }
216
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_app_config_slider_2_Template(rf, ctx) {
217
+ if (rf & 1) {
218
+ const _r32 = i0.ɵɵgetCurrentView();
219
+ i0.ɵɵelementStart(0, "app-config-slider", 34);
220
+ i0.ɵɵlistener("onChange", function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_app_config_slider_2_Template_app_config_slider_onChange_0_listener($event) { i0.ɵɵrestoreView(_r32); const config_r15 = i0.ɵɵnextContext(3).$implicit; config_r15.onChange($event); return i0.ɵɵresetView(config_r15.value = $event); });
221
+ i0.ɵɵelementEnd();
222
+ }
223
+ if (rf & 2) {
224
+ const config_r15 = i0.ɵɵnextContext(3).$implicit;
225
+ i0.ɵɵproperty("value", config_r15.value)("min", config_r15.min)("max", config_r15.max)("step", config_r15.step)("allowCustomValue", config_r15.allowCustomValue);
226
+ }
227
+ }
228
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_button_3_Template(rf, ctx) {
229
+ if (rf & 1) {
230
+ const _r36 = i0.ɵɵgetCurrentView();
231
+ i0.ɵɵelementStart(0, "button", 35);
232
+ i0.ɵɵlistener("click", function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r36); const config_r15 = i0.ɵɵnextContext(3).$implicit; return i0.ɵɵresetView(config_r15.onClick()); });
233
+ i0.ɵɵtext(1);
234
+ i0.ɵɵelementEnd();
235
+ }
236
+ if (rf & 2) {
237
+ const config_r15 = i0.ɵɵnextContext(3).$implicit;
238
+ i0.ɵɵadvance(1);
239
+ i0.ɵɵtextInterpolate1(" ", config_r15.label, " ");
240
+ }
241
+ }
242
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_input_4_Template(rf, ctx) {
243
+ if (rf & 1) {
244
+ const _r40 = i0.ɵɵgetCurrentView();
245
+ i0.ɵɵelementStart(0, "input", 36);
246
+ i0.ɵɵlistener("input", function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_input_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r40); const config_r15 = i0.ɵɵnextContext(3).$implicit; config_r15.onChange($event.target.value); return i0.ɵɵresetView(config_r15.color = $event.target.value); });
247
+ i0.ɵɵelementEnd();
248
+ }
249
+ if (rf & 2) {
250
+ const config_r15 = i0.ɵɵnextContext(3).$implicit;
251
+ i0.ɵɵproperty("value", config_r15.color);
252
+ }
253
+ }
254
+ const _c2$1 = function (a0, a1, a2) { return { floor: a0, ceil: a1, step: a2, animate: false }; };
255
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_div_5_Template(rf, ctx) {
256
+ if (rf & 1) {
257
+ const _r44 = i0.ɵɵgetCurrentView();
258
+ i0.ɵɵelementStart(0, "div", 37)(1, "div", 38)(2, "input", 39);
259
+ i0.ɵɵlistener("input", function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_div_5_Template_input_input_2_listener($event) { i0.ɵɵrestoreView(_r44); const config_r15 = i0.ɵɵnextContext(3).$implicit; config_r15.value = $event.target.value; return i0.ɵɵresetView(config_r15.onChange(config_r15)); });
260
+ i0.ɵɵelementEnd();
261
+ i0.ɵɵelementStart(3, "input", 40);
262
+ i0.ɵɵlistener("input", function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_div_5_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r44); const config_r15 = i0.ɵɵnextContext(3).$implicit; config_r15.highValue = $event.target.value; return i0.ɵɵresetView(config_r15.onChange(config_r15)); });
263
+ i0.ɵɵelementEnd()();
264
+ i0.ɵɵelementStart(4, "ngx-slider", 41);
265
+ i0.ɵɵlistener("valueChange", function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_div_5_Template_ngx_slider_valueChange_4_listener($event) { i0.ɵɵrestoreView(_r44); const config_r15 = i0.ɵɵnextContext(3).$implicit; return i0.ɵɵresetView(config_r15.value = $event); })("highValueChange", function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_div_5_Template_ngx_slider_highValueChange_4_listener($event) { i0.ɵɵrestoreView(_r44); const config_r15 = i0.ɵɵnextContext(3).$implicit; return i0.ɵɵresetView(config_r15.highValue = $event); })("userChange", function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_div_5_Template_ngx_slider_userChange_4_listener($event) { i0.ɵɵrestoreView(_r44); const config_r15 = i0.ɵɵnextContext(3).$implicit; return i0.ɵɵresetView(config_r15.onChange($event)); });
266
+ i0.ɵɵelementEnd()();
267
+ }
268
+ if (rf & 2) {
269
+ const config_r15 = i0.ɵɵnextContext(3).$implicit;
270
+ i0.ɵɵadvance(2);
271
+ i0.ɵɵproperty("value", config_r15.value);
272
+ i0.ɵɵadvance(1);
273
+ i0.ɵɵproperty("value", config_r15.highValue);
274
+ i0.ɵɵadvance(1);
275
+ i0.ɵɵproperty("value", config_r15.value)("highValue", config_r15.highValue)("options", i0.ɵɵpureFunction3(5, _c2$1, config_r15.min, config_r15.max, config_r15.step));
276
+ }
277
+ }
278
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_select_6_option_1_Template(rf, ctx) {
279
+ if (rf & 1) {
280
+ i0.ɵɵelementStart(0, "option", 44);
281
+ i0.ɵɵtext(1);
282
+ i0.ɵɵelementEnd();
283
+ }
284
+ if (rf & 2) {
285
+ const singleOption_r55 = ctx.$implicit;
286
+ i0.ɵɵproperty("value", singleOption_r55);
287
+ i0.ɵɵadvance(1);
288
+ i0.ɵɵtextInterpolate1(" ", singleOption_r55, " ");
289
+ }
290
+ }
291
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_select_6_Template(rf, ctx) {
292
+ if (rf & 1) {
293
+ const _r58 = i0.ɵɵgetCurrentView();
294
+ i0.ɵɵelementStart(0, "select", 42);
295
+ i0.ɵɵlistener("change", function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_select_6_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r58); const config_r15 = i0.ɵɵnextContext(3).$implicit; return i0.ɵɵresetView(config_r15.onChange($event.target.value)); });
296
+ i0.ɵɵtemplate(1, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_select_6_option_1_Template, 2, 2, "option", 43);
297
+ i0.ɵɵelementEnd();
298
+ }
299
+ if (rf & 2) {
300
+ const config_r15 = i0.ɵɵnextContext(3).$implicit;
301
+ i0.ɵɵadvance(1);
302
+ i0.ɵɵproperty("ngForOf", config_r15.options);
303
+ }
304
+ }
305
+ const _c3$1 = function (a0) { return { "p-0": a0 }; };
306
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_Template(rf, ctx) {
307
+ if (rf & 1) {
308
+ i0.ɵɵelementStart(0, "div", 27);
309
+ i0.ɵɵtemplate(1, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_mat_checkbox_1_Template, 1, 1, "mat-checkbox", 28);
310
+ i0.ɵɵtemplate(2, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_app_config_slider_2_Template, 1, 5, "app-config-slider", 29);
311
+ i0.ɵɵtemplate(3, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_button_3_Template, 2, 1, "button", 30);
312
+ i0.ɵɵtemplate(4, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_input_4_Template, 1, 1, "input", 31);
313
+ i0.ɵɵtemplate(5, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_div_5_Template, 5, 9, "div", 32);
314
+ i0.ɵɵtemplate(6, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_select_6_Template, 2, 1, "select", 33);
315
+ i0.ɵɵelementEnd();
316
+ }
317
+ if (rf & 2) {
318
+ const config_r15 = i0.ɵɵnextContext(2).$implicit;
319
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(7, _c3$1, config_r15.type === "button"));
320
+ i0.ɵɵadvance(1);
321
+ i0.ɵɵproperty("ngSwitchCase", "checkbox");
322
+ i0.ɵɵadvance(1);
323
+ i0.ɵɵproperty("ngSwitchCase", "slider");
324
+ i0.ɵɵadvance(1);
325
+ i0.ɵɵproperty("ngSwitchCase", "button");
326
+ i0.ɵɵadvance(1);
327
+ i0.ɵɵproperty("ngSwitchCase", "color");
328
+ i0.ɵɵadvance(1);
329
+ i0.ɵɵproperty("ngSwitchCase", "rangeSlider");
330
+ i0.ɵɵadvance(1);
331
+ i0.ɵɵproperty("ngSwitchCase", "select");
332
+ }
333
+ }
334
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_Template(rf, ctx) {
335
+ if (rf & 1) {
336
+ i0.ɵɵelementStart(0, "label", 23);
337
+ i0.ɵɵtemplate(1, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_span_1_Template, 2, 4, "span", 24);
338
+ i0.ɵɵtemplate(2, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_Template, 7, 9, "div", 25);
339
+ i0.ɵɵelementEnd();
340
+ }
341
+ if (rf & 2) {
342
+ const config_r15 = i0.ɵɵnextContext().$implicit;
343
+ i0.ɵɵadvance(1);
344
+ i0.ɵɵproperty("ngIf", config_r15.type !== "button");
345
+ i0.ɵɵadvance(1);
346
+ i0.ɵɵproperty("ngIf", config_r15.type !== "label");
347
+ }
348
+ }
349
+ function PhoenixMenuItemComponent_div_7_ng_container_6_Template(rf, ctx) {
350
+ if (rf & 1) {
351
+ i0.ɵɵelementContainerStart(0, 21);
352
+ i0.ɵɵtemplate(1, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_Template, 3, 2, "label", 22);
353
+ i0.ɵɵelementContainerEnd();
354
+ }
355
+ if (rf & 2) {
356
+ const config_r15 = ctx.$implicit;
357
+ i0.ɵɵproperty("ngSwitch", config_r15.type);
358
+ i0.ɵɵadvance(1);
359
+ i0.ɵɵproperty("ngIf", !config_r15.hidden);
360
+ }
361
+ }
362
+ const _c4$1 = function (a0) { return { "top.px": a0 }; };
363
+ function PhoenixMenuItemComponent_div_7_Template(rf, ctx) {
364
+ if (rf & 1) {
365
+ const _r63 = i0.ɵɵgetCurrentView();
366
+ i0.ɵɵelementStart(0, "div")(1, "button", 15);
367
+ i0.ɵɵlistener("click", function PhoenixMenuItemComponent_div_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r63); const ctx_r62 = i0.ɵɵnextContext(); ctx_r62.calculateConfigTop(); return i0.ɵɵresetView(ctx_r62.currentNode.configActive = !ctx_r62.currentNode.configActive); });
368
+ i0.ɵɵnamespaceSVG();
369
+ i0.ɵɵelementStart(2, "svg");
370
+ i0.ɵɵelement(3, "use", 16);
371
+ i0.ɵɵelementEnd()();
372
+ i0.ɵɵtemplate(4, PhoenixMenuItemComponent_div_7_div_4_Template, 1, 0, "div", 17);
373
+ i0.ɵɵnamespaceHTML();
374
+ i0.ɵɵelementStart(5, "div", 18);
375
+ i0.ɵɵtemplate(6, PhoenixMenuItemComponent_div_7_ng_container_6_Template, 2, 2, "ng-container", 19);
376
+ i0.ɵɵelementEnd()();
377
+ }
378
+ if (rf & 2) {
379
+ const ctx_r4 = i0.ɵɵnextContext();
380
+ i0.ɵɵadvance(4);
381
+ i0.ɵɵproperty("ngIf", ctx_r4.currentNode.configActive);
382
+ i0.ɵɵadvance(1);
383
+ i0.ɵɵproperty("hidden", !ctx_r4.currentNode.configActive)("ngStyle", i0.ɵɵpureFunction1(4, _c4$1, ctx_r4.configTop));
384
+ i0.ɵɵadvance(1);
385
+ i0.ɵɵproperty("ngForOf", ctx_r4.castConfigsToAny(ctx_r4.currentNode.configs));
386
+ }
387
+ }
388
+ const _c5$1 = function (a0) { return { expanded: a0 }; };
389
+ function PhoenixMenuItemComponent_button_8_Template(rf, ctx) {
390
+ if (rf & 1) {
391
+ const _r65 = i0.ɵɵgetCurrentView();
392
+ i0.ɵɵelementStart(0, "button", 45);
393
+ i0.ɵɵlistener("click", function PhoenixMenuItemComponent_button_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r65); const ctx_r64 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r64.currentNode.childrenActive = !ctx_r64.currentNode.childrenActive); });
394
+ i0.ɵɵnamespaceSVG();
395
+ i0.ɵɵelementStart(1, "svg");
396
+ i0.ɵɵelement(2, "use", 46);
397
+ i0.ɵɵelementEnd()();
398
+ }
399
+ if (rf & 2) {
400
+ const ctx_r5 = i0.ɵɵnextContext();
401
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c5$1, ctx_r5.currentNode.childrenActive));
402
+ }
403
+ }
404
+ function PhoenixMenuItemComponent_div_9_app_phoenix_menu_item_1_Template(rf, ctx) {
405
+ if (rf & 1) {
406
+ i0.ɵɵelement(0, "app-phoenix-menu-item", 49);
407
+ }
408
+ if (rf & 2) {
409
+ const childNode_r67 = ctx.$implicit;
410
+ i0.ɵɵproperty("currentNode", childNode_r67);
411
+ }
412
+ }
413
+ function PhoenixMenuItemComponent_div_9_Template(rf, ctx) {
414
+ if (rf & 1) {
415
+ i0.ɵɵelementStart(0, "div", 47);
416
+ i0.ɵɵtemplate(1, PhoenixMenuItemComponent_div_9_app_phoenix_menu_item_1_Template, 1, 1, "app-phoenix-menu-item", 48);
417
+ i0.ɵɵelementEnd();
418
+ }
419
+ if (rf & 2) {
420
+ const ctx_r6 = i0.ɵɵnextContext();
421
+ i0.ɵɵadvance(1);
422
+ i0.ɵɵproperty("ngForOf", ctx_r6.currentNode.children);
423
+ }
424
+ }
87
425
  class PhoenixMenuItemComponent {
88
426
  constructor(cdr) {
89
427
  this.cdr = cdr;
@@ -100,28 +438,73 @@ class PhoenixMenuItemComponent {
100
438
  return configs;
101
439
  }
102
440
  }
103
- PhoenixMenuItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: PhoenixMenuItemComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
104
- PhoenixMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: PhoenixMenuItemComponent, selector: "app-phoenix-menu-item", inputs: { currentNode: "currentNode" }, viewQueries: [{ propertyName: "phoenixMenuItem", first: true, predicate: ["phoenixMenuItem"], descendants: true }], ngImport: i0, template: "<div class=\"phoenix-menu-item\" #phoenixMenuItem>\n <div class=\"phoenix-menu-item-left align-items-center\">\n <!-- If the item has some toggle function -->\n <ng-container *ngIf=\"currentNode.onToggle; else nodeName\">\n <mat-slide-toggle\n [checked]=\"currentNode.toggleState\"\n (change)=\"currentNode.toggleSelfAndDescendants($event.checked)\"\n >\n <ng-container *ngTemplateOutlet=\"nodeName\"></ng-container>\n </mat-slide-toggle>\n </ng-container>\n <!-- If the item has no toggle function -->\n <ng-template #nodeName>\n <span class=\"d-flex w-100 align-items-center\">\n <span *ngIf=\"currentNode.icon\" class=\"icon-wrapper item-icon\">\n <svg>\n <use\n attr.href=\"assets/icons/{{ currentNode.icon }}.svg#{{\n currentNode.icon\n }}\"\n ></use>\n </svg>\n </span>\n <span class=\"item-name\" [title]=\"currentNode.name\">{{\n currentNode.name\n }}</span>\n </span>\n </ng-template>\n </div>\n <div class=\"phoenix-menu-item-right\">\n <div *ngIf=\"currentNode.configs.length > 0\">\n <button\n class=\"icon-wrapper icon-button btn-blank item-settings\"\n (click)=\"\n calculateConfigTop();\n currentNode.configActive = !currentNode.configActive\n \"\n >\n <svg>\n <use href=\"assets/icons/gear.svg#gear\"></use>\n </svg>\n </button>\n <div\n class=\"item-config-backdrop\"\n *ngIf=\"currentNode.configActive\"\n (click)=\"currentNode.configActive = false\"\n ></div>\n <div\n class=\"item-config\"\n [hidden]=\"!currentNode.configActive\"\n [ngStyle]=\"{ 'top.px': configTop }\"\n >\n <ng-container\n *ngFor=\"let config of castConfigsToAny(currentNode.configs)\"\n [ngSwitch]=\"config.type\"\n >\n <!-- Config types -->\n <label class=\"item-config-single\" *ngIf=\"!config.hidden\">\n <span\n class=\"item-config-label\"\n *ngIf=\"config.type !== 'button'\"\n [ngClass]=\"{ 'font-weight-bold w-100': config.type === 'label' }\"\n >\n {{ config.label }}\n </span>\n <div\n class=\"item-config-data\"\n [ngClass]=\"{ 'p-0': config.type === 'button' }\"\n *ngIf=\"config.type !== 'label'\"\n >\n <mat-checkbox\n *ngSwitchCase=\"'checkbox'\"\n [checked]=\"config.isChecked\"\n (change)=\"\n config.onChange($event.checked);\n config.isChecked = $event.checked\n \"\n ></mat-checkbox>\n\n <app-config-slider\n *ngSwitchCase=\"'slider'\"\n [value]=\"config.value\"\n (onChange)=\"config.onChange($event); config.value = $event\"\n [min]=\"config.min\"\n [max]=\"config.max\"\n [step]=\"config.step\"\n [allowCustomValue]=\"config.allowCustomValue\"\n >\n </app-config-slider>\n\n <button\n *ngSwitchCase=\"'button'\"\n class=\"w-100\"\n (click)=\"config.onClick()\"\n mat-button\n mat-stroked-button\n >\n {{ config.label }}\n </button>\n\n <input\n *ngSwitchCase=\"'color'\"\n type=\"color\"\n [value]=\"config.color\"\n (input)=\"\n config.onChange($event.target.value);\n config.color = $event.target.value\n \"\n />\n\n <div *ngSwitchCase=\"'rangeSlider'\" class=\"range-slider\">\n <div class=\"range-slider-inputs d-flex justify-content-between\">\n <input\n type=\"number\"\n placeholder=\"Min\"\n class=\"form-control form-control-sm\"\n [value]=\"config.value\"\n (input)=\"\n config.value = $event.target.value;\n config.onChange(config)\n \"\n />\n <input\n type=\"number\"\n placeholder=\"Max\"\n class=\"form-control form-control-sm\"\n [value]=\"config.highValue\"\n (input)=\"\n config.highValue = $event.target.value;\n config.onChange(config)\n \"\n />\n </div>\n <ngx-slider\n [(value)]=\"config.value\"\n [(highValue)]=\"config.highValue\"\n (userChange)=\"config.onChange($event)\"\n [options]=\"{\n floor: config.min,\n ceil: config.max,\n step: config.step,\n animate: false\n }\"\n ></ngx-slider>\n </div>\n\n <select\n *ngSwitchCase=\"'select'\"\n class=\"w-100\"\n (change)=\"config.onChange($event.target.value)\"\n >\n <option\n *ngFor=\"let singleOption of config.options\"\n [value]=\"singleOption\"\n >\n {{ singleOption }}\n </option>\n </select>\n </div>\n </label>\n <!-- Config types END -->\n </ng-container>\n </div>\n </div>\n <button\n class=\"icon-wrapper icon-button btn-blank item-expand\"\n *ngIf=\"currentNode.children.length > 0\"\n (click)=\"currentNode.childrenActive = !currentNode.childrenActive\"\n [ngClass]=\"{ expanded: currentNode.childrenActive }\"\n data-testid=\"dropdown\"\n >\n <svg>\n <use href=\"assets/icons/expand.svg#expand\"></use>\n </svg>\n </button>\n </div>\n</div>\n<div class=\"phoenix-menu-children\" *ngIf=\"currentNode.childrenActive\">\n <app-phoenix-menu-item\n *ngFor=\"let childNode of currentNode.children\"\n [currentNode]=\"childNode\"\n >\n </app-phoenix-menu-item>\n</div>\n", styles: [".phoenix-menu-item{width:100%;padding:.6rem;background:var(--phoenix-background-color-secondary);color:var(--phoenix-text-color);font-size:.8rem;transition:all .5s;display:flex;justify-content:space-between;align-items:center}.phoenix-menu-item-left{display:flex;justify-content:flex-start;min-width:0;padding-right:.5rem;overflow:hidden}.phoenix-menu-item-left .item-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.phoenix-menu-item-left .item-icon{margin-right:.2rem}.phoenix-menu-item-right{display:flex;justify-content:flex-end}.phoenix-menu-item-right .item-expand.expanded{transform:scaleY(-1)}.phoenix-menu-item-right .item-settings{margin-right:.2rem}.phoenix-menu-item-right .item-config-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:110}.phoenix-menu-item-right .item-config{position:absolute;margin-top:-5rem;right:100%;width:14rem;padding:.5rem;background:var(--phoenix-background-color-secondary);color:var(--phoenix-text-color-secondary);box-shadow:var(--phoenix-box-shadow);display:flex;flex-direction:column;z-index:120}.phoenix-menu-item-right .item-config>*{margin-bottom:.4rem}.phoenix-menu-item-right .item-config>*:last-child{margin-bottom:0}.phoenix-menu-item-right .item-config .item-config-single{display:flex;flex-direction:row}.phoenix-menu-item-right .item-config .item-config-single .item-config-label{width:30%}.phoenix-menu-item-right .item-config .item-config-single .item-config-data{flex-grow:1;padding-left:.5rem}.phoenix-menu-item .icon-wrapper{display:inline-block;width:1.3rem;height:1.3rem;padding:.23rem;transition:all .4s}.phoenix-menu-item .icon-wrapper.icon-button:hover{background:var(--phoenix-options-icon-bg);border-radius:40%;cursor:pointer}.phoenix-menu-item .icon-wrapper svg{width:100%;height:100%;vertical-align:top}.phoenix-menu-item .mat-slide-toggle-bar{width:30px!important}.phoenix-menu-item .mat-slide-toggle-thumb{width:15px!important;height:15px!important;position:absolute;top:2px}.phoenix-menu-item .mat-slider-horizontal{min-width:0;width:100%;height:20px}.phoenix-menu-item .mat-slider-horizontal .mat-slider-wrapper{top:10px}.phoenix-menu-item label.mat-checkbox-layout{margin:0}@media screen and (max-width: 768px){.phoenix-menu-item{font-size:.75rem;padding:.5rem}.phoenix-menu-item .icon-wrapper{width:1rem;height:1rem;padding:.15rem}}.phoenix-menu-children{margin-left:.5rem;border-left:1px solid var(--phoenix-accent)}.range-slider .range-slider-inputs{gap:20%}.range-slider .ngx-slider .ngx-slider-bar{background:var(--phoenix-text-color-secondary);height:.2rem}.range-slider .ngx-slider .ngx-slider-selection{background:var(--phoenix-accent)}.range-slider .ngx-slider .ngx-slider-pointer{width:1rem;height:1rem;top:-.45rem;bottom:0;background-color:var(--phoenix-accent)}.range-slider .ngx-slider .ngx-slider-pointer:after{display:none}.range-slider .ngx-slider .ngx-slider-bubble{color:var(--phoenix-text-color);font-size:.8rem}.range-slider .ngx-slider .ngx-slider-bubble.ngx-slider-limit{color:var(--phoenix-text-color-secondary)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i2$2.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"] }, { kind: "component", type: i3.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.SliderComponent, selector: "ngx-slider", inputs: ["value", "highValue", "options", "manualRefresh", "triggerFocus"], outputs: ["valueChange", "highValueChange", "userChangeStart", "userChange", "userChangeEnd"] }, { kind: "component", type: PhoenixMenuItemComponent, selector: "app-phoenix-menu-item", inputs: ["currentNode"] }, { kind: "component", type: ConfigSliderComponent, selector: "app-config-slider", inputs: ["value", "min", "max", "step", "allowCustomValue"], outputs: ["onChange"] }], encapsulation: i0.ViewEncapsulation.None });
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: PhoenixMenuItemComponent, decorators: [{
441
+ PhoenixMenuItemComponent.ɵfac = function PhoenixMenuItemComponent_Factory(t) { return new (t || PhoenixMenuItemComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
442
+ PhoenixMenuItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PhoenixMenuItemComponent, selectors: [["app-phoenix-menu-item"]], viewQuery: function PhoenixMenuItemComponent_Query(rf, ctx) {
443
+ if (rf & 1) {
444
+ i0.ɵɵviewQuery(_c0$9, 5);
445
+ }
446
+ if (rf & 2) {
447
+ let _t;
448
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.phoenixMenuItem = _t.first);
449
+ }
450
+ }, inputs: { currentNode: "currentNode" }, decls: 10, vars: 5, consts: [[1, "phoenix-menu-item"], ["phoenixMenuItem", ""], [1, "phoenix-menu-item-left", "align-items-center"], [4, "ngIf", "ngIfElse"], ["nodeName", ""], [1, "phoenix-menu-item-right"], [4, "ngIf"], ["class", "icon-wrapper icon-button btn-blank item-expand", "data-testid", "dropdown", 3, "ngClass", "click", 4, "ngIf"], ["class", "phoenix-menu-children", 4, "ngIf"], [3, "checked", "change"], [4, "ngTemplateOutlet"], [1, "d-flex", "w-100", "align-items-center"], ["class", "icon-wrapper item-icon", 4, "ngIf"], [1, "item-name", 3, "title"], [1, "icon-wrapper", "item-icon"], [1, "icon-wrapper", "icon-button", "btn-blank", "item-settings", 3, "click"], ["href", "assets/icons/gear.svg#gear"], ["class", "item-config-backdrop", 3, "click", 4, "ngIf"], [1, "item-config", 3, "hidden", "ngStyle"], [3, "ngSwitch", 4, "ngFor", "ngForOf"], [1, "item-config-backdrop", 3, "click"], [3, "ngSwitch"], ["class", "item-config-single", 4, "ngIf"], [1, "item-config-single"], ["class", "item-config-label", 3, "ngClass", 4, "ngIf"], ["class", "item-config-data", 3, "ngClass", 4, "ngIf"], [1, "item-config-label", 3, "ngClass"], [1, "item-config-data", 3, "ngClass"], [3, "checked", "change", 4, "ngSwitchCase"], [3, "value", "min", "max", "step", "allowCustomValue", "onChange", 4, "ngSwitchCase"], ["class", "w-100", "mat-button", "", "mat-stroked-button", "", 3, "click", 4, "ngSwitchCase"], ["type", "color", 3, "value", "input", 4, "ngSwitchCase"], ["class", "range-slider", 4, "ngSwitchCase"], ["class", "w-100", 3, "change", 4, "ngSwitchCase"], [3, "value", "min", "max", "step", "allowCustomValue", "onChange"], ["mat-button", "", "mat-stroked-button", "", 1, "w-100", 3, "click"], ["type", "color", 3, "value", "input"], [1, "range-slider"], [1, "range-slider-inputs", "d-flex", "justify-content-between"], ["type", "number", "placeholder", "Min", 1, "form-control", "form-control-sm", 3, "value", "input"], ["type", "number", "placeholder", "Max", 1, "form-control", "form-control-sm", 3, "value", "input"], [3, "value", "highValue", "options", "valueChange", "highValueChange", "userChange"], [1, "w-100", 3, "change"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], ["data-testid", "dropdown", 1, "icon-wrapper", "icon-button", "btn-blank", "item-expand", 3, "ngClass", "click"], ["href", "assets/icons/expand.svg#expand"], [1, "phoenix-menu-children"], [3, "currentNode", 4, "ngFor", "ngForOf"], [3, "currentNode"]], template: function PhoenixMenuItemComponent_Template(rf, ctx) {
451
+ if (rf & 1) {
452
+ i0.ɵɵelementStart(0, "div", 0, 1)(2, "div", 2);
453
+ i0.ɵɵtemplate(3, PhoenixMenuItemComponent_ng_container_3_Template, 3, 2, "ng-container", 3);
454
+ i0.ɵɵtemplate(4, PhoenixMenuItemComponent_ng_template_4_Template, 4, 3, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
455
+ i0.ɵɵelementEnd();
456
+ i0.ɵɵelementStart(6, "div", 5);
457
+ i0.ɵɵtemplate(7, PhoenixMenuItemComponent_div_7_Template, 7, 6, "div", 6);
458
+ i0.ɵɵtemplate(8, PhoenixMenuItemComponent_button_8_Template, 3, 3, "button", 7);
459
+ i0.ɵɵelementEnd()();
460
+ i0.ɵɵtemplate(9, PhoenixMenuItemComponent_div_9_Template, 2, 1, "div", 8);
461
+ }
462
+ if (rf & 2) {
463
+ const _r2 = i0.ɵɵreference(5);
464
+ i0.ɵɵadvance(3);
465
+ i0.ɵɵproperty("ngIf", ctx.currentNode.onToggle)("ngIfElse", _r2);
466
+ i0.ɵɵadvance(4);
467
+ i0.ɵɵproperty("ngIf", ctx.currentNode.configs.length > 0);
468
+ i0.ɵɵadvance(1);
469
+ i0.ɵɵproperty("ngIf", ctx.currentNode.children.length > 0);
470
+ i0.ɵɵadvance(1);
471
+ i0.ɵɵproperty("ngIf", ctx.currentNode.childrenActive);
472
+ }
473
+ }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i2.NgTemplateOutlet, i2.NgStyle, i2.NgSwitch, i2.NgSwitchCase, i2$2.MatButton, i3.MatSlideToggle, i4.MatCheckbox, i5.SliderComponent, PhoenixMenuItemComponent, ConfigSliderComponent], styles: [".phoenix-menu-item{width:100%;padding:.6rem;background:var(--phoenix-background-color-secondary);color:var(--phoenix-text-color);font-size:.8rem;transition:all .5s;display:flex;justify-content:space-between;align-items:center}.phoenix-menu-item-left{display:flex;justify-content:flex-start;min-width:0;padding-right:.5rem;overflow:hidden}.phoenix-menu-item-left .item-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.phoenix-menu-item-left .item-icon{margin-right:.2rem}.phoenix-menu-item-right{display:flex;justify-content:flex-end}.phoenix-menu-item-right .item-expand.expanded{transform:scaleY(-1)}.phoenix-menu-item-right .item-settings{margin-right:.2rem}.phoenix-menu-item-right .item-config-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:110}.phoenix-menu-item-right .item-config{position:absolute;margin-top:-5rem;right:100%;width:14rem;padding:.5rem;background:var(--phoenix-background-color-secondary);color:var(--phoenix-text-color-secondary);box-shadow:var(--phoenix-box-shadow);display:flex;flex-direction:column;z-index:120}.phoenix-menu-item-right .item-config>*{margin-bottom:.4rem}.phoenix-menu-item-right .item-config>*:last-child{margin-bottom:0}.phoenix-menu-item-right .item-config .item-config-single{display:flex;flex-direction:row}.phoenix-menu-item-right .item-config .item-config-single .item-config-label{width:30%}.phoenix-menu-item-right .item-config .item-config-single .item-config-data{flex-grow:1;padding-left:.5rem}.phoenix-menu-item .icon-wrapper{display:inline-block;width:1.3rem;height:1.3rem;padding:.23rem;transition:all .4s}.phoenix-menu-item .icon-wrapper.icon-button:hover{background:var(--phoenix-options-icon-bg);border-radius:40%;cursor:pointer}.phoenix-menu-item .icon-wrapper svg{width:100%;height:100%;vertical-align:top}.phoenix-menu-item .mat-slide-toggle-bar{width:30px!important}.phoenix-menu-item .mat-slide-toggle-thumb{width:15px!important;height:15px!important;position:absolute;top:2px}.phoenix-menu-item .mat-slider-horizontal{min-width:0;width:100%;height:20px}.phoenix-menu-item .mat-slider-horizontal .mat-slider-wrapper{top:10px}.phoenix-menu-item label.mat-checkbox-layout{margin:0}@media screen and (max-width: 768px){.phoenix-menu-item{font-size:.75rem;padding:.5rem}.phoenix-menu-item .icon-wrapper{width:1rem;height:1rem;padding:.15rem}}.phoenix-menu-children{margin-left:.5rem;border-left:1px solid var(--phoenix-accent)}.range-slider .range-slider-inputs{gap:20%}.range-slider .ngx-slider .ngx-slider-bar{background:var(--phoenix-text-color-secondary);height:.2rem}.range-slider .ngx-slider .ngx-slider-selection{background:var(--phoenix-accent)}.range-slider .ngx-slider .ngx-slider-pointer{width:1rem;height:1rem;top:-.45rem;bottom:0;background-color:var(--phoenix-accent)}.range-slider .ngx-slider .ngx-slider-pointer:after{display:none}.range-slider .ngx-slider .ngx-slider-bubble{color:var(--phoenix-text-color);font-size:.8rem}.range-slider .ngx-slider .ngx-slider-bubble.ngx-slider-limit{color:var(--phoenix-text-color-secondary)}\n"], encapsulation: 2 });
474
+ (function () {
475
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PhoenixMenuItemComponent, [{
106
476
  type: Component,
107
477
  args: [{ selector: 'app-phoenix-menu-item', encapsulation: ViewEncapsulation.None, template: "<div class=\"phoenix-menu-item\" #phoenixMenuItem>\n <div class=\"phoenix-menu-item-left align-items-center\">\n <!-- If the item has some toggle function -->\n <ng-container *ngIf=\"currentNode.onToggle; else nodeName\">\n <mat-slide-toggle\n [checked]=\"currentNode.toggleState\"\n (change)=\"currentNode.toggleSelfAndDescendants($event.checked)\"\n >\n <ng-container *ngTemplateOutlet=\"nodeName\"></ng-container>\n </mat-slide-toggle>\n </ng-container>\n <!-- If the item has no toggle function -->\n <ng-template #nodeName>\n <span class=\"d-flex w-100 align-items-center\">\n <span *ngIf=\"currentNode.icon\" class=\"icon-wrapper item-icon\">\n <svg>\n <use\n attr.href=\"assets/icons/{{ currentNode.icon }}.svg#{{\n currentNode.icon\n }}\"\n ></use>\n </svg>\n </span>\n <span class=\"item-name\" [title]=\"currentNode.name\">{{\n currentNode.name\n }}</span>\n </span>\n </ng-template>\n </div>\n <div class=\"phoenix-menu-item-right\">\n <div *ngIf=\"currentNode.configs.length > 0\">\n <button\n class=\"icon-wrapper icon-button btn-blank item-settings\"\n (click)=\"\n calculateConfigTop();\n currentNode.configActive = !currentNode.configActive\n \"\n >\n <svg>\n <use href=\"assets/icons/gear.svg#gear\"></use>\n </svg>\n </button>\n <div\n class=\"item-config-backdrop\"\n *ngIf=\"currentNode.configActive\"\n (click)=\"currentNode.configActive = false\"\n ></div>\n <div\n class=\"item-config\"\n [hidden]=\"!currentNode.configActive\"\n [ngStyle]=\"{ 'top.px': configTop }\"\n >\n <ng-container\n *ngFor=\"let config of castConfigsToAny(currentNode.configs)\"\n [ngSwitch]=\"config.type\"\n >\n <!-- Config types -->\n <label class=\"item-config-single\" *ngIf=\"!config.hidden\">\n <span\n class=\"item-config-label\"\n *ngIf=\"config.type !== 'button'\"\n [ngClass]=\"{ 'font-weight-bold w-100': config.type === 'label' }\"\n >\n {{ config.label }}\n </span>\n <div\n class=\"item-config-data\"\n [ngClass]=\"{ 'p-0': config.type === 'button' }\"\n *ngIf=\"config.type !== 'label'\"\n >\n <mat-checkbox\n *ngSwitchCase=\"'checkbox'\"\n [checked]=\"config.isChecked\"\n (change)=\"\n config.onChange($event.checked);\n config.isChecked = $event.checked\n \"\n ></mat-checkbox>\n\n <app-config-slider\n *ngSwitchCase=\"'slider'\"\n [value]=\"config.value\"\n (onChange)=\"config.onChange($event); config.value = $event\"\n [min]=\"config.min\"\n [max]=\"config.max\"\n [step]=\"config.step\"\n [allowCustomValue]=\"config.allowCustomValue\"\n >\n </app-config-slider>\n\n <button\n *ngSwitchCase=\"'button'\"\n class=\"w-100\"\n (click)=\"config.onClick()\"\n mat-button\n mat-stroked-button\n >\n {{ config.label }}\n </button>\n\n <input\n *ngSwitchCase=\"'color'\"\n type=\"color\"\n [value]=\"config.color\"\n (input)=\"\n config.onChange($event.target.value);\n config.color = $event.target.value\n \"\n />\n\n <div *ngSwitchCase=\"'rangeSlider'\" class=\"range-slider\">\n <div class=\"range-slider-inputs d-flex justify-content-between\">\n <input\n type=\"number\"\n placeholder=\"Min\"\n class=\"form-control form-control-sm\"\n [value]=\"config.value\"\n (input)=\"\n config.value = $event.target.value;\n config.onChange(config)\n \"\n />\n <input\n type=\"number\"\n placeholder=\"Max\"\n class=\"form-control form-control-sm\"\n [value]=\"config.highValue\"\n (input)=\"\n config.highValue = $event.target.value;\n config.onChange(config)\n \"\n />\n </div>\n <ngx-slider\n [(value)]=\"config.value\"\n [(highValue)]=\"config.highValue\"\n (userChange)=\"config.onChange($event)\"\n [options]=\"{\n floor: config.min,\n ceil: config.max,\n step: config.step,\n animate: false\n }\"\n ></ngx-slider>\n </div>\n\n <select\n *ngSwitchCase=\"'select'\"\n class=\"w-100\"\n (change)=\"config.onChange($event.target.value)\"\n >\n <option\n *ngFor=\"let singleOption of config.options\"\n [value]=\"singleOption\"\n >\n {{ singleOption }}\n </option>\n </select>\n </div>\n </label>\n <!-- Config types END -->\n </ng-container>\n </div>\n </div>\n <button\n class=\"icon-wrapper icon-button btn-blank item-expand\"\n *ngIf=\"currentNode.children.length > 0\"\n (click)=\"currentNode.childrenActive = !currentNode.childrenActive\"\n [ngClass]=\"{ expanded: currentNode.childrenActive }\"\n data-testid=\"dropdown\"\n >\n <svg>\n <use href=\"assets/icons/expand.svg#expand\"></use>\n </svg>\n </button>\n </div>\n</div>\n<div class=\"phoenix-menu-children\" *ngIf=\"currentNode.childrenActive\">\n <app-phoenix-menu-item\n *ngFor=\"let childNode of currentNode.children\"\n [currentNode]=\"childNode\"\n >\n </app-phoenix-menu-item>\n</div>\n", styles: [".phoenix-menu-item{width:100%;padding:.6rem;background:var(--phoenix-background-color-secondary);color:var(--phoenix-text-color);font-size:.8rem;transition:all .5s;display:flex;justify-content:space-between;align-items:center}.phoenix-menu-item-left{display:flex;justify-content:flex-start;min-width:0;padding-right:.5rem;overflow:hidden}.phoenix-menu-item-left .item-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.phoenix-menu-item-left .item-icon{margin-right:.2rem}.phoenix-menu-item-right{display:flex;justify-content:flex-end}.phoenix-menu-item-right .item-expand.expanded{transform:scaleY(-1)}.phoenix-menu-item-right .item-settings{margin-right:.2rem}.phoenix-menu-item-right .item-config-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:110}.phoenix-menu-item-right .item-config{position:absolute;margin-top:-5rem;right:100%;width:14rem;padding:.5rem;background:var(--phoenix-background-color-secondary);color:var(--phoenix-text-color-secondary);box-shadow:var(--phoenix-box-shadow);display:flex;flex-direction:column;z-index:120}.phoenix-menu-item-right .item-config>*{margin-bottom:.4rem}.phoenix-menu-item-right .item-config>*:last-child{margin-bottom:0}.phoenix-menu-item-right .item-config .item-config-single{display:flex;flex-direction:row}.phoenix-menu-item-right .item-config .item-config-single .item-config-label{width:30%}.phoenix-menu-item-right .item-config .item-config-single .item-config-data{flex-grow:1;padding-left:.5rem}.phoenix-menu-item .icon-wrapper{display:inline-block;width:1.3rem;height:1.3rem;padding:.23rem;transition:all .4s}.phoenix-menu-item .icon-wrapper.icon-button:hover{background:var(--phoenix-options-icon-bg);border-radius:40%;cursor:pointer}.phoenix-menu-item .icon-wrapper svg{width:100%;height:100%;vertical-align:top}.phoenix-menu-item .mat-slide-toggle-bar{width:30px!important}.phoenix-menu-item .mat-slide-toggle-thumb{width:15px!important;height:15px!important;position:absolute;top:2px}.phoenix-menu-item .mat-slider-horizontal{min-width:0;width:100%;height:20px}.phoenix-menu-item .mat-slider-horizontal .mat-slider-wrapper{top:10px}.phoenix-menu-item label.mat-checkbox-layout{margin:0}@media screen and (max-width: 768px){.phoenix-menu-item{font-size:.75rem;padding:.5rem}.phoenix-menu-item .icon-wrapper{width:1rem;height:1rem;padding:.15rem}}.phoenix-menu-children{margin-left:.5rem;border-left:1px solid var(--phoenix-accent)}.range-slider .range-slider-inputs{gap:20%}.range-slider .ngx-slider .ngx-slider-bar{background:var(--phoenix-text-color-secondary);height:.2rem}.range-slider .ngx-slider .ngx-slider-selection{background:var(--phoenix-accent)}.range-slider .ngx-slider .ngx-slider-pointer{width:1rem;height:1rem;top:-.45rem;bottom:0;background-color:var(--phoenix-accent)}.range-slider .ngx-slider .ngx-slider-pointer:after{display:none}.range-slider .ngx-slider .ngx-slider-bubble{color:var(--phoenix-text-color);font-size:.8rem}.range-slider .ngx-slider .ngx-slider-bubble.ngx-slider-limit{color:var(--phoenix-text-color-secondary)}\n"] }]
108
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { currentNode: [{
478
+ }], function () { return [{ type: i0.ChangeDetectorRef }]; }, { currentNode: [{
109
479
  type: Input
110
480
  }], phoenixMenuItem: [{
111
481
  type: ViewChild,
112
482
  args: ['phoenixMenuItem']
113
- }] } });
483
+ }] });
484
+ })();
114
485
 
115
486
  class PhoenixMenuComponent {
116
487
  }
117
- PhoenixMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: PhoenixMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
118
- PhoenixMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: PhoenixMenuComponent, selector: "app-phoenix-menu", inputs: { rootNode: "rootNode" }, ngImport: i0, template: "<div id=\"phoenixMenu\">\n <app-phoenix-menu-item [currentNode]=\"rootNode\"></app-phoenix-menu-item>\n</div>\n", styles: [":host{width:15rem;max-width:45%;position:absolute;top:5rem;right:1rem}#phoenixMenu{background:var(--phoenix-background-color-secondary);max-height:75vh;overflow-y:auto;box-shadow:var(--phoenix-box-shadow);z-index:100}@media screen and (max-width: 768px){#phoenixMenu{top:4rem}}\n"], dependencies: [{ kind: "component", type: PhoenixMenuItemComponent, selector: "app-phoenix-menu-item", inputs: ["currentNode"] }] });
119
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: PhoenixMenuComponent, decorators: [{
488
+ PhoenixMenuComponent.ɵfac = function PhoenixMenuComponent_Factory(t) { return new (t || PhoenixMenuComponent)(); };
489
+ PhoenixMenuComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PhoenixMenuComponent, selectors: [["app-phoenix-menu"]], inputs: { rootNode: "rootNode" }, decls: 2, vars: 1, consts: [["id", "phoenixMenu"], [3, "currentNode"]], template: function PhoenixMenuComponent_Template(rf, ctx) {
490
+ if (rf & 1) {
491
+ i0.ɵɵelementStart(0, "div", 0);
492
+ i0.ɵɵelement(1, "app-phoenix-menu-item", 1);
493
+ i0.ɵɵelementEnd();
494
+ }
495
+ if (rf & 2) {
496
+ i0.ɵɵadvance(1);
497
+ i0.ɵɵproperty("currentNode", ctx.rootNode);
498
+ }
499
+ }, dependencies: [PhoenixMenuItemComponent], styles: ["[_nghost-%COMP%]{width:15rem;max-width:45%;position:absolute;top:5rem;right:1rem}#phoenixMenu[_ngcontent-%COMP%]{background:var(--phoenix-background-color-secondary);max-height:75vh;overflow-y:auto;box-shadow:var(--phoenix-box-shadow);z-index:100}@media screen and (max-width: 768px){#phoenixMenu[_ngcontent-%COMP%]{top:4rem}}"] });
500
+ (function () {
501
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PhoenixMenuComponent, [{
120
502
  type: Component,
121
503
  args: [{ selector: 'app-phoenix-menu', template: "<div id=\"phoenixMenu\">\n <app-phoenix-menu-item [currentNode]=\"rootNode\"></app-phoenix-menu-item>\n</div>\n", styles: [":host{width:15rem;max-width:45%;position:absolute;top:5rem;right:1rem}#phoenixMenu{background:var(--phoenix-background-color-secondary);max-height:75vh;overflow-y:auto;box-shadow:var(--phoenix-box-shadow);z-index:100}@media screen and (max-width: 768px){#phoenixMenu{top:4rem}}\n"] }]
122
- }], propDecorators: { rootNode: [{
504
+ }], null, { rootNode: [{
123
505
  type: Input
124
- }] } });
506
+ }] });
507
+ })();
125
508
 
126
509
  /**
127
510
  * Service for all event display related functions.
@@ -134,26 +517,46 @@ class EventDisplayService extends EventDisplay {
134
517
  super();
135
518
  }
136
519
  }
137
- EventDisplayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: EventDisplayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
138
- EventDisplayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: EventDisplayService, providedIn: 'root' });
139
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: EventDisplayService, decorators: [{
520
+ EventDisplayService.ɵfac = function EventDisplayService_Factory(t) { return new (t || EventDisplayService)(); };
521
+ EventDisplayService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EventDisplayService, factory: EventDisplayService.ɵfac, providedIn: 'root' });
522
+ (function () {
523
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EventDisplayService, [{
140
524
  type: Injectable,
141
525
  args: [{
142
526
  providedIn: 'root',
143
527
  }]
144
- }], ctorParameters: function () { return []; } });
528
+ }], function () { return []; }, null);
529
+ })();
145
530
 
531
+ const _c0$8 = function (a0) { return { disabled: a0 }; };
532
+ const _c1$3 = function (a0) { return { "active-icon": a0 }; };
146
533
  class MenuToggleComponent {
147
534
  constructor() {
148
535
  this.disabled = false;
149
536
  }
150
537
  }
151
- MenuToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: MenuToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
152
- MenuToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", 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"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
153
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: MenuToggleComponent, decorators: [{
538
+ MenuToggleComponent.ɵfac = function MenuToggleComponent_Factory(t) { return new (t || MenuToggleComponent)(); };
539
+ MenuToggleComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MenuToggleComponent, selectors: [["app-menu-toggle"]], inputs: { icon: "icon", active: "active", tooltip: "tooltip", disabled: "disabled" }, decls: 3, vars: 9, consts: [["matTooltipPosition", "above", "matTooltipTouchGestures", "off", 1, "menu-toggle", 3, "ngClass", "matTooltip"], [1, "menu-toggle-icon", 3, "ngClass"]], template: function MenuToggleComponent_Template(rf, ctx) {
540
+ if (rf & 1) {
541
+ i0.ɵɵelementStart(0, "button", 0);
542
+ i0.ɵɵnamespaceSVG();
543
+ i0.ɵɵelementStart(1, "svg", 1);
544
+ i0.ɵɵelement(2, "use");
545
+ i0.ɵɵelementEnd()();
546
+ }
547
+ if (rf & 2) {
548
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(5, _c0$8, ctx.disabled))("matTooltip", ctx.tooltip);
549
+ i0.ɵɵadvance(1);
550
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(7, _c1$3, ctx.active));
551
+ i0.ɵɵadvance(1);
552
+ i0.ɵɵattributeInterpolate2("href", "assets/icons/", ctx.icon, ".svg#", ctx.icon, "");
553
+ }
554
+ }, dependencies: [i2.NgClass, i2$3.MatTooltip], styles: ["[_nghost-%COMP%]{display:flex;margin:0 .6rem}[_nghost-%COMP%] .menu-toggle[_ngcontent-%COMP%]{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}[_nghost-%COMP%] .menu-toggle-icon[_ngcontent-%COMP%]{width:100%;height:100%}[_nghost-%COMP%] .menu-toggle-icon.active-icon[_ngcontent-%COMP%]{--phoenix-options-icon-path: #00bcd4}[_nghost-%COMP%] .menu-toggle[_ngcontent-%COMP%]:hover{background-color:var(--phoenix-options-icon-bg);border-radius:40%;transition:all .4s}[_nghost-%COMP%] .menu-toggle.disabled[_ngcontent-%COMP%]{cursor:not-allowed;opacity:.4}"] });
555
+ (function () {
556
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MenuToggleComponent, [{
154
557
  type: Component,
155
558
  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"] }]
156
- }], propDecorators: { icon: [{
559
+ }], null, { icon: [{
157
560
  type: Input
158
561
  }], active: [{
159
562
  type: Input
@@ -161,8 +564,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImpor
161
564
  type: Input
162
565
  }], disabled: [{
163
566
  type: Input
164
- }] } });
567
+ }] });
568
+ })();
165
569
 
570
+ function AnimateCameraComponent_button_2_Template(rf, ctx) {
571
+ if (rf & 1) {
572
+ const _r4 = i0.ɵɵgetCurrentView();
573
+ i0.ɵɵelementStart(0, "button", 2);
574
+ i0.ɵɵlistener("click", function AnimateCameraComponent_button_2_Template_button_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r4); const preset_r2 = restoredCtx.$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.animatePreset(preset_r2)); });
575
+ i0.ɵɵtext(1);
576
+ i0.ɵɵelementEnd();
577
+ }
578
+ if (rf & 2) {
579
+ const preset_r2 = ctx.$implicit;
580
+ i0.ɵɵadvance(1);
581
+ i0.ɵɵtextInterpolate1(" ", preset_r2, " ");
582
+ }
583
+ }
166
584
  const defaultAnimationPresets = {
167
585
  'Preset 1': {
168
586
  positions: [
@@ -222,14 +640,33 @@ class AnimateCameraComponent {
222
640
  sceneManager.setGeometryOpacity(geometriesGroup, opacity);
223
641
  }
224
642
  }
225
- AnimateCameraComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: AnimateCameraComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
226
- AnimateCameraComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: AnimateCameraComponent, selector: "app-animate-camera", inputs: { animationPresets: "animationPresets" }, ngImport: i0, template: "<mat-menu #animationPresets>\n <button\n mat-menu-item\n *ngFor=\"let preset of animationPresetsKeys\"\n (click)=\"animatePreset(preset)\"\n >\n {{ preset }}\n </button>\n <button mat-menu-item (click)=\"animateCamera()\">Animate camera</button>\n</mat-menu>\n\n<app-menu-toggle\n [matMenuTriggerFor]=\"animationPresets\"\n tooltip=\"Preset animations\"\n icon=\"animate-camera\"\n>\n</app-menu-toggle>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i3$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
227
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: AnimateCameraComponent, decorators: [{
643
+ AnimateCameraComponent.ɵfac = function AnimateCameraComponent_Factory(t) { return new (t || AnimateCameraComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
644
+ AnimateCameraComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnimateCameraComponent, selectors: [["app-animate-camera"]], inputs: { animationPresets: "animationPresets" }, decls: 6, vars: 2, consts: [["animationPresets", ""], ["mat-menu-item", "", 3, "click", 4, "ngFor", "ngForOf"], ["mat-menu-item", "", 3, "click"], ["tooltip", "Preset animations", "icon", "animate-camera", 3, "matMenuTriggerFor"]], template: function AnimateCameraComponent_Template(rf, ctx) {
645
+ if (rf & 1) {
646
+ i0.ɵɵelementStart(0, "mat-menu", null, 0);
647
+ i0.ɵɵtemplate(2, AnimateCameraComponent_button_2_Template, 2, 1, "button", 1);
648
+ i0.ɵɵelementStart(3, "button", 2);
649
+ i0.ɵɵlistener("click", function AnimateCameraComponent_Template_button_click_3_listener() { return ctx.animateCamera(); });
650
+ i0.ɵɵtext(4, "Animate camera");
651
+ i0.ɵɵelementEnd()();
652
+ i0.ɵɵelement(5, "app-menu-toggle", 3);
653
+ }
654
+ if (rf & 2) {
655
+ const _r0 = i0.ɵɵreference(1);
656
+ i0.ɵɵadvance(2);
657
+ i0.ɵɵproperty("ngForOf", ctx.animationPresetsKeys);
658
+ i0.ɵɵadvance(3);
659
+ i0.ɵɵproperty("matMenuTriggerFor", _r0);
660
+ }
661
+ }, dependencies: [i2.NgForOf, i3$1.MatMenu, i3$1.MatMenuItem, i3$1.MatMenuTrigger, MenuToggleComponent] });
662
+ (function () {
663
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnimateCameraComponent, [{
228
664
  type: Component,
229
665
  args: [{ selector: 'app-animate-camera', template: "<mat-menu #animationPresets>\n <button\n mat-menu-item\n *ngFor=\"let preset of animationPresetsKeys\"\n (click)=\"animatePreset(preset)\"\n >\n {{ preset }}\n </button>\n <button mat-menu-item (click)=\"animateCamera()\">Animate camera</button>\n</mat-menu>\n\n<app-menu-toggle\n [matMenuTriggerFor]=\"animationPresets\"\n tooltip=\"Preset animations\"\n icon=\"animate-camera\"\n>\n</app-menu-toggle>\n" }]
230
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { animationPresets: [{
666
+ }], function () { return [{ type: EventDisplayService }]; }, { animationPresets: [{
231
667
  type: Input
232
- }] } });
668
+ }] });
669
+ })();
233
670
 
234
671
  class AnimateEventComponent {
235
672
  constructor(eventDisplay) {
@@ -245,12 +682,23 @@ class AnimateEventComponent {
245
682
  }
246
683
  }
247
684
  }
248
- AnimateEventComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: AnimateEventComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
249
- AnimateEventComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: AnimateEventComponent, selector: "app-animate-event", ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Animate event\"\n icon=\"event-folder\"\n [active]=\"isAnimating\"\n (click)=\"toggleAnimateEvent()\"\n>\n</app-menu-toggle>\n", styles: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
250
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: AnimateEventComponent, decorators: [{
685
+ AnimateEventComponent.ɵfac = function AnimateEventComponent_Factory(t) { return new (t || AnimateEventComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
686
+ AnimateEventComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnimateEventComponent, selectors: [["app-animate-event"]], decls: 1, vars: 1, consts: [["tooltip", "Animate event", "icon", "event-folder", 3, "active", "click"]], template: function AnimateEventComponent_Template(rf, ctx) {
687
+ if (rf & 1) {
688
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
689
+ i0.ɵɵlistener("click", function AnimateEventComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleAnimateEvent(); });
690
+ i0.ɵɵelementEnd();
691
+ }
692
+ if (rf & 2) {
693
+ i0.ɵɵproperty("active", ctx.isAnimating);
694
+ }
695
+ }, dependencies: [MenuToggleComponent] });
696
+ (function () {
697
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnimateEventComponent, [{
251
698
  type: Component,
252
699
  args: [{ selector: 'app-animate-event', template: "<app-menu-toggle\n tooltip=\"Animate event\"\n icon=\"event-folder\"\n [active]=\"isAnimating\"\n (click)=\"toggleAnimateEvent()\"\n>\n</app-menu-toggle>\n" }]
253
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
700
+ }], function () { return [{ type: EventDisplayService }]; }, null);
701
+ })();
254
702
 
255
703
  class AutoRotateComponent {
256
704
  constructor(eventDisplay) {
@@ -262,13 +710,93 @@ class AutoRotateComponent {
262
710
  this.eventDisplay.getUIManager().setAutoRotate(this.autoRotate);
263
711
  }
264
712
  }
265
- AutoRotateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: AutoRotateComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
266
- AutoRotateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: AutoRotateComponent, selector: "app-auto-rotate", ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Auto rotate\"\n icon=\"rotate\"\n [active]=\"autoRotate\"\n (click)=\"toggleAutoRotate()\"\n>\n</app-menu-toggle>\n", styles: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
267
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: AutoRotateComponent, decorators: [{
713
+ AutoRotateComponent.ɵfac = function AutoRotateComponent_Factory(t) { return new (t || AutoRotateComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
714
+ AutoRotateComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AutoRotateComponent, selectors: [["app-auto-rotate"]], decls: 1, vars: 1, consts: [["tooltip", "Auto rotate", "icon", "rotate", 3, "active", "click"]], template: function AutoRotateComponent_Template(rf, ctx) {
715
+ if (rf & 1) {
716
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
717
+ i0.ɵɵlistener("click", function AutoRotateComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleAutoRotate(); });
718
+ i0.ɵɵelementEnd();
719
+ }
720
+ if (rf & 2) {
721
+ i0.ɵɵproperty("active", ctx.autoRotate);
722
+ }
723
+ }, dependencies: [MenuToggleComponent] });
724
+ (function () {
725
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AutoRotateComponent, [{
268
726
  type: Component,
269
727
  args: [{ selector: 'app-auto-rotate', template: "<app-menu-toggle\n tooltip=\"Auto rotate\"\n icon=\"rotate\"\n [active]=\"autoRotate\"\n (click)=\"toggleAutoRotate()\"\n>\n</app-menu-toggle>\n" }]
270
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
728
+ }], function () { return [{ type: EventDisplayService }]; }, null);
729
+ })();
271
730
 
731
+ const _c0$7 = ["overlayCard"];
732
+ const _c1$2 = ["resizeHandleCorner"];
733
+ function OverlayComponent_div_2_div_1_Template(rf, ctx) {
734
+ if (rf & 1) {
735
+ i0.ɵɵelementStart(0, "div", 10);
736
+ i0.ɵɵnamespaceSVG();
737
+ i0.ɵɵelementStart(1, "svg");
738
+ i0.ɵɵelement(2, "use");
739
+ i0.ɵɵelementEnd()();
740
+ }
741
+ if (rf & 2) {
742
+ const ctx_r4 = i0.ɵɵnextContext(2);
743
+ i0.ɵɵadvance(2);
744
+ i0.ɵɵattributeInterpolate2("href", "assets/icons/", ctx_r4.icon, ".svg#", ctx_r4.icon, "");
745
+ }
746
+ }
747
+ const _c2 = function (a0) { return { "with-body": a0 }; };
748
+ const _c3 = function (a0) { return { expand: a0 }; };
749
+ function OverlayComponent_div_2_Template(rf, ctx) {
750
+ if (rf & 1) {
751
+ const _r6 = i0.ɵɵgetCurrentView();
752
+ i0.ɵɵelementStart(0, "div", 5);
753
+ i0.ɵɵtemplate(1, OverlayComponent_div_2_div_1_Template, 3, 2, "div", 6);
754
+ i0.ɵɵelementStart(2, "h5", 7);
755
+ i0.ɵɵtext(3);
756
+ i0.ɵɵelementEnd();
757
+ i0.ɵɵelementStart(4, "button", 8);
758
+ i0.ɵɵlistener("click", function OverlayComponent_div_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r6); const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.showBody = !ctx_r5.showBody); });
759
+ i0.ɵɵnamespaceSVG();
760
+ i0.ɵɵelementStart(5, "svg");
761
+ i0.ɵɵelement(6, "use", 9);
762
+ i0.ɵɵelementEnd()()();
763
+ }
764
+ if (rf & 2) {
765
+ const ctx_r1 = i0.ɵɵnextContext();
766
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c2, ctx_r1.showBody));
767
+ i0.ɵɵadvance(1);
768
+ i0.ɵɵproperty("ngIf", ctx_r1.icon);
769
+ i0.ɵɵadvance(2);
770
+ i0.ɵɵtextInterpolate(ctx_r1.overlayTitle);
771
+ i0.ɵɵadvance(1);
772
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(6, _c3, ctx_r1.showBody));
773
+ }
774
+ }
775
+ const _c4 = function (a0) { return { "transparent-bg": a0 }; };
776
+ function OverlayComponent_div_3_Template(rf, ctx) {
777
+ if (rf & 1) {
778
+ i0.ɵɵelementStart(0, "div", 11);
779
+ i0.ɵɵprojection(1);
780
+ i0.ɵɵelementEnd();
781
+ }
782
+ if (rf & 2) {
783
+ const ctx_r2 = i0.ɵɵnextContext();
784
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c4, ctx_r2.transparentBody));
785
+ }
786
+ }
787
+ function OverlayComponent_span_4_Template(rf, ctx) {
788
+ if (rf & 1) {
789
+ const _r9 = i0.ɵɵgetCurrentView();
790
+ i0.ɵɵelementStart(0, "span", 12, 13);
791
+ i0.ɵɵlistener("cdkDragMoved", function OverlayComponent_span_4_Template_span_cdkDragMoved_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r8.onResize()); });
792
+ i0.ɵɵelementEnd();
793
+ }
794
+ if (rf & 2) {
795
+ const ctx_r3 = i0.ɵɵnextContext();
796
+ i0.ɵɵproperty("hidden", !ctx_r3.showBody);
797
+ }
798
+ }
799
+ const _c5 = ["*"];
272
800
  /**
273
801
  * Component for overlay panel.
274
802
  */
@@ -339,12 +867,41 @@ class OverlayComponent {
339
867
  this.resizeHandleCorner.nativeElement.style.transform = `translate3d(${translateX}px, ${translateY}px, 0)`;
340
868
  }
341
869
  }
342
- OverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: OverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
343
- OverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: OverlayComponent, selector: "app-overlay", inputs: { overlayTitle: "overlayTitle", active: "active", icon: "icon", resizable: "resizable", transparentBody: "transparentBody" }, viewQueries: [{ propertyName: "overlayCard", first: true, predicate: ["overlayCard"], descendants: true }, { propertyName: "resizeHandleCorner", first: true, predicate: ["resizeHandleCorner"], descendants: true }], ngImport: i0, template: "<div\n #overlayCard\n class=\"overlay-card card\"\n [hidden]=\"!active\"\n cdkDrag\n cdkDragBoundary=\"body\"\n>\n <div\n class=\"card-header d-flex justify-content-between\"\n [ngClass]=\"{ 'with-body': showBody }\"\n cdkDragHandle\n *ngIf=\"overlayTitle\"\n >\n <div class=\"align-self-center card-icon\" *ngIf=\"icon\">\n <svg>\n <use attr.href=\"assets/icons/{{ icon }}.svg#{{ icon }}\"></use>\n </svg>\n </div>\n <h5 class=\"align-self-center m-0 px-2\">{{ overlayTitle }}</h5>\n <button\n class=\"align-self-center card-icon btn-blank expandCollapse\"\n matTooltip=\"Expand / Collapse\"\n matTooltipPosition=\"right\"\n [ngClass]=\"{ expand: showBody }\"\n (click)=\"showBody = !showBody\"\n >\n <svg>\n <use href=\"assets/icons/expand.svg#expand\"></use>\n </svg>\n </button>\n </div>\n <div\n class=\"overlay-card-content\"\n *ngIf=\"showBody\"\n [ngClass]=\"{ 'transparent-bg': transparentBody }\"\n >\n <ng-content></ng-content>\n </div>\n <!-- Making the overlay resizable -->\n <span\n #resizeHandleCorner\n class=\"resize-handle corner\"\n *ngIf=\"resizable\"\n [hidden]=\"!showBody\"\n cdkDrag\n (cdkDragMoved)=\"onResize()\"\n ></span>\n</div>\n", styles: [".overlay-card.card{color:var(--phoenix-text-color);background:none;max-width:100vw;font-size:12px;min-width:300px;height:100%;max-height:70vh;box-shadow:none;border:none;position:relative;z-index:200}.overlay-card.card .card-header{width:12rem;background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);padding:.4rem .8rem;border-radius:10px;border:none;cursor:move;text-align:center;transition:all .2s}.overlay-card.card .card-header.with-body{border-bottom-left-radius:0;border-bottom-right-radius:0}.overlay-card.card .card-header .card-icon{display:flex;height:.7rem;width:.7rem}.overlay-card.card .card-header h5{font-size:.9rem}.overlay-card.card .card-header .expandCollapse{cursor:pointer;transition:all .2s}.overlay-card.card .card-header .expandCollapse.expand{transform:scaleY(-1)}.overlay-card.card .card-header .expandCollapse svg{width:100%;height:100%}.overlay-card.card .overlay-card-content{background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);border-radius:0 10px 10px;overflow:auto;height:100%}.overlay-card.card .overlay-card-content.transparent-bg{background:none}.overlay-card.card .list-group{color:var(--phoenix-text-color-secondary);background:var(--phoenix-background-color-secondary);max-height:40vh;overflow:auto}.overlay-card.card .list-group .list-group-item{background-color:var(--phoenix-background-color-secondary);border-color:var(--phoenix-border)}.overlay-card.card .resize-handle{width:1rem;height:1rem;cursor:nwse-resize;position:absolute}.overlay-card.card .resize-handle.corner{border-right:.2rem solid var(--phoenix-text-color);border-bottom:.2rem solid var(--phoenix-text-color)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2$4.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], encapsulation: i0.ViewEncapsulation.None });
344
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: OverlayComponent, decorators: [{
870
+ OverlayComponent.ɵfac = function OverlayComponent_Factory(t) { return new (t || OverlayComponent)(); };
871
+ OverlayComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OverlayComponent, selectors: [["app-overlay"]], viewQuery: function OverlayComponent_Query(rf, ctx) {
872
+ if (rf & 1) {
873
+ i0.ɵɵviewQuery(_c0$7, 5);
874
+ i0.ɵɵviewQuery(_c1$2, 5);
875
+ }
876
+ if (rf & 2) {
877
+ let _t;
878
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.overlayCard = _t.first);
879
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.resizeHandleCorner = _t.first);
880
+ }
881
+ }, inputs: { overlayTitle: "overlayTitle", active: "active", icon: "icon", resizable: "resizable", transparentBody: "transparentBody" }, ngContentSelectors: _c5, decls: 5, vars: 4, consts: [["cdkDrag", "", "cdkDragBoundary", "body", 1, "overlay-card", "card", 3, "hidden"], ["overlayCard", ""], ["class", "card-header d-flex justify-content-between", "cdkDragHandle", "", 3, "ngClass", 4, "ngIf"], ["class", "overlay-card-content", 3, "ngClass", 4, "ngIf"], ["class", "resize-handle corner", "cdkDrag", "", 3, "hidden", "cdkDragMoved", 4, "ngIf"], ["cdkDragHandle", "", 1, "card-header", "d-flex", "justify-content-between", 3, "ngClass"], ["class", "align-self-center card-icon", 4, "ngIf"], [1, "align-self-center", "m-0", "px-2"], ["matTooltip", "Expand / Collapse", "matTooltipPosition", "right", 1, "align-self-center", "card-icon", "btn-blank", "expandCollapse", 3, "ngClass", "click"], ["href", "assets/icons/expand.svg#expand"], [1, "align-self-center", "card-icon"], [1, "overlay-card-content", 3, "ngClass"], ["cdkDrag", "", 1, "resize-handle", "corner", 3, "hidden", "cdkDragMoved"], ["resizeHandleCorner", ""]], template: function OverlayComponent_Template(rf, ctx) {
882
+ if (rf & 1) {
883
+ i0.ɵɵprojectionDef();
884
+ i0.ɵɵelementStart(0, "div", 0, 1);
885
+ i0.ɵɵtemplate(2, OverlayComponent_div_2_Template, 7, 8, "div", 2);
886
+ i0.ɵɵtemplate(3, OverlayComponent_div_3_Template, 2, 3, "div", 3);
887
+ i0.ɵɵtemplate(4, OverlayComponent_span_4_Template, 2, 1, "span", 4);
888
+ i0.ɵɵelementEnd();
889
+ }
890
+ if (rf & 2) {
891
+ i0.ɵɵproperty("hidden", !ctx.active);
892
+ i0.ɵɵadvance(2);
893
+ i0.ɵɵproperty("ngIf", ctx.overlayTitle);
894
+ i0.ɵɵadvance(1);
895
+ i0.ɵɵproperty("ngIf", ctx.showBody);
896
+ i0.ɵɵadvance(1);
897
+ i0.ɵɵproperty("ngIf", ctx.resizable);
898
+ }
899
+ }, dependencies: [i2.NgClass, i2.NgIf, i2$4.CdkDrag, i2$4.CdkDragHandle, i2$3.MatTooltip], styles: [".overlay-card.card{color:var(--phoenix-text-color);background:none;max-width:100vw;font-size:12px;min-width:300px;height:100%;max-height:70vh;box-shadow:none;border:none;position:relative;z-index:200}.overlay-card.card .card-header{width:12rem;background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);padding:.4rem .8rem;border-radius:10px;border:none;cursor:move;text-align:center;transition:all .2s}.overlay-card.card .card-header.with-body{border-bottom-left-radius:0;border-bottom-right-radius:0}.overlay-card.card .card-header .card-icon{display:flex;height:.7rem;width:.7rem}.overlay-card.card .card-header h5{font-size:.9rem}.overlay-card.card .card-header .expandCollapse{cursor:pointer;transition:all .2s}.overlay-card.card .card-header .expandCollapse.expand{transform:scaleY(-1)}.overlay-card.card .card-header .expandCollapse svg{width:100%;height:100%}.overlay-card.card .overlay-card-content{background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);border-radius:0 10px 10px;overflow:auto;height:100%}.overlay-card.card .overlay-card-content.transparent-bg{background:none}.overlay-card.card .list-group{color:var(--phoenix-text-color-secondary);background:var(--phoenix-background-color-secondary);max-height:40vh;overflow:auto}.overlay-card.card .list-group .list-group-item{background-color:var(--phoenix-background-color-secondary);border-color:var(--phoenix-border)}.overlay-card.card .resize-handle{width:1rem;height:1rem;cursor:nwse-resize;position:absolute}.overlay-card.card .resize-handle.corner{border-right:.2rem solid var(--phoenix-text-color);border-bottom:.2rem solid var(--phoenix-text-color)}\n"], encapsulation: 2 });
900
+ (function () {
901
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OverlayComponent, [{
345
902
  type: Component,
346
903
  args: [{ selector: 'app-overlay', encapsulation: ViewEncapsulation.None, template: "<div\n #overlayCard\n class=\"overlay-card card\"\n [hidden]=\"!active\"\n cdkDrag\n cdkDragBoundary=\"body\"\n>\n <div\n class=\"card-header d-flex justify-content-between\"\n [ngClass]=\"{ 'with-body': showBody }\"\n cdkDragHandle\n *ngIf=\"overlayTitle\"\n >\n <div class=\"align-self-center card-icon\" *ngIf=\"icon\">\n <svg>\n <use attr.href=\"assets/icons/{{ icon }}.svg#{{ icon }}\"></use>\n </svg>\n </div>\n <h5 class=\"align-self-center m-0 px-2\">{{ overlayTitle }}</h5>\n <button\n class=\"align-self-center card-icon btn-blank expandCollapse\"\n matTooltip=\"Expand / Collapse\"\n matTooltipPosition=\"right\"\n [ngClass]=\"{ expand: showBody }\"\n (click)=\"showBody = !showBody\"\n >\n <svg>\n <use href=\"assets/icons/expand.svg#expand\"></use>\n </svg>\n </button>\n </div>\n <div\n class=\"overlay-card-content\"\n *ngIf=\"showBody\"\n [ngClass]=\"{ 'transparent-bg': transparentBody }\"\n >\n <ng-content></ng-content>\n </div>\n <!-- Making the overlay resizable -->\n <span\n #resizeHandleCorner\n class=\"resize-handle corner\"\n *ngIf=\"resizable\"\n [hidden]=\"!showBody\"\n cdkDrag\n (cdkDragMoved)=\"onResize()\"\n ></span>\n</div>\n", styles: [".overlay-card.card{color:var(--phoenix-text-color);background:none;max-width:100vw;font-size:12px;min-width:300px;height:100%;max-height:70vh;box-shadow:none;border:none;position:relative;z-index:200}.overlay-card.card .card-header{width:12rem;background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);padding:.4rem .8rem;border-radius:10px;border:none;cursor:move;text-align:center;transition:all .2s}.overlay-card.card .card-header.with-body{border-bottom-left-radius:0;border-bottom-right-radius:0}.overlay-card.card .card-header .card-icon{display:flex;height:.7rem;width:.7rem}.overlay-card.card .card-header h5{font-size:.9rem}.overlay-card.card .card-header .expandCollapse{cursor:pointer;transition:all .2s}.overlay-card.card .card-header .expandCollapse.expand{transform:scaleY(-1)}.overlay-card.card .card-header .expandCollapse svg{width:100%;height:100%}.overlay-card.card .overlay-card-content{background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);border-radius:0 10px 10px;overflow:auto;height:100%}.overlay-card.card .overlay-card-content.transparent-bg{background:none}.overlay-card.card .list-group{color:var(--phoenix-text-color-secondary);background:var(--phoenix-background-color-secondary);max-height:40vh;overflow:auto}.overlay-card.card .list-group .list-group-item{background-color:var(--phoenix-background-color-secondary);border-color:var(--phoenix-border)}.overlay-card.card .resize-handle{width:1rem;height:1rem;cursor:nwse-resize;position:absolute}.overlay-card.card .resize-handle.corner{border-right:.2rem solid var(--phoenix-text-color);border-bottom:.2rem solid var(--phoenix-text-color)}\n"] }]
347
- }], propDecorators: { overlayTitle: [{
904
+ }], null, { overlayTitle: [{
348
905
  type: Input
349
906
  }], active: [{
350
907
  type: Input
@@ -360,8 +917,207 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImpor
360
917
  }], resizeHandleCorner: [{
361
918
  type: ViewChild,
362
919
  args: ['resizeHandleCorner']
363
- }] } });
920
+ }] });
921
+ })();
364
922
 
923
+ function CollectionsInfoOverlayComponent_div_1_div_1_option_10_Template(rf, ctx) {
924
+ if (rf & 1) {
925
+ i0.ɵɵelementStart(0, "option", 15);
926
+ i0.ɵɵtext(1);
927
+ i0.ɵɵelementEnd();
928
+ }
929
+ if (rf & 2) {
930
+ const collection_r6 = ctx.$implicit;
931
+ i0.ɵɵproperty("value", collection_r6);
932
+ i0.ɵɵadvance(1);
933
+ i0.ɵɵtextInterpolate1(" ", collection_r6, " ");
934
+ }
935
+ }
936
+ function CollectionsInfoOverlayComponent_div_1_div_1_mat_checkbox_11_Template(rf, ctx) {
937
+ if (rf & 1) {
938
+ const _r8 = i0.ɵɵgetCurrentView();
939
+ i0.ɵɵelementStart(0, "mat-checkbox", 16);
940
+ i0.ɵɵlistener("change", function CollectionsInfoOverlayComponent_div_1_div_1_mat_checkbox_11_Template_mat_checkbox_change_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r7.toggleInvisible($event.checked)); });
941
+ i0.ɵɵtext(1, " Hide Invisible Objects ");
942
+ i0.ɵɵelementEnd();
943
+ }
944
+ }
945
+ function CollectionsInfoOverlayComponent_div_1_div_1_Template(rf, ctx) {
946
+ if (rf & 1) {
947
+ const _r10 = i0.ɵɵgetCurrentView();
948
+ i0.ɵɵelementStart(0, "div", 7)(1, "div", 8)(2, "span");
949
+ i0.ɵɵtext(3, "Choose a collection: ");
950
+ i0.ɵɵelementEnd();
951
+ i0.ɵɵelementStart(4, "div", 9)(5, "label", 10);
952
+ i0.ɵɵtext(6, "Event");
953
+ i0.ɵɵelementEnd();
954
+ i0.ɵɵelementStart(7, "select", 11);
955
+ i0.ɵɵlistener("change", function CollectionsInfoOverlayComponent_div_1_div_1_Template_select_change_7_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r9.changeCollection($event.target.value)); });
956
+ i0.ɵɵelementStart(8, "option", 12);
957
+ i0.ɵɵtext(9, "Choose Collection");
958
+ i0.ɵɵelementEnd();
959
+ i0.ɵɵtemplate(10, CollectionsInfoOverlayComponent_div_1_div_1_option_10_Template, 2, 2, "option", 13);
960
+ i0.ɵɵelementEnd()();
961
+ i0.ɵɵtemplate(11, CollectionsInfoOverlayComponent_div_1_div_1_mat_checkbox_11_Template, 2, 0, "mat-checkbox", 14);
962
+ i0.ɵɵelementEnd()();
963
+ }
964
+ if (rf & 2) {
965
+ const ctx_r1 = i0.ɵɵnextContext(2);
966
+ i0.ɵɵadvance(10);
967
+ i0.ɵɵproperty("ngForOf", ctx_r1.collections);
968
+ i0.ɵɵadvance(1);
969
+ i0.ɵɵproperty("ngIf", ctx_r1.showingCollection);
970
+ }
971
+ }
972
+ function CollectionsInfoOverlayComponent_div_1_table_3_th_9_Template(rf, ctx) {
973
+ if (rf & 1) {
974
+ const _r15 = i0.ɵɵgetCurrentView();
975
+ i0.ɵɵelementStart(0, "th")(1, "div", 20)(2, "div");
976
+ i0.ɵɵtext(3);
977
+ i0.ɵɵelementEnd();
978
+ i0.ɵɵelementStart(4, "div", 21)(5, "button", 22);
979
+ i0.ɵɵlistener("click", function CollectionsInfoOverlayComponent_div_1_table_3_th_9_Template_button_click_5_listener() { const restoredCtx = i0.ɵɵrestoreView(_r15); const column_r13 = restoredCtx.$implicit; const ctx_r14 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r14.sort(column_r13, "dec")); });
980
+ i0.ɵɵnamespaceSVG();
981
+ i0.ɵɵelementStart(6, "svg");
982
+ i0.ɵɵelement(7, "use", 23);
983
+ i0.ɵɵelementEnd()();
984
+ i0.ɵɵnamespaceHTML();
985
+ i0.ɵɵelementStart(8, "button", 24);
986
+ i0.ɵɵlistener("click", function CollectionsInfoOverlayComponent_div_1_table_3_th_9_Template_button_click_8_listener() { const restoredCtx = i0.ɵɵrestoreView(_r15); const column_r13 = restoredCtx.$implicit; const ctx_r16 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r16.sort(column_r13, "asc")); });
987
+ i0.ɵɵnamespaceSVG();
988
+ i0.ɵɵelementStart(9, "svg");
989
+ i0.ɵɵelement(10, "use", 23);
990
+ i0.ɵɵelementEnd()()()()();
991
+ }
992
+ if (rf & 2) {
993
+ const column_r13 = ctx.$implicit;
994
+ const ctx_r11 = i0.ɵɵnextContext(3);
995
+ i0.ɵɵadvance(3);
996
+ i0.ɵɵtextInterpolate1(" ", ctx_r11.getPrettySymbol(column_r13), " ");
997
+ }
998
+ }
999
+ function CollectionsInfoOverlayComponent_div_1_table_3_tr_11_div_4_Template(rf, ctx) {
1000
+ if (rf & 1) {
1001
+ const _r23 = i0.ɵɵgetCurrentView();
1002
+ i0.ɵɵelementStart(0, "div", 33)(1, "button", 34);
1003
+ i0.ɵɵlistener("click", function CollectionsInfoOverlayComponent_div_1_table_3_tr_11_div_4_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r23); const object_r17 = i0.ɵɵnextContext().$implicit; const ctx_r21 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r21.lookAtObject(object_r17.uuid)); });
1004
+ i0.ɵɵnamespaceSVG();
1005
+ i0.ɵɵelementStart(2, "svg");
1006
+ i0.ɵɵelement(3, "use", 35);
1007
+ i0.ɵɵelementEnd()();
1008
+ i0.ɵɵnamespaceHTML();
1009
+ i0.ɵɵelementStart(4, "button", 36);
1010
+ i0.ɵɵlistener("click", function CollectionsInfoOverlayComponent_div_1_table_3_tr_11_div_4_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r23); const object_r17 = i0.ɵɵnextContext().$implicit; const ctx_r24 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r24.highlightObject(object_r17.uuid)); });
1011
+ i0.ɵɵnamespaceSVG();
1012
+ i0.ɵɵelementStart(5, "svg");
1013
+ i0.ɵɵelement(6, "use", 37);
1014
+ i0.ɵɵelementEnd()()();
1015
+ }
1016
+ }
1017
+ function CollectionsInfoOverlayComponent_div_1_table_3_tr_11_td_13_Template(rf, ctx) {
1018
+ if (rf & 1) {
1019
+ i0.ɵɵnamespaceSVG();
1020
+ i0.ɵɵnamespaceHTML();
1021
+ i0.ɵɵelementStart(0, "td");
1022
+ i0.ɵɵtext(1);
1023
+ i0.ɵɵelementEnd();
1024
+ }
1025
+ if (rf & 2) {
1026
+ const column_r26 = ctx.$implicit;
1027
+ const object_r17 = i0.ɵɵnextContext().$implicit;
1028
+ i0.ɵɵadvance(1);
1029
+ i0.ɵɵtextInterpolate1(" ", object_r17[column_r26], " ");
1030
+ }
1031
+ }
1032
+ const _c0$6 = function (a0, a1, a2) { return { "active-object": a0, "is-cut": a1, "d-none": a2 }; };
1033
+ function CollectionsInfoOverlayComponent_div_1_table_3_tr_11_Template(rf, ctx) {
1034
+ if (rf & 1) {
1035
+ const _r29 = i0.ɵɵgetCurrentView();
1036
+ i0.ɵɵelementStart(0, "tr", 25)(1, "td");
1037
+ i0.ɵɵtext(2);
1038
+ i0.ɵɵelementEnd();
1039
+ i0.ɵɵelementStart(3, "td");
1040
+ i0.ɵɵtemplate(4, CollectionsInfoOverlayComponent_div_1_table_3_tr_11_div_4_Template, 7, 0, "div", 26);
1041
+ i0.ɵɵelementEnd();
1042
+ i0.ɵɵelementStart(5, "td")(6, "div", 27)(7, "div", 28);
1043
+ i0.ɵɵelement(8, "input", 29);
1044
+ i0.ɵɵelementEnd();
1045
+ i0.ɵɵelementStart(9, "div", 30)(10, "button", 31);
1046
+ i0.ɵɵlistener("click", function CollectionsInfoOverlayComponent_div_1_table_3_tr_11_Template_button_click_10_listener() { const restoredCtx = i0.ɵɵrestoreView(_r29); const i_r18 = restoredCtx.index; const object_r17 = restoredCtx.$implicit; const ctx_r28 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r28.addLabel(i_r18, object_r17.uuid)); });
1047
+ i0.ɵɵnamespaceSVG();
1048
+ i0.ɵɵelementStart(11, "svg");
1049
+ i0.ɵɵelement(12, "use", 32);
1050
+ i0.ɵɵelementEnd()()()()();
1051
+ i0.ɵɵtemplate(13, CollectionsInfoOverlayComponent_div_1_table_3_tr_11_td_13_Template, 2, 1, "td", 18);
1052
+ i0.ɵɵelementEnd();
1053
+ }
1054
+ if (rf & 2) {
1055
+ const object_r17 = ctx.$implicit;
1056
+ const i_r18 = ctx.index;
1057
+ const ctx_r12 = i0.ɵɵnextContext(3);
1058
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(6, _c0$6, ctx_r12.activeObject && ctx_r12.activeObject.value === object_r17.uuid, object_r17.isCut, object_r17.isCut && ctx_r12.hideInvisible));
1059
+ i0.ɵɵattribute("id", object_r17.uuid);
1060
+ i0.ɵɵadvance(2);
1061
+ i0.ɵɵtextInterpolate1("#", i_r18, "");
1062
+ i0.ɵɵadvance(2);
1063
+ i0.ɵɵproperty("ngIf", object_r17.uuid);
1064
+ i0.ɵɵadvance(4);
1065
+ i0.ɵɵproperty("id", "label" + i_r18);
1066
+ i0.ɵɵadvance(5);
1067
+ i0.ɵɵproperty("ngForOf", ctx_r12.collectionColumns);
1068
+ }
1069
+ }
1070
+ function CollectionsInfoOverlayComponent_div_1_table_3_Template(rf, ctx) {
1071
+ if (rf & 1) {
1072
+ i0.ɵɵelementStart(0, "table", 17)(1, "thead")(2, "tr")(3, "th");
1073
+ i0.ɵɵtext(4, "No.");
1074
+ i0.ɵɵelementEnd();
1075
+ i0.ɵɵelementStart(5, "th");
1076
+ i0.ɵɵtext(6, "Selection");
1077
+ i0.ɵɵelementEnd();
1078
+ i0.ɵɵelementStart(7, "th");
1079
+ i0.ɵɵtext(8, "Label");
1080
+ i0.ɵɵelementEnd();
1081
+ i0.ɵɵtemplate(9, CollectionsInfoOverlayComponent_div_1_table_3_th_9_Template, 11, 1, "th", 18);
1082
+ i0.ɵɵelementEnd()();
1083
+ i0.ɵɵelementStart(10, "tbody");
1084
+ i0.ɵɵtemplate(11, CollectionsInfoOverlayComponent_div_1_table_3_tr_11_Template, 14, 10, "tr", 19);
1085
+ i0.ɵɵelementEnd()();
1086
+ }
1087
+ if (rf & 2) {
1088
+ const ctx_r2 = i0.ɵɵnextContext(2);
1089
+ i0.ɵɵadvance(9);
1090
+ i0.ɵɵproperty("ngForOf", ctx_r2.collectionColumns);
1091
+ i0.ɵɵadvance(2);
1092
+ i0.ɵɵproperty("ngForOf", ctx_r2.showingCollection);
1093
+ }
1094
+ }
1095
+ function CollectionsInfoOverlayComponent_div_1_p_4_Template(rf, ctx) {
1096
+ if (rf & 1) {
1097
+ i0.ɵɵelementStart(0, "p", 38);
1098
+ i0.ɵɵtext(1, " Load event data to be able to display information about the collections here. ");
1099
+ i0.ɵɵelementEnd();
1100
+ }
1101
+ }
1102
+ function CollectionsInfoOverlayComponent_div_1_Template(rf, ctx) {
1103
+ if (rf & 1) {
1104
+ i0.ɵɵelementStart(0, "div", 2);
1105
+ i0.ɵɵtemplate(1, CollectionsInfoOverlayComponent_div_1_div_1_Template, 12, 2, "div", 3);
1106
+ i0.ɵɵelementStart(2, "div", 4);
1107
+ i0.ɵɵtemplate(3, CollectionsInfoOverlayComponent_div_1_table_3_Template, 12, 2, "table", 5);
1108
+ i0.ɵɵtemplate(4, CollectionsInfoOverlayComponent_div_1_p_4_Template, 2, 0, "p", 6);
1109
+ i0.ɵɵelementEnd()();
1110
+ }
1111
+ if (rf & 2) {
1112
+ const ctx_r0 = i0.ɵɵnextContext();
1113
+ i0.ɵɵadvance(1);
1114
+ i0.ɵɵproperty("ngIf", ctx_r0.collections != null);
1115
+ i0.ɵɵadvance(2);
1116
+ i0.ɵɵproperty("ngIf", ctx_r0.showingCollection);
1117
+ i0.ɵɵadvance(1);
1118
+ i0.ɵɵproperty("ngIf", !ctx_r0.collections);
1119
+ }
1120
+ }
365
1121
  class CollectionsInfoOverlayComponent {
366
1122
  constructor(elementRef, eventDisplay) {
367
1123
  this.elementRef = elementRef;
@@ -425,14 +1181,27 @@ class CollectionsInfoOverlayComponent {
425
1181
  .getObjectByName(SceneManager.EVENT_DATA_ID);
426
1182
  }
427
1183
  }
428
- CollectionsInfoOverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: CollectionsInfoOverlayComponent, deps: [{ token: i0.ElementRef }, { token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
429
- CollectionsInfoOverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: CollectionsInfoOverlayComponent, selector: "app-collections-info-overlay", inputs: { showObjectsInfo: "showObjectsInfo" }, ngImport: i0, template: "<!-- Show objects -->\n<app-overlay\n overlayTitle=\"Collections Info\"\n icon=\"info\"\n [resizable]=\"true\"\n [active]=\"showObjectsInfo\"\n>\n <!-- Using ngIf to remove it from DOM since this panel requires heavy computing -->\n <div *ngIf=\"showObjectsInfo\" class=\"collectionsInfo m-2\">\n <div\n class=\"collectionSelector mb-2 d-flex align-items-center\"\n *ngIf=\"collections != null\"\n >\n <div class=\"d-flex align-items-center\">\n <span>Choose a collection: </span>\n <div class=\"eventSelector\">\n <label for=\"event\">Event</label>\n <select\n id=\"collection\"\n name=\"collection\"\n (change)=\"changeCollection($event.target.value)\"\n >\n <option value=\"\" selected disabled hidden>Choose Collection</option>\n <option *ngFor=\"let collection of collections\" [value]=\"collection\">\n {{ collection }}\n </option>\n </select>\n </div>\n <mat-checkbox\n *ngIf=\"showingCollection\"\n (change)=\"toggleInvisible($event.checked)\"\n >\n Hide Invisible Objects\n </mat-checkbox>\n </div>\n </div>\n\n <div class=\"boxBody table-responsive\">\n <table\n id=\"collectionTable\"\n class=\"table table-borderless table-sm\"\n *ngIf=\"showingCollection\"\n >\n <thead>\n <tr>\n <th>No.</th>\n <th>Selection</th>\n <th>Label</th>\n <th *ngFor=\"let column of collectionColumns\">\n <div class=\"head-wrapper\">\n <div>\n {{ getPrettySymbol(column) }}\n </div>\n <div class=\"sort-options\">\n <button\n class=\"icon-wrapper icon-button btn-blank up\"\n (click)=\"sort(column, 'dec')\"\n >\n <svg>\n <use href=\"assets/icons/expand.svg#expand\"></use>\n </svg>\n </button>\n <button\n class=\"icon-wrapper icon-button btn-blank\"\n (click)=\"sort(column, 'asc')\"\n >\n <svg>\n <use href=\"assets/icons/expand.svg#expand\"></use>\n </svg>\n </button>\n </div>\n </div>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let object of showingCollection; index as i\"\n [attr.id]=\"object.uuid\"\n [ngClass]=\"{\n 'active-object':\n activeObject && activeObject.value === object.uuid,\n 'is-cut': object.isCut,\n 'd-none': object.isCut && hideInvisible\n }\"\n >\n <td>#{{ i }}</td>\n <td>\n <div\n *ngIf=\"object.uuid\"\n class=\"row justify-content-center icon-wrapper\"\n >\n <button\n class=\"object-select btn-blank\"\n matTooltip=\"Move camera to object\"\n (click)=\"lookAtObject(object.uuid)\"\n >\n <svg>\n <use href=\"assets/icons/views.svg#views\"></use>\n </svg>\n </button>\n <button\n class=\"object-select btn-blank\"\n matTooltip=\"Highlight object\"\n (click)=\"highlightObject(object.uuid)\"\n >\n <svg>\n <use href=\"assets/icons/cursor.svg#cursor\"></use>\n </svg>\n </button>\n </div>\n </td>\n <td>\n <div class=\"row m-0 add-label\">\n <div class=\"col-10 p-0\">\n <input\n class=\"form-control form-control-sm\"\n type=\"text\"\n [id]=\"'label' + i\"\n />\n </div>\n <div class=\"col-2 p-0 pl-2 text-center icon-wrapper\">\n <button\n class=\"object-select btn-blank\"\n matTooltip=\"Add, update or remove object label\"\n (click)=\"addLabel(i, object.uuid)\"\n >\n <svg>\n <use href=\"assets/icons/update.svg#update\"></use>\n </svg>\n </button>\n </div>\n </div>\n </td>\n <td *ngFor=\"let column of collectionColumns\">\n {{ object[column] }}\n </td>\n </tr>\n </tbody>\n </table>\n <p class=\"emptyBox\" *ngIf=\"!collections\">\n Load event data to be able to display information about the collections\n here.\n </p>\n </div>\n </div>\n</app-overlay>\n", styles: [".collectionsInfo{height:95%}.collectionsInfo .collectionSelector{height:15%;min-height:2rem}.collectionsInfo .collectionSelector span{color:var(--phoenix-text-color-secondary);margin-right:1rem}.collectionsInfo .collectionSelector mat-checkbox{margin-left:1rem}.boxBody{height:85%;overflow:scroll}.boxBody p.emptyBox{max-width:21em}.boxBody .add-label{min-width:8rem}.boxBody .add-label input{padding:.1rem .3rem;font-size:.75rem}#collectionTable{position:relative;color:var(--phoenix-text-color-secondary)}#collectionTable thead tr th{position:sticky;top:0;z-index:100;background:var(--phoenix-background-color-secondary)}#collectionTable thead tr th .head-wrapper{display:flex;align-items:center}#collectionTable thead tr th .head-wrapper .sort-options{display:flex;flex-direction:row}#collectionTable thead tr th .head-wrapper .sort-options .icon-wrapper{display:flex;width:1rem;height:1rem;padding:.2rem}#collectionTable thead tr th .head-wrapper .sort-options .icon-wrapper.up{transform:rotate(180deg)}#collectionTable thead tr th .head-wrapper .sort-options .icon-wrapper svg{width:100%;height:100%}#collectionTable tr *{padding-right:1.2rem}#collectionTable tr *:last-child{padding-right:0}#collectionTable tr.is-cut{opacity:.5}#collectionTable tr.active-object{color:var(--phoenix-background-color);background:var(--phoenix-text-color);box-shadow:0 0 15px var(--phoenix-text-color)}#collectionTable tr.active-object div.icon-wrapper{--phoenix-options-icon-path: var(--phoenix-background-color);--phoenix-options-icon-bg: var(--phoenix-text-color-hover)}#collectionTable tr.active-object .add-label input{--phoenix-text-color: var(--phoenix-background-color);--phoenix-background-color-tertiary: var( --phoenix-text-color-secondary );--phoenix-border: var(--phoenix-background-color)}#collectionTable td .object-select{position:relative;width:1.6rem;height:1.6rem;margin-right:.4em;text-align:center;background-color:var(--phoenix-options-icon-bg);border-radius:10px;cursor:pointer}#collectionTable td .object-select:last-child{margin-right:0}#collectionTable td .object-select:hover{border:1px solid var(--phoenix-options-icon-path)}#collectionTable td .object-select svg{position:absolute;top:0;left:0;padding:.4rem;width:100%;height:100%;vertical-align:top}.eventSelector{display:flex}.eventSelector label{display:none;color:var(--phoenix-text-color-secondary)}.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"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: OverlayComponent, selector: "app-overlay", inputs: ["overlayTitle", "active", "icon", "resizable", "transparentBody"] }] });
430
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: CollectionsInfoOverlayComponent, decorators: [{
1184
+ CollectionsInfoOverlayComponent.ɵfac = function CollectionsInfoOverlayComponent_Factory(t) { return new (t || CollectionsInfoOverlayComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(EventDisplayService)); };
1185
+ CollectionsInfoOverlayComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CollectionsInfoOverlayComponent, selectors: [["app-collections-info-overlay"]], inputs: { showObjectsInfo: "showObjectsInfo" }, decls: 2, vars: 3, consts: [["overlayTitle", "Collections Info", "icon", "info", 3, "resizable", "active"], ["class", "collectionsInfo m-2", 4, "ngIf"], [1, "collectionsInfo", "m-2"], ["class", "collectionSelector mb-2 d-flex align-items-center", 4, "ngIf"], [1, "boxBody", "table-responsive"], ["id", "collectionTable", "class", "table table-borderless table-sm", 4, "ngIf"], ["class", "emptyBox", 4, "ngIf"], [1, "collectionSelector", "mb-2", "d-flex", "align-items-center"], [1, "d-flex", "align-items-center"], [1, "eventSelector"], ["for", "event"], ["id", "collection", "name", "collection", 3, "change"], ["value", "", "selected", "", "disabled", "", "hidden", ""], [3, "value", 4, "ngFor", "ngForOf"], [3, "change", 4, "ngIf"], [3, "value"], [3, "change"], ["id", "collectionTable", 1, "table", "table-borderless", "table-sm"], [4, "ngFor", "ngForOf"], [3, "ngClass", 4, "ngFor", "ngForOf"], [1, "head-wrapper"], [1, "sort-options"], [1, "icon-wrapper", "icon-button", "btn-blank", "up", 3, "click"], ["href", "assets/icons/expand.svg#expand"], [1, "icon-wrapper", "icon-button", "btn-blank", 3, "click"], [3, "ngClass"], ["class", "row justify-content-center icon-wrapper", 4, "ngIf"], [1, "row", "m-0", "add-label"], [1, "col-10", "p-0"], ["type", "text", 1, "form-control", "form-control-sm", 3, "id"], [1, "col-2", "p-0", "pl-2", "text-center", "icon-wrapper"], ["matTooltip", "Add, update or remove object label", 1, "object-select", "btn-blank", 3, "click"], ["href", "assets/icons/update.svg#update"], [1, "row", "justify-content-center", "icon-wrapper"], ["matTooltip", "Move camera to object", 1, "object-select", "btn-blank", 3, "click"], ["href", "assets/icons/views.svg#views"], ["matTooltip", "Highlight object", 1, "object-select", "btn-blank", 3, "click"], ["href", "assets/icons/cursor.svg#cursor"], [1, "emptyBox"]], template: function CollectionsInfoOverlayComponent_Template(rf, ctx) {
1186
+ if (rf & 1) {
1187
+ i0.ɵɵelementStart(0, "app-overlay", 0);
1188
+ i0.ɵɵtemplate(1, CollectionsInfoOverlayComponent_div_1_Template, 5, 3, "div", 1);
1189
+ i0.ɵɵelementEnd();
1190
+ }
1191
+ if (rf & 2) {
1192
+ i0.ɵɵproperty("resizable", true)("active", ctx.showObjectsInfo);
1193
+ i0.ɵɵadvance(1);
1194
+ i0.ɵɵproperty("ngIf", ctx.showObjectsInfo);
1195
+ }
1196
+ }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i2$3.MatTooltip, i4.MatCheckbox, OverlayComponent], styles: [".collectionsInfo[_ngcontent-%COMP%]{height:95%}.collectionsInfo[_ngcontent-%COMP%] .collectionSelector[_ngcontent-%COMP%]{height:15%;min-height:2rem}.collectionsInfo[_ngcontent-%COMP%] .collectionSelector[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--phoenix-text-color-secondary);margin-right:1rem}.collectionsInfo[_ngcontent-%COMP%] .collectionSelector[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]{margin-left:1rem}.boxBody[_ngcontent-%COMP%]{height:85%;overflow:scroll}.boxBody[_ngcontent-%COMP%] p.emptyBox[_ngcontent-%COMP%]{max-width:21em}.boxBody[_ngcontent-%COMP%] .add-label[_ngcontent-%COMP%]{min-width:8rem}.boxBody[_ngcontent-%COMP%] .add-label[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{padding:.1rem .3rem;font-size:.75rem}#collectionTable[_ngcontent-%COMP%]{position:relative;color:var(--phoenix-text-color-secondary)}#collectionTable[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{position:sticky;top:0;z-index:100;background:var(--phoenix-background-color-secondary)}#collectionTable[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%] .head-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center}#collectionTable[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%] .head-wrapper[_ngcontent-%COMP%] .sort-options[_ngcontent-%COMP%]{display:flex;flex-direction:row}#collectionTable[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%] .head-wrapper[_ngcontent-%COMP%] .sort-options[_ngcontent-%COMP%] .icon-wrapper[_ngcontent-%COMP%]{display:flex;width:1rem;height:1rem;padding:.2rem}#collectionTable[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%] .head-wrapper[_ngcontent-%COMP%] .sort-options[_ngcontent-%COMP%] .icon-wrapper.up[_ngcontent-%COMP%]{transform:rotate(180deg)}#collectionTable[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%] .head-wrapper[_ngcontent-%COMP%] .sort-options[_ngcontent-%COMP%] .icon-wrapper[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:100%;height:100%}#collectionTable[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] *[_ngcontent-%COMP%]{padding-right:1.2rem}#collectionTable[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] *[_ngcontent-%COMP%]:last-child{padding-right:0}#collectionTable[_ngcontent-%COMP%] tr.is-cut[_ngcontent-%COMP%]{opacity:.5}#collectionTable[_ngcontent-%COMP%] tr.active-object[_ngcontent-%COMP%]{color:var(--phoenix-background-color);background:var(--phoenix-text-color);box-shadow:0 0 15px var(--phoenix-text-color)}#collectionTable[_ngcontent-%COMP%] tr.active-object[_ngcontent-%COMP%] div.icon-wrapper[_ngcontent-%COMP%]{--phoenix-options-icon-path: var(--phoenix-background-color);--phoenix-options-icon-bg: var(--phoenix-text-color-hover)}#collectionTable[_ngcontent-%COMP%] tr.active-object[_ngcontent-%COMP%] .add-label[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{--phoenix-text-color: var(--phoenix-background-color);--phoenix-background-color-tertiary: var( --phoenix-text-color-secondary );--phoenix-border: var(--phoenix-background-color)}#collectionTable[_ngcontent-%COMP%] td[_ngcontent-%COMP%] .object-select[_ngcontent-%COMP%]{position:relative;width:1.6rem;height:1.6rem;margin-right:.4em;text-align:center;background-color:var(--phoenix-options-icon-bg);border-radius:10px;cursor:pointer}#collectionTable[_ngcontent-%COMP%] td[_ngcontent-%COMP%] .object-select[_ngcontent-%COMP%]:last-child{margin-right:0}#collectionTable[_ngcontent-%COMP%] td[_ngcontent-%COMP%] .object-select[_ngcontent-%COMP%]:hover{border:1px solid var(--phoenix-options-icon-path)}#collectionTable[_ngcontent-%COMP%] td[_ngcontent-%COMP%] .object-select[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{position:absolute;top:0;left:0;padding:.4rem;width:100%;height:100%;vertical-align:top}.eventSelector[_ngcontent-%COMP%]{display:flex}.eventSelector[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:none;color:var(--phoenix-text-color-secondary)}.eventSelector[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{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)}"] });
1197
+ (function () {
1198
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CollectionsInfoOverlayComponent, [{
431
1199
  type: Component,
432
1200
  args: [{ selector: 'app-collections-info-overlay', template: "<!-- Show objects -->\n<app-overlay\n overlayTitle=\"Collections Info\"\n icon=\"info\"\n [resizable]=\"true\"\n [active]=\"showObjectsInfo\"\n>\n <!-- Using ngIf to remove it from DOM since this panel requires heavy computing -->\n <div *ngIf=\"showObjectsInfo\" class=\"collectionsInfo m-2\">\n <div\n class=\"collectionSelector mb-2 d-flex align-items-center\"\n *ngIf=\"collections != null\"\n >\n <div class=\"d-flex align-items-center\">\n <span>Choose a collection: </span>\n <div class=\"eventSelector\">\n <label for=\"event\">Event</label>\n <select\n id=\"collection\"\n name=\"collection\"\n (change)=\"changeCollection($event.target.value)\"\n >\n <option value=\"\" selected disabled hidden>Choose Collection</option>\n <option *ngFor=\"let collection of collections\" [value]=\"collection\">\n {{ collection }}\n </option>\n </select>\n </div>\n <mat-checkbox\n *ngIf=\"showingCollection\"\n (change)=\"toggleInvisible($event.checked)\"\n >\n Hide Invisible Objects\n </mat-checkbox>\n </div>\n </div>\n\n <div class=\"boxBody table-responsive\">\n <table\n id=\"collectionTable\"\n class=\"table table-borderless table-sm\"\n *ngIf=\"showingCollection\"\n >\n <thead>\n <tr>\n <th>No.</th>\n <th>Selection</th>\n <th>Label</th>\n <th *ngFor=\"let column of collectionColumns\">\n <div class=\"head-wrapper\">\n <div>\n {{ getPrettySymbol(column) }}\n </div>\n <div class=\"sort-options\">\n <button\n class=\"icon-wrapper icon-button btn-blank up\"\n (click)=\"sort(column, 'dec')\"\n >\n <svg>\n <use href=\"assets/icons/expand.svg#expand\"></use>\n </svg>\n </button>\n <button\n class=\"icon-wrapper icon-button btn-blank\"\n (click)=\"sort(column, 'asc')\"\n >\n <svg>\n <use href=\"assets/icons/expand.svg#expand\"></use>\n </svg>\n </button>\n </div>\n </div>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let object of showingCollection; index as i\"\n [attr.id]=\"object.uuid\"\n [ngClass]=\"{\n 'active-object':\n activeObject && activeObject.value === object.uuid,\n 'is-cut': object.isCut,\n 'd-none': object.isCut && hideInvisible\n }\"\n >\n <td>#{{ i }}</td>\n <td>\n <div\n *ngIf=\"object.uuid\"\n class=\"row justify-content-center icon-wrapper\"\n >\n <button\n class=\"object-select btn-blank\"\n matTooltip=\"Move camera to object\"\n (click)=\"lookAtObject(object.uuid)\"\n >\n <svg>\n <use href=\"assets/icons/views.svg#views\"></use>\n </svg>\n </button>\n <button\n class=\"object-select btn-blank\"\n matTooltip=\"Highlight object\"\n (click)=\"highlightObject(object.uuid)\"\n >\n <svg>\n <use href=\"assets/icons/cursor.svg#cursor\"></use>\n </svg>\n </button>\n </div>\n </td>\n <td>\n <div class=\"row m-0 add-label\">\n <div class=\"col-10 p-0\">\n <input\n class=\"form-control form-control-sm\"\n type=\"text\"\n [id]=\"'label' + i\"\n />\n </div>\n <div class=\"col-2 p-0 pl-2 text-center icon-wrapper\">\n <button\n class=\"object-select btn-blank\"\n matTooltip=\"Add, update or remove object label\"\n (click)=\"addLabel(i, object.uuid)\"\n >\n <svg>\n <use href=\"assets/icons/update.svg#update\"></use>\n </svg>\n </button>\n </div>\n </div>\n </td>\n <td *ngFor=\"let column of collectionColumns\">\n {{ object[column] }}\n </td>\n </tr>\n </tbody>\n </table>\n <p class=\"emptyBox\" *ngIf=\"!collections\">\n Load event data to be able to display information about the collections\n here.\n </p>\n </div>\n </div>\n</app-overlay>\n", styles: [".collectionsInfo{height:95%}.collectionsInfo .collectionSelector{height:15%;min-height:2rem}.collectionsInfo .collectionSelector span{color:var(--phoenix-text-color-secondary);margin-right:1rem}.collectionsInfo .collectionSelector mat-checkbox{margin-left:1rem}.boxBody{height:85%;overflow:scroll}.boxBody p.emptyBox{max-width:21em}.boxBody .add-label{min-width:8rem}.boxBody .add-label input{padding:.1rem .3rem;font-size:.75rem}#collectionTable{position:relative;color:var(--phoenix-text-color-secondary)}#collectionTable thead tr th{position:sticky;top:0;z-index:100;background:var(--phoenix-background-color-secondary)}#collectionTable thead tr th .head-wrapper{display:flex;align-items:center}#collectionTable thead tr th .head-wrapper .sort-options{display:flex;flex-direction:row}#collectionTable thead tr th .head-wrapper .sort-options .icon-wrapper{display:flex;width:1rem;height:1rem;padding:.2rem}#collectionTable thead tr th .head-wrapper .sort-options .icon-wrapper.up{transform:rotate(180deg)}#collectionTable thead tr th .head-wrapper .sort-options .icon-wrapper svg{width:100%;height:100%}#collectionTable tr *{padding-right:1.2rem}#collectionTable tr *:last-child{padding-right:0}#collectionTable tr.is-cut{opacity:.5}#collectionTable tr.active-object{color:var(--phoenix-background-color);background:var(--phoenix-text-color);box-shadow:0 0 15px var(--phoenix-text-color)}#collectionTable tr.active-object div.icon-wrapper{--phoenix-options-icon-path: var(--phoenix-background-color);--phoenix-options-icon-bg: var(--phoenix-text-color-hover)}#collectionTable tr.active-object .add-label input{--phoenix-text-color: var(--phoenix-background-color);--phoenix-background-color-tertiary: var( --phoenix-text-color-secondary );--phoenix-border: var(--phoenix-background-color)}#collectionTable td .object-select{position:relative;width:1.6rem;height:1.6rem;margin-right:.4em;text-align:center;background-color:var(--phoenix-options-icon-bg);border-radius:10px;cursor:pointer}#collectionTable td .object-select:last-child{margin-right:0}#collectionTable td .object-select:hover{border:1px solid var(--phoenix-options-icon-path)}#collectionTable td .object-select svg{position:absolute;top:0;left:0;padding:.4rem;width:100%;height:100%;vertical-align:top}.eventSelector{display:flex}.eventSelector label{display:none;color:var(--phoenix-text-color-secondary)}.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"] }]
433
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: EventDisplayService }]; }, propDecorators: { showObjectsInfo: [{
1201
+ }], function () { return [{ type: i0.ElementRef }, { type: EventDisplayService }]; }, { showObjectsInfo: [{
434
1202
  type: Input
435
- }] } });
1203
+ }] });
1204
+ })();
436
1205
 
437
1206
  class CollectionsInfoComponent {
438
1207
  constructor(overlay) {
@@ -453,12 +1222,23 @@ class CollectionsInfoComponent {
453
1222
  this.overlayWindow.instance.showObjectsInfo = this.showObjectsInfo;
454
1223
  }
455
1224
  }
456
- CollectionsInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: CollectionsInfoComponent, deps: [{ token: i1$1.Overlay }], target: i0.ɵɵFactoryTarget.Component });
457
- CollectionsInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: CollectionsInfoComponent, selector: "app-collections-info", ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Event data collections info\"\n icon=\"info\"\n [active]=\"showObjectsInfo\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n", styles: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
458
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: CollectionsInfoComponent, decorators: [{
1225
+ CollectionsInfoComponent.ɵfac = function CollectionsInfoComponent_Factory(t) { return new (t || CollectionsInfoComponent)(i0.ɵɵdirectiveInject(i1$1.Overlay)); };
1226
+ CollectionsInfoComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CollectionsInfoComponent, selectors: [["app-collections-info"]], decls: 1, vars: 1, consts: [["tooltip", "Event data collections info", "icon", "info", 3, "active", "click"]], template: function CollectionsInfoComponent_Template(rf, ctx) {
1227
+ if (rf & 1) {
1228
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
1229
+ i0.ɵɵlistener("click", function CollectionsInfoComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleOverlay(); });
1230
+ i0.ɵɵelementEnd();
1231
+ }
1232
+ if (rf & 2) {
1233
+ i0.ɵɵproperty("active", ctx.showObjectsInfo);
1234
+ }
1235
+ }, dependencies: [MenuToggleComponent] });
1236
+ (function () {
1237
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CollectionsInfoComponent, [{
459
1238
  type: Component,
460
1239
  args: [{ selector: 'app-collections-info', template: "<app-menu-toggle\n tooltip=\"Event data collections info\"\n icon=\"info\"\n [active]=\"showObjectsInfo\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n" }]
461
- }], ctorParameters: function () { return [{ type: i1$1.Overlay }]; } });
1240
+ }], function () { return [{ type: i1$1.Overlay }]; }, null);
1241
+ })();
462
1242
 
463
1243
  class DarkThemeComponent {
464
1244
  constructor(eventDisplay) {
@@ -473,13 +1253,51 @@ class DarkThemeComponent {
473
1253
  this.eventDisplay.getUIManager().setDarkTheme(this.darkTheme);
474
1254
  }
475
1255
  }
476
- DarkThemeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: DarkThemeComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
477
- DarkThemeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", 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: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
478
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: DarkThemeComponent, decorators: [{
1256
+ DarkThemeComponent.ɵfac = function DarkThemeComponent_Factory(t) { return new (t || DarkThemeComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
1257
+ DarkThemeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DarkThemeComponent, selectors: [["app-dark-theme"]], decls: 1, vars: 1, consts: [["tooltip", "Dark theme", "icon", "dark", 3, "active", "click"]], template: function DarkThemeComponent_Template(rf, ctx) {
1258
+ if (rf & 1) {
1259
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
1260
+ i0.ɵɵlistener("click", function DarkThemeComponent_Template_app_menu_toggle_click_0_listener() { return ctx.setDarkTheme(); });
1261
+ i0.ɵɵelementEnd();
1262
+ }
1263
+ if (rf & 2) {
1264
+ i0.ɵɵproperty("active", ctx.darkTheme);
1265
+ }
1266
+ }, dependencies: [MenuToggleComponent] });
1267
+ (function () {
1268
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DarkThemeComponent, [{
479
1269
  type: Component,
480
1270
  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" }]
481
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
1271
+ }], function () { return [{ type: EventDisplayService }]; }, null);
1272
+ })();
482
1273
 
1274
+ function EventSelectorComponent_div_0_option_2_Template(rf, ctx) {
1275
+ if (rf & 1) {
1276
+ i0.ɵɵelementStart(0, "option", 4);
1277
+ i0.ɵɵtext(1);
1278
+ i0.ɵɵelementEnd();
1279
+ }
1280
+ if (rf & 2) {
1281
+ const event_r2 = ctx.$implicit;
1282
+ i0.ɵɵproperty("value", event_r2);
1283
+ i0.ɵɵadvance(1);
1284
+ i0.ɵɵtextInterpolate1(" ", event_r2, " ");
1285
+ }
1286
+ }
1287
+ function EventSelectorComponent_div_0_Template(rf, ctx) {
1288
+ if (rf & 1) {
1289
+ const _r4 = i0.ɵɵgetCurrentView();
1290
+ i0.ɵɵelementStart(0, "div", 1)(1, "select", 2);
1291
+ i0.ɵɵlistener("change", function EventSelectorComponent_div_0_Template_select_change_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.changeEvent($event)); });
1292
+ i0.ɵɵtemplate(2, EventSelectorComponent_div_0_option_2_Template, 2, 2, "option", 3);
1293
+ i0.ɵɵelementEnd()();
1294
+ }
1295
+ if (rf & 2) {
1296
+ const ctx_r0 = i0.ɵɵnextContext();
1297
+ i0.ɵɵadvance(2);
1298
+ i0.ɵɵproperty("ngForOf", ctx_r0.events);
1299
+ }
1300
+ }
483
1301
  class EventSelectorComponent {
484
1302
  constructor(eventDisplay) {
485
1303
  this.eventDisplay = eventDisplay;
@@ -492,13 +1310,91 @@ class EventSelectorComponent {
492
1310
  this.eventDisplay.loadEvent(value);
493
1311
  }
494
1312
  }
495
- EventSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: EventSelectorComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
496
- EventSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", 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"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
497
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: EventSelectorComponent, decorators: [{
1313
+ EventSelectorComponent.ɵfac = function EventSelectorComponent_Factory(t) { return new (t || EventSelectorComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
1314
+ EventSelectorComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EventSelectorComponent, selectors: [["app-event-selector"]], decls: 1, vars: 1, consts: [["class", "eventSelector mx-2", "matTooltip", "Event selector", "matTooltipPosition", "above", 4, "ngIf"], ["matTooltip", "Event selector", "matTooltipPosition", "above", 1, "eventSelector", "mx-2"], ["name", "event", 3, "change"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"]], template: function EventSelectorComponent_Template(rf, ctx) {
1315
+ if (rf & 1) {
1316
+ i0.ɵɵtemplate(0, EventSelectorComponent_div_0_Template, 3, 1, "div", 0);
1317
+ }
1318
+ if (rf & 2) {
1319
+ i0.ɵɵproperty("ngIf", ctx.events != null);
1320
+ }
1321
+ }, dependencies: [i2.NgForOf, i2.NgIf, i2$3.MatTooltip], styles: [".eventSelector[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{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)}"] });
1322
+ (function () {
1323
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EventSelectorComponent, [{
498
1324
  type: Component,
499
1325
  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"] }]
500
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
1326
+ }], function () { return [{ type: EventDisplayService }]; }, null);
1327
+ })();
501
1328
 
1329
+ function ExperimentInfoComponent_a_1_Template(rf, ctx) {
1330
+ if (rf & 1) {
1331
+ i0.ɵɵelementStart(0, "a", 5);
1332
+ i0.ɵɵelement(1, "img", 6);
1333
+ i0.ɵɵelementEnd();
1334
+ }
1335
+ if (rf & 2) {
1336
+ const ctx_r0 = i0.ɵɵnextContext();
1337
+ i0.ɵɵproperty("href", ctx_r0.url, i0.ɵɵsanitizeUrl);
1338
+ i0.ɵɵadvance(1);
1339
+ i0.ɵɵproperty("src", ctx_r0.logo, i0.ɵɵsanitizeUrl);
1340
+ }
1341
+ }
1342
+ function ExperimentInfoComponent_p_3_Template(rf, ctx) {
1343
+ if (rf & 1) {
1344
+ i0.ɵɵelementStart(0, "p")(1, "b");
1345
+ i0.ɵɵtext(2);
1346
+ i0.ɵɵelementEnd()();
1347
+ }
1348
+ if (rf & 2) {
1349
+ const ctx_r1 = i0.ɵɵnextContext();
1350
+ i0.ɵɵadvance(2);
1351
+ i0.ɵɵtextInterpolate(ctx_r1.tagline);
1352
+ }
1353
+ }
1354
+ function ExperimentInfoComponent_p_4_ng_container_1_Template(rf, ctx) {
1355
+ if (rf & 1) {
1356
+ i0.ɵɵelementContainerStart(0);
1357
+ i0.ɵɵelementStart(1, "b");
1358
+ i0.ɵɵtext(2);
1359
+ i0.ɵɵelementEnd();
1360
+ i0.ɵɵtext(3);
1361
+ i0.ɵɵelementContainerEnd();
1362
+ }
1363
+ if (rf & 2) {
1364
+ const infoField_r3 = i0.ɵɵnextContext().$implicit;
1365
+ i0.ɵɵadvance(2);
1366
+ i0.ɵɵtextInterpolate1("", infoField_r3.label, ": ");
1367
+ i0.ɵɵadvance(1);
1368
+ i0.ɵɵtextInterpolate1("", infoField_r3.value, " ");
1369
+ }
1370
+ }
1371
+ function ExperimentInfoComponent_p_4_ng_container_2_Template(rf, ctx) {
1372
+ if (rf & 1) {
1373
+ i0.ɵɵelementContainerStart(0);
1374
+ i0.ɵɵtext(1);
1375
+ i0.ɵɵelementContainerEnd();
1376
+ }
1377
+ if (rf & 2) {
1378
+ const infoField_r3 = i0.ɵɵnextContext().$implicit;
1379
+ i0.ɵɵadvance(1);
1380
+ i0.ɵɵtextInterpolate1(" ", infoField_r3, " ");
1381
+ }
1382
+ }
1383
+ function ExperimentInfoComponent_p_4_Template(rf, ctx) {
1384
+ if (rf & 1) {
1385
+ i0.ɵɵelementStart(0, "p");
1386
+ i0.ɵɵtemplate(1, ExperimentInfoComponent_p_4_ng_container_1_Template, 4, 2, "ng-container", 3);
1387
+ i0.ɵɵtemplate(2, ExperimentInfoComponent_p_4_ng_container_2_Template, 2, 1, "ng-container", 3);
1388
+ i0.ɵɵelementEnd();
1389
+ }
1390
+ if (rf & 2) {
1391
+ const infoField_r3 = ctx.$implicit;
1392
+ i0.ɵɵadvance(1);
1393
+ i0.ɵɵproperty("ngIf", infoField_r3.label);
1394
+ i0.ɵɵadvance(1);
1395
+ i0.ɵɵproperty("ngIf", !infoField_r3.label);
1396
+ }
1397
+ }
502
1398
  class ExperimentInfoComponent {
503
1399
  constructor(eventDisplay) {
504
1400
  this.eventDisplay = eventDisplay;
@@ -509,19 +1405,57 @@ class ExperimentInfoComponent {
509
1405
  });
510
1406
  }
511
1407
  }
512
- ExperimentInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ExperimentInfoComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
513
- ExperimentInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", 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"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }] });
514
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ExperimentInfoComponent, decorators: [{
1408
+ ExperimentInfoComponent.ɵfac = function ExperimentInfoComponent_Factory(t) { return new (t || ExperimentInfoComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
1409
+ ExperimentInfoComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ExperimentInfoComponent, selectors: [["app-experiment-info"]], inputs: { url: "url", logo: "logo", tagline: "tagline" }, decls: 5, vars: 3, consts: [["id", "experimentInfo", "cdkDrag", "", "cdkDragBoundary", "body", 1, "experimentInfo"], ["class", "experimentLogoWrapper", "target", "_blank", "rel", "noopener noreferrer", 3, "href", 4, "ngIf"], [1, "textInfo"], [4, "ngIf"], [4, "ngFor", "ngForOf"], ["target", "_blank", "rel", "noopener noreferrer", 1, "experimentLogoWrapper", 3, "href"], ["alt", "", 1, "experimentLogo", 3, "src"]], template: function ExperimentInfoComponent_Template(rf, ctx) {
1410
+ if (rf & 1) {
1411
+ i0.ɵɵelementStart(0, "div", 0);
1412
+ i0.ɵɵtemplate(1, ExperimentInfoComponent_a_1_Template, 2, 2, "a", 1);
1413
+ i0.ɵɵelementStart(2, "div", 2);
1414
+ i0.ɵɵtemplate(3, ExperimentInfoComponent_p_3_Template, 3, 1, "p", 3);
1415
+ i0.ɵɵtemplate(4, ExperimentInfoComponent_p_4_Template, 3, 2, "p", 4);
1416
+ i0.ɵɵelementEnd()();
1417
+ }
1418
+ if (rf & 2) {
1419
+ i0.ɵɵadvance(1);
1420
+ i0.ɵɵproperty("ngIf", ctx.url);
1421
+ i0.ɵɵadvance(2);
1422
+ i0.ɵɵproperty("ngIf", ctx.tagline);
1423
+ i0.ɵɵadvance(1);
1424
+ i0.ɵɵproperty("ngForOf", ctx.experimentInfo);
1425
+ }
1426
+ }, dependencies: [i2.NgForOf, i2.NgIf, i2$4.CdkDrag], styles: [".experimentInfo[_ngcontent-%COMP%]{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[_ngcontent-%COMP%]{width:6rem}.experimentLogoWrapper[_ngcontent-%COMP%] .experimentLogo[_ngcontent-%COMP%]{width:100%;height:100%}.textInfo[_ngcontent-%COMP%]{margin-left:1rem}.textInfo[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{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[_ngcontent-%COMP%]{top:4rem;max-width:40%}.experimentLogoWrapper[_ngcontent-%COMP%]{height:4rem}.textInfo[_ngcontent-%COMP%]{display:none}}"] });
1427
+ (function () {
1428
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ExperimentInfoComponent, [{
515
1429
  type: Component,
516
1430
  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"] }]
517
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { url: [{
1431
+ }], function () { return [{ type: EventDisplayService }]; }, { url: [{
518
1432
  type: Input
519
1433
  }], logo: [{
520
1434
  type: Input
521
1435
  }], tagline: [{
522
1436
  type: Input
523
- }] } });
1437
+ }] });
1438
+ })();
524
1439
 
1440
+ function InfoPanelOverlayComponent_li_4_Template(rf, ctx) {
1441
+ if (rf & 1) {
1442
+ i0.ɵɵelementStart(0, "li", 2);
1443
+ i0.ɵɵtext(1, " No actions. ");
1444
+ i0.ɵɵelementEnd();
1445
+ }
1446
+ }
1447
+ function InfoPanelOverlayComponent_li_5_Template(rf, ctx) {
1448
+ if (rf & 1) {
1449
+ i0.ɵɵelementStart(0, "li", 2);
1450
+ i0.ɵɵtext(1);
1451
+ i0.ɵɵelementEnd();
1452
+ }
1453
+ if (rf & 2) {
1454
+ const action_r2 = ctx.$implicit;
1455
+ i0.ɵɵadvance(1);
1456
+ i0.ɵɵtextInterpolate1(" ", action_r2, " ");
1457
+ }
1458
+ }
525
1459
  /**
526
1460
  * Component for displaying information from the logger
527
1461
  */
@@ -544,14 +1478,34 @@ class InfoPanelOverlayComponent {
544
1478
  this.actionsList = this.eventDisplay.getInfoLogger().getInfoLoggerList();
545
1479
  }
546
1480
  }
547
- InfoPanelOverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: InfoPanelOverlayComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
548
- InfoPanelOverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", 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"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OverlayComponent, selector: "app-overlay", inputs: ["overlayTitle", "active", "icon", "resizable", "transparentBody"] }] });
549
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: InfoPanelOverlayComponent, decorators: [{
1481
+ InfoPanelOverlayComponent.ɵfac = function InfoPanelOverlayComponent_Factory(t) { return new (t || InfoPanelOverlayComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
1482
+ InfoPanelOverlayComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: InfoPanelOverlayComponent, selectors: [["app-info-panel-overlay"]], inputs: { showInfoPanel: "showInfoPanel" }, decls: 6, vars: 5, consts: [["overlayTitle", "Info Panel", "icon", "info-panel", 3, "resizable", "active"], [1, "list-group", "list-group-flush"], [1, "list-group-item"], ["class", "list-group-item", 4, "ngIf"], ["class", "list-group-item", 4, "ngFor", "ngForOf"]], template: function InfoPanelOverlayComponent_Template(rf, ctx) {
1483
+ if (rf & 1) {
1484
+ i0.ɵɵelementStart(0, "app-overlay", 0)(1, "ul", 1)(2, "li", 2);
1485
+ i0.ɵɵtext(3);
1486
+ i0.ɵɵelementEnd();
1487
+ i0.ɵɵtemplate(4, InfoPanelOverlayComponent_li_4_Template, 2, 0, "li", 3);
1488
+ i0.ɵɵtemplate(5, InfoPanelOverlayComponent_li_5_Template, 2, 1, "li", 4);
1489
+ i0.ɵɵelementEnd()();
1490
+ }
1491
+ if (rf & 2) {
1492
+ i0.ɵɵproperty("resizable", true)("active", ctx.showInfoPanel);
1493
+ i0.ɵɵadvance(3);
1494
+ i0.ɵɵtextInterpolate1(" Phoenix Version: ", ctx.version, " ");
1495
+ i0.ɵɵadvance(1);
1496
+ i0.ɵɵproperty("ngIf", ctx.actionsList.length === 0);
1497
+ i0.ɵɵadvance(1);
1498
+ i0.ɵɵproperty("ngForOf", ctx.actionsList);
1499
+ }
1500
+ }, dependencies: [i2.NgForOf, i2.NgIf, OverlayComponent], styles: [".list-group-item[_ngcontent-%COMP%]{font-size:.8rem;padding:.5rem 1rem}"] });
1501
+ (function () {
1502
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoPanelOverlayComponent, [{
550
1503
  type: Component,
551
1504
  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"] }]
552
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { showInfoPanel: [{
1505
+ }], function () { return [{ type: EventDisplayService }]; }, { showInfoPanel: [{
553
1506
  type: Input
554
- }] } });
1507
+ }] });
1508
+ })();
555
1509
 
556
1510
  /**
557
1511
  * Component for toggling info panel overlay
@@ -589,16 +1543,28 @@ class InfoPanelComponent {
589
1543
  this.overlayWindow.instance.showInfoPanel = this.showInfoPanel;
590
1544
  }
591
1545
  }
592
- InfoPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: InfoPanelComponent, deps: [{ token: i1$1.Overlay }], target: i0.ɵɵFactoryTarget.Component });
593
- InfoPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", 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: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
594
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: InfoPanelComponent, decorators: [{
1546
+ InfoPanelComponent.ɵfac = function InfoPanelComponent_Factory(t) { return new (t || InfoPanelComponent)(i0.ɵɵdirectiveInject(i1$1.Overlay)); };
1547
+ InfoPanelComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: InfoPanelComponent, selectors: [["app-info-panel"]], decls: 1, vars: 1, consts: [["tooltip", "Info panel", "icon", "info-panel", 3, "active", "click"]], template: function InfoPanelComponent_Template(rf, ctx) {
1548
+ if (rf & 1) {
1549
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
1550
+ i0.ɵɵlistener("click", function InfoPanelComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleOverlay(); });
1551
+ i0.ɵɵelementEnd();
1552
+ }
1553
+ if (rf & 2) {
1554
+ i0.ɵɵproperty("active", ctx.showInfoPanel);
1555
+ }
1556
+ }, dependencies: [MenuToggleComponent] });
1557
+ (function () {
1558
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoPanelComponent, [{
595
1559
  type: Component,
596
1560
  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" }]
597
- }], ctorParameters: function () { return [{ type: i1$1.Overlay }]; } });
1561
+ }], function () { return [{ type: i1$1.Overlay }]; }, null);
1562
+ })();
598
1563
 
599
1564
  var EventDataFormat;
600
1565
  (function (EventDataFormat) {
601
1566
  EventDataFormat["JSON"] = "JSON";
1567
+ EventDataFormat["EDM4HEPJSON"] = "EDM4HEPJSON";
602
1568
  EventDataFormat["JIVEXML"] = "JIVEXML";
603
1569
  EventDataFormat["IG"] = "IG";
604
1570
  EventDataFormat["ZIP"] = "ZIP";
@@ -612,6 +1578,43 @@ class ImportOption {
612
1578
  }
613
1579
  }
614
1580
 
1581
+ function IOOptionsDialogComponent_div_4_ng_container_5_Template(rf, ctx) {
1582
+ if (rf & 1) {
1583
+ const _r10 = i0.ɵɵgetCurrentView();
1584
+ i0.ɵɵelementContainerStart(0);
1585
+ i0.ɵɵelementStart(1, "input", 28, 29);
1586
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_div_4_ng_container_5_Template_input_change_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r10); const eventDataImportOption_r7 = restoredCtx.$implicit; return i0.ɵɵresetView(eventDataImportOption_r7.handler($event.target.files)); });
1587
+ i0.ɵɵelementEnd();
1588
+ i0.ɵɵelementStart(3, "button", 8);
1589
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_div_4_ng_container_5_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r10); const _r8 = i0.ɵɵreference(2); return i0.ɵɵresetView(_r8.click()); });
1590
+ i0.ɵɵelement(4, "img", 30);
1591
+ i0.ɵɵtext(5);
1592
+ i0.ɵɵelementEnd();
1593
+ i0.ɵɵelementContainerEnd();
1594
+ }
1595
+ if (rf & 2) {
1596
+ const eventDataImportOption_r7 = ctx.$implicit;
1597
+ i0.ɵɵadvance(1);
1598
+ i0.ɵɵproperty("accept", eventDataImportOption_r7.accept);
1599
+ i0.ɵɵadvance(4);
1600
+ i0.ɵɵtextInterpolate1(" Load ", eventDataImportOption_r7.fileType, " ");
1601
+ }
1602
+ }
1603
+ function IOOptionsDialogComponent_div_4_Template(rf, ctx) {
1604
+ if (rf & 1) {
1605
+ i0.ɵɵelementStart(0, "div")(1, "p", 4)(2, "b");
1606
+ i0.ɵɵtext(3, "Event data");
1607
+ i0.ɵɵelementEnd()();
1608
+ i0.ɵɵelementStart(4, "div", 5);
1609
+ i0.ɵɵtemplate(5, IOOptionsDialogComponent_div_4_ng_container_5_Template, 6, 2, "ng-container", 27);
1610
+ i0.ɵɵelementEnd()();
1611
+ }
1612
+ if (rf & 2) {
1613
+ const ctx_r0 = i0.ɵɵnextContext();
1614
+ i0.ɵɵadvance(5);
1615
+ i0.ɵɵproperty("ngForOf", ctx_r0.eventDataOptionsWithHandler);
1616
+ }
1617
+ }
615
1618
  class IOOptionsDialogComponent {
616
1619
  constructor(eventDisplay, dialogRef) {
617
1620
  this.eventDisplay = eventDisplay;
@@ -619,6 +1622,7 @@ class IOOptionsDialogComponent {
619
1622
  this.eventDataImportOptions = [EventDataFormat.JSON];
620
1623
  this.supportedEventDataFormats = [
621
1624
  new ImportOption(EventDataFormat.JSON, '.json', this.handleJSONEventDataInput.bind(this), 'application/json'),
1625
+ new ImportOption(EventDataFormat.EDM4HEPJSON, '.edm4hep.json', this.handleEDM4HEPJSONEventDataInput.bind(this), 'application/json'),
622
1626
  new ImportOption(EventDataFormat.JIVEXML, '.xml', this.handleJiveXMLDataInput.bind(this), 'text/xml'),
623
1627
  new ImportOption(EventDataFormat.ZIP, '.zip', this.handleZipEventDataInput.bind(this), '.zip'),
624
1628
  new ImportOption(EventDataFormat.IG, '.ig', this.handleIgEventDataInput.bind(this), '.ig'),
@@ -658,6 +1662,16 @@ class IOOptionsDialogComponent {
658
1662
  };
659
1663
  this.handleFileInput(files[0], 'json', callback);
660
1664
  }
1665
+ handleEDM4HEPJSONEventDataInput(files) {
1666
+ const callback = (content) => {
1667
+ const json = typeof content === 'string' ? JSON.parse(content) : content;
1668
+ const edm4hepJsonLoader = new Edm4hepJsonLoader();
1669
+ edm4hepJsonLoader.setRawEventData(json);
1670
+ edm4hepJsonLoader.processEventData();
1671
+ this.eventDisplay.parsePhoenixEvents(edm4hepJsonLoader.getEventData());
1672
+ };
1673
+ this.handleFileInput(files[0], 'json', callback);
1674
+ }
661
1675
  handleJiveXMLDataInput(files) {
662
1676
  const callback = (content) => {
663
1677
  const jiveloader = new JiveXMLLoader();
@@ -717,25 +1731,35 @@ class IOOptionsDialogComponent {
717
1731
  });
718
1732
  }
719
1733
  handleZipEventDataInput(files) {
720
- if (!this.isFileOfExtension(files[0], 'zip')) {
721
- return;
722
- }
723
- this.handleZipInput(files[0], (allFilesWithData) => {
1734
+ return __awaiter(this, void 0, void 0, function* () {
1735
+ if (!this.isFileOfExtension(files[0], 'zip')) {
1736
+ return;
1737
+ }
724
1738
  const allEventsObject = {};
1739
+ let filesWithData;
1740
+ // Using a try catch block to catch any errors in Promises
1741
+ try {
1742
+ filesWithData = yield readZipFile(files[0]);
1743
+ }
1744
+ catch (error) {
1745
+ console.error('Error while reading zip', error);
1746
+ this.eventDisplay.getInfoLogger().add('Could not read zip file', 'Error');
1747
+ return;
1748
+ }
725
1749
  // JSON event data
726
- Object.keys(allFilesWithData)
1750
+ Object.keys(filesWithData)
727
1751
  .filter((fileName) => fileName.endsWith('.json'))
728
1752
  .forEach((fileName) => {
729
- Object.assign(allEventsObject, JSON.parse(allFilesWithData[fileName]));
1753
+ Object.assign(allEventsObject, JSON.parse(filesWithData[fileName]));
730
1754
  });
731
1755
  // JiveXML event data
732
1756
  const jiveloader = new JiveXMLLoader();
733
- Object.keys(allFilesWithData)
1757
+ Object.keys(filesWithData)
734
1758
  .filter((fileName) => {
735
1759
  return fileName.endsWith('.xml') || fileName.startsWith('JiveXML');
736
1760
  })
737
1761
  .forEach((fileName) => {
738
- jiveloader.process(allFilesWithData[fileName]);
1762
+ jiveloader.process(filesWithData[fileName]);
739
1763
  const eventData = jiveloader.getEventData();
740
1764
  Object.assign(allEventsObject, { [fileName]: eventData });
741
1765
  });
@@ -744,26 +1768,6 @@ class IOOptionsDialogComponent {
744
1768
  this.onClose();
745
1769
  });
746
1770
  }
747
- handleZipInput(file, callback) {
748
- return __awaiter(this, void 0, void 0, function* () {
749
- const allFilesWithData = {};
750
- // Using a try catch block to catch any errors in Promises
751
- try {
752
- const zipArchive = new JSZip();
753
- yield zipArchive.loadAsync(file);
754
- const allFiles = Object.keys(zipArchive.files);
755
- for (const singleFile of allFiles) {
756
- const fileData = yield zipArchive.file(singleFile).async('string');
757
- allFilesWithData[singleFile] = fileData;
758
- }
759
- callback(allFilesWithData);
760
- }
761
- catch (error) {
762
- console.error('Error while reading zip', error);
763
- this.eventDisplay.getInfoLogger().add('Could not read zip file', 'Error');
764
- }
765
- });
766
- }
767
1771
  handleFileInput(file, extension, callback) {
768
1772
  const reader = new FileReader();
769
1773
  if (this.isFileOfExtension(file, extension)) {
@@ -789,14 +1793,89 @@ class IOOptionsDialogComponent {
789
1793
  this.eventDisplay.exportToOBJ();
790
1794
  }
791
1795
  }
792
- IOOptionsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: IOOptionsDialogComponent, deps: [{ token: EventDisplayService }, { token: i1$2.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
793
- IOOptionsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", 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"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i2$2.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"] }] });
794
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: IOOptionsDialogComponent, decorators: [{
1796
+ IOOptionsDialogComponent.ɵfac = function IOOptionsDialogComponent_Factory(t) { return new (t || IOOptionsDialogComponent)(i0.ɵɵdirectiveInject(EventDisplayService), i0.ɵɵdirectiveInject(i1$2.MatDialogRef)); };
1797
+ IOOptionsDialogComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: IOOptionsDialogComponent, selectors: [["app-io-options-dialog"]], inputs: { eventDataImportOptions: "eventDataImportOptions" }, decls: 47, vars: 1, consts: [[1, "dialog"], ["mat-dialog-title", ""], ["mat-dialog-content", "", 1, "dialog-content"], [4, "ngIf"], [1, "text-center"], [1, "row", "centered"], ["type", "file", "tabindex", "-1", "accept", ".obj", "name", "image", 1, "file-input", 3, "change"], ["objFileInput", ""], [1, "file-input-button", 3, "click"], ["src", "assets/icons/obj.svg", "alt", ""], ["type", "file", "tabindex", "-1", "accept", ".gltf", "name", "image", 1, "file-input", 3, "change"], ["gltfFileInput", ""], ["src", "assets/icons/gltf.svg", "alt", ""], ["type", "file", "tabindex", "-1", "accept", ".root", 1, "file-input", 3, "change"], ["rootFileInput", ""], ["src", "assets/icons/file-import.svg", "alt", ""], ["type", "file", "tabindex", "-1", "accept", ".json.gz", 1, "file-input", 3, "change"], ["rootJSONFileInput", ""], ["id", "exportScene", 1, "file-input-button", "load-export", 3, "click"], ["src", "assets/icons/save.svg", "alt", ""], ["type", "file", "tabindex", "-1", "accept", ".phnx", "name", "image", 1, "file-input", 3, "change"], ["loadSceneInput", ""], ["id", "importScene", 1, "file-input-button", "load-export", 3, "click"], ["src", "assets/icons/upload.svg", "alt", ""], ["id", "exportOBJ", 1, "file-input-button", "export-button", 3, "click"], ["mat-dialog-actions", "", "align", "end"], ["mat-flat-button", "", "color", "primary", "cdkFocusInitial", "", 3, "click"], [4, "ngFor", "ngForOf"], ["type", "file", "tabindex", "-1", 1, "file-input", 3, "accept", "change"], ["eventDataFileInput", ""], ["src", "assets/icons/eventData.svg", "alt", "Event data icon"]], template: function IOOptionsDialogComponent_Template(rf, ctx) {
1798
+ if (rf & 1) {
1799
+ const _r12 = i0.ɵɵgetCurrentView();
1800
+ i0.ɵɵelementStart(0, "div", 0)(1, "h1", 1);
1801
+ i0.ɵɵtext(2, "Import and export");
1802
+ i0.ɵɵelementEnd();
1803
+ i0.ɵɵelementStart(3, "div", 2);
1804
+ i0.ɵɵtemplate(4, IOOptionsDialogComponent_div_4_Template, 6, 1, "div", 3);
1805
+ i0.ɵɵelementStart(5, "p", 4)(6, "b");
1806
+ i0.ɵɵtext(7, "Geometries");
1807
+ i0.ɵɵelementEnd()();
1808
+ i0.ɵɵelementStart(8, "div", 5)(9, "input", 6, 7);
1809
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_9_listener($event) { return ctx.handleOBJInput($event.target.files); });
1810
+ i0.ɵɵelementEnd();
1811
+ i0.ɵɵelementStart(11, "button", 8);
1812
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r12); const _r1 = i0.ɵɵreference(10); return i0.ɵɵresetView(_r1.click()); });
1813
+ i0.ɵɵelement(12, "img", 9);
1814
+ i0.ɵɵtext(13, " Load .obj ");
1815
+ i0.ɵɵelementEnd();
1816
+ i0.ɵɵelementStart(14, "input", 10, 11);
1817
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_14_listener($event) { return ctx.handleGLTFInput($event.target.files); });
1818
+ i0.ɵɵelementEnd();
1819
+ i0.ɵɵelementStart(16, "button", 8);
1820
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r12); const _r2 = i0.ɵɵreference(15); return i0.ɵɵresetView(_r2.click()); });
1821
+ i0.ɵɵelement(17, "img", 12);
1822
+ i0.ɵɵtext(18, " Load .gltf ");
1823
+ i0.ɵɵelementEnd();
1824
+ i0.ɵɵelementStart(19, "input", 13, 14);
1825
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_19_listener($event) { return ctx.handleROOTInput($event.target.files); });
1826
+ i0.ɵɵelementEnd();
1827
+ i0.ɵɵelementStart(21, "button", 8);
1828
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r12); const _r3 = i0.ɵɵreference(20); return i0.ɵɵresetView(_r3.click()); });
1829
+ i0.ɵɵelement(22, "img", 15);
1830
+ i0.ɵɵtext(23, " Load .root ");
1831
+ i0.ɵɵelementEnd();
1832
+ i0.ɵɵelementStart(24, "input", 16, 17);
1833
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_24_listener($event) { return ctx.handleRootJSONInput($event.target.files); });
1834
+ i0.ɵɵelementEnd();
1835
+ i0.ɵɵelementStart(26, "button", 8);
1836
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_26_listener() { i0.ɵɵrestoreView(_r12); const _r4 = i0.ɵɵreference(25); return i0.ɵɵresetView(_r4.click()); });
1837
+ i0.ɵɵelement(27, "img", 15);
1838
+ i0.ɵɵtext(28, " Load .json.gz ");
1839
+ i0.ɵɵelementEnd()();
1840
+ i0.ɵɵelementStart(29, "p", 4)(30, "b");
1841
+ i0.ɵɵtext(31, "Scene");
1842
+ i0.ɵɵelementEnd()();
1843
+ i0.ɵɵelementStart(32, "div", 5)(33, "button", 18);
1844
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_33_listener() { return ctx.saveScene(); });
1845
+ i0.ɵɵelement(34, "img", 19);
1846
+ i0.ɵɵtext(35, " Save scene ");
1847
+ i0.ɵɵelementEnd();
1848
+ i0.ɵɵelementStart(36, "input", 20, 21);
1849
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_36_listener($event) { return ctx.handlePhoenixInput($event.target.files); });
1850
+ i0.ɵɵelementEnd();
1851
+ i0.ɵɵelementStart(38, "button", 22);
1852
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_38_listener() { i0.ɵɵrestoreView(_r12); const _r5 = i0.ɵɵreference(37); return i0.ɵɵresetView(_r5.click()); });
1853
+ i0.ɵɵelement(39, "img", 23);
1854
+ i0.ɵɵtext(40, " Load scene ");
1855
+ i0.ɵɵelementEnd();
1856
+ i0.ɵɵelementStart(41, "button", 24);
1857
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_41_listener() { return ctx.exportOBJ(); });
1858
+ i0.ɵɵelement(42, "img", 9);
1859
+ i0.ɵɵtext(43, " Save OBJ ");
1860
+ i0.ɵɵelementEnd()()();
1861
+ i0.ɵɵelementStart(44, "div", 25)(45, "button", 26);
1862
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_45_listener() { return ctx.onClose(); });
1863
+ i0.ɵɵtext(46, " Close ");
1864
+ i0.ɵɵelementEnd()()();
1865
+ }
1866
+ if (rf & 2) {
1867
+ i0.ɵɵadvance(4);
1868
+ i0.ɵɵproperty("ngIf", ctx.eventDataImportOptions.length > 0);
1869
+ }
1870
+ }, dependencies: [i2.NgForOf, i2.NgIf, i1$2.MatDialogTitle, i1$2.MatDialogContent, i1$2.MatDialogActions, i2$2.MatButton], styles: [".row[_ngcontent-%COMP%]{justify-content:center;margin:1rem 0}.file-input[_ngcontent-%COMP%]{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.file-input-button[_ngcontent-%COMP%]{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[_ngcontent-%COMP%]{padding:.8em .2em;width:7rem}.file-input-button.load-export[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{max-height:1.2em}.file-input-button.export-button[_ngcontent-%COMP%]{background-color:#cb7133}.file-input-button.export-button[_ngcontent-%COMP%]:hover{background-color:#ad5b2d}.file-input-button[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{max-height:2em;display:block;width:100%}.file-input-button[_ngcontent-%COMP%]:hover{background-color:#118ab2}#exportScene[_ngcontent-%COMP%]{background-color:#5bd99e}#exportScene[_ngcontent-%COMP%]:hover{background-color:#05c292}#importScene[_ngcontent-%COMP%]{background-color:#ecc25e}#importScene[_ngcontent-%COMP%]:hover{background-color:#d6b44d}"] });
1871
+ (function () {
1872
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IOOptionsDialogComponent, [{
795
1873
  type: Component,
796
- 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"] }]
797
- }], ctorParameters: function () { return [{ type: EventDisplayService }, { type: i1$2.MatDialogRef }]; }, propDecorators: { eventDataImportOptions: [{
1874
+ args: [{ selector: 'app-io-options-dialog', template: "<div class=\"dialog\">\n <h1 mat-dialog-title>Import and export</h1>\n <div mat-dialog-content class=\"dialog-content\">\n <div *ngIf=\"eventDataImportOptions.length > 0\">\n <p class=\"text-center\"><b>Event data</b></p>\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 </div>\n\n <p class=\"text-center\"><b>Geometries</b></p>\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\"><b>Scene</b></p>\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\n <div mat-dialog-actions align=\"end\">\n <button mat-flat-button color=\"primary\" (click)=\"onClose()\" cdkFocusInitial>\n Close\n </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"] }]
1875
+ }], function () { return [{ type: EventDisplayService }, { type: i1$2.MatDialogRef }]; }, { eventDataImportOptions: [{
798
1876
  type: Input
799
- }] } });
1877
+ }] });
1878
+ })();
800
1879
 
801
1880
  class IoOptionsComponent {
802
1881
  constructor(dialog) {
@@ -811,14 +1890,25 @@ class IoOptionsComponent {
811
1890
  this.eventDataImportOptions;
812
1891
  }
813
1892
  }
814
- IoOptionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: IoOptionsComponent, deps: [{ token: i1$2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
815
- IoOptionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", 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: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
816
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: IoOptionsComponent, decorators: [{
1893
+ IoOptionsComponent.ɵfac = function IoOptionsComponent_Factory(t) { return new (t || IoOptionsComponent)(i0.ɵɵdirectiveInject(i1$2.MatDialog)); };
1894
+ IoOptionsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: IoOptionsComponent, selectors: [["app-io-options"]], inputs: { eventDataImportOptions: "eventDataImportOptions" }, decls: 1, vars: 1, consts: [["tooltip", "Import and export options", "icon", "import", 3, "active", "click"]], template: function IoOptionsComponent_Template(rf, ctx) {
1895
+ if (rf & 1) {
1896
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
1897
+ i0.ɵɵlistener("click", function IoOptionsComponent_Template_app_menu_toggle_click_0_listener() { return ctx.openIODialog(); });
1898
+ i0.ɵɵelementEnd();
1899
+ }
1900
+ if (rf & 2) {
1901
+ i0.ɵɵproperty("active", false);
1902
+ }
1903
+ }, dependencies: [MenuToggleComponent] });
1904
+ (function () {
1905
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IoOptionsComponent, [{
817
1906
  type: Component,
818
1907
  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" }]
819
- }], ctorParameters: function () { return [{ type: i1$2.MatDialog }]; }, propDecorators: { eventDataImportOptions: [{
1908
+ }], function () { return [{ type: i1$2.MatDialog }]; }, { eventDataImportOptions: [{
820
1909
  type: Input
821
- }] } });
1910
+ }] });
1911
+ })();
822
1912
 
823
1913
  class MainViewToggleComponent {
824
1914
  constructor(eventDisplay) {
@@ -832,12 +1922,23 @@ class MainViewToggleComponent {
832
1922
  .toggleOrthographicView(this.orthographicView);
833
1923
  }
834
1924
  }
835
- MainViewToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: MainViewToggleComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
836
- MainViewToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", 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: [""], dependencies: [{ kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
837
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: MainViewToggleComponent, decorators: [{
1925
+ MainViewToggleComponent.ɵfac = function MainViewToggleComponent_Factory(t) { return new (t || MainViewToggleComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
1926
+ MainViewToggleComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MainViewToggleComponent, selectors: [["app-main-view-toggle"]], decls: 1, vars: 2, consts: [[3, "icon", "matTooltip", "click"]], template: function MainViewToggleComponent_Template(rf, ctx) {
1927
+ if (rf & 1) {
1928
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
1929
+ i0.ɵɵlistener("click", function MainViewToggleComponent_Template_app_menu_toggle_click_0_listener() { return ctx.switchMainView(); });
1930
+ i0.ɵɵelementEnd();
1931
+ }
1932
+ if (rf & 2) {
1933
+ i0.ɵɵproperty("icon", ctx.orthographicView ? "perspective" : "orthographic")("matTooltip", "Switch to " + (ctx.orthographicView ? "perspective" : "orthographic") + " view");
1934
+ }
1935
+ }, dependencies: [i2$3.MatTooltip, MenuToggleComponent] });
1936
+ (function () {
1937
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MainViewToggleComponent, [{
838
1938
  type: Component,
839
1939
  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" }]
840
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
1940
+ }], function () { return [{ type: EventDisplayService }]; }, null);
1941
+ })();
841
1942
 
842
1943
  class ObjectClippingComponent {
843
1944
  constructor(eventDisplay) {
@@ -847,12 +1948,10 @@ class ObjectClippingComponent {
847
1948
  stateManager.startClippingAngle.onUpdate((value) => (this.startClippingAngle = value));
848
1949
  stateManager.openingClippingAngle.onUpdate((value) => (this.openingClippingAngle = value));
849
1950
  }
850
- changeStartClippingAngle(change) {
851
- const startingAngle = change.value;
1951
+ changeStartClippingAngle(startingAngle) {
852
1952
  this.eventDisplay.getUIManager().rotateStartAngleClipping(startingAngle);
853
1953
  }
854
- changeOpeningClippingAngle(change) {
855
- const openingAngle = change.value;
1954
+ changeOpeningClippingAngle(openingAngle) {
856
1955
  this.eventDisplay.getUIManager().rotateOpeningAngleClipping(openingAngle);
857
1956
  }
858
1957
  toggleClipping(change) {
@@ -861,12 +1960,50 @@ class ObjectClippingComponent {
861
1960
  this.clippingEnabled = value;
862
1961
  }
863
1962
  }
864
- ObjectClippingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ObjectClippingComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
865
- ObjectClippingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: ObjectClippingComponent, selector: "app-object-clipping", ngImport: i0, template: "<mat-menu class=\"mat-menu\" #menu>\n <button\n mat-menu-item\n (click)=\"\n $event.stopPropagation();\n clippingCheckbox._inputElement.nativeElement.click()\n \"\n >\n <mat-checkbox\n #clippingCheckbox\n [checked]=\"clippingEnabled\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleClipping($event)\"\n >Clipping\n </mat-checkbox>\n </button>\n <button\n class=\"slider-btn\"\n mat-menu-item\n (focus)=\"startingAngleSlider.focus()\"\n >\n <mat-slider\n #startingAngleSlider\n min=\"0\"\n max=\"360\"\n step=\"1\"\n thumbLabel\n [value]=\"startClippingAngle\"\n (click)=\"$event.stopPropagation()\"\n (input)=\"changeStartClippingAngle($event)\"\n >\n </mat-slider\n >Start Angle\n </button>\n <button class=\"slider-btn\" mat-menu-item (focus)=\"openingAngleSlider.focus()\">\n <mat-slider\n #openingAngleSlider\n min=\"0\"\n max=\"360\"\n step=\"1\"\n thumbLabel\n [value]=\"openingClippingAngle\"\n (click)=\"$event.stopPropagation()\"\n (input)=\"changeOpeningClippingAngle($event)\"\n >\n </mat-slider\n >Opening Angle\n </button>\n</mat-menu>\n\n<app-menu-toggle\n [matMenuTriggerFor]=\"menu\"\n tooltip=\"Geometry clipping\"\n icon=\"clipping\"\n [active]=\"clippingEnabled\"\n>\n</app-menu-toggle>\n", styles: [".slider-btn{overflow:visible}mat-slider{margin-left:.75rem;margin-right:.75rem}\n"], dependencies: [{ kind: "component", type: i3$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i3$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i2$1.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "displayWith", "valueText", "vertical"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
866
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ObjectClippingComponent, decorators: [{
1963
+ ObjectClippingComponent.ɵfac = function ObjectClippingComponent_Factory(t) { return new (t || ObjectClippingComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
1964
+ ObjectClippingComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ObjectClippingComponent, selectors: [["app-object-clipping"]], decls: 17, vars: 5, consts: [[1, "mat-menu"], ["menu", ""], ["mat-menu-item", "", 3, "click"], [3, "checked", "click", "change"], ["clippingCheckbox", ""], ["mat-menu-item", "", 1, "slider-btn", 3, "focus"], ["min", "0", "max", "360", "step", "1", "thumbLabel", ""], ["matSliderThumb", "", 3, "value", "valueChange"], ["startingAngleSlider", ""], ["openingAngleSlider", ""], ["tooltip", "Geometry clipping", "icon", "clipping", 3, "matMenuTriggerFor", "active"]], template: function ObjectClippingComponent_Template(rf, ctx) {
1965
+ if (rf & 1) {
1966
+ const _r4 = i0.ɵɵgetCurrentView();
1967
+ i0.ɵɵelementStart(0, "mat-menu", 0, 1)(2, "button", 2);
1968
+ i0.ɵɵlistener("click", function ObjectClippingComponent_Template_button_click_2_listener($event) { i0.ɵɵrestoreView(_r4); const _r1 = i0.ɵɵreference(4); $event.stopPropagation(); return i0.ɵɵresetView(_r1._inputElement.nativeElement.click()); });
1969
+ i0.ɵɵelementStart(3, "mat-checkbox", 3, 4);
1970
+ i0.ɵɵlistener("click", function ObjectClippingComponent_Template_mat_checkbox_click_3_listener($event) { return $event.stopPropagation(); })("change", function ObjectClippingComponent_Template_mat_checkbox_change_3_listener($event) { return ctx.toggleClipping($event); });
1971
+ i0.ɵɵtext(5, " Clipping ");
1972
+ i0.ɵɵelementEnd()();
1973
+ i0.ɵɵelementStart(6, "button", 5);
1974
+ i0.ɵɵlistener("focus", function ObjectClippingComponent_Template_button_focus_6_listener() { i0.ɵɵrestoreView(_r4); const _r2 = i0.ɵɵreference(9); return i0.ɵɵresetView(_r2.focus()); });
1975
+ i0.ɵɵelementStart(7, "mat-slider", 6)(8, "input", 7, 8);
1976
+ i0.ɵɵlistener("valueChange", function ObjectClippingComponent_Template_input_valueChange_8_listener($event) { return ctx.changeStartClippingAngle($event); });
1977
+ i0.ɵɵelementEnd()();
1978
+ i0.ɵɵtext(10, " Start Angle ");
1979
+ i0.ɵɵelementEnd();
1980
+ i0.ɵɵelementStart(11, "button", 5);
1981
+ i0.ɵɵlistener("focus", function ObjectClippingComponent_Template_button_focus_11_listener() { i0.ɵɵrestoreView(_r4); const _r3 = i0.ɵɵreference(14); return i0.ɵɵresetView(_r3.focus()); });
1982
+ i0.ɵɵelementStart(12, "mat-slider", 6)(13, "input", 7, 9);
1983
+ i0.ɵɵlistener("valueChange", function ObjectClippingComponent_Template_input_valueChange_13_listener($event) { return ctx.changeOpeningClippingAngle($event); });
1984
+ i0.ɵɵelementEnd()();
1985
+ i0.ɵɵtext(15, " Opening Angle ");
1986
+ i0.ɵɵelementEnd()();
1987
+ i0.ɵɵelement(16, "app-menu-toggle", 10);
1988
+ }
1989
+ if (rf & 2) {
1990
+ const _r0 = i0.ɵɵreference(1);
1991
+ i0.ɵɵadvance(3);
1992
+ i0.ɵɵproperty("checked", ctx.clippingEnabled);
1993
+ i0.ɵɵadvance(5);
1994
+ i0.ɵɵproperty("value", ctx.startClippingAngle);
1995
+ i0.ɵɵadvance(5);
1996
+ i0.ɵɵproperty("value", ctx.openingClippingAngle);
1997
+ i0.ɵɵadvance(3);
1998
+ i0.ɵɵproperty("matMenuTriggerFor", _r0)("active", ctx.clippingEnabled);
1999
+ }
2000
+ }, dependencies: [i3$1.MatMenu, i3$1.MatMenuItem, i3$1.MatMenuTrigger, i2$1.MatSlider, i2$1.MatSliderThumb, i4.MatCheckbox, MenuToggleComponent], styles: [".slider-btn[_ngcontent-%COMP%]{overflow:visible}mat-slider[_ngcontent-%COMP%]{margin-left:.75rem;margin-right:.75rem}"] });
2001
+ (function () {
2002
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ObjectClippingComponent, [{
867
2003
  type: Component,
868
- args: [{ selector: 'app-object-clipping', template: "<mat-menu class=\"mat-menu\" #menu>\n <button\n mat-menu-item\n (click)=\"\n $event.stopPropagation();\n clippingCheckbox._inputElement.nativeElement.click()\n \"\n >\n <mat-checkbox\n #clippingCheckbox\n [checked]=\"clippingEnabled\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleClipping($event)\"\n >Clipping\n </mat-checkbox>\n </button>\n <button\n class=\"slider-btn\"\n mat-menu-item\n (focus)=\"startingAngleSlider.focus()\"\n >\n <mat-slider\n #startingAngleSlider\n min=\"0\"\n max=\"360\"\n step=\"1\"\n thumbLabel\n [value]=\"startClippingAngle\"\n (click)=\"$event.stopPropagation()\"\n (input)=\"changeStartClippingAngle($event)\"\n >\n </mat-slider\n >Start Angle\n </button>\n <button class=\"slider-btn\" mat-menu-item (focus)=\"openingAngleSlider.focus()\">\n <mat-slider\n #openingAngleSlider\n min=\"0\"\n max=\"360\"\n step=\"1\"\n thumbLabel\n [value]=\"openingClippingAngle\"\n (click)=\"$event.stopPropagation()\"\n (input)=\"changeOpeningClippingAngle($event)\"\n >\n </mat-slider\n >Opening Angle\n </button>\n</mat-menu>\n\n<app-menu-toggle\n [matMenuTriggerFor]=\"menu\"\n tooltip=\"Geometry clipping\"\n icon=\"clipping\"\n [active]=\"clippingEnabled\"\n>\n</app-menu-toggle>\n", styles: [".slider-btn{overflow:visible}mat-slider{margin-left:.75rem;margin-right:.75rem}\n"] }]
869
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
2004
+ args: [{ selector: 'app-object-clipping', template: "<mat-menu class=\"mat-menu\" #menu>\n <button\n mat-menu-item\n (click)=\"\n $event.stopPropagation();\n clippingCheckbox._inputElement.nativeElement.click()\n \"\n >\n <mat-checkbox\n #clippingCheckbox\n [checked]=\"clippingEnabled\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleClipping($event)\"\n >\n Clipping\n </mat-checkbox>\n </button>\n <button\n class=\"slider-btn\"\n mat-menu-item\n (focus)=\"startingAngleSlider.focus()\"\n >\n <mat-slider min=\"0\" max=\"360\" step=\"1\" thumbLabel>\n <input\n #startingAngleSlider\n matSliderThumb\n [value]=\"startClippingAngle\"\n (valueChange)=\"changeStartClippingAngle($event)\"\n />\n </mat-slider>\n Start Angle\n </button>\n <button class=\"slider-btn\" mat-menu-item (focus)=\"openingAngleSlider.focus()\">\n <mat-slider min=\"0\" max=\"360\" step=\"1\" thumbLabel>\n <input\n #openingAngleSlider\n matSliderThumb\n [value]=\"openingClippingAngle\"\n (valueChange)=\"changeOpeningClippingAngle($event)\"\n />\n </mat-slider>\n Opening Angle\n </button>\n</mat-menu>\n\n<app-menu-toggle\n [matMenuTriggerFor]=\"menu\"\n tooltip=\"Geometry clipping\"\n icon=\"clipping\"\n [active]=\"clippingEnabled\"\n>\n</app-menu-toggle>\n", styles: [".slider-btn{overflow:visible}mat-slider{margin-left:.75rem;margin-right:.75rem}\n"] }]
2005
+ }], function () { return [{ type: EventDisplayService }]; }, null);
2006
+ })();
870
2007
 
871
2008
  /**
872
2009
  * Pipe for transforming selected object attributes to a better format.
@@ -890,15 +2027,46 @@ class AttributePipe {
890
2027
  return transformedValue;
891
2028
  }
892
2029
  }
893
- AttributePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: AttributePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
894
- AttributePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.4", ngImport: i0, type: AttributePipe, name: "attributePipe" });
895
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: AttributePipe, decorators: [{
2030
+ AttributePipe.ɵfac = function AttributePipe_Factory(t) { return new (t || AttributePipe)(); };
2031
+ AttributePipe.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "attributePipe", type: AttributePipe, pure: true });
2032
+ (function () {
2033
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AttributePipe, [{
896
2034
  type: Pipe,
897
2035
  args: [{
898
2036
  name: 'attributePipe',
899
2037
  }]
900
- }] });
2038
+ }], null, null);
2039
+ })();
901
2040
 
2041
+ function ObjectSelectionOverlayComponent_div_1_div_1_Template(rf, ctx) {
2042
+ if (rf & 1) {
2043
+ i0.ɵɵelementStart(0, "div", 4)(1, "strong");
2044
+ i0.ɵɵtext(2);
2045
+ i0.ɵɵelementEnd();
2046
+ i0.ɵɵtext(3);
2047
+ i0.ɵɵpipe(4, "attributePipe");
2048
+ i0.ɵɵelementEnd();
2049
+ }
2050
+ if (rf & 2) {
2051
+ const attribute_r2 = ctx.$implicit;
2052
+ i0.ɵɵadvance(2);
2053
+ i0.ɵɵtextInterpolate(attribute_r2.attributeName);
2054
+ i0.ɵɵadvance(1);
2055
+ i0.ɵɵtextInterpolate1(" : ", i0.ɵɵpipeBind1(4, 2, attribute_r2.attributeValue), " ");
2056
+ }
2057
+ }
2058
+ function ObjectSelectionOverlayComponent_div_1_Template(rf, ctx) {
2059
+ if (rf & 1) {
2060
+ i0.ɵɵelementStart(0, "div", 2);
2061
+ i0.ɵɵtemplate(1, ObjectSelectionOverlayComponent_div_1_div_1_Template, 5, 4, "div", 3);
2062
+ i0.ɵɵelementEnd();
2063
+ }
2064
+ if (rf & 2) {
2065
+ const ctx_r0 = i0.ɵɵnextContext();
2066
+ i0.ɵɵadvance(1);
2067
+ i0.ɵɵproperty("ngForOf", ctx_r0.selectedObject.attributes);
2068
+ }
2069
+ }
902
2070
  class ObjectSelectionOverlayComponent {
903
2071
  constructor(eventDisplay) {
904
2072
  this.eventDisplay = eventDisplay;
@@ -908,14 +2076,27 @@ class ObjectSelectionOverlayComponent {
908
2076
  this.eventDisplay.allowSelection(this.selectedObject);
909
2077
  }
910
2078
  }
911
- ObjectSelectionOverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ObjectSelectionOverlayComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
912
- ObjectSelectionOverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: ObjectSelectionOverlayComponent, selector: "app-object-selection-overlay", inputs: { hiddenSelectedInfo: "hiddenSelectedInfo" }, ngImport: i0, template: "<app-overlay\n icon=\"cursor\"\n [overlayTitle]=\"selectedObject.name\"\n [active]=\"!hiddenSelectedInfo\"\n>\n <div\n id=\"selectedObjectPanelBody\"\n class=\"m-1\"\n *ngIf=\"selectedObject.attributes.length > 0\"\n >\n <div\n *ngFor=\"let attribute of selectedObject.attributes\"\n class=\"attributeField\"\n >\n <strong>{{ attribute.attributeName }}</strong>\n : {{ attribute.attributeValue | attributePipe }}\n </div>\n </div>\n</app-overlay>\n", styles: ["#selectedObjectPanelBody{padding:0 .8em;overflow:auto;max-width:300px;max-height:16rem;min-width:7rem}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OverlayComponent, selector: "app-overlay", inputs: ["overlayTitle", "active", "icon", "resizable", "transparentBody"] }, { kind: "pipe", type: AttributePipe, name: "attributePipe" }] });
913
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ObjectSelectionOverlayComponent, decorators: [{
2079
+ ObjectSelectionOverlayComponent.ɵfac = function ObjectSelectionOverlayComponent_Factory(t) { return new (t || ObjectSelectionOverlayComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2080
+ ObjectSelectionOverlayComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ObjectSelectionOverlayComponent, selectors: [["app-object-selection-overlay"]], inputs: { hiddenSelectedInfo: "hiddenSelectedInfo" }, decls: 2, vars: 3, consts: [["icon", "cursor", 3, "overlayTitle", "active"], ["id", "selectedObjectPanelBody", "class", "m-1", 4, "ngIf"], ["id", "selectedObjectPanelBody", 1, "m-1"], ["class", "attributeField", 4, "ngFor", "ngForOf"], [1, "attributeField"]], template: function ObjectSelectionOverlayComponent_Template(rf, ctx) {
2081
+ if (rf & 1) {
2082
+ i0.ɵɵelementStart(0, "app-overlay", 0);
2083
+ i0.ɵɵtemplate(1, ObjectSelectionOverlayComponent_div_1_Template, 2, 1, "div", 1);
2084
+ i0.ɵɵelementEnd();
2085
+ }
2086
+ if (rf & 2) {
2087
+ i0.ɵɵproperty("overlayTitle", ctx.selectedObject.name)("active", !ctx.hiddenSelectedInfo);
2088
+ i0.ɵɵadvance(1);
2089
+ i0.ɵɵproperty("ngIf", ctx.selectedObject.attributes.length > 0);
2090
+ }
2091
+ }, dependencies: [i2.NgForOf, i2.NgIf, OverlayComponent, AttributePipe], styles: ["#selectedObjectPanelBody[_ngcontent-%COMP%]{padding:0 .8em;overflow:auto;max-width:300px;max-height:16rem;min-width:7rem}"] });
2092
+ (function () {
2093
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ObjectSelectionOverlayComponent, [{
914
2094
  type: Component,
915
2095
  args: [{ selector: 'app-object-selection-overlay', template: "<app-overlay\n icon=\"cursor\"\n [overlayTitle]=\"selectedObject.name\"\n [active]=\"!hiddenSelectedInfo\"\n>\n <div\n id=\"selectedObjectPanelBody\"\n class=\"m-1\"\n *ngIf=\"selectedObject.attributes.length > 0\"\n >\n <div\n *ngFor=\"let attribute of selectedObject.attributes\"\n class=\"attributeField\"\n >\n <strong>{{ attribute.attributeName }}</strong>\n : {{ attribute.attributeValue | attributePipe }}\n </div>\n </div>\n</app-overlay>\n", styles: ["#selectedObjectPanelBody{padding:0 .8em;overflow:auto;max-width:300px;max-height:16rem;min-width:7rem}\n"] }]
916
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { hiddenSelectedInfo: [{
2096
+ }], function () { return [{ type: EventDisplayService }]; }, { hiddenSelectedInfo: [{
917
2097
  type: Input
918
- }] } });
2098
+ }] });
2099
+ })();
919
2100
 
920
2101
  class ObjectSelectionComponent {
921
2102
  constructor(overlay, eventDisplay) {
@@ -939,13 +2120,25 @@ class ObjectSelectionComponent {
939
2120
  this.eventDisplay.enableSelecting(!this.hiddenSelectedInfo);
940
2121
  }
941
2122
  }
942
- ObjectSelectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ObjectSelectionComponent, deps: [{ token: i1$1.Overlay }, { token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
943
- ObjectSelectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: ObjectSelectionComponent, selector: "app-object-selection", ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Object selection\"\n icon=\"cursor\"\n [active]=\"!hiddenSelectedInfo\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n", styles: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
944
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ObjectSelectionComponent, decorators: [{
2123
+ ObjectSelectionComponent.ɵfac = function ObjectSelectionComponent_Factory(t) { return new (t || ObjectSelectionComponent)(i0.ɵɵdirectiveInject(i1$1.Overlay), i0.ɵɵdirectiveInject(EventDisplayService)); };
2124
+ ObjectSelectionComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ObjectSelectionComponent, selectors: [["app-object-selection"]], decls: 1, vars: 1, consts: [["tooltip", "Object selection", "icon", "cursor", 3, "active", "click"]], template: function ObjectSelectionComponent_Template(rf, ctx) {
2125
+ if (rf & 1) {
2126
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
2127
+ i0.ɵɵlistener("click", function ObjectSelectionComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleOverlay(); });
2128
+ i0.ɵɵelementEnd();
2129
+ }
2130
+ if (rf & 2) {
2131
+ i0.ɵɵproperty("active", !ctx.hiddenSelectedInfo);
2132
+ }
2133
+ }, dependencies: [MenuToggleComponent] });
2134
+ (function () {
2135
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ObjectSelectionComponent, [{
945
2136
  type: Component,
946
2137
  args: [{ selector: 'app-object-selection', template: "<app-menu-toggle\n tooltip=\"Object selection\"\n icon=\"cursor\"\n [active]=\"!hiddenSelectedInfo\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n" }]
947
- }], ctorParameters: function () { return [{ type: i1$1.Overlay }, { type: EventDisplayService }]; } });
2138
+ }], function () { return [{ type: i1$1.Overlay }, { type: EventDisplayService }]; }, null);
2139
+ })();
948
2140
 
2141
+ const _c0$5 = ["overlayWindow"];
949
2142
  class OverlayViewWindowComponent {
950
2143
  constructor(eventDisplay) {
951
2144
  this.eventDisplay = eventDisplay;
@@ -981,17 +2174,50 @@ class OverlayViewWindowComponent {
981
2174
  this.transparentBody = !this.transparentBody;
982
2175
  }
983
2176
  }
984
- OverlayViewWindowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: OverlayViewWindowComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
985
- OverlayViewWindowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: OverlayViewWindowComponent, selector: "app-overlay-view-window", inputs: { showOverlay: "showOverlay" }, viewQueries: [{ propertyName: "overlayWindow", first: true, predicate: ["overlayWindow"], descendants: true }], ngImport: i0, template: "<app-overlay\n overlayTitle=\"Overlay View\"\n icon=\"overlay\"\n [resizable]=\"true\"\n [transparentBody]=\"transparentBody\"\n [active]=\"showOverlay\"\n>\n <div class=\"overlay-view-wrapper\">\n <canvas #overlayWindow id=\"overlay-canvas\" [hidden]=\"!showOverlay\">\n </canvas>\n <div class=\"overlay-view-controls position-absolute d-flex flex-row\">\n <app-menu-toggle\n class=\"overlay-view-control\"\n icon=\"transparent\"\n matTooltip=\"Toggle background transparency\"\n (click)=\"toggleBgTransparency()\"\n >\n </app-menu-toggle>\n <app-menu-toggle\n class=\"overlay-view-control\"\n icon=\"move-lock\"\n [matTooltip]=\"(overlayViewFixed ? 'Restore' : 'Fix') + ' overlay view'\"\n [active]=\"overlayViewFixed\"\n (click)=\"fixOverlayView()\"\n >\n </app-menu-toggle>\n <app-menu-toggle\n class=\"overlay-view-control\"\n [icon]=\"orthographicView ? 'orthographic' : 'perspective'\"\n [matTooltip]=\"\n 'Switch to ' +\n (orthographicView ? 'orthographic' : 'perspective') +\n ' view'\n \"\n (click)=\"switchOverlayView()\"\n >\n </app-menu-toggle>\n </div>\n </div>\n</app-overlay>\n", styles: ["#overlay-canvas{background-color:#0000001a;width:100%}.overlay-view-controls{bottom:1em;right:1em;opacity:0;transition:opacity .2s}.overlay-view-controls .overlay-view-control{background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);overflow:hidden;width:2.5rem;height:2.5rem;border-radius:50%;display:flex;justify-content:center;align-items:center}.overlay-view-wrapper:hover .overlay-view-controls{opacity:1;transition:opacity .2s}\n"], dependencies: [{ kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }, { kind: "component", type: OverlayComponent, selector: "app-overlay", inputs: ["overlayTitle", "active", "icon", "resizable", "transparentBody"] }] });
986
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: OverlayViewWindowComponent, decorators: [{
2177
+ OverlayViewWindowComponent.ɵfac = function OverlayViewWindowComponent_Factory(t) { return new (t || OverlayViewWindowComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2178
+ OverlayViewWindowComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OverlayViewWindowComponent, selectors: [["app-overlay-view-window"]], viewQuery: function OverlayViewWindowComponent_Query(rf, ctx) {
2179
+ if (rf & 1) {
2180
+ i0.ɵɵviewQuery(_c0$5, 5);
2181
+ }
2182
+ if (rf & 2) {
2183
+ let _t;
2184
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.overlayWindow = _t.first);
2185
+ }
2186
+ }, inputs: { showOverlay: "showOverlay" }, decls: 8, vars: 8, consts: [["overlayTitle", "Overlay View", "icon", "overlay", 3, "resizable", "transparentBody", "active"], [1, "overlay-view-wrapper"], ["id", "overlay-canvas", 3, "hidden"], ["overlayWindow", ""], [1, "overlay-view-controls", "position-absolute", "d-flex", "flex-row"], ["icon", "transparent", "matTooltip", "Toggle background transparency", 1, "overlay-view-control", 3, "click"], ["icon", "move-lock", 1, "overlay-view-control", 3, "matTooltip", "active", "click"], [1, "overlay-view-control", 3, "icon", "matTooltip", "click"]], template: function OverlayViewWindowComponent_Template(rf, ctx) {
2187
+ if (rf & 1) {
2188
+ i0.ɵɵelementStart(0, "app-overlay", 0)(1, "div", 1);
2189
+ i0.ɵɵelement(2, "canvas", 2, 3);
2190
+ i0.ɵɵelementStart(4, "div", 4)(5, "app-menu-toggle", 5);
2191
+ i0.ɵɵlistener("click", function OverlayViewWindowComponent_Template_app_menu_toggle_click_5_listener() { return ctx.toggleBgTransparency(); });
2192
+ i0.ɵɵelementEnd();
2193
+ i0.ɵɵelementStart(6, "app-menu-toggle", 6);
2194
+ i0.ɵɵlistener("click", function OverlayViewWindowComponent_Template_app_menu_toggle_click_6_listener() { return ctx.fixOverlayView(); });
2195
+ i0.ɵɵelementEnd();
2196
+ i0.ɵɵelementStart(7, "app-menu-toggle", 7);
2197
+ i0.ɵɵlistener("click", function OverlayViewWindowComponent_Template_app_menu_toggle_click_7_listener() { return ctx.switchOverlayView(); });
2198
+ i0.ɵɵelementEnd()()()();
2199
+ }
2200
+ if (rf & 2) {
2201
+ i0.ɵɵproperty("resizable", true)("transparentBody", ctx.transparentBody)("active", ctx.showOverlay);
2202
+ i0.ɵɵadvance(2);
2203
+ i0.ɵɵproperty("hidden", !ctx.showOverlay);
2204
+ i0.ɵɵadvance(4);
2205
+ i0.ɵɵproperty("matTooltip", (ctx.overlayViewFixed ? "Restore" : "Fix") + " overlay view")("active", ctx.overlayViewFixed);
2206
+ i0.ɵɵadvance(1);
2207
+ i0.ɵɵproperty("icon", ctx.orthographicView ? "orthographic" : "perspective")("matTooltip", "Switch to " + (ctx.orthographicView ? "orthographic" : "perspective") + " view");
2208
+ }
2209
+ }, dependencies: [i2$3.MatTooltip, MenuToggleComponent, OverlayComponent], styles: ["#overlay-canvas[_ngcontent-%COMP%]{background-color:#0000001a;width:100%}.overlay-view-controls[_ngcontent-%COMP%]{bottom:1em;right:1em;opacity:0;transition:opacity .2s}.overlay-view-controls[_ngcontent-%COMP%] .overlay-view-control[_ngcontent-%COMP%]{background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);overflow:hidden;width:2.5rem;height:2.5rem;border-radius:50%;display:flex;justify-content:center;align-items:center}.overlay-view-wrapper[_ngcontent-%COMP%]:hover .overlay-view-controls[_ngcontent-%COMP%]{opacity:1;transition:opacity .2s}"] });
2210
+ (function () {
2211
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OverlayViewWindowComponent, [{
987
2212
  type: Component,
988
2213
  args: [{ selector: 'app-overlay-view-window', template: "<app-overlay\n overlayTitle=\"Overlay View\"\n icon=\"overlay\"\n [resizable]=\"true\"\n [transparentBody]=\"transparentBody\"\n [active]=\"showOverlay\"\n>\n <div class=\"overlay-view-wrapper\">\n <canvas #overlayWindow id=\"overlay-canvas\" [hidden]=\"!showOverlay\">\n </canvas>\n <div class=\"overlay-view-controls position-absolute d-flex flex-row\">\n <app-menu-toggle\n class=\"overlay-view-control\"\n icon=\"transparent\"\n matTooltip=\"Toggle background transparency\"\n (click)=\"toggleBgTransparency()\"\n >\n </app-menu-toggle>\n <app-menu-toggle\n class=\"overlay-view-control\"\n icon=\"move-lock\"\n [matTooltip]=\"(overlayViewFixed ? 'Restore' : 'Fix') + ' overlay view'\"\n [active]=\"overlayViewFixed\"\n (click)=\"fixOverlayView()\"\n >\n </app-menu-toggle>\n <app-menu-toggle\n class=\"overlay-view-control\"\n [icon]=\"orthographicView ? 'orthographic' : 'perspective'\"\n [matTooltip]=\"\n 'Switch to ' +\n (orthographicView ? 'orthographic' : 'perspective') +\n ' view'\n \"\n (click)=\"switchOverlayView()\"\n >\n </app-menu-toggle>\n </div>\n </div>\n</app-overlay>\n", styles: ["#overlay-canvas{background-color:#0000001a;width:100%}.overlay-view-controls{bottom:1em;right:1em;opacity:0;transition:opacity .2s}.overlay-view-controls .overlay-view-control{background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);overflow:hidden;width:2.5rem;height:2.5rem;border-radius:50%;display:flex;justify-content:center;align-items:center}.overlay-view-wrapper:hover .overlay-view-controls{opacity:1;transition:opacity .2s}\n"] }]
989
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { showOverlay: [{
2214
+ }], function () { return [{ type: EventDisplayService }]; }, { showOverlay: [{
990
2215
  type: Input
991
2216
  }], overlayWindow: [{
992
2217
  type: ViewChild,
993
2218
  args: ['overlayWindow']
994
- }] } });
2219
+ }] });
2220
+ })();
995
2221
 
996
2222
  class OverlayViewComponent {
997
2223
  constructor(overlay) {
@@ -1012,13 +2238,81 @@ class OverlayViewComponent {
1012
2238
  this.overlayWindow.instance.showOverlay = this.showOverlay;
1013
2239
  }
1014
2240
  }
1015
- OverlayViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: OverlayViewComponent, deps: [{ token: i1$1.Overlay }], target: i0.ɵɵFactoryTarget.Component });
1016
- OverlayViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: OverlayViewComponent, selector: "app-overlay-view", ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Overlay view\"\n icon=\"overlay\"\n [active]=\"showOverlay\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n", styles: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
1017
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: OverlayViewComponent, decorators: [{
2241
+ OverlayViewComponent.ɵfac = function OverlayViewComponent_Factory(t) { return new (t || OverlayViewComponent)(i0.ɵɵdirectiveInject(i1$1.Overlay)); };
2242
+ OverlayViewComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OverlayViewComponent, selectors: [["app-overlay-view"]], decls: 1, vars: 1, consts: [["tooltip", "Overlay view", "icon", "overlay", 3, "active", "click"]], template: function OverlayViewComponent_Template(rf, ctx) {
2243
+ if (rf & 1) {
2244
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
2245
+ i0.ɵɵlistener("click", function OverlayViewComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleOverlay(); });
2246
+ i0.ɵɵelementEnd();
2247
+ }
2248
+ if (rf & 2) {
2249
+ i0.ɵɵproperty("active", ctx.showOverlay);
2250
+ }
2251
+ }, dependencies: [MenuToggleComponent] });
2252
+ (function () {
2253
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OverlayViewComponent, [{
1018
2254
  type: Component,
1019
2255
  args: [{ selector: 'app-overlay-view', template: "<app-menu-toggle\n tooltip=\"Overlay view\"\n icon=\"overlay\"\n [active]=\"showOverlay\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n" }]
1020
- }], ctorParameters: function () { return [{ type: i1$1.Overlay }]; } });
2256
+ }], function () { return [{ type: i1$1.Overlay }]; }, null);
2257
+ })();
1021
2258
 
2259
+ function TreeMenuItemComponent_ng_container_0_button_2_Template(rf, ctx) {
2260
+ if (rf & 1) {
2261
+ const _r4 = i0.ɵɵgetCurrentView();
2262
+ i0.ɵɵelementStart(0, "button", 7);
2263
+ i0.ɵɵlistener("click", function TreeMenuItemComponent_ng_container_0_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r3 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r3.isExpanded = !ctx_r3.isExpanded); });
2264
+ i0.ɵɵelementStart(1, "mat-icon", 8);
2265
+ i0.ɵɵtext(2);
2266
+ i0.ɵɵelementEnd()();
2267
+ }
2268
+ if (rf & 2) {
2269
+ const ctx_r1 = i0.ɵɵnextContext(2);
2270
+ i0.ɵɵadvance(2);
2271
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.isExpanded ? "expand_more" : "chevron_right", " ");
2272
+ }
2273
+ }
2274
+ function TreeMenuItemComponent_ng_container_0_li_7_Template(rf, ctx) {
2275
+ if (rf & 1) {
2276
+ i0.ɵɵelementStart(0, "li");
2277
+ i0.ɵɵelement(1, "app-tree-menu-item", 9);
2278
+ i0.ɵɵelementEnd();
2279
+ }
2280
+ if (rf & 2) {
2281
+ const node_r5 = ctx.$implicit;
2282
+ i0.ɵɵadvance(1);
2283
+ i0.ɵɵproperty("node", node_r5);
2284
+ }
2285
+ }
2286
+ const _c0$4 = function (a0) { return { visible: a0 }; };
2287
+ function TreeMenuItemComponent_ng_container_0_Template(rf, ctx) {
2288
+ if (rf & 1) {
2289
+ const _r7 = i0.ɵɵgetCurrentView();
2290
+ i0.ɵɵelementContainerStart(0);
2291
+ i0.ɵɵelementStart(1, "div", 1);
2292
+ i0.ɵɵtemplate(2, TreeMenuItemComponent_ng_container_0_button_2_Template, 3, 1, "button", 2);
2293
+ i0.ɵɵelementStart(3, "div", 3);
2294
+ i0.ɵɵlistener("click", function TreeMenuItemComponent_ng_container_0_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r7); const ctx_r6 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r6.toggleVisibility(!ctx_r6.visible)); });
2295
+ i0.ɵɵtext(4);
2296
+ i0.ɵɵelementEnd()();
2297
+ i0.ɵɵelementStart(5, "ul", 4)(6, "div", 5);
2298
+ i0.ɵɵtemplate(7, TreeMenuItemComponent_ng_container_0_li_7_Template, 2, 1, "li", 6);
2299
+ i0.ɵɵelementEnd()();
2300
+ i0.ɵɵelementContainerEnd();
2301
+ }
2302
+ if (rf & 2) {
2303
+ const ctx_r0 = i0.ɵɵnextContext();
2304
+ i0.ɵɵadvance(1);
2305
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(5, _c0$4, ctx_r0.visible));
2306
+ i0.ɵɵadvance(1);
2307
+ i0.ɵɵproperty("ngIf", ctx_r0.node.children);
2308
+ i0.ɵɵadvance(2);
2309
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.node.name, " ");
2310
+ i0.ɵɵadvance(1);
2311
+ i0.ɵɵproperty("hidden", !ctx_r0.isExpanded);
2312
+ i0.ɵɵadvance(2);
2313
+ i0.ɵɵproperty("ngForOf", ctx_r0.node.children);
2314
+ }
2315
+ }
1022
2316
  class TreeMenuItemComponent {
1023
2317
  constructor(eventDisplay) {
1024
2318
  this.eventDisplay = eventDisplay;
@@ -1034,17 +2328,34 @@ class TreeMenuItemComponent {
1034
2328
  this.children.forEach((child) => child.toggleVisibility(visible));
1035
2329
  }
1036
2330
  }
1037
- TreeMenuItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: TreeMenuItemComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1038
- TreeMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: TreeMenuItemComponent, selector: "app-tree-menu-item", inputs: { node: "node" }, viewQueries: [{ propertyName: "children", predicate: TreeMenuItemComponent, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"node\">\n <div class=\"header\" [ngClass]=\"{ visible: visible }\">\n <button\n *ngIf=\"node.children\"\n mat-icon-button\n matTreeNodeToggle\n (click)=\"isExpanded = !isExpanded\"\n >\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{ isExpanded ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n </button>\n <div (click)=\"toggleVisibility(!visible)\" class=\"node-name\">\n {{ node.name }}\n </div>\n </div>\n <ul [hidden]=\"!isExpanded\" hid>\n <div class=\"children\">\n <li *ngFor=\"let node of node.children\">\n <app-tree-menu-item [node]=\"node\"></app-tree-menu-item>\n </li>\n </div>\n </ul>\n</ng-container>\n", styles: [".header{cursor:pointer;user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;display:flex;flex-direction:row;align-items:center}.header .node-name,.header .mat-icon-rtl-mirror{color:var(--phoenix-text-color-secondary)}.header.visible .node-name,.header.visible .mat-icon-rtl-mirror{color:var(--phoenix-accent)}.children li{list-style-type:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$2.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"] }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: TreeMenuItemComponent, selector: "app-tree-menu-item", inputs: ["node"] }] });
1039
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: TreeMenuItemComponent, decorators: [{
2331
+ TreeMenuItemComponent.ɵfac = function TreeMenuItemComponent_Factory(t) { return new (t || TreeMenuItemComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2332
+ TreeMenuItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TreeMenuItemComponent, selectors: [["app-tree-menu-item"]], viewQuery: function TreeMenuItemComponent_Query(rf, ctx) {
2333
+ if (rf & 1) {
2334
+ i0.ɵɵviewQuery(TreeMenuItemComponent, 5);
2335
+ }
2336
+ if (rf & 2) {
2337
+ let _t;
2338
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.children = _t);
2339
+ }
2340
+ }, inputs: { node: "node" }, decls: 1, vars: 1, consts: [[4, "ngIf"], [1, "header", 3, "ngClass"], ["mat-icon-button", "", "matTreeNodeToggle", "", 3, "click", 4, "ngIf"], [1, "node-name", 3, "click"], ["hid", "", 3, "hidden"], [1, "children"], [4, "ngFor", "ngForOf"], ["mat-icon-button", "", "matTreeNodeToggle", "", 3, "click"], [1, "mat-icon-rtl-mirror"], [3, "node"]], template: function TreeMenuItemComponent_Template(rf, ctx) {
2341
+ if (rf & 1) {
2342
+ i0.ɵɵtemplate(0, TreeMenuItemComponent_ng_container_0_Template, 8, 7, "ng-container", 0);
2343
+ }
2344
+ if (rf & 2) {
2345
+ i0.ɵɵproperty("ngIf", ctx.node);
2346
+ }
2347
+ }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i2$2.MatIconButton, i4$1.MatIcon, TreeMenuItemComponent], styles: [".header[_ngcontent-%COMP%]{cursor:pointer;user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;display:flex;flex-direction:row;align-items:center}.header[_ngcontent-%COMP%] .node-name[_ngcontent-%COMP%], .header[_ngcontent-%COMP%] .mat-icon-rtl-mirror[_ngcontent-%COMP%]{color:var(--phoenix-text-color-secondary)}.header.visible[_ngcontent-%COMP%] .node-name[_ngcontent-%COMP%], .header.visible[_ngcontent-%COMP%] .mat-icon-rtl-mirror[_ngcontent-%COMP%]{color:var(--phoenix-accent)}.children[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{list-style-type:none}"] });
2348
+ (function () {
2349
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TreeMenuItemComponent, [{
1040
2350
  type: Component,
1041
2351
  args: [{ selector: 'app-tree-menu-item', template: "<ng-container *ngIf=\"node\">\n <div class=\"header\" [ngClass]=\"{ visible: visible }\">\n <button\n *ngIf=\"node.children\"\n mat-icon-button\n matTreeNodeToggle\n (click)=\"isExpanded = !isExpanded\"\n >\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{ isExpanded ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n </button>\n <div (click)=\"toggleVisibility(!visible)\" class=\"node-name\">\n {{ node.name }}\n </div>\n </div>\n <ul [hidden]=\"!isExpanded\" hid>\n <div class=\"children\">\n <li *ngFor=\"let node of node.children\">\n <app-tree-menu-item [node]=\"node\"></app-tree-menu-item>\n </li>\n </div>\n </ul>\n</ng-container>\n", styles: [".header{cursor:pointer;user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;display:flex;flex-direction:row;align-items:center}.header .node-name,.header .mat-icon-rtl-mirror{color:var(--phoenix-text-color-secondary)}.header.visible .node-name,.header.visible .mat-icon-rtl-mirror{color:var(--phoenix-accent)}.children li{list-style-type:none}\n"] }]
1042
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { children: [{
2352
+ }], function () { return [{ type: EventDisplayService }]; }, { children: [{
1043
2353
  type: ViewChildren,
1044
2354
  args: [TreeMenuItemComponent]
1045
2355
  }], node: [{
1046
2356
  type: Input
1047
- }] } });
2357
+ }] });
2358
+ })();
1048
2359
 
1049
2360
  class TreeMenuComponent {
1050
2361
  constructor() {
@@ -1107,13 +2418,55 @@ class TreeMenuComponent {
1107
2418
  }
1108
2419
  ngOnInit() { }
1109
2420
  }
1110
- TreeMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: TreeMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1111
- TreeMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: TreeMenuComponent, selector: "app-tree-menu", ngImport: i0, template: "<div class=\"tree-wrapper\">\n <div class=\"tree-menu\">\n <app-tree-menu-item [node]=\"rootNode\"></app-tree-menu-item>\n </div>\n</div>\n", styles: [".tree-wrapper{position:absolute;top:0;bottom:0;left:0;display:flex;flex-direction:column;justify-content:center;align-items:center;align-content:center}.tree-menu{display:flex;flex-direction:column;justify-content:center;align-items:center;align-content:center;max-height:70vh;overflow-y:scroll}.example-tree-invisible{display:none}.example-tree ul,.example-tree li{margin-top:0;margin-bottom:0;list-style-type:none}\n"], dependencies: [{ kind: "component", type: TreeMenuItemComponent, selector: "app-tree-menu-item", inputs: ["node"] }] });
1112
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: TreeMenuComponent, decorators: [{
2421
+ TreeMenuComponent.ɵfac = function TreeMenuComponent_Factory(t) { return new (t || TreeMenuComponent)(); };
2422
+ TreeMenuComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TreeMenuComponent, selectors: [["app-tree-menu"]], decls: 3, vars: 1, consts: [[1, "tree-wrapper"], [1, "tree-menu"], [3, "node"]], template: function TreeMenuComponent_Template(rf, ctx) {
2423
+ if (rf & 1) {
2424
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
2425
+ i0.ɵɵelement(2, "app-tree-menu-item", 2);
2426
+ i0.ɵɵelementEnd()();
2427
+ }
2428
+ if (rf & 2) {
2429
+ i0.ɵɵadvance(2);
2430
+ i0.ɵɵproperty("node", ctx.rootNode);
2431
+ }
2432
+ }, dependencies: [TreeMenuItemComponent], styles: [".tree-wrapper[_ngcontent-%COMP%]{position:absolute;top:0;bottom:0;left:0;display:flex;flex-direction:column;justify-content:center;align-items:center;align-content:center}.tree-menu[_ngcontent-%COMP%]{display:flex;flex-direction:column;justify-content:center;align-items:center;align-content:center;max-height:70vh;overflow-y:scroll}.example-tree-invisible[_ngcontent-%COMP%]{display:none}.example-tree[_ngcontent-%COMP%] ul[_ngcontent-%COMP%], .example-tree[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin-top:0;margin-bottom:0;list-style-type:none}"] });
2433
+ (function () {
2434
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TreeMenuComponent, [{
1113
2435
  type: Component,
1114
2436
  args: [{ selector: 'app-tree-menu', template: "<div class=\"tree-wrapper\">\n <div class=\"tree-menu\">\n <app-tree-menu-item [node]=\"rootNode\"></app-tree-menu-item>\n </div>\n</div>\n", styles: [".tree-wrapper{position:absolute;top:0;bottom:0;left:0;display:flex;flex-direction:column;justify-content:center;align-items:center;align-content:center}.tree-menu{display:flex;flex-direction:column;justify-content:center;align-items:center;align-content:center;max-height:70vh;overflow-y:scroll}.example-tree-invisible{display:none}.example-tree ul,.example-tree li{margin-top:0;margin-bottom:0;list-style-type:none}\n"] }]
1115
- }], ctorParameters: function () { return []; } });
2437
+ }], function () { return []; }, null);
2438
+ })();
1116
2439
 
2440
+ function ViewOptionsComponent_button_10__svg_svg_1_Template(rf, ctx) {
2441
+ if (rf & 1) {
2442
+ i0.ɵɵnamespaceSVG();
2443
+ i0.ɵɵelementStart(0, "svg", 8);
2444
+ i0.ɵɵelement(1, "use");
2445
+ i0.ɵɵelementEnd();
2446
+ }
2447
+ if (rf & 2) {
2448
+ const view_r4 = i0.ɵɵnextContext().$implicit;
2449
+ i0.ɵɵadvance(1);
2450
+ i0.ɵɵattributeInterpolate2("href", "assets/icons/", view_r4.icon, ".svg#", view_r4.icon, "");
2451
+ }
2452
+ }
2453
+ function ViewOptionsComponent_button_10_Template(rf, ctx) {
2454
+ if (rf & 1) {
2455
+ const _r8 = i0.ɵɵgetCurrentView();
2456
+ i0.ɵɵelementStart(0, "button", 1);
2457
+ i0.ɵɵlistener("click", function ViewOptionsComponent_button_10_Template_button_click_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r8); const view_r4 = restoredCtx.$implicit; const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r7.displayView($event, view_r4)); });
2458
+ i0.ɵɵtemplate(1, ViewOptionsComponent_button_10__svg_svg_1_Template, 2, 2, "svg", 7);
2459
+ i0.ɵɵtext(2);
2460
+ i0.ɵɵelementEnd();
2461
+ }
2462
+ if (rf & 2) {
2463
+ const view_r4 = ctx.$implicit;
2464
+ i0.ɵɵadvance(1);
2465
+ i0.ɵɵproperty("ngIf", view_r4.icon);
2466
+ i0.ɵɵadvance(1);
2467
+ i0.ɵɵtextInterpolate1(" ", view_r4.name, " ");
2468
+ }
2469
+ }
1117
2470
  class ViewOptionsComponent {
1118
2471
  constructor(eventDisplay) {
1119
2472
  this.eventDisplay = eventDisplay;
@@ -1134,12 +2487,40 @@ class ViewOptionsComponent {
1134
2487
  this.eventDisplay.getUIManager().setShowGrid(value);
1135
2488
  }
1136
2489
  }
1137
- ViewOptionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ViewOptionsComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1138
- ViewOptionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: ViewOptionsComponent, selector: "app-view-options", ngImport: i0, template: "<mat-menu #viewOptions>\n <button\n mat-menu-item\n (click)=\"\n $event.stopPropagation();\n showGridCheckbox._inputElement.nativeElement.click()\n \"\n >\n <mat-checkbox\n #showGridCheckbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"setGrid($event)\"\n >Show Grid\n </mat-checkbox>\n </button>\n <button\n mat-menu-item\n (click)=\"\n $event.stopPropagation();\n showAxisCheckbox._inputElement.nativeElement.click()\n \"\n >\n <mat-checkbox\n #showAxisCheckbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"setAxis($event)\"\n >Show Axis\n </mat-checkbox>\n </button>\n <button\n mat-menu-item\n *ngFor=\"let view of views\"\n (click)=\"displayView($event, view)\"\n >\n <svg class=\"view-icon\" *ngIf=\"view.icon\">\n <use attr.href=\"assets/icons/{{ view.icon }}.svg#{{ view.icon }}\"></use>\n </svg>\n {{ view.name }}\n </button>\n</mat-menu>\n\n<app-menu-toggle\n [matMenuTriggerFor]=\"viewOptions\"\n tooltip=\"View options\"\n icon=\"views\"\n [active]=\"false\"\n>\n</app-menu-toggle>\n", styles: [".view-icon{width:1.2rem;height:1.2rem;margin-right:.5rem}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i3$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
1139
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ViewOptionsComponent, decorators: [{
2490
+ ViewOptionsComponent.ɵfac = function ViewOptionsComponent_Factory(t) { return new (t || ViewOptionsComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2491
+ ViewOptionsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ViewOptionsComponent, selectors: [["app-view-options"]], decls: 12, vars: 3, consts: [["viewOptions", ""], ["mat-menu-item", "", 3, "click"], [3, "click", "change"], ["showGridCheckbox", ""], ["showAxisCheckbox", ""], ["mat-menu-item", "", 3, "click", 4, "ngFor", "ngForOf"], ["tooltip", "View options", "icon", "views", 3, "matMenuTriggerFor", "active"], ["class", "view-icon", 4, "ngIf"], [1, "view-icon"]], template: function ViewOptionsComponent_Template(rf, ctx) {
2492
+ if (rf & 1) {
2493
+ const _r9 = i0.ɵɵgetCurrentView();
2494
+ i0.ɵɵelementStart(0, "mat-menu", null, 0)(2, "button", 1);
2495
+ i0.ɵɵlistener("click", function ViewOptionsComponent_Template_button_click_2_listener($event) { i0.ɵɵrestoreView(_r9); const _r1 = i0.ɵɵreference(4); $event.stopPropagation(); return i0.ɵɵresetView(_r1._inputElement.nativeElement.click()); });
2496
+ i0.ɵɵelementStart(3, "mat-checkbox", 2, 3);
2497
+ i0.ɵɵlistener("click", function ViewOptionsComponent_Template_mat_checkbox_click_3_listener($event) { return $event.stopPropagation(); })("change", function ViewOptionsComponent_Template_mat_checkbox_change_3_listener($event) { return ctx.setGrid($event); });
2498
+ i0.ɵɵtext(5, "Show Grid ");
2499
+ i0.ɵɵelementEnd()();
2500
+ i0.ɵɵelementStart(6, "button", 1);
2501
+ i0.ɵɵlistener("click", function ViewOptionsComponent_Template_button_click_6_listener($event) { i0.ɵɵrestoreView(_r9); const _r2 = i0.ɵɵreference(8); $event.stopPropagation(); return i0.ɵɵresetView(_r2._inputElement.nativeElement.click()); });
2502
+ i0.ɵɵelementStart(7, "mat-checkbox", 2, 4);
2503
+ i0.ɵɵlistener("click", function ViewOptionsComponent_Template_mat_checkbox_click_7_listener($event) { return $event.stopPropagation(); })("change", function ViewOptionsComponent_Template_mat_checkbox_change_7_listener($event) { return ctx.setAxis($event); });
2504
+ i0.ɵɵtext(9, "Show Axis ");
2505
+ i0.ɵɵelementEnd()();
2506
+ i0.ɵɵtemplate(10, ViewOptionsComponent_button_10_Template, 3, 2, "button", 5);
2507
+ i0.ɵɵelementEnd();
2508
+ i0.ɵɵelement(11, "app-menu-toggle", 6);
2509
+ }
2510
+ if (rf & 2) {
2511
+ const _r0 = i0.ɵɵreference(1);
2512
+ i0.ɵɵadvance(10);
2513
+ i0.ɵɵproperty("ngForOf", ctx.views);
2514
+ i0.ɵɵadvance(1);
2515
+ i0.ɵɵproperty("matMenuTriggerFor", _r0)("active", false);
2516
+ }
2517
+ }, dependencies: [i2.NgForOf, i2.NgIf, i3$1.MatMenu, i3$1.MatMenuItem, i3$1.MatMenuTrigger, i4.MatCheckbox, MenuToggleComponent], styles: [".view-icon[_ngcontent-%COMP%]{width:1.2rem;height:1.2rem;margin-right:.5rem}"] });
2518
+ (function () {
2519
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ViewOptionsComponent, [{
1140
2520
  type: Component,
1141
2521
  args: [{ selector: 'app-view-options', template: "<mat-menu #viewOptions>\n <button\n mat-menu-item\n (click)=\"\n $event.stopPropagation();\n showGridCheckbox._inputElement.nativeElement.click()\n \"\n >\n <mat-checkbox\n #showGridCheckbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"setGrid($event)\"\n >Show Grid\n </mat-checkbox>\n </button>\n <button\n mat-menu-item\n (click)=\"\n $event.stopPropagation();\n showAxisCheckbox._inputElement.nativeElement.click()\n \"\n >\n <mat-checkbox\n #showAxisCheckbox\n (click)=\"$event.stopPropagation()\"\n (change)=\"setAxis($event)\"\n >Show Axis\n </mat-checkbox>\n </button>\n <button\n mat-menu-item\n *ngFor=\"let view of views\"\n (click)=\"displayView($event, view)\"\n >\n <svg class=\"view-icon\" *ngIf=\"view.icon\">\n <use attr.href=\"assets/icons/{{ view.icon }}.svg#{{ view.icon }}\"></use>\n </svg>\n {{ view.name }}\n </button>\n</mat-menu>\n\n<app-menu-toggle\n [matMenuTriggerFor]=\"viewOptions\"\n tooltip=\"View options\"\n icon=\"views\"\n [active]=\"false\"\n>\n</app-menu-toggle>\n", styles: [".view-icon{width:1.2rem;height:1.2rem;margin-right:.5rem}\n"] }]
1142
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
2522
+ }], function () { return [{ type: EventDisplayService }]; }, null);
2523
+ })();
1143
2524
 
1144
2525
  class VrToggleComponent {
1145
2526
  constructor(eventDisplay) {
@@ -1171,13 +2552,46 @@ class VrToggleComponent {
1171
2552
  }
1172
2553
  }
1173
2554
  }
1174
- VrToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: VrToggleComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1175
- VrToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: VrToggleComponent, selector: "app-vr-toggle", ngImport: i0, template: "<app-menu-toggle\n [disabled]=\"!vrSupported\"\n [active]=\"vrActive\"\n icon=\"vr\"\n (click)=\"vrSupported && toggleVr()\"\n [tooltip]=\"\n vrSupported ? (vrActive ? 'Exit VR' : 'Enter VR') : 'VR not supported'\n \"\n>\n</app-menu-toggle>\n", styles: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
1176
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: VrToggleComponent, decorators: [{
2555
+ VrToggleComponent.ɵfac = function VrToggleComponent_Factory(t) { return new (t || VrToggleComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2556
+ VrToggleComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: VrToggleComponent, selectors: [["app-vr-toggle"]], decls: 1, vars: 3, consts: [["icon", "vr", 3, "disabled", "active", "tooltip", "click"]], template: function VrToggleComponent_Template(rf, ctx) {
2557
+ if (rf & 1) {
2558
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
2559
+ i0.ɵɵlistener("click", function VrToggleComponent_Template_app_menu_toggle_click_0_listener() { return ctx.vrSupported && ctx.toggleVr(); });
2560
+ i0.ɵɵelementEnd();
2561
+ }
2562
+ if (rf & 2) {
2563
+ i0.ɵɵproperty("disabled", !ctx.vrSupported)("active", ctx.vrActive)("tooltip", ctx.vrSupported ? ctx.vrActive ? "Exit VR" : "Enter VR" : "VR not supported");
2564
+ }
2565
+ }, dependencies: [MenuToggleComponent] });
2566
+ (function () {
2567
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(VrToggleComponent, [{
1177
2568
  type: Component,
1178
2569
  args: [{ selector: 'app-vr-toggle', template: "<app-menu-toggle\n [disabled]=\"!vrSupported\"\n [active]=\"vrActive\"\n icon=\"vr\"\n (click)=\"vrSupported && toggleVr()\"\n [tooltip]=\"\n vrSupported ? (vrActive ? 'Exit VR' : 'Enter VR') : 'VR not supported'\n \"\n>\n</app-menu-toggle>\n" }]
1179
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
2570
+ }], function () { return [{ type: EventDisplayService }]; }, null);
2571
+ })();
1180
2572
 
2573
+ function ArToggleComponent_ng_container_2_Template(rf, ctx) {
2574
+ if (rf & 1) {
2575
+ const _r4 = i0.ɵɵgetCurrentView();
2576
+ i0.ɵɵelementContainerStart(0);
2577
+ i0.ɵɵelementStart(1, "button", 4);
2578
+ i0.ɵɵlistener("click", function ArToggleComponent_ng_container_2_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.toggleAr(true)); });
2579
+ i0.ɵɵtext(2, "AR with overlays");
2580
+ i0.ɵɵelementEnd();
2581
+ i0.ɵɵelementStart(3, "button", 4);
2582
+ i0.ɵɵlistener("click", function ArToggleComponent_ng_container_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.toggleAr(false)); });
2583
+ i0.ɵɵtext(4, "AR without overlays");
2584
+ i0.ɵɵelementEnd();
2585
+ i0.ɵɵelementContainerEnd();
2586
+ }
2587
+ }
2588
+ function ArToggleComponent_button_3_Template(rf, ctx) {
2589
+ if (rf & 1) {
2590
+ i0.ɵɵelementStart(0, "button", 5);
2591
+ i0.ɵɵtext(1, "AR not supported");
2592
+ i0.ɵɵelementEnd();
2593
+ }
2594
+ }
1181
2595
  class ArToggleComponent {
1182
2596
  constructor(eventDisplay) {
1183
2597
  var _a, _b;
@@ -1209,12 +2623,33 @@ class ArToggleComponent {
1209
2623
  }
1210
2624
  }
1211
2625
  }
1212
- ArToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ArToggleComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1213
- ArToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: ArToggleComponent, selector: "app-ar-toggle", ngImport: i0, template: "<mat-menu #arToggleOptions>\n <ng-container *ngIf=\"arSupported\">\n <button mat-menu-item (click)=\"toggleAr(true)\">AR with overlays</button>\n <button mat-menu-item (click)=\"toggleAr(false)\">AR without overlays</button>\n </ng-container>\n <button *ngIf=\"!arSupported\" mat-menu-item disabled>AR not supported</button>\n</mat-menu>\n\n<app-menu-toggle\n [matMenuTriggerFor]=\"arToggleOptions\"\n (click)=\"arSupported && (arActive ? toggleAr() : null)\"\n [disabled]=\"!arSupported\"\n [active]=\"arActive\"\n icon=\"ar\"\n [tooltip]=\"\n arSupported ? (arActive ? 'Exit AR' : 'Enter AR') : 'AR not supported'\n \"\n>\n</app-menu-toggle>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i3$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
1214
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ArToggleComponent, decorators: [{
2626
+ ArToggleComponent.ɵfac = function ArToggleComponent_Factory(t) { return new (t || ArToggleComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2627
+ ArToggleComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ArToggleComponent, selectors: [["app-ar-toggle"]], decls: 5, vars: 6, consts: [["arToggleOptions", ""], [4, "ngIf"], ["mat-menu-item", "", "disabled", "", 4, "ngIf"], ["icon", "ar", 3, "matMenuTriggerFor", "disabled", "active", "tooltip", "click"], ["mat-menu-item", "", 3, "click"], ["mat-menu-item", "", "disabled", ""]], template: function ArToggleComponent_Template(rf, ctx) {
2628
+ if (rf & 1) {
2629
+ i0.ɵɵelementStart(0, "mat-menu", null, 0);
2630
+ i0.ɵɵtemplate(2, ArToggleComponent_ng_container_2_Template, 5, 0, "ng-container", 1);
2631
+ i0.ɵɵtemplate(3, ArToggleComponent_button_3_Template, 2, 0, "button", 2);
2632
+ i0.ɵɵelementEnd();
2633
+ i0.ɵɵelementStart(4, "app-menu-toggle", 3);
2634
+ i0.ɵɵlistener("click", function ArToggleComponent_Template_app_menu_toggle_click_4_listener() { return ctx.arSupported && (ctx.arActive ? ctx.toggleAr() : null); });
2635
+ i0.ɵɵelementEnd();
2636
+ }
2637
+ if (rf & 2) {
2638
+ const _r0 = i0.ɵɵreference(1);
2639
+ i0.ɵɵadvance(2);
2640
+ i0.ɵɵproperty("ngIf", ctx.arSupported);
2641
+ i0.ɵɵadvance(1);
2642
+ i0.ɵɵproperty("ngIf", !ctx.arSupported);
2643
+ i0.ɵɵadvance(1);
2644
+ i0.ɵɵproperty("matMenuTriggerFor", _r0)("disabled", !ctx.arSupported)("active", ctx.arActive)("tooltip", ctx.arSupported ? ctx.arActive ? "Exit AR" : "Enter AR" : "AR not supported");
2645
+ }
2646
+ }, dependencies: [i2.NgIf, i3$1.MatMenu, i3$1.MatMenuItem, i3$1.MatMenuTrigger, MenuToggleComponent] });
2647
+ (function () {
2648
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArToggleComponent, [{
1215
2649
  type: Component,
1216
2650
  args: [{ selector: 'app-ar-toggle', template: "<mat-menu #arToggleOptions>\n <ng-container *ngIf=\"arSupported\">\n <button mat-menu-item (click)=\"toggleAr(true)\">AR with overlays</button>\n <button mat-menu-item (click)=\"toggleAr(false)\">AR without overlays</button>\n </ng-container>\n <button *ngIf=\"!arSupported\" mat-menu-item disabled>AR not supported</button>\n</mat-menu>\n\n<app-menu-toggle\n [matMenuTriggerFor]=\"arToggleOptions\"\n (click)=\"arSupported && (arActive ? toggleAr() : null)\"\n [disabled]=\"!arSupported\"\n [active]=\"arActive\"\n icon=\"ar\"\n [tooltip]=\"\n arSupported ? (arActive ? 'Exit AR' : 'Enter AR') : 'AR not supported'\n \"\n>\n</app-menu-toggle>\n" }]
1217
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
2651
+ }], function () { return [{ type: EventDisplayService }]; }, null);
2652
+ })();
1218
2653
 
1219
2654
  /**
1220
2655
  * Component for adding zoom controls for the main and overlay cameras.
@@ -1266,12 +2701,29 @@ class ZoomControlsComponent {
1266
2701
  clearTimeout(this.zoomTimeout);
1267
2702
  }
1268
2703
  }
1269
- ZoomControlsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ZoomControlsComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1270
- ZoomControlsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: ZoomControlsComponent, selector: "app-zoom-controls", ngImport: i0, template: "<div class=\"d-flex\">\n <app-menu-toggle\n tooltip=\"Zoom out (hold)\"\n icon=\"zoom-out\"\n [active]=\"false\"\n (click)=\"zoomOut(true); clearZoom()\"\n (touchstart)=\"zoomOut(true)\"\n (mousedown)=\"zoomOut($event.button === 0)\"\n (mouseup)=\"clearZoom()\"\n (mouseleave)=\"clearZoom()\"\n (touchend)=\"clearZoom()\"\n (touchcancel)=\"clearZoom()\"\n (touchmove)=\"clearZoom()\"\n >\n </app-menu-toggle>\n <app-menu-toggle\n tooltip=\"Zoom in (hold)\"\n icon=\"zoom-in\"\n [active]=\"false\"\n (click)=\"zoomIn(true); clearZoom()\"\n (touchstart)=\"zoomIn(true)\"\n (mousedown)=\"zoomIn($event.button === 0)\"\n (mouseup)=\"clearZoom()\"\n (mouseleave)=\"clearZoom()\"\n (touchend)=\"clearZoom()\"\n (touchcancel)=\"clearZoom()\"\n (touchmove)=\"clearZoom()\"\n >\n </app-menu-toggle>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
1271
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ZoomControlsComponent, decorators: [{
2704
+ ZoomControlsComponent.ɵfac = function ZoomControlsComponent_Factory(t) { return new (t || ZoomControlsComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2705
+ ZoomControlsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ZoomControlsComponent, selectors: [["app-zoom-controls"]], decls: 3, vars: 2, consts: [[1, "d-flex"], ["tooltip", "Zoom out (hold)", "icon", "zoom-out", 3, "active", "click", "touchstart", "mousedown", "mouseup", "mouseleave", "touchend", "touchcancel", "touchmove"], ["tooltip", "Zoom in (hold)", "icon", "zoom-in", 3, "active", "click", "touchstart", "mousedown", "mouseup", "mouseleave", "touchend", "touchcancel", "touchmove"]], template: function ZoomControlsComponent_Template(rf, ctx) {
2706
+ if (rf & 1) {
2707
+ i0.ɵɵelementStart(0, "div", 0)(1, "app-menu-toggle", 1);
2708
+ i0.ɵɵlistener("click", function ZoomControlsComponent_Template_app_menu_toggle_click_1_listener() { ctx.zoomOut(true); return ctx.clearZoom(); })("touchstart", function ZoomControlsComponent_Template_app_menu_toggle_touchstart_1_listener() { return ctx.zoomOut(true); })("mousedown", function ZoomControlsComponent_Template_app_menu_toggle_mousedown_1_listener($event) { return ctx.zoomOut($event.button === 0); })("mouseup", function ZoomControlsComponent_Template_app_menu_toggle_mouseup_1_listener() { return ctx.clearZoom(); })("mouseleave", function ZoomControlsComponent_Template_app_menu_toggle_mouseleave_1_listener() { return ctx.clearZoom(); })("touchend", function ZoomControlsComponent_Template_app_menu_toggle_touchend_1_listener() { return ctx.clearZoom(); })("touchcancel", function ZoomControlsComponent_Template_app_menu_toggle_touchcancel_1_listener() { return ctx.clearZoom(); })("touchmove", function ZoomControlsComponent_Template_app_menu_toggle_touchmove_1_listener() { return ctx.clearZoom(); });
2709
+ i0.ɵɵelementEnd();
2710
+ i0.ɵɵelementStart(2, "app-menu-toggle", 2);
2711
+ i0.ɵɵlistener("click", function ZoomControlsComponent_Template_app_menu_toggle_click_2_listener() { ctx.zoomIn(true); return ctx.clearZoom(); })("touchstart", function ZoomControlsComponent_Template_app_menu_toggle_touchstart_2_listener() { return ctx.zoomIn(true); })("mousedown", function ZoomControlsComponent_Template_app_menu_toggle_mousedown_2_listener($event) { return ctx.zoomIn($event.button === 0); })("mouseup", function ZoomControlsComponent_Template_app_menu_toggle_mouseup_2_listener() { return ctx.clearZoom(); })("mouseleave", function ZoomControlsComponent_Template_app_menu_toggle_mouseleave_2_listener() { return ctx.clearZoom(); })("touchend", function ZoomControlsComponent_Template_app_menu_toggle_touchend_2_listener() { return ctx.clearZoom(); })("touchcancel", function ZoomControlsComponent_Template_app_menu_toggle_touchcancel_2_listener() { return ctx.clearZoom(); })("touchmove", function ZoomControlsComponent_Template_app_menu_toggle_touchmove_2_listener() { return ctx.clearZoom(); });
2712
+ i0.ɵɵelementEnd()();
2713
+ }
2714
+ if (rf & 2) {
2715
+ i0.ɵɵadvance(1);
2716
+ i0.ɵɵproperty("active", false);
2717
+ i0.ɵɵadvance(1);
2718
+ i0.ɵɵproperty("active", false);
2719
+ }
2720
+ }, dependencies: [MenuToggleComponent] });
2721
+ (function () {
2722
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ZoomControlsComponent, [{
1272
2723
  type: Component,
1273
2724
  args: [{ selector: 'app-zoom-controls', template: "<div class=\"d-flex\">\n <app-menu-toggle\n tooltip=\"Zoom out (hold)\"\n icon=\"zoom-out\"\n [active]=\"false\"\n (click)=\"zoomOut(true); clearZoom()\"\n (touchstart)=\"zoomOut(true)\"\n (mousedown)=\"zoomOut($event.button === 0)\"\n (mouseup)=\"clearZoom()\"\n (mouseleave)=\"clearZoom()\"\n (touchend)=\"clearZoom()\"\n (touchcancel)=\"clearZoom()\"\n (touchmove)=\"clearZoom()\"\n >\n </app-menu-toggle>\n <app-menu-toggle\n tooltip=\"Zoom in (hold)\"\n icon=\"zoom-in\"\n [active]=\"false\"\n (click)=\"zoomIn(true); clearZoom()\"\n (touchstart)=\"zoomIn(true)\"\n (mousedown)=\"zoomIn($event.button === 0)\"\n (mouseup)=\"clearZoom()\"\n (mouseleave)=\"clearZoom()\"\n (touchend)=\"clearZoom()\"\n (touchcancel)=\"clearZoom()\"\n (touchmove)=\"clearZoom()\"\n >\n </app-menu-toggle>\n</div>\n" }]
1274
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
2725
+ }], function () { return [{ type: EventDisplayService }]; }, null);
2726
+ })();
1275
2727
 
1276
2728
  class SSModeComponent {
1277
2729
  constructor() {
@@ -1306,12 +2758,23 @@ class SSModeComponent {
1306
2758
  }
1307
2759
  }
1308
2760
  }
1309
- SSModeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: SSModeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1310
- SSModeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: SSModeComponent, selector: "app-ss-mode", ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Screenshot mode\"\n [active]=\"ssMode\"\n icon=\"ss-mode\"\n (click)=\"toggleSSMode()\"\n>\n</app-menu-toggle>\n", styles: ["#uiMenu,#phoenixMenu,#mainLogo,#statsElement{transition:opacity .4s}.ss-mode #uiMenu,.ss-mode #phoenixMenu,.ss-mode #mainLogo,.ss-mode #statsElement{visibility:hidden;opacity:0}\n"], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }], encapsulation: i0.ViewEncapsulation.None });
1311
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: SSModeComponent, decorators: [{
2761
+ SSModeComponent.ɵfac = function SSModeComponent_Factory(t) { return new (t || SSModeComponent)(); };
2762
+ SSModeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SSModeComponent, selectors: [["app-ss-mode"]], decls: 1, vars: 1, consts: [["tooltip", "Screenshot mode", "icon", "ss-mode", 3, "active", "click"]], template: function SSModeComponent_Template(rf, ctx) {
2763
+ if (rf & 1) {
2764
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
2765
+ i0.ɵɵlistener("click", function SSModeComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleSSMode(); });
2766
+ i0.ɵɵelementEnd();
2767
+ }
2768
+ if (rf & 2) {
2769
+ i0.ɵɵproperty("active", ctx.ssMode);
2770
+ }
2771
+ }, dependencies: [MenuToggleComponent], styles: ["#uiMenu,#phoenixMenu,#mainLogo,#statsElement{transition:opacity .4s}.ss-mode #uiMenu,.ss-mode #phoenixMenu,.ss-mode #mainLogo,.ss-mode #statsElement{visibility:hidden;opacity:0}\n"], encapsulation: 2 });
2772
+ (function () {
2773
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SSModeComponent, [{
1312
2774
  type: Component,
1313
2775
  args: [{ selector: 'app-ss-mode', encapsulation: ViewEncapsulation.None, template: "<app-menu-toggle\n tooltip=\"Screenshot mode\"\n [active]=\"ssMode\"\n icon=\"ss-mode\"\n (click)=\"toggleSSMode()\"\n>\n</app-menu-toggle>\n", styles: ["#uiMenu,#phoenixMenu,#mainLogo,#statsElement{transition:opacity .4s}.ss-mode #uiMenu,.ss-mode #phoenixMenu,.ss-mode #mainLogo,.ss-mode #statsElement{visibility:hidden;opacity:0}\n"] }]
1314
- }] });
2776
+ }], null, null);
2777
+ })();
1315
2778
 
1316
2779
  class PerformanceToggleComponent {
1317
2780
  constructor(eventDisplay) {
@@ -1323,25 +2786,61 @@ class PerformanceToggleComponent {
1323
2786
  this.eventDisplay.getThreeManager().setAntialiasing(!this.performanceMode);
1324
2787
  }
1325
2788
  }
1326
- PerformanceToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: PerformanceToggleComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1327
- PerformanceToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: PerformanceToggleComponent, selector: "app-performance-toggle", ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Performance mode\"\n [active]=\"performanceMode\"\n icon=\"performance\"\n (click)=\"togglePerformance()\"\n>\n</app-menu-toggle>\n", styles: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
1328
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: PerformanceToggleComponent, decorators: [{
2789
+ PerformanceToggleComponent.ɵfac = function PerformanceToggleComponent_Factory(t) { return new (t || PerformanceToggleComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2790
+ PerformanceToggleComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PerformanceToggleComponent, selectors: [["app-performance-toggle"]], decls: 1, vars: 1, consts: [["tooltip", "Performance mode", "icon", "performance", 3, "active", "click"]], template: function PerformanceToggleComponent_Template(rf, ctx) {
2791
+ if (rf & 1) {
2792
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
2793
+ i0.ɵɵlistener("click", function PerformanceToggleComponent_Template_app_menu_toggle_click_0_listener() { return ctx.togglePerformance(); });
2794
+ i0.ɵɵelementEnd();
2795
+ }
2796
+ if (rf & 2) {
2797
+ i0.ɵɵproperty("active", ctx.performanceMode);
2798
+ }
2799
+ }, dependencies: [MenuToggleComponent] });
2800
+ (function () {
2801
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PerformanceToggleComponent, [{
1329
2802
  type: Component,
1330
2803
  args: [{ selector: 'app-performance-toggle', template: "<app-menu-toggle\n tooltip=\"Performance mode\"\n [active]=\"performanceMode\"\n icon=\"performance\"\n (click)=\"togglePerformance()\"\n>\n</app-menu-toggle>\n" }]
1331
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
2804
+ }], function () { return [{ type: EventDisplayService }]; }, null);
2805
+ })();
1332
2806
 
2807
+ const _c0$3 = function (a0) { return { "ui-menu-hidden": a0 }; };
2808
+ const _c1$1 = ["*"];
1333
2809
  class UiMenuWrapperComponent {
1334
2810
  constructor() {
1335
2811
  this.hideUIMenu = false;
1336
2812
  }
1337
2813
  }
1338
- UiMenuWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: UiMenuWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1339
- UiMenuWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: UiMenuWrapperComponent, selector: "app-ui-menu-wrapper", ngImport: i0, template: "<div id=\"uiMenu\">\n <button\n id=\"hideUIMenu\"\n [matTooltip]=\"hideUIMenu ? 'Show toolbar' : 'Hide toolbar'\"\n matTooltipPosition=\"above\"\n (click)=\"hideUIMenu = !hideUIMenu\"\n [ngClass]=\"{ 'ui-menu-hidden': hideUIMenu }\"\n >\n <svg>\n <use href=\"assets/icons/expand.svg#expand\"></use>\n </svg>\n </button>\n <div id=\"optionsPanel\" [hidden]=\"hideUIMenu\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: ["#uiMenu{position:absolute;bottom:1rem;width:100%;box-sizing:border-box;display:flex;flex-direction:column;align-items:center}#optionsPanel{display:flex;align-items:center;background:var(--phoenix-background-color-secondary);border:1px solid var(--phoenix-background-color-tertiary);box-shadow:var(--phoenix-box-shadow);border-radius:30px;max-width:95%;padding:.3rem 1rem;overflow-x:scroll;z-index:90}#hideUIMenu{background:var(--phoenix-background-color-secondary);height:1.2rem;width:3rem;border:1px solid var(--phoenix-border);border-bottom:none;box-shadow:var(--phoenix-box-shadow);border-top-left-radius:15px;border-top-right-radius:15px;padding:3px}#hideUIMenu svg{height:100%;width:100%;vertical-align:top;transition:all .3s}#hideUIMenu.ui-menu-hidden svg{transform:scaleY(-1);transition:all .3s}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
1340
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: UiMenuWrapperComponent, decorators: [{
2814
+ UiMenuWrapperComponent.ɵfac = function UiMenuWrapperComponent_Factory(t) { return new (t || UiMenuWrapperComponent)(); };
2815
+ UiMenuWrapperComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UiMenuWrapperComponent, selectors: [["app-ui-menu-wrapper"]], ngContentSelectors: _c1$1, decls: 6, vars: 5, consts: [["id", "uiMenu"], ["id", "hideUIMenu", "matTooltipPosition", "above", 3, "matTooltip", "ngClass", "click"], ["href", "assets/icons/expand.svg#expand"], ["id", "optionsPanel", 3, "hidden"]], template: function UiMenuWrapperComponent_Template(rf, ctx) {
2816
+ if (rf & 1) {
2817
+ i0.ɵɵprojectionDef();
2818
+ i0.ɵɵelementStart(0, "div", 0)(1, "button", 1);
2819
+ i0.ɵɵlistener("click", function UiMenuWrapperComponent_Template_button_click_1_listener() { return ctx.hideUIMenu = !ctx.hideUIMenu; });
2820
+ i0.ɵɵnamespaceSVG();
2821
+ i0.ɵɵelementStart(2, "svg");
2822
+ i0.ɵɵelement(3, "use", 2);
2823
+ i0.ɵɵelementEnd()();
2824
+ i0.ɵɵnamespaceHTML();
2825
+ i0.ɵɵelementStart(4, "div", 3);
2826
+ i0.ɵɵprojection(5);
2827
+ i0.ɵɵelementEnd()();
2828
+ }
2829
+ if (rf & 2) {
2830
+ i0.ɵɵadvance(1);
2831
+ i0.ɵɵproperty("matTooltip", ctx.hideUIMenu ? "Show toolbar" : "Hide toolbar")("ngClass", i0.ɵɵpureFunction1(3, _c0$3, ctx.hideUIMenu));
2832
+ i0.ɵɵadvance(3);
2833
+ i0.ɵɵproperty("hidden", ctx.hideUIMenu);
2834
+ }
2835
+ }, dependencies: [i2.NgClass, i2$3.MatTooltip], styles: ["#uiMenu[_ngcontent-%COMP%]{position:absolute;bottom:1rem;width:100%;box-sizing:border-box;display:flex;flex-direction:column;align-items:center}#optionsPanel[_ngcontent-%COMP%]{display:flex;align-items:center;background:var(--phoenix-background-color-secondary);border:1px solid var(--phoenix-background-color-tertiary);box-shadow:var(--phoenix-box-shadow);border-radius:30px;max-width:95%;padding:.3rem 1rem;overflow-x:scroll;z-index:90}#hideUIMenu[_ngcontent-%COMP%]{background:var(--phoenix-background-color-secondary);height:1.2rem;width:3rem;border:1px solid var(--phoenix-border);border-bottom:none;box-shadow:var(--phoenix-box-shadow);border-top-left-radius:15px;border-top-right-radius:15px;padding:3px}#hideUIMenu[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{height:100%;width:100%;vertical-align:top;transition:all .3s}#hideUIMenu.ui-menu-hidden[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{transform:scaleY(-1);transition:all .3s}"] });
2836
+ (function () {
2837
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UiMenuWrapperComponent, [{
1341
2838
  type: Component,
1342
2839
  args: [{ selector: 'app-ui-menu-wrapper', template: "<div id=\"uiMenu\">\n <button\n id=\"hideUIMenu\"\n [matTooltip]=\"hideUIMenu ? 'Show toolbar' : 'Hide toolbar'\"\n matTooltipPosition=\"above\"\n (click)=\"hideUIMenu = !hideUIMenu\"\n [ngClass]=\"{ 'ui-menu-hidden': hideUIMenu }\"\n >\n <svg>\n <use href=\"assets/icons/expand.svg#expand\"></use>\n </svg>\n </button>\n <div id=\"optionsPanel\" [hidden]=\"hideUIMenu\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: ["#uiMenu{position:absolute;bottom:1rem;width:100%;box-sizing:border-box;display:flex;flex-direction:column;align-items:center}#optionsPanel{display:flex;align-items:center;background:var(--phoenix-background-color-secondary);border:1px solid var(--phoenix-background-color-tertiary);box-shadow:var(--phoenix-box-shadow);border-radius:30px;max-width:95%;padding:.3rem 1rem;overflow-x:scroll;z-index:90}#hideUIMenu{background:var(--phoenix-background-color-secondary);height:1.2rem;width:3rem;border:1px solid var(--phoenix-border);border-bottom:none;box-shadow:var(--phoenix-box-shadow);border-top-left-radius:15px;border-top-right-radius:15px;padding:3px}#hideUIMenu svg{height:100%;width:100%;vertical-align:top;transition:all .3s}#hideUIMenu.ui-menu-hidden svg{transform:scaleY(-1);transition:all .3s}\n"] }]
1343
- }] });
2840
+ }], null, null);
2841
+ })();
1344
2842
 
2843
+ const _c0$2 = ["qrcodeCanvas"];
1345
2844
  class ShareLinkDialogComponent {
1346
2845
  constructor(dialogRef) {
1347
2846
  this.dialogRef = dialogRef;
@@ -1398,15 +2897,106 @@ class ShareLinkDialogComponent {
1398
2897
  QRCode.toCanvas(this.qrcodeCanvas.nativeElement, link);
1399
2898
  }
1400
2899
  }
1401
- ShareLinkDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ShareLinkDialogComponent, deps: [{ token: i1$2.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
1402
- ShareLinkDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: ShareLinkDialogComponent, selector: "app-share-link-dialog", viewQueries: [{ propertyName: "qrcodeCanvas", first: true, predicate: ["qrcodeCanvas"], descendants: true }], ngImport: i0, template: "<div class=\"dialog\">\n <h1 mat-dialog-title>Create shareable link</h1>\n <div mat-dialog-content class=\"dialog-content\">\n <h5>URL options</h5>\n <div class=\"form-group mt-2\">\n <label for=\"eventDataFile\">Event data file (URL or path)</label>\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"eventDataFile\"\n placeholder=\"assets/files/event_data/atlaseventdump2.json\"\n [value]=\"urlOptions.file\"\n (input)=\"setOptionValue('file', $event.target.value)\"\n />\n </div>\n <div class=\"form-group\">\n <label for=\"eventDataType\">Event data type</label>\n <select\n class=\"form-control\"\n id=\"eventDataType\"\n (input)=\"setOptionValue('type', $event.target.value)\"\n >\n <option selected value=\"\">Select</option>\n <option value=\"jivexml\">JiveXML</option>\n <option value=\"json\">JSON</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label for=\"configuration\">Configuration (URL or path)</label>\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"configuration\"\n placeholder=\"assets/files/config/phoenix-config.json\"\n [value]=\"urlOptions.config\"\n (input)=\"setOptionValue('config', $event.target.value)\"\n />\n </div>\n <div class=\"form-group\">\n <mat-checkbox\n [checked]=\"urlOptions.hideWidgets\"\n (change)=\"setOptionValue('hideWidgets', $event.checked)\"\n >\n Hide all widgets\n </mat-checkbox>\n </div>\n\n <h5>Share</h5>\n <div class=\"share-box my-2\">\n <span>{{ shareLink.value }}</span>\n <button\n class=\"share-box-copy\"\n (click)=\"copyText(shareLink.value, $event.target)\"\n >\n COPY\n </button>\n </div>\n <h5>Embed</h5>\n <div class=\"share-box my-2\">\n <span>{{ embedLink }}</span>\n <button\n class=\"share-box-copy\"\n (click)=\"copyText(embedLink, $event.target)\"\n >\n COPY\n </button>\n </div>\n <h5>QR Code</h5>\n <div class=\"qrcode d-flex justify-content-center\">\n <canvas #qrcodeCanvas></canvas>\n </div>\n </div>\n <div mat-dialog-actions>\n <button mat-button (click)=\"onClose()\" cdkFocusInitial>Close</button>\n </div>\n</div>\n", styles: [".share-box{width:30rem;max-width:100%;position:relative;background:var(--phoenix-background-color-tertiary);border:1px solid var(--phoenix-border);border-radius:.5rem;padding:1.25rem;word-wrap:break-word}.share-box .share-box-copy{position:absolute;top:-1px;right:-1px;background:transparent;color:inherit;cursor:pointer;padding:.25rem .5rem;font-size:.75rem;border:1px solid var(--phoenix-border);border-radius:.5rem}.share-box .share-box-copy:hover{background:var(--phoenix-border)}\n"], dependencies: [{ kind: "directive", type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i2$2.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"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
1403
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ShareLinkDialogComponent, decorators: [{
2900
+ ShareLinkDialogComponent.ɵfac = function ShareLinkDialogComponent_Factory(t) { return new (t || ShareLinkDialogComponent)(i0.ɵɵdirectiveInject(i1$2.MatDialogRef)); };
2901
+ ShareLinkDialogComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ShareLinkDialogComponent, selectors: [["app-share-link-dialog"]], viewQuery: function ShareLinkDialogComponent_Query(rf, ctx) {
2902
+ if (rf & 1) {
2903
+ i0.ɵɵviewQuery(_c0$2, 5);
2904
+ }
2905
+ if (rf & 2) {
2906
+ let _t;
2907
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.qrcodeCanvas = _t.first);
2908
+ }
2909
+ }, decls: 49, vars: 5, consts: [[1, "dialog"], ["mat-dialog-title", ""], ["mat-dialog-content", "", 1, "dialog-content"], [1, "form-group", "mt-2"], ["for", "eventDataFile"], ["type", "text", "id", "eventDataFile", "placeholder", "assets/files/event_data/atlaseventdump2.json", 1, "form-control", 3, "value", "input"], [1, "form-group"], ["for", "eventDataType"], ["id", "eventDataType", 1, "form-control", 3, "input"], ["selected", "", "value", ""], ["value", "jivexml"], ["value", "json"], ["for", "configuration"], ["type", "text", "id", "configuration", "placeholder", "assets/files/config/phoenix-config.json", 1, "form-control", 3, "value", "input"], [3, "checked", "change"], [1, "share-box", "my-2"], [1, "share-box-copy", 3, "click"], [1, "qrcode", "d-flex", "justify-content-center"], ["qrcodeCanvas", ""], ["mat-dialog-actions", ""], ["mat-button", "", "cdkFocusInitial", "", 3, "click"]], template: function ShareLinkDialogComponent_Template(rf, ctx) {
2910
+ if (rf & 1) {
2911
+ i0.ɵɵelementStart(0, "div", 0)(1, "h1", 1);
2912
+ i0.ɵɵtext(2, "Create shareable link");
2913
+ i0.ɵɵelementEnd();
2914
+ i0.ɵɵelementStart(3, "div", 2)(4, "h5");
2915
+ i0.ɵɵtext(5, "URL options");
2916
+ i0.ɵɵelementEnd();
2917
+ i0.ɵɵelementStart(6, "div", 3)(7, "label", 4);
2918
+ i0.ɵɵtext(8, "Event data file (URL or path)");
2919
+ i0.ɵɵelementEnd();
2920
+ i0.ɵɵelementStart(9, "input", 5);
2921
+ i0.ɵɵlistener("input", function ShareLinkDialogComponent_Template_input_input_9_listener($event) { return ctx.setOptionValue("file", $event.target.value); });
2922
+ i0.ɵɵelementEnd()();
2923
+ i0.ɵɵelementStart(10, "div", 6)(11, "label", 7);
2924
+ i0.ɵɵtext(12, "Event data type");
2925
+ i0.ɵɵelementEnd();
2926
+ i0.ɵɵelementStart(13, "select", 8);
2927
+ i0.ɵɵlistener("input", function ShareLinkDialogComponent_Template_select_input_13_listener($event) { return ctx.setOptionValue("type", $event.target.value); });
2928
+ i0.ɵɵelementStart(14, "option", 9);
2929
+ i0.ɵɵtext(15, "Select");
2930
+ i0.ɵɵelementEnd();
2931
+ i0.ɵɵelementStart(16, "option", 10);
2932
+ i0.ɵɵtext(17, "JiveXML");
2933
+ i0.ɵɵelementEnd();
2934
+ i0.ɵɵelementStart(18, "option", 11);
2935
+ i0.ɵɵtext(19, "JSON");
2936
+ i0.ɵɵelementEnd()()();
2937
+ i0.ɵɵelementStart(20, "div", 6)(21, "label", 12);
2938
+ i0.ɵɵtext(22, "Configuration (URL or path)");
2939
+ i0.ɵɵelementEnd();
2940
+ i0.ɵɵelementStart(23, "input", 13);
2941
+ i0.ɵɵlistener("input", function ShareLinkDialogComponent_Template_input_input_23_listener($event) { return ctx.setOptionValue("config", $event.target.value); });
2942
+ i0.ɵɵelementEnd()();
2943
+ i0.ɵɵelementStart(24, "div", 6)(25, "mat-checkbox", 14);
2944
+ i0.ɵɵlistener("change", function ShareLinkDialogComponent_Template_mat_checkbox_change_25_listener($event) { return ctx.setOptionValue("hideWidgets", $event.checked); });
2945
+ i0.ɵɵtext(26, " Hide all widgets ");
2946
+ i0.ɵɵelementEnd()();
2947
+ i0.ɵɵelementStart(27, "h5");
2948
+ i0.ɵɵtext(28, "Share");
2949
+ i0.ɵɵelementEnd();
2950
+ i0.ɵɵelementStart(29, "div", 15)(30, "span");
2951
+ i0.ɵɵtext(31);
2952
+ i0.ɵɵelementEnd();
2953
+ i0.ɵɵelementStart(32, "button", 16);
2954
+ i0.ɵɵlistener("click", function ShareLinkDialogComponent_Template_button_click_32_listener($event) { return ctx.copyText(ctx.shareLink.value, $event.target); });
2955
+ i0.ɵɵtext(33, " COPY ");
2956
+ i0.ɵɵelementEnd()();
2957
+ i0.ɵɵelementStart(34, "h5");
2958
+ i0.ɵɵtext(35, "Embed");
2959
+ i0.ɵɵelementEnd();
2960
+ i0.ɵɵelementStart(36, "div", 15)(37, "span");
2961
+ i0.ɵɵtext(38);
2962
+ i0.ɵɵelementEnd();
2963
+ i0.ɵɵelementStart(39, "button", 16);
2964
+ i0.ɵɵlistener("click", function ShareLinkDialogComponent_Template_button_click_39_listener($event) { return ctx.copyText(ctx.embedLink, $event.target); });
2965
+ i0.ɵɵtext(40, " COPY ");
2966
+ i0.ɵɵelementEnd()();
2967
+ i0.ɵɵelementStart(41, "h5");
2968
+ i0.ɵɵtext(42, "QR Code");
2969
+ i0.ɵɵelementEnd();
2970
+ i0.ɵɵelementStart(43, "div", 17);
2971
+ i0.ɵɵelement(44, "canvas", null, 18);
2972
+ i0.ɵɵelementEnd()();
2973
+ i0.ɵɵelementStart(46, "div", 19)(47, "button", 20);
2974
+ i0.ɵɵlistener("click", function ShareLinkDialogComponent_Template_button_click_47_listener() { return ctx.onClose(); });
2975
+ i0.ɵɵtext(48, "Close");
2976
+ i0.ɵɵelementEnd()()();
2977
+ }
2978
+ if (rf & 2) {
2979
+ i0.ɵɵadvance(9);
2980
+ i0.ɵɵproperty("value", ctx.urlOptions.file);
2981
+ i0.ɵɵadvance(14);
2982
+ i0.ɵɵproperty("value", ctx.urlOptions.config);
2983
+ i0.ɵɵadvance(2);
2984
+ i0.ɵɵproperty("checked", ctx.urlOptions.hideWidgets);
2985
+ i0.ɵɵadvance(6);
2986
+ i0.ɵɵtextInterpolate(ctx.shareLink.value);
2987
+ i0.ɵɵadvance(7);
2988
+ i0.ɵɵtextInterpolate(ctx.embedLink);
2989
+ }
2990
+ }, dependencies: [i1$2.MatDialogTitle, i1$2.MatDialogContent, i1$2.MatDialogActions, i2$2.MatButton, i4.MatCheckbox], styles: [".share-box[_ngcontent-%COMP%]{width:30rem;max-width:100%;position:relative;background:var(--phoenix-background-color-tertiary);border:1px solid var(--phoenix-border);border-radius:.5rem;padding:1.25rem;word-wrap:break-word}.share-box[_ngcontent-%COMP%] .share-box-copy[_ngcontent-%COMP%]{position:absolute;top:-1px;right:-1px;background:transparent;color:inherit;cursor:pointer;padding:.25rem .5rem;font-size:.75rem;border:1px solid var(--phoenix-border);border-radius:.5rem}.share-box[_ngcontent-%COMP%] .share-box-copy[_ngcontent-%COMP%]:hover{background:var(--phoenix-border)}"] });
2991
+ (function () {
2992
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ShareLinkDialogComponent, [{
1404
2993
  type: Component,
1405
2994
  args: [{ selector: 'app-share-link-dialog', template: "<div class=\"dialog\">\n <h1 mat-dialog-title>Create shareable link</h1>\n <div mat-dialog-content class=\"dialog-content\">\n <h5>URL options</h5>\n <div class=\"form-group mt-2\">\n <label for=\"eventDataFile\">Event data file (URL or path)</label>\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"eventDataFile\"\n placeholder=\"assets/files/event_data/atlaseventdump2.json\"\n [value]=\"urlOptions.file\"\n (input)=\"setOptionValue('file', $event.target.value)\"\n />\n </div>\n <div class=\"form-group\">\n <label for=\"eventDataType\">Event data type</label>\n <select\n class=\"form-control\"\n id=\"eventDataType\"\n (input)=\"setOptionValue('type', $event.target.value)\"\n >\n <option selected value=\"\">Select</option>\n <option value=\"jivexml\">JiveXML</option>\n <option value=\"json\">JSON</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label for=\"configuration\">Configuration (URL or path)</label>\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"configuration\"\n placeholder=\"assets/files/config/phoenix-config.json\"\n [value]=\"urlOptions.config\"\n (input)=\"setOptionValue('config', $event.target.value)\"\n />\n </div>\n <div class=\"form-group\">\n <mat-checkbox\n [checked]=\"urlOptions.hideWidgets\"\n (change)=\"setOptionValue('hideWidgets', $event.checked)\"\n >\n Hide all widgets\n </mat-checkbox>\n </div>\n\n <h5>Share</h5>\n <div class=\"share-box my-2\">\n <span>{{ shareLink.value }}</span>\n <button\n class=\"share-box-copy\"\n (click)=\"copyText(shareLink.value, $event.target)\"\n >\n COPY\n </button>\n </div>\n <h5>Embed</h5>\n <div class=\"share-box my-2\">\n <span>{{ embedLink }}</span>\n <button\n class=\"share-box-copy\"\n (click)=\"copyText(embedLink, $event.target)\"\n >\n COPY\n </button>\n </div>\n <h5>QR Code</h5>\n <div class=\"qrcode d-flex justify-content-center\">\n <canvas #qrcodeCanvas></canvas>\n </div>\n </div>\n <div mat-dialog-actions>\n <button mat-button (click)=\"onClose()\" cdkFocusInitial>Close</button>\n </div>\n</div>\n", styles: [".share-box{width:30rem;max-width:100%;position:relative;background:var(--phoenix-background-color-tertiary);border:1px solid var(--phoenix-border);border-radius:.5rem;padding:1.25rem;word-wrap:break-word}.share-box .share-box-copy{position:absolute;top:-1px;right:-1px;background:transparent;color:inherit;cursor:pointer;padding:.25rem .5rem;font-size:.75rem;border:1px solid var(--phoenix-border);border-radius:.5rem}.share-box .share-box-copy:hover{background:var(--phoenix-border)}\n"] }]
1406
- }], ctorParameters: function () { return [{ type: i1$2.MatDialogRef }]; }, propDecorators: { qrcodeCanvas: [{
2995
+ }], function () { return [{ type: i1$2.MatDialogRef }]; }, { qrcodeCanvas: [{
1407
2996
  type: ViewChild,
1408
2997
  args: ['qrcodeCanvas']
1409
- }] } });
2998
+ }] });
2999
+ })();
1410
3000
 
1411
3001
  class ShareLinkComponent {
1412
3002
  constructor(dialog) {
@@ -1416,30 +3006,103 @@ class ShareLinkComponent {
1416
3006
  this.dialog.open(ShareLinkDialogComponent);
1417
3007
  }
1418
3008
  }
1419
- ShareLinkComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ShareLinkComponent, deps: [{ token: i1$2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
1420
- ShareLinkComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: ShareLinkComponent, selector: "app-share-link", ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Create shareable link\"\n icon=\"share\"\n [active]=\"false\"\n (click)=\"openShareLinkDialog()\"\n>\n</app-menu-toggle>\n", styles: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
1421
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ShareLinkComponent, decorators: [{
3009
+ ShareLinkComponent.ɵfac = function ShareLinkComponent_Factory(t) { return new (t || ShareLinkComponent)(i0.ɵɵdirectiveInject(i1$2.MatDialog)); };
3010
+ ShareLinkComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ShareLinkComponent, selectors: [["app-share-link"]], decls: 1, vars: 1, consts: [["tooltip", "Create shareable link", "icon", "share", 3, "active", "click"]], template: function ShareLinkComponent_Template(rf, ctx) {
3011
+ if (rf & 1) {
3012
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
3013
+ i0.ɵɵlistener("click", function ShareLinkComponent_Template_app_menu_toggle_click_0_listener() { return ctx.openShareLinkDialog(); });
3014
+ i0.ɵɵelementEnd();
3015
+ }
3016
+ if (rf & 2) {
3017
+ i0.ɵɵproperty("active", false);
3018
+ }
3019
+ }, dependencies: [MenuToggleComponent] });
3020
+ (function () {
3021
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ShareLinkComponent, [{
1422
3022
  type: Component,
1423
3023
  args: [{ selector: 'app-share-link', template: "<app-menu-toggle\n tooltip=\"Create shareable link\"\n icon=\"share\"\n [active]=\"false\"\n (click)=\"openShareLinkDialog()\"\n>\n</app-menu-toggle>\n" }]
1424
- }], ctorParameters: function () { return [{ type: i1$2.MatDialog }]; } });
3024
+ }], function () { return [{ type: i1$2.MatDialog }]; }, null);
3025
+ })();
1425
3026
 
3027
+ const _c0$1 = ["*"];
1426
3028
  class UiMenuComponent {
1427
3029
  constructor() {
1428
3030
  this.eventDataImportOptions = Object.values(EventDataFormat);
1429
3031
  this.animationPresets = defaultAnimationPresets;
1430
3032
  }
1431
3033
  }
1432
- UiMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: UiMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1433
- UiMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: UiMenuComponent, selector: "app-ui-menu", inputs: { eventDataImportOptions: "eventDataImportOptions", animationPresets: "animationPresets" }, ngImport: i0, template: "<app-ui-menu-wrapper>\n <!-- Event selector -->\n <app-event-selector></app-event-selector>\n\n <!-- Zoom in and zoom out controls -->\n <app-zoom-controls></app-zoom-controls>\n\n <app-view-options></app-view-options>\n\n <app-auto-rotate></app-auto-rotate>\n\n <!-- Dark theme toggle -->\n <app-dark-theme></app-dark-theme>\n\n <!-- Toggle for clipping geometries -->\n <app-object-clipping></app-object-clipping>\n\n <!-- Main view toggle -->\n <app-main-view-toggle></app-main-view-toggle>\n\n <!-- Toggle for overlay panel -->\n <app-overlay-view></app-overlay-view>\n\n <!-- Toggle for selected object panel -->\n <app-object-selection></app-object-selection>\n\n <!-- Info panel -->\n <app-info-panel></app-info-panel>\n\n <!-- Toggle for animating the event data -->\n <app-animate-event></app-animate-event>\n\n <!-- Toggle for animating camera through event -->\n <app-animate-camera\n [animationPresets]=\"animationPresets\"\n ></app-animate-camera>\n\n <!-- Toggle for collections info -->\n <app-collections-info></app-collections-info>\n\n <!-- Toggle for performance -->\n <app-performance-toggle></app-performance-toggle>\n\n <!-- Toggle for VR -->\n <app-vr-toggle></app-vr-toggle>\n\n <!-- Toggle for AR -->\n <app-ar-toggle></app-ar-toggle>\n\n <!-- Toggle for screenshot mode -->\n <app-ss-mode></app-ss-mode>\n\n <!-- Toggle for loading geometries modal-->\n <app-io-options\n [eventDataImportOptions]=\"eventDataImportOptions\"\n ></app-io-options>\n\n <!-- Toggle for shareable link constructor modal-->\n <app-share-link></app-share-link>\n\n <!-- Extra options -->\n <ng-content></ng-content>\n</app-ui-menu-wrapper>\n", styles: [""], dependencies: [{ kind: "component", type: UiMenuWrapperComponent, selector: "app-ui-menu-wrapper" }, { kind: "component", type: CollectionsInfoComponent, selector: "app-collections-info" }, { kind: "component", type: IoOptionsComponent, selector: "app-io-options", inputs: ["eventDataImportOptions"] }, { kind: "component", type: OverlayViewComponent, selector: "app-overlay-view" }, { kind: "component", type: ObjectSelectionComponent, selector: "app-object-selection" }, { kind: "component", type: EventSelectorComponent, selector: "app-event-selector" }, { kind: "component", type: ObjectClippingComponent, selector: "app-object-clipping" }, { kind: "component", type: DarkThemeComponent, selector: "app-dark-theme" }, { kind: "component", type: AutoRotateComponent, selector: "app-auto-rotate" }, { kind: "component", type: ViewOptionsComponent, selector: "app-view-options" }, { kind: "component", type: InfoPanelComponent, selector: "app-info-panel" }, { kind: "component", type: MainViewToggleComponent, selector: "app-main-view-toggle" }, { kind: "component", type: ZoomControlsComponent, selector: "app-zoom-controls" }, { kind: "component", type: AnimateCameraComponent, selector: "app-animate-camera", inputs: ["animationPresets"] }, { kind: "component", type: AnimateEventComponent, selector: "app-animate-event" }, { kind: "component", type: VrToggleComponent, selector: "app-vr-toggle" }, { kind: "component", type: ArToggleComponent, selector: "app-ar-toggle" }, { kind: "component", type: SSModeComponent, selector: "app-ss-mode" }, { kind: "component", type: PerformanceToggleComponent, selector: "app-performance-toggle" }, { kind: "component", type: ShareLinkComponent, selector: "app-share-link" }] });
1434
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: UiMenuComponent, decorators: [{
3034
+ UiMenuComponent.ɵfac = function UiMenuComponent_Factory(t) { return new (t || UiMenuComponent)(); };
3035
+ UiMenuComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UiMenuComponent, selectors: [["app-ui-menu"]], inputs: { eventDataImportOptions: "eventDataImportOptions", animationPresets: "animationPresets" }, ngContentSelectors: _c0$1, decls: 21, vars: 2, consts: [[3, "animationPresets"], [3, "eventDataImportOptions"]], template: function UiMenuComponent_Template(rf, ctx) {
3036
+ if (rf & 1) {
3037
+ i0.ɵɵprojectionDef();
3038
+ i0.ɵɵelementStart(0, "app-ui-menu-wrapper");
3039
+ i0.ɵɵelement(1, "app-event-selector")(2, "app-zoom-controls")(3, "app-view-options")(4, "app-auto-rotate")(5, "app-dark-theme")(6, "app-object-clipping")(7, "app-main-view-toggle")(8, "app-overlay-view")(9, "app-object-selection")(10, "app-info-panel")(11, "app-animate-event")(12, "app-animate-camera", 0)(13, "app-collections-info")(14, "app-performance-toggle")(15, "app-vr-toggle")(16, "app-ar-toggle")(17, "app-ss-mode")(18, "app-io-options", 1)(19, "app-share-link");
3040
+ i0.ɵɵprojection(20);
3041
+ i0.ɵɵelementEnd();
3042
+ }
3043
+ if (rf & 2) {
3044
+ i0.ɵɵadvance(12);
3045
+ i0.ɵɵproperty("animationPresets", ctx.animationPresets);
3046
+ i0.ɵɵadvance(6);
3047
+ i0.ɵɵproperty("eventDataImportOptions", ctx.eventDataImportOptions);
3048
+ }
3049
+ }, dependencies: [UiMenuWrapperComponent, CollectionsInfoComponent, IoOptionsComponent, OverlayViewComponent, ObjectSelectionComponent, EventSelectorComponent, ObjectClippingComponent, DarkThemeComponent, AutoRotateComponent, ViewOptionsComponent, InfoPanelComponent, MainViewToggleComponent, ZoomControlsComponent, AnimateCameraComponent, AnimateEventComponent, VrToggleComponent, ArToggleComponent, SSModeComponent, PerformanceToggleComponent, ShareLinkComponent] });
3050
+ (function () {
3051
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UiMenuComponent, [{
1435
3052
  type: Component,
1436
3053
  args: [{ selector: 'app-ui-menu', template: "<app-ui-menu-wrapper>\n <!-- Event selector -->\n <app-event-selector></app-event-selector>\n\n <!-- Zoom in and zoom out controls -->\n <app-zoom-controls></app-zoom-controls>\n\n <app-view-options></app-view-options>\n\n <app-auto-rotate></app-auto-rotate>\n\n <!-- Dark theme toggle -->\n <app-dark-theme></app-dark-theme>\n\n <!-- Toggle for clipping geometries -->\n <app-object-clipping></app-object-clipping>\n\n <!-- Main view toggle -->\n <app-main-view-toggle></app-main-view-toggle>\n\n <!-- Toggle for overlay panel -->\n <app-overlay-view></app-overlay-view>\n\n <!-- Toggle for selected object panel -->\n <app-object-selection></app-object-selection>\n\n <!-- Info panel -->\n <app-info-panel></app-info-panel>\n\n <!-- Toggle for animating the event data -->\n <app-animate-event></app-animate-event>\n\n <!-- Toggle for animating camera through event -->\n <app-animate-camera\n [animationPresets]=\"animationPresets\"\n ></app-animate-camera>\n\n <!-- Toggle for collections info -->\n <app-collections-info></app-collections-info>\n\n <!-- Toggle for performance -->\n <app-performance-toggle></app-performance-toggle>\n\n <!-- Toggle for VR -->\n <app-vr-toggle></app-vr-toggle>\n\n <!-- Toggle for AR -->\n <app-ar-toggle></app-ar-toggle>\n\n <!-- Toggle for screenshot mode -->\n <app-ss-mode></app-ss-mode>\n\n <!-- Toggle for loading geometries modal-->\n <app-io-options\n [eventDataImportOptions]=\"eventDataImportOptions\"\n ></app-io-options>\n\n <!-- Toggle for shareable link constructor modal-->\n <app-share-link></app-share-link>\n\n <!-- Extra options -->\n <ng-content></ng-content>\n</app-ui-menu-wrapper>\n" }]
1437
- }], propDecorators: { eventDataImportOptions: [{
3054
+ }], null, { eventDataImportOptions: [{
1438
3055
  type: Input
1439
3056
  }], animationPresets: [{
1440
3057
  type: Input
1441
- }] } });
3058
+ }] });
3059
+ })();
1442
3060
 
3061
+ function FileExplorerComponent_cdk_tree_node_1_Template(rf, ctx) {
3062
+ if (rf & 1) {
3063
+ const _r4 = i0.ɵɵgetCurrentView();
3064
+ i0.ɵɵelementStart(0, "cdk-tree-node", 3)(1, "button", 4);
3065
+ i0.ɵɵlistener("click", function FileExplorerComponent_cdk_tree_node_1_Template_button_click_1_listener() { const restoredCtx = i0.ɵɵrestoreView(_r4); const node_r2 = restoredCtx.$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onSelect(node_r2.url)); });
3066
+ i0.ɵɵnamespaceSVG();
3067
+ i0.ɵɵelementStart(2, "svg", 5);
3068
+ i0.ɵɵelement(3, "use", 6);
3069
+ i0.ɵɵelementEnd();
3070
+ i0.ɵɵtext(4);
3071
+ i0.ɵɵelementEnd()();
3072
+ }
3073
+ if (rf & 2) {
3074
+ const node_r2 = ctx.$implicit;
3075
+ i0.ɵɵadvance(4);
3076
+ i0.ɵɵtextInterpolate1(" ", node_r2.name, " ");
3077
+ }
3078
+ }
3079
+ function FileExplorerComponent_cdk_nested_tree_node_2_Template(rf, ctx) {
3080
+ if (rf & 1) {
3081
+ i0.ɵɵelementStart(0, "cdk-nested-tree-node", 3)(1, "button", 7);
3082
+ i0.ɵɵnamespaceSVG();
3083
+ i0.ɵɵelementStart(2, "svg", 5);
3084
+ i0.ɵɵelement(3, "use", 8);
3085
+ i0.ɵɵelementEnd();
3086
+ i0.ɵɵtext(4);
3087
+ i0.ɵɵelementEnd();
3088
+ i0.ɵɵnamespaceHTML();
3089
+ i0.ɵɵelementStart(5, "div");
3090
+ i0.ɵɵelementContainer(6, 9);
3091
+ i0.ɵɵelementEnd()();
3092
+ }
3093
+ if (rf & 2) {
3094
+ const node_r5 = ctx.$implicit;
3095
+ const ctx_r1 = i0.ɵɵnextContext();
3096
+ i0.ɵɵadvance(1);
3097
+ i0.ɵɵattribute("aria-label", "Toggle " + node_r5.name);
3098
+ i0.ɵɵadvance(1);
3099
+ i0.ɵɵclassProp("node-icon-filled", !ctx_r1.treeControl.isExpanded(node_r5));
3100
+ i0.ɵɵadvance(2);
3101
+ i0.ɵɵtextInterpolate1(" ", node_r5.name, " ");
3102
+ i0.ɵɵadvance(1);
3103
+ i0.ɵɵclassProp("file-tree-invisible", !ctx_r1.treeControl.isExpanded(node_r5));
3104
+ }
3105
+ }
1443
3106
  class FileNode {
1444
3107
  constructor(name) {
1445
3108
  this.name = name;
@@ -1473,26 +3136,78 @@ class FileExplorerComponent {
1473
3136
  return Object.values(node.children).sort((a, b) => !a.url && b.url ? -1 : 1);
1474
3137
  }
1475
3138
  }
1476
- FileExplorerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: FileExplorerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1477
- FileExplorerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: FileExplorerComponent, selector: "app-file-explorer", inputs: { rootFileNode: "rootFileNode" }, outputs: { onFileSelect: "onFileSelect" }, usesOnChanges: true, ngImport: i0, template: "<cdk-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <!-- This is the tree node template for leaf nodes -->\n <cdk-tree-node *cdkTreeNodeDef=\"let node\" class=\"tree-node\">\n <button\n mat-button\n mat-stroked-button\n class=\"tree-node-button\"\n (click)=\"onSelect(node.url)\"\n >\n <svg class=\"node-icon\">\n <use href=\"assets/icons/file.svg#file\"></use>\n </svg>\n {{ node.name }}\n </button>\n </cdk-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let node; when: hasChildren\"\n class=\"tree-node\"\n >\n <button\n mat-button\n cdkTreeNodeToggle\n class=\"tree-node-button\"\n [attr.aria-label]=\"'Toggle ' + node.name\"\n >\n <svg\n class=\"node-icon\"\n [class.node-icon-filled]=\"!treeControl.isExpanded(node)\"\n >\n <use href=\"assets/icons/folder.svg#folder\"></use>\n </svg>\n {{ node.name }}\n </button>\n <div [class.file-tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n</cdk-tree>\n", styles: [".file-tree-invisible{display:none}.tree-node{display:block;margin:.25rem 0}.tree-node .tree-node{padding-left:1rem}.tree-node-button{outline:none;padding:0 .75rem}.node-icon{width:1rem;height:1rem;margin-right:.25rem;margin-top:-2px}.node-icon.node-icon-filled{--icon-fill: var(--phoenix-options-icon-path, #fff)}\n"], dependencies: [{ kind: "component", type: i2$2.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"] }, { kind: "directive", type: i2$5.CdkNestedTreeNode, selector: "cdk-nested-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i2$5.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i2$5.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i2$5.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i2$5.CdkTreeNode, selector: "cdk-tree-node", inputs: ["role"], exportAs: ["cdkTreeNode"] }, { kind: "directive", type: i2$5.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }] });
1478
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: FileExplorerComponent, decorators: [{
3139
+ FileExplorerComponent.ɵfac = function FileExplorerComponent_Factory(t) { return new (t || FileExplorerComponent)(); };
3140
+ FileExplorerComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FileExplorerComponent, selectors: [["app-file-explorer"]], inputs: { rootFileNode: "rootFileNode" }, outputs: { onFileSelect: "onFileSelect" }, features: [i0.ɵɵNgOnChangesFeature], decls: 3, vars: 3, consts: [[3, "dataSource", "treeControl"], ["class", "tree-node", 4, "cdkTreeNodeDef"], ["class", "tree-node", 4, "cdkTreeNodeDef", "cdkTreeNodeDefWhen"], [1, "tree-node"], ["mat-button", "", "mat-stroked-button", "", 1, "tree-node-button", 3, "click"], [1, "node-icon"], ["href", "assets/icons/file.svg#file"], ["mat-button", "", "cdkTreeNodeToggle", "", 1, "tree-node-button"], ["href", "assets/icons/folder.svg#folder"], ["cdkTreeNodeOutlet", ""]], template: function FileExplorerComponent_Template(rf, ctx) {
3141
+ if (rf & 1) {
3142
+ i0.ɵɵelementStart(0, "cdk-tree", 0);
3143
+ i0.ɵɵtemplate(1, FileExplorerComponent_cdk_tree_node_1_Template, 5, 1, "cdk-tree-node", 1);
3144
+ i0.ɵɵtemplate(2, FileExplorerComponent_cdk_nested_tree_node_2_Template, 7, 6, "cdk-nested-tree-node", 2);
3145
+ i0.ɵɵelementEnd();
3146
+ }
3147
+ if (rf & 2) {
3148
+ i0.ɵɵproperty("dataSource", ctx.dataSource)("treeControl", ctx.treeControl);
3149
+ i0.ɵɵadvance(2);
3150
+ i0.ɵɵproperty("cdkTreeNodeDefWhen", ctx.hasChildren);
3151
+ }
3152
+ }, dependencies: [i2$2.MatButton, i2$5.CdkNestedTreeNode, i2$5.CdkTreeNodeDef, i2$5.CdkTreeNodeToggle, i2$5.CdkTree, i2$5.CdkTreeNode, i2$5.CdkTreeNodeOutlet], styles: [".file-tree-invisible[_ngcontent-%COMP%]{display:none}.tree-node[_ngcontent-%COMP%]{display:block;margin:.25rem 0}.tree-node[_ngcontent-%COMP%] .tree-node[_ngcontent-%COMP%]{padding-left:1rem}.tree-node-button[_ngcontent-%COMP%]{outline:none;padding:0 .75rem}.node-icon[_ngcontent-%COMP%]{width:1rem;height:1rem;margin-right:.25rem;margin-top:-2px}.node-icon.node-icon-filled[_ngcontent-%COMP%]{--icon-fill: var(--phoenix-options-icon-path, #fff)}"] });
3153
+ (function () {
3154
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FileExplorerComponent, [{
1479
3155
  type: Component,
1480
3156
  args: [{ selector: 'app-file-explorer', template: "<cdk-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <!-- This is the tree node template for leaf nodes -->\n <cdk-tree-node *cdkTreeNodeDef=\"let node\" class=\"tree-node\">\n <button\n mat-button\n mat-stroked-button\n class=\"tree-node-button\"\n (click)=\"onSelect(node.url)\"\n >\n <svg class=\"node-icon\">\n <use href=\"assets/icons/file.svg#file\"></use>\n </svg>\n {{ node.name }}\n </button>\n </cdk-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let node; when: hasChildren\"\n class=\"tree-node\"\n >\n <button\n mat-button\n cdkTreeNodeToggle\n class=\"tree-node-button\"\n [attr.aria-label]=\"'Toggle ' + node.name\"\n >\n <svg\n class=\"node-icon\"\n [class.node-icon-filled]=\"!treeControl.isExpanded(node)\"\n >\n <use href=\"assets/icons/folder.svg#folder\"></use>\n </svg>\n {{ node.name }}\n </button>\n <div [class.file-tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n</cdk-tree>\n", styles: [".file-tree-invisible{display:none}.tree-node{display:block;margin:.25rem 0}.tree-node .tree-node{padding-left:1rem}.tree-node-button{outline:none;padding:0 .75rem}.node-icon{width:1rem;height:1rem;margin-right:.25rem;margin-top:-2px}.node-icon.node-icon-filled{--icon-fill: var(--phoenix-options-icon-path, #fff)}\n"] }]
1481
- }], propDecorators: { rootFileNode: [{
3157
+ }], null, { rootFileNode: [{
1482
3158
  type: Input
1483
3159
  }], onFileSelect: [{
1484
3160
  type: Output
1485
- }] } });
3161
+ }] });
3162
+ })();
1486
3163
 
1487
3164
  class RingLoaderComponent {
1488
3165
  }
1489
- RingLoaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: RingLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1490
- RingLoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: RingLoaderComponent, selector: "app-ring-loader", ngImport: i0, template: "<div class=\"ring\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n</div>\n", styles: [".ring{display:inline-block;position:relative;width:1.5rem;height:1.5rem}.ring div{box-sizing:border-box;display:block;position:absolute;width:1.5rem;height:1.5rem;margin:.25rem .5rem;border:.25rem solid var(--phoenix-text-color);border-radius:50%;animation:ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--phoenix-text-color) transparent transparent transparent}.ring div:nth-child(1){animation-delay:-.45s}.ring div:nth-child(2){animation-delay:-.3s}.ring div:nth-child(3){animation-delay:-.15s}@keyframes ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] });
1491
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: RingLoaderComponent, decorators: [{
3166
+ RingLoaderComponent.ɵfac = function RingLoaderComponent_Factory(t) { return new (t || RingLoaderComponent)(); };
3167
+ RingLoaderComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RingLoaderComponent, selectors: [["app-ring-loader"]], decls: 5, vars: 0, consts: [[1, "ring"]], template: function RingLoaderComponent_Template(rf, ctx) {
3168
+ if (rf & 1) {
3169
+ i0.ɵɵelementStart(0, "div", 0);
3170
+ i0.ɵɵelement(1, "div")(2, "div")(3, "div")(4, "div");
3171
+ i0.ɵɵelementEnd();
3172
+ }
3173
+ }, styles: [".ring[_ngcontent-%COMP%]{display:inline-block;position:relative;width:1.5rem;height:1.5rem}.ring[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{box-sizing:border-box;display:block;position:absolute;width:1.5rem;height:1.5rem;margin:.25rem .5rem;border:.25rem solid var(--phoenix-text-color);border-radius:50%;animation:animate-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--phoenix-text-color) transparent transparent transparent}.ring[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:nth-child(1){animation-delay:-.45s}.ring[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:nth-child(2){animation-delay:-.3s}.ring[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:nth-child(3){animation-delay:-.15s}@keyframes _ngcontent-%COMP%_app-ring-loader_animate-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}"] });
3174
+ (function () {
3175
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RingLoaderComponent, [{
1492
3176
  type: Component,
1493
- args: [{ selector: 'app-ring-loader', template: "<div class=\"ring\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n</div>\n", styles: [".ring{display:inline-block;position:relative;width:1.5rem;height:1.5rem}.ring div{box-sizing:border-box;display:block;position:absolute;width:1.5rem;height:1.5rem;margin:.25rem .5rem;border:.25rem solid var(--phoenix-text-color);border-radius:50%;animation:ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--phoenix-text-color) transparent transparent transparent}.ring div:nth-child(1){animation-delay:-.45s}.ring div:nth-child(2){animation-delay:-.3s}.ring div:nth-child(3){animation-delay:-.15s}@keyframes ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
1494
- }] });
3177
+ args: [{ selector: 'app-ring-loader', template: "<div class=\"ring\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n</div>\n", styles: [".ring{display:inline-block;position:relative;width:1.5rem;height:1.5rem}.ring div{box-sizing:border-box;display:block;position:absolute;width:1.5rem;height:1.5rem;margin:.25rem .5rem;border:.25rem solid var(--phoenix-text-color);border-radius:50%;animation:animate-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--phoenix-text-color) transparent transparent transparent}.ring div:nth-child(1){animation-delay:-.45s}.ring div:nth-child(2){animation-delay:-.3s}.ring div:nth-child(3){animation-delay:-.15s}@keyframes app-ring-loader_animate-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
3178
+ }], null, null);
3179
+ })();
1495
3180
 
3181
+ function EventDataExplorerDialogComponent_app_ring_loader_4_Template(rf, ctx) {
3182
+ if (rf & 1) {
3183
+ i0.ɵɵelement(0, "app-ring-loader");
3184
+ }
3185
+ }
3186
+ function EventDataExplorerDialogComponent_div_6_Template(rf, ctx) {
3187
+ if (rf & 1) {
3188
+ i0.ɵɵelementStart(0, "div");
3189
+ i0.ɵɵtext(1, "Error processing request.");
3190
+ i0.ɵɵelementEnd();
3191
+ }
3192
+ }
3193
+ function EventDataExplorerDialogComponent_mat_tab_group_7_Template(rf, ctx) {
3194
+ if (rf & 1) {
3195
+ const _r4 = i0.ɵɵgetCurrentView();
3196
+ i0.ɵɵelementStart(0, "mat-tab-group", 8)(1, "mat-tab", 9)(2, "div", 10)(3, "app-file-explorer", 11);
3197
+ i0.ɵɵlistener("onFileSelect", function EventDataExplorerDialogComponent_mat_tab_group_7_Template_app_file_explorer_onFileSelect_3_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.loadEvent($event)); });
3198
+ i0.ɵɵelementEnd()()();
3199
+ i0.ɵɵelementStart(4, "mat-tab", 12)(5, "div", 10)(6, "app-file-explorer", 11);
3200
+ i0.ɵɵlistener("onFileSelect", function EventDataExplorerDialogComponent_mat_tab_group_7_Template_app_file_explorer_onFileSelect_6_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.loadConfig($event)); });
3201
+ i0.ɵɵelementEnd()()()();
3202
+ }
3203
+ if (rf & 2) {
3204
+ const ctx_r2 = i0.ɵɵnextContext();
3205
+ i0.ɵɵadvance(3);
3206
+ i0.ɵɵproperty("rootFileNode", ctx_r2.eventDataFileNode);
3207
+ i0.ɵɵadvance(3);
3208
+ i0.ɵɵproperty("rootFileNode", ctx_r2.configFileNode);
3209
+ }
3210
+ }
1496
3211
  const supportFileTypes = ['json', 'xml'];
1497
3212
  class EventDataExplorerDialogComponent {
1498
3213
  constructor(eventDisplay, dialogRef, dialogData) {
@@ -1513,8 +3228,10 @@ class EventDataExplorerDialogComponent {
1513
3228
  });
1514
3229
  }
1515
3230
  loadEvent(file) {
1516
- this.makeRequest(file, 'text', (eventData) => {
1517
- switch (file.split('.').pop()) {
3231
+ const isZip = file.split('.').pop() === 'zip';
3232
+ const rawfile = isZip ? file.substring(0, file.length - 4) : file;
3233
+ this.makeRequest(file, isZip ? 'blob' : 'text', (eventData) => {
3234
+ switch (rawfile.split('.').pop()) {
1518
3235
  case 'xml':
1519
3236
  this.loadJiveXMLEvent(eventData);
1520
3237
  break;
@@ -1546,12 +3263,37 @@ class EventDataExplorerDialogComponent {
1546
3263
  onClose() {
1547
3264
  this.dialogRef.close();
1548
3265
  }
3266
+ unzip(data) {
3267
+ return __awaiter(this, void 0, void 0, function* () {
3268
+ const archive = new JSZip();
3269
+ yield archive.loadAsync(data);
3270
+ let fileData = '';
3271
+ let multiFile = false;
3272
+ for (const filePath in archive.files) {
3273
+ if (multiFile) {
3274
+ console.error('Zip archive contains more than one file. Ignoring all but first');
3275
+ break;
3276
+ }
3277
+ fileData = yield archive.file(filePath).async('string');
3278
+ multiFile = true;
3279
+ }
3280
+ return fileData;
3281
+ });
3282
+ }
1549
3283
  makeRequest(urlPath, responseType, onData) {
1550
3284
  this.loading = true;
1551
3285
  fetch(urlPath)
1552
3286
  .then((res) => res[responseType]())
1553
3287
  .then((data) => {
1554
- onData(data);
3288
+ if (responseType === 'blob') {
3289
+ data
3290
+ .arrayBuffer()
3291
+ .then((buf) => this.unzip(buf))
3292
+ .then((d) => onData(d));
3293
+ }
3294
+ else {
3295
+ onData(data);
3296
+ }
1555
3297
  this.error = false;
1556
3298
  })
1557
3299
  .catch((error) => {
@@ -1578,17 +3320,43 @@ class EventDataExplorerDialogComponent {
1578
3320
  return rootNode;
1579
3321
  }
1580
3322
  }
1581
- EventDataExplorerDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: EventDataExplorerDialogComponent, deps: [{ token: EventDisplayService }, { token: i1$2.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
1582
- EventDataExplorerDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", 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"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i2$2.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"] }, { kind: "component", type: i5$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i5$1.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: FileExplorerComponent, selector: "app-file-explorer", inputs: ["rootFileNode"], outputs: ["onFileSelect"] }, { kind: "component", type: RingLoaderComponent, selector: "app-ring-loader" }] });
1583
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: EventDataExplorerDialogComponent, decorators: [{
3323
+ EventDataExplorerDialogComponent.ɵfac = function EventDataExplorerDialogComponent_Factory(t) { return new (t || EventDataExplorerDialogComponent)(i0.ɵɵdirectiveInject(EventDisplayService), i0.ɵɵdirectiveInject(i1$2.MatDialogRef), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA)); };
3324
+ EventDataExplorerDialogComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EventDataExplorerDialogComponent, selectors: [["app-event-data-explorer-dialog"]], decls: 11, vars: 3, consts: [[1, "dialog"], [1, "d-flex"], ["mat-dialog-title", ""], [4, "ngIf"], ["mat-dialog-content", "", 1, "dialog-content"], ["mat-align-tabs", "start", "animationDuration", "0ms", "disableRipple", "", "color", "transparent", 4, "ngIf"], ["mat-dialog-actions", ""], ["mat-button", "", "cdkFocusInitial", "", 3, "click"], ["mat-align-tabs", "start", "animationDuration", "0ms", "disableRipple", "", "color", "transparent"], ["label", "Event data"], [1, "py-3"], [3, "rootFileNode", "onFileSelect"], ["label", "Config"]], template: function EventDataExplorerDialogComponent_Template(rf, ctx) {
3325
+ if (rf & 1) {
3326
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h1", 2);
3327
+ i0.ɵɵtext(3, "Event data from directory");
3328
+ i0.ɵɵelementEnd();
3329
+ i0.ɵɵtemplate(4, EventDataExplorerDialogComponent_app_ring_loader_4_Template, 1, 0, "app-ring-loader", 3);
3330
+ i0.ɵɵelementEnd();
3331
+ i0.ɵɵelementStart(5, "div", 4);
3332
+ i0.ɵɵtemplate(6, EventDataExplorerDialogComponent_div_6_Template, 2, 0, "div", 3);
3333
+ i0.ɵɵtemplate(7, EventDataExplorerDialogComponent_mat_tab_group_7_Template, 7, 2, "mat-tab-group", 5);
3334
+ i0.ɵɵelementEnd();
3335
+ i0.ɵɵelementStart(8, "div", 6)(9, "button", 7);
3336
+ i0.ɵɵlistener("click", function EventDataExplorerDialogComponent_Template_button_click_9_listener() { return ctx.onClose(); });
3337
+ i0.ɵɵtext(10, "Close");
3338
+ i0.ɵɵelementEnd()()();
3339
+ }
3340
+ if (rf & 2) {
3341
+ i0.ɵɵadvance(4);
3342
+ i0.ɵɵproperty("ngIf", ctx.loading);
3343
+ i0.ɵɵadvance(2);
3344
+ i0.ɵɵproperty("ngIf", ctx.error);
3345
+ i0.ɵɵadvance(1);
3346
+ i0.ɵɵproperty("ngIf", !ctx.error);
3347
+ }
3348
+ }, dependencies: [i2.NgIf, i1$2.MatDialogTitle, i1$2.MatDialogContent, i1$2.MatDialogActions, i2$2.MatButton, i5$1.MatTab, i5$1.MatTabGroup, FileExplorerComponent, RingLoaderComponent], styles: [".dialog[_ngcontent-%COMP%]{width:30rem;max-width:95%}.file-path-button[_ngcontent-%COMP%]{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[_ngcontent-%COMP%]:last-child{margin-bottom:0}.file-path-button[_ngcontent-%COMP%]:hover{background:var(--phoenix-background-color-secondary)}.file-path-button[_ngcontent-%COMP%]:focus{border:1px solid var(--phoenix-text-color-secondary);box-shadow:none}"] });
3349
+ (function () {
3350
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EventDataExplorerDialogComponent, [{
1584
3351
  type: Component,
1585
3352
  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"] }]
1586
- }], ctorParameters: function () {
3353
+ }], function () {
1587
3354
  return [{ type: EventDisplayService }, { type: i1$2.MatDialogRef }, { type: undefined, decorators: [{
1588
3355
  type: Inject,
1589
3356
  args: [MAT_DIALOG_DATA]
1590
3357
  }] }];
1591
- } });
3358
+ }, null);
3359
+ })();
1592
3360
 
1593
3361
  class EventDataExplorerComponent {
1594
3362
  constructor(dialog) {
@@ -1602,14 +3370,25 @@ class EventDataExplorerComponent {
1602
3370
  });
1603
3371
  }
1604
3372
  }
1605
- EventDataExplorerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: EventDataExplorerComponent, deps: [{ token: i1$2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
1606
- EventDataExplorerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", 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: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
1607
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: EventDataExplorerComponent, decorators: [{
3373
+ EventDataExplorerComponent.ɵfac = function EventDataExplorerComponent_Factory(t) { return new (t || EventDataExplorerComponent)(i0.ɵɵdirectiveInject(i1$2.MatDialog)); };
3374
+ EventDataExplorerComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EventDataExplorerComponent, selectors: [["app-event-data-explorer"]], inputs: { apiURL: "apiURL" }, decls: 1, vars: 1, consts: [["tooltip", "Browse events in data directory", "icon", "server", 3, "active", "click"]], template: function EventDataExplorerComponent_Template(rf, ctx) {
3375
+ if (rf & 1) {
3376
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
3377
+ i0.ɵɵlistener("click", function EventDataExplorerComponent_Template_app_menu_toggle_click_0_listener() { return ctx.openEventDataExplorerDialog(); });
3378
+ i0.ɵɵelementEnd();
3379
+ }
3380
+ if (rf & 2) {
3381
+ i0.ɵɵproperty("active", false);
3382
+ }
3383
+ }, dependencies: [MenuToggleComponent] });
3384
+ (function () {
3385
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EventDataExplorerComponent, [{
1608
3386
  type: Component,
1609
3387
  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" }]
1610
- }], ctorParameters: function () { return [{ type: i1$2.MatDialog }]; }, propDecorators: { apiURL: [{
3388
+ }], function () { return [{ type: i1$2.MatDialog }]; }, { apiURL: [{
1611
3389
  type: Input
1612
- }] } });
3390
+ }] });
3391
+ })();
1613
3392
 
1614
3393
  class CycleEventsComponent {
1615
3394
  constructor(eventDisplay) {
@@ -1634,14 +3413,25 @@ class CycleEventsComponent {
1634
3413
  }, this.interval);
1635
3414
  }
1636
3415
  }
1637
- CycleEventsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: CycleEventsComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1638
- CycleEventsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: CycleEventsComponent, selector: "app-cycle-events", inputs: { interval: "interval" }, ngImport: i0, template: "<app-menu-toggle\n tooltip=\"Cycle through events\"\n [active]=\"active\"\n icon=\"cycle-events\"\n (click)=\"toggleCycle()\"\n>\n</app-menu-toggle>\n", dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
1639
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: CycleEventsComponent, decorators: [{
3416
+ CycleEventsComponent.ɵfac = function CycleEventsComponent_Factory(t) { return new (t || CycleEventsComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
3417
+ CycleEventsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CycleEventsComponent, selectors: [["app-cycle-events"]], inputs: { interval: "interval" }, decls: 1, vars: 1, consts: [["tooltip", "Cycle through events", "icon", "cycle-events", 3, "active", "click"]], template: function CycleEventsComponent_Template(rf, ctx) {
3418
+ if (rf & 1) {
3419
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
3420
+ i0.ɵɵlistener("click", function CycleEventsComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleCycle(); });
3421
+ i0.ɵɵelementEnd();
3422
+ }
3423
+ if (rf & 2) {
3424
+ i0.ɵɵproperty("active", ctx.active);
3425
+ }
3426
+ }, dependencies: [MenuToggleComponent], encapsulation: 2 });
3427
+ (function () {
3428
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CycleEventsComponent, [{
1640
3429
  type: Component,
1641
3430
  args: [{ selector: 'app-cycle-events', template: "<app-menu-toggle\n tooltip=\"Cycle through events\"\n [active]=\"active\"\n icon=\"cycle-events\"\n (click)=\"toggleCycle()\"\n>\n</app-menu-toggle>\n" }]
1642
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { interval: [{
3431
+ }], function () { return [{ type: EventDisplayService }]; }, { interval: [{
1643
3432
  type: Input
1644
- }] } });
3433
+ }] });
3434
+ })();
1645
3435
 
1646
3436
  class ErrorMessageService {
1647
3437
  constructor() {
@@ -1663,15 +3453,57 @@ class ErrorMessageService {
1663
3453
  this.error.update(error);
1664
3454
  }
1665
3455
  }
1666
- ErrorMessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ErrorMessageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1667
- ErrorMessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ErrorMessageService, providedIn: 'root' });
1668
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ErrorMessageService, decorators: [{
3456
+ ErrorMessageService.ɵfac = function ErrorMessageService_Factory(t) { return new (t || ErrorMessageService)(); };
3457
+ ErrorMessageService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ErrorMessageService, factory: ErrorMessageService.ɵfac, providedIn: 'root' });
3458
+ (function () {
3459
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ErrorMessageService, [{
1669
3460
  type: Injectable,
1670
3461
  args: [{
1671
3462
  providedIn: 'root',
1672
3463
  }]
1673
- }] });
3464
+ }], null, null);
3465
+ })();
1674
3466
 
3467
+ const _c0 = function (a0) { return { width: a0 }; };
3468
+ function LoaderComponent_ng_container_1_div_7_Template(rf, ctx) {
3469
+ if (rf & 1) {
3470
+ i0.ɵɵelementStart(0, "div", 7);
3471
+ i0.ɵɵelement(1, "span");
3472
+ i0.ɵɵelementEnd();
3473
+ }
3474
+ if (rf & 2) {
3475
+ const ctx_r3 = i0.ɵɵnextContext(2);
3476
+ i0.ɵɵadvance(1);
3477
+ i0.ɵɵstyleMap(i0.ɵɵpureFunction1(2, _c0, ctx_r3.progress + "%"));
3478
+ }
3479
+ }
3480
+ function LoaderComponent_ng_container_1_Template(rf, ctx) {
3481
+ if (rf & 1) {
3482
+ i0.ɵɵelementContainerStart(0);
3483
+ i0.ɵɵelement(1, "img", 3);
3484
+ i0.ɵɵelementStart(2, "p", 4);
3485
+ i0.ɵɵtext(3, " Loading...");
3486
+ i0.ɵɵelement(4, "br");
3487
+ i0.ɵɵelementStart(5, "small", 5);
3488
+ i0.ɵɵtext(6, "(This may take a while)");
3489
+ i0.ɵɵelementEnd()();
3490
+ i0.ɵɵtemplate(7, LoaderComponent_ng_container_1_div_7_Template, 2, 4, "div", 6);
3491
+ i0.ɵɵelementContainerEnd();
3492
+ }
3493
+ if (rf & 2) {
3494
+ const ctx_r0 = i0.ɵɵnextContext();
3495
+ i0.ɵɵadvance(7);
3496
+ i0.ɵɵproperty("ngIf", ctx_r0.progress !== undefined);
3497
+ }
3498
+ }
3499
+ function LoaderComponent_ng_template_2_Template(rf, ctx) {
3500
+ if (rf & 1) {
3501
+ i0.ɵɵelementStart(0, "p");
3502
+ i0.ɵɵtext(1, " An error occurred while loading the application. Please try refreshing the page. ");
3503
+ i0.ɵɵelementEnd();
3504
+ }
3505
+ }
3506
+ const _c1 = function (a0) { return { "load-complete": a0 }; };
1675
3507
  class LoaderComponent {
1676
3508
  constructor(errorMessageService) {
1677
3509
  this.errorMessageService = errorMessageService;
@@ -1683,16 +3515,31 @@ class LoaderComponent {
1683
3515
  });
1684
3516
  }
1685
3517
  }
1686
- LoaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: LoaderComponent, deps: [{ token: ErrorMessageService }], target: i0.ɵɵFactoryTarget.Component });
1687
- LoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: LoaderComponent, selector: "app-loader", inputs: { loaded: "loaded", progress: "progress" }, ngImport: i0, template: "<div\n class=\"loader-wrapper d-flex position-absolute flex-column justify-content-center align-items-center w-100 h-100 p-5 text-center\"\n [ngClass]=\"{ 'load-complete': loaded }\"\n>\n <ng-container *ngIf=\"error === undefined; else errorContainer\">\n <img src=\"assets/images/logo-small.svg\" alt=\"Loader\" />\n <p class=\"mt-5\">\n Loading...<br />\n <small class=\"text-muted\">(This may take a while)</small>\n </p>\n <div class=\"loading-bar\" *ngIf=\"progress !== undefined\">\n <span [style]=\"{ width: progress + '%' }\"></span>\n </div>\n </ng-container>\n <ng-template #errorContainer>\n <p>\n An error occurred while loading the application. Please try refreshing the\n page.\n </p>\n </ng-template>\n</div>\n", styles: [".loader-wrapper{background:var(--phoenix-background-color);z-index:9998}.loader-wrapper.load-complete{display:none!important}.loader-wrapper img{width:5rem;height:5rem;animation:loader 2s infinite}.loader-wrapper p{color:var(--phoenix-text-color)}.loader-wrapper .loading-bar{width:15rem;max-width:90%;height:.5rem;background:var(--phoenix-background-color-tertiary);border-radius:2.5rem;overflow:hidden}.loader-wrapper .loading-bar span{display:block;height:100%;border-radius:2.5rem;background:linear-gradient(to right,var(--phoenix-primary),var(--phoenix-secondary));transition:all .5s}@keyframes loader{0%,to{transform:scale(.1) rotate(0)}95%{transform:scale(1) rotate(15deg)}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1688
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: LoaderComponent, decorators: [{
3518
+ LoaderComponent.ɵfac = function LoaderComponent_Factory(t) { return new (t || LoaderComponent)(i0.ɵɵdirectiveInject(ErrorMessageService)); };
3519
+ LoaderComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LoaderComponent, selectors: [["app-loader"]], inputs: { loaded: "loaded", progress: "progress" }, decls: 4, vars: 5, consts: [[1, "loader-wrapper", "d-flex", "position-absolute", "flex-column", "justify-content-center", "align-items-center", "w-100", "h-100", "p-5", "text-center", 3, "ngClass"], [4, "ngIf", "ngIfElse"], ["errorContainer", ""], ["src", "assets/images/logo-small.svg", "alt", "Loader"], [1, "mt-5"], [1, "text-muted"], ["class", "loading-bar", 4, "ngIf"], [1, "loading-bar"]], template: function LoaderComponent_Template(rf, ctx) {
3520
+ if (rf & 1) {
3521
+ i0.ɵɵelementStart(0, "div", 0);
3522
+ i0.ɵɵtemplate(1, LoaderComponent_ng_container_1_Template, 8, 1, "ng-container", 1);
3523
+ i0.ɵɵtemplate(2, LoaderComponent_ng_template_2_Template, 2, 0, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
3524
+ i0.ɵɵelementEnd();
3525
+ }
3526
+ if (rf & 2) {
3527
+ const _r1 = i0.ɵɵreference(3);
3528
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c1, ctx.loaded));
3529
+ i0.ɵɵadvance(1);
3530
+ i0.ɵɵproperty("ngIf", ctx.error === undefined)("ngIfElse", _r1);
3531
+ }
3532
+ }, dependencies: [i2.NgClass, i2.NgIf], styles: [".loader-wrapper[_ngcontent-%COMP%]{background:var(--phoenix-background-color);z-index:9998}.loader-wrapper.load-complete[_ngcontent-%COMP%]{display:none!important}.loader-wrapper[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:5rem;height:5rem;animation:loader 2s infinite}.loader-wrapper[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--phoenix-text-color)}.loader-wrapper[_ngcontent-%COMP%] .loading-bar[_ngcontent-%COMP%]{width:15rem;max-width:90%;height:.5rem;background:var(--phoenix-background-color-tertiary);border-radius:2.5rem;overflow:hidden}.loader-wrapper[_ngcontent-%COMP%] .loading-bar[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:block;height:100%;border-radius:2.5rem;background:linear-gradient(to right,var(--phoenix-primary),var(--phoenix-secondary));transition:all .5s}@keyframes _ngcontent-%COMP%_app-loader_loader{0%,to{transform:scale(.1) rotate(0)}95%{transform:scale(1) rotate(15deg)}}"] });
3533
+ (function () {
3534
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LoaderComponent, [{
1689
3535
  type: Component,
1690
- args: [{ selector: 'app-loader', template: "<div\n class=\"loader-wrapper d-flex position-absolute flex-column justify-content-center align-items-center w-100 h-100 p-5 text-center\"\n [ngClass]=\"{ 'load-complete': loaded }\"\n>\n <ng-container *ngIf=\"error === undefined; else errorContainer\">\n <img src=\"assets/images/logo-small.svg\" alt=\"Loader\" />\n <p class=\"mt-5\">\n Loading...<br />\n <small class=\"text-muted\">(This may take a while)</small>\n </p>\n <div class=\"loading-bar\" *ngIf=\"progress !== undefined\">\n <span [style]=\"{ width: progress + '%' }\"></span>\n </div>\n </ng-container>\n <ng-template #errorContainer>\n <p>\n An error occurred while loading the application. Please try refreshing the\n page.\n </p>\n </ng-template>\n</div>\n", styles: [".loader-wrapper{background:var(--phoenix-background-color);z-index:9998}.loader-wrapper.load-complete{display:none!important}.loader-wrapper img{width:5rem;height:5rem;animation:loader 2s infinite}.loader-wrapper p{color:var(--phoenix-text-color)}.loader-wrapper .loading-bar{width:15rem;max-width:90%;height:.5rem;background:var(--phoenix-background-color-tertiary);border-radius:2.5rem;overflow:hidden}.loader-wrapper .loading-bar span{display:block;height:100%;border-radius:2.5rem;background:linear-gradient(to right,var(--phoenix-primary),var(--phoenix-secondary));transition:all .5s}@keyframes loader{0%,to{transform:scale(.1) rotate(0)}95%{transform:scale(1) rotate(15deg)}}\n"] }]
1691
- }], ctorParameters: function () { return [{ type: ErrorMessageService }]; }, propDecorators: { loaded: [{
3536
+ args: [{ selector: 'app-loader', template: "<div\n class=\"loader-wrapper d-flex position-absolute flex-column justify-content-center align-items-center w-100 h-100 p-5 text-center\"\n [ngClass]=\"{ 'load-complete': loaded }\"\n>\n <ng-container *ngIf=\"error === undefined; else errorContainer\">\n <img src=\"assets/images/logo-small.svg\" alt=\"Loader\" />\n <p class=\"mt-5\">\n Loading...<br />\n <small class=\"text-muted\">(This may take a while)</small>\n </p>\n <div class=\"loading-bar\" *ngIf=\"progress !== undefined\">\n <span [style]=\"{ width: progress + '%' }\"></span>\n </div>\n </ng-container>\n <ng-template #errorContainer>\n <p>\n An error occurred while loading the application. Please try refreshing the\n page.\n </p>\n </ng-template>\n</div>\n", styles: [".loader-wrapper{background:var(--phoenix-background-color);z-index:9998}.loader-wrapper.load-complete{display:none!important}.loader-wrapper img{width:5rem;height:5rem;animation:loader 2s infinite}.loader-wrapper p{color:var(--phoenix-text-color)}.loader-wrapper .loading-bar{width:15rem;max-width:90%;height:.5rem;background:var(--phoenix-background-color-tertiary);border-radius:2.5rem;overflow:hidden}.loader-wrapper .loading-bar span{display:block;height:100%;border-radius:2.5rem;background:linear-gradient(to right,var(--phoenix-primary),var(--phoenix-secondary));transition:all .5s}@keyframes app-loader_loader{0%,to{transform:scale(.1) rotate(0)}95%{transform:scale(1) rotate(15deg)}}\n"] }]
3537
+ }], function () { return [{ type: ErrorMessageService }]; }, { loaded: [{
1692
3538
  type: Input
1693
3539
  }], progress: [{
1694
3540
  type: Input
1695
- }] } });
3541
+ }] });
3542
+ })();
1696
3543
 
1697
3544
  /**
1698
3545
  * Global handler for handling app/module wide errors.
@@ -1714,11 +3561,13 @@ class GlobalErrorHandler {
1714
3561
  this.injector.get(ErrorMessageService).setError(error);
1715
3562
  }
1716
3563
  }
1717
- GlobalErrorHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: GlobalErrorHandler, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
1718
- GlobalErrorHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: GlobalErrorHandler });
1719
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: GlobalErrorHandler, decorators: [{
3564
+ GlobalErrorHandler.ɵfac = function GlobalErrorHandler_Factory(t) { return new (t || GlobalErrorHandler)(i0.ɵɵinject(i0.Injector)); };
3565
+ GlobalErrorHandler.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: GlobalErrorHandler, factory: GlobalErrorHandler.ɵfac });
3566
+ (function () {
3567
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GlobalErrorHandler, [{
1720
3568
  type: Injectable
1721
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
3569
+ }], function () { return [{ type: i0.Injector }]; }, null);
3570
+ })();
1722
3571
 
1723
3572
  class ExperimentLinkComponent {
1724
3573
  ngOnInit() {
@@ -1728,21 +3577,37 @@ class ExperimentLinkComponent {
1728
3577
  window.open(this.experimentLink, '_blank');
1729
3578
  }
1730
3579
  }
1731
- ExperimentLinkComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ExperimentLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1732
- ExperimentLinkComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: ExperimentLinkComponent, selector: "app-experiment-link", ngImport: i0, template: "<app-menu-toggle\n tooltip=\"See full event display\"\n icon=\"link\"\n (click)=\"goToExperiment()\"\n></app-menu-toggle>\n", styles: [""], dependencies: [{ kind: "component", type: MenuToggleComponent, selector: "app-menu-toggle", inputs: ["icon", "active", "tooltip", "disabled"] }] });
1733
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: ExperimentLinkComponent, decorators: [{
3580
+ ExperimentLinkComponent.ɵfac = function ExperimentLinkComponent_Factory(t) { return new (t || ExperimentLinkComponent)(); };
3581
+ ExperimentLinkComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ExperimentLinkComponent, selectors: [["app-experiment-link"]], decls: 1, vars: 0, consts: [["tooltip", "See full event display", "icon", "link", 3, "click"]], template: function ExperimentLinkComponent_Template(rf, ctx) {
3582
+ if (rf & 1) {
3583
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
3584
+ i0.ɵɵlistener("click", function ExperimentLinkComponent_Template_app_menu_toggle_click_0_listener() { return ctx.goToExperiment(); });
3585
+ i0.ɵɵelementEnd();
3586
+ }
3587
+ }, dependencies: [MenuToggleComponent] });
3588
+ (function () {
3589
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ExperimentLinkComponent, [{
1734
3590
  type: Component,
1735
3591
  args: [{ selector: 'app-experiment-link', template: "<app-menu-toggle\n tooltip=\"See full event display\"\n icon=\"link\"\n (click)=\"goToExperiment()\"\n></app-menu-toggle>\n" }]
1736
- }] });
3592
+ }], null, null);
3593
+ })();
1737
3594
 
1738
3595
  class EmbedMenuComponent {
1739
3596
  }
1740
- EmbedMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: EmbedMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1741
- EmbedMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: EmbedMenuComponent, selector: "app-embed-menu", ngImport: i0, template: "<div id=\"embedMenu\">\n <div id=\"embedMenuInner\">\n <app-dark-theme></app-dark-theme>\n <app-auto-rotate></app-auto-rotate>\n <app-main-view-toggle></app-main-view-toggle>\n <app-animate-event></app-animate-event>\n <app-animate-camera></app-animate-camera>\n <app-experiment-link></app-experiment-link>\n </div>\n</div>\n", styles: ["#embedMenu{display:none}#embedMenu #embedMenuInner{display:flex;position:absolute;left:1rem;bottom:1rem;background:var(--phoenix-background-color-secondary);border:1px solid var(--phoenix-background-color-tertiary);box-shadow:var(--phoenix-box-shadow);border-radius:30px;padding:.25rem 0}\n"], dependencies: [{ kind: "component", type: DarkThemeComponent, selector: "app-dark-theme" }, { kind: "component", type: AutoRotateComponent, selector: "app-auto-rotate" }, { kind: "component", type: MainViewToggleComponent, selector: "app-main-view-toggle" }, { kind: "component", type: AnimateCameraComponent, selector: "app-animate-camera", inputs: ["animationPresets"] }, { kind: "component", type: AnimateEventComponent, selector: "app-animate-event" }, { kind: "component", type: ExperimentLinkComponent, selector: "app-experiment-link" }] });
1742
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: EmbedMenuComponent, decorators: [{
3597
+ EmbedMenuComponent.ɵfac = function EmbedMenuComponent_Factory(t) { return new (t || EmbedMenuComponent)(); };
3598
+ EmbedMenuComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EmbedMenuComponent, selectors: [["app-embed-menu"]], decls: 8, vars: 0, consts: [["id", "embedMenu"], ["id", "embedMenuInner"]], template: function EmbedMenuComponent_Template(rf, ctx) {
3599
+ if (rf & 1) {
3600
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
3601
+ i0.ɵɵelement(2, "app-dark-theme")(3, "app-auto-rotate")(4, "app-main-view-toggle")(5, "app-animate-event")(6, "app-animate-camera")(7, "app-experiment-link");
3602
+ i0.ɵɵelementEnd()();
3603
+ }
3604
+ }, dependencies: [DarkThemeComponent, AutoRotateComponent, MainViewToggleComponent, AnimateCameraComponent, AnimateEventComponent, ExperimentLinkComponent], styles: ["#embedMenu[_ngcontent-%COMP%]{display:none}#embedMenu[_ngcontent-%COMP%] #embedMenuInner[_ngcontent-%COMP%]{display:flex;position:absolute;left:1rem;bottom:1rem;background:var(--phoenix-background-color-secondary);border:1px solid var(--phoenix-background-color-tertiary);box-shadow:var(--phoenix-box-shadow);border-radius:30px;padding:.25rem 0}"] });
3605
+ (function () {
3606
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EmbedMenuComponent, [{
1743
3607
  type: Component,
1744
3608
  args: [{ selector: 'app-embed-menu', template: "<div id=\"embedMenu\">\n <div id=\"embedMenuInner\">\n <app-dark-theme></app-dark-theme>\n <app-auto-rotate></app-auto-rotate>\n <app-main-view-toggle></app-main-view-toggle>\n <app-animate-event></app-animate-event>\n <app-animate-camera></app-animate-camera>\n <app-experiment-link></app-experiment-link>\n </div>\n</div>\n", styles: ["#embedMenu{display:none}#embedMenu #embedMenuInner{display:flex;position:absolute;left:1rem;bottom:1rem;background:var(--phoenix-background-color-secondary);border:1px solid var(--phoenix-background-color-tertiary);box-shadow:var(--phoenix-box-shadow);border-radius:30px;padding:.25rem 0}\n"] }]
1745
- }] });
3609
+ }], null, null);
3610
+ })();
1746
3611
 
1747
3612
  const PHOENIX_COMPONENTS = [
1748
3613
  NavComponent,
@@ -1793,111 +3658,9 @@ const PHOENIX_COMPONENTS = [
1793
3658
  ];
1794
3659
  class PhoenixUIModule {
1795
3660
  }
1796
- PhoenixUIModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: PhoenixUIModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1797
- PhoenixUIModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.4", ngImport: i0, type: PhoenixUIModule, declarations: [NavComponent,
1798
- UiMenuWrapperComponent,
1799
- UiMenuComponent,
1800
- CollectionsInfoComponent,
1801
- MenuToggleComponent,
1802
- CollectionsInfoOverlayComponent,
1803
- IoOptionsComponent,
1804
- IOOptionsDialogComponent,
1805
- OverlayViewComponent,
1806
- AttributePipe,
1807
- ObjectSelectionComponent,
1808
- ObjectSelectionOverlayComponent,
1809
- EventSelectorComponent,
1810
- ObjectClippingComponent,
1811
- DarkThemeComponent,
1812
- AutoRotateComponent,
1813
- ViewOptionsComponent,
1814
- OverlayViewWindowComponent,
1815
- OverlayComponent,
1816
- ExperimentInfoComponent,
1817
- InfoPanelComponent,
1818
- InfoPanelOverlayComponent,
1819
- MainViewToggleComponent,
1820
- ZoomControlsComponent,
1821
- TreeMenuComponent,
1822
- TreeMenuItemComponent,
1823
- PhoenixMenuComponent,
1824
- PhoenixMenuItemComponent,
1825
- ConfigSliderComponent,
1826
- AnimateCameraComponent,
1827
- AnimateEventComponent,
1828
- VrToggleComponent,
1829
- ArToggleComponent,
1830
- SSModeComponent,
1831
- PerformanceToggleComponent,
1832
- LoaderComponent,
1833
- ShareLinkComponent,
1834
- ShareLinkDialogComponent,
1835
- EmbedMenuComponent,
1836
- ExperimentLinkComponent,
1837
- EventDataExplorerComponent,
1838
- EventDataExplorerDialogComponent,
1839
- FileExplorerComponent,
1840
- RingLoaderComponent,
1841
- CycleEventsComponent], imports: [CommonModule,
1842
- RouterModule,
1843
- DragDropModule,
1844
- MatDialogModule,
1845
- MatButtonModule,
1846
- MatTooltipModule,
1847
- OverlayModule,
1848
- MatMenuModule,
1849
- MatSliderModule,
1850
- MatSlideToggleModule,
1851
- MatCheckboxModule,
1852
- MatIconModule,
1853
- NgxSliderModule,
1854
- CdkTreeModule,
1855
- MatTabsModule], exports: [NavComponent,
1856
- UiMenuWrapperComponent,
1857
- UiMenuComponent,
1858
- CollectionsInfoComponent,
1859
- MenuToggleComponent,
1860
- CollectionsInfoOverlayComponent,
1861
- IoOptionsComponent,
1862
- IOOptionsDialogComponent,
1863
- OverlayViewComponent,
1864
- AttributePipe,
1865
- ObjectSelectionComponent,
1866
- ObjectSelectionOverlayComponent,
1867
- EventSelectorComponent,
1868
- ObjectClippingComponent,
1869
- DarkThemeComponent,
1870
- AutoRotateComponent,
1871
- ViewOptionsComponent,
1872
- OverlayViewWindowComponent,
1873
- OverlayComponent,
1874
- ExperimentInfoComponent,
1875
- InfoPanelComponent,
1876
- InfoPanelOverlayComponent,
1877
- MainViewToggleComponent,
1878
- ZoomControlsComponent,
1879
- TreeMenuComponent,
1880
- TreeMenuItemComponent,
1881
- PhoenixMenuComponent,
1882
- PhoenixMenuItemComponent,
1883
- ConfigSliderComponent,
1884
- AnimateCameraComponent,
1885
- AnimateEventComponent,
1886
- VrToggleComponent,
1887
- ArToggleComponent,
1888
- SSModeComponent,
1889
- PerformanceToggleComponent,
1890
- LoaderComponent,
1891
- ShareLinkComponent,
1892
- ShareLinkDialogComponent,
1893
- EmbedMenuComponent,
1894
- ExperimentLinkComponent,
1895
- EventDataExplorerComponent,
1896
- EventDataExplorerDialogComponent,
1897
- FileExplorerComponent,
1898
- RingLoaderComponent,
1899
- CycleEventsComponent] });
1900
- PhoenixUIModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: PhoenixUIModule, providers: [
3661
+ PhoenixUIModule.ɵfac = function PhoenixUIModule_Factory(t) { return new (t || PhoenixUIModule)(); };
3662
+ PhoenixUIModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: PhoenixUIModule });
3663
+ PhoenixUIModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [
1901
3664
  EventDisplayService,
1902
3665
  ErrorMessageService,
1903
3666
  {
@@ -1919,7 +3682,8 @@ PhoenixUIModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version
1919
3682
  NgxSliderModule,
1920
3683
  CdkTreeModule,
1921
3684
  MatTabsModule] });
1922
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: PhoenixUIModule, decorators: [{
3685
+ (function () {
3686
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PhoenixUIModule, [{
1923
3687
  type: NgModule,
1924
3688
  args: [{
1925
3689
  declarations: PHOENIX_COMPONENTS,
@@ -1959,7 +3723,113 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImpor
1959
3723
  },
1960
3724
  ],
1961
3725
  }]
1962
- }] });
3726
+ }], null, null);
3727
+ })();
3728
+ (function () {
3729
+ (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(PhoenixUIModule, { declarations: [NavComponent,
3730
+ UiMenuWrapperComponent,
3731
+ UiMenuComponent,
3732
+ CollectionsInfoComponent,
3733
+ MenuToggleComponent,
3734
+ CollectionsInfoOverlayComponent,
3735
+ IoOptionsComponent,
3736
+ IOOptionsDialogComponent,
3737
+ OverlayViewComponent,
3738
+ AttributePipe,
3739
+ ObjectSelectionComponent,
3740
+ ObjectSelectionOverlayComponent,
3741
+ EventSelectorComponent,
3742
+ ObjectClippingComponent,
3743
+ DarkThemeComponent,
3744
+ AutoRotateComponent,
3745
+ ViewOptionsComponent,
3746
+ OverlayViewWindowComponent,
3747
+ OverlayComponent,
3748
+ ExperimentInfoComponent,
3749
+ InfoPanelComponent,
3750
+ InfoPanelOverlayComponent,
3751
+ MainViewToggleComponent,
3752
+ ZoomControlsComponent,
3753
+ TreeMenuComponent,
3754
+ TreeMenuItemComponent,
3755
+ PhoenixMenuComponent,
3756
+ PhoenixMenuItemComponent,
3757
+ ConfigSliderComponent,
3758
+ AnimateCameraComponent,
3759
+ AnimateEventComponent,
3760
+ VrToggleComponent,
3761
+ ArToggleComponent,
3762
+ SSModeComponent,
3763
+ PerformanceToggleComponent,
3764
+ LoaderComponent,
3765
+ ShareLinkComponent,
3766
+ ShareLinkDialogComponent,
3767
+ EmbedMenuComponent,
3768
+ ExperimentLinkComponent,
3769
+ EventDataExplorerComponent,
3770
+ EventDataExplorerDialogComponent,
3771
+ FileExplorerComponent,
3772
+ RingLoaderComponent,
3773
+ CycleEventsComponent], imports: [CommonModule,
3774
+ RouterModule,
3775
+ DragDropModule,
3776
+ MatDialogModule,
3777
+ MatButtonModule,
3778
+ MatTooltipModule,
3779
+ OverlayModule,
3780
+ MatMenuModule,
3781
+ MatSliderModule,
3782
+ MatSlideToggleModule,
3783
+ MatCheckboxModule,
3784
+ MatIconModule,
3785
+ NgxSliderModule,
3786
+ CdkTreeModule,
3787
+ MatTabsModule], exports: [NavComponent,
3788
+ UiMenuWrapperComponent,
3789
+ UiMenuComponent,
3790
+ CollectionsInfoComponent,
3791
+ MenuToggleComponent,
3792
+ CollectionsInfoOverlayComponent,
3793
+ IoOptionsComponent,
3794
+ IOOptionsDialogComponent,
3795
+ OverlayViewComponent,
3796
+ AttributePipe,
3797
+ ObjectSelectionComponent,
3798
+ ObjectSelectionOverlayComponent,
3799
+ EventSelectorComponent,
3800
+ ObjectClippingComponent,
3801
+ DarkThemeComponent,
3802
+ AutoRotateComponent,
3803
+ ViewOptionsComponent,
3804
+ OverlayViewWindowComponent,
3805
+ OverlayComponent,
3806
+ ExperimentInfoComponent,
3807
+ InfoPanelComponent,
3808
+ InfoPanelOverlayComponent,
3809
+ MainViewToggleComponent,
3810
+ ZoomControlsComponent,
3811
+ TreeMenuComponent,
3812
+ TreeMenuItemComponent,
3813
+ PhoenixMenuComponent,
3814
+ PhoenixMenuItemComponent,
3815
+ ConfigSliderComponent,
3816
+ AnimateCameraComponent,
3817
+ AnimateEventComponent,
3818
+ VrToggleComponent,
3819
+ ArToggleComponent,
3820
+ SSModeComponent,
3821
+ PerformanceToggleComponent,
3822
+ LoaderComponent,
3823
+ ShareLinkComponent,
3824
+ ShareLinkDialogComponent,
3825
+ EmbedMenuComponent,
3826
+ ExperimentLinkComponent,
3827
+ EventDataExplorerComponent,
3828
+ EventDataExplorerDialogComponent,
3829
+ FileExplorerComponent,
3830
+ RingLoaderComponent,
3831
+ CycleEventsComponent] });
3832
+ })();
1963
3833
 
1964
3834
  /**
1965
3835
  * Generated bundle index. Do not edit.