phoenix-ui-components 2.11.4 → 2.13.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 (105) 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/phoenix-ui.module.d.ts +30 -27
  10. package/dist/components/ring-loader/ring-loader.component.d.ts +1 -1
  11. package/dist/components/ui-menu/animate-camera/animate-camera.component.d.ts +1 -1
  12. package/dist/components/ui-menu/animate-event/animate-event.component.d.ts +1 -1
  13. package/dist/components/ui-menu/ar-toggle/ar-toggle.component.d.ts +1 -1
  14. package/dist/components/ui-menu/auto-rotate/auto-rotate.component.d.ts +1 -1
  15. package/dist/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.d.ts +1 -1
  16. package/dist/components/ui-menu/collections-info/collections-info.component.d.ts +1 -1
  17. package/dist/components/ui-menu/cycle-events/cycle-events.component.d.ts +1 -1
  18. package/dist/components/ui-menu/dark-theme/dark-theme.component.d.ts +1 -1
  19. package/dist/components/ui-menu/event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component.d.ts +4 -3
  20. package/dist/components/ui-menu/event-data-explorer/event-data-explorer.component.d.ts +2 -2
  21. package/dist/components/ui-menu/event-selector/event-selector.component.d.ts +1 -1
  22. package/dist/components/ui-menu/experiment-info/experiment-info.component.d.ts +1 -1
  23. package/dist/components/ui-menu/index.d.ts +1 -0
  24. package/dist/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.d.ts +1 -1
  25. package/dist/components/ui-menu/info-panel/info-panel.component.d.ts +1 -1
  26. package/dist/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.d.ts +2 -1
  27. package/dist/components/ui-menu/io-options/io-options.component.d.ts +1 -1
  28. package/dist/components/ui-menu/main-view-toggle/main-view-toggle.component.d.ts +1 -1
  29. package/dist/components/ui-menu/make-picture/make-picture.component.d.ts +17 -0
  30. package/dist/components/ui-menu/menu-toggle/menu-toggle.component.d.ts +1 -1
  31. package/dist/components/ui-menu/object-clipping/object-clipping.component.d.ts +3 -4
  32. package/dist/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.d.ts +1 -1
  33. package/dist/components/ui-menu/object-selection/object-selection.component.d.ts +1 -1
  34. package/dist/components/ui-menu/overlay/overlay.component.d.ts +1 -1
  35. package/dist/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.d.ts +1 -1
  36. package/dist/components/ui-menu/overlay-view/overlay-view.component.d.ts +1 -1
  37. package/dist/components/ui-menu/performance-toggle/performance-toggle.component.d.ts +1 -1
  38. package/dist/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.d.ts +1 -1
  39. package/dist/components/ui-menu/share-link/share-link.component.d.ts +1 -1
  40. package/dist/components/ui-menu/ss-mode/ss-mode.component.d.ts +1 -1
  41. package/dist/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.d.ts +2 -2
  42. package/dist/components/ui-menu/tree-menu/tree-menu.component.d.ts +1 -1
  43. package/dist/components/ui-menu/ui-menu-wrapper/ui-menu-wrapper.component.d.ts +1 -1
  44. package/dist/components/ui-menu/ui-menu.component.d.ts +1 -1
  45. package/dist/components/ui-menu/view-options/view-options.component.d.ts +1 -1
  46. package/dist/components/ui-menu/vr-toggle/vr-toggle.component.d.ts +1 -1
  47. package/dist/components/ui-menu/zoom-controls/zoom-controls.component.d.ts +1 -1
  48. package/dist/esm2020/components/embed-menu/embed-menu.component.mjs +11 -7
  49. package/dist/esm2020/components/embed-menu/experiment-link/experiment-link.component.mjs +11 -7
  50. package/dist/esm2020/components/file-explorer/file-explorer.component.mjs +59 -11
  51. package/dist/esm2020/components/loader/loader.component.mjs +53 -11
  52. package/dist/esm2020/components/nav/nav.component.mjs +11 -7
  53. package/dist/esm2020/components/phoenix-menu/config/config-slider/config-slider.component.mjs +42 -22
  54. package/dist/esm2020/components/phoenix-menu/phoenix-menu-item/phoenix-menu-item.component.mjs +286 -16
  55. package/dist/esm2020/components/phoenix-menu/phoenix-menu.component.mjs +16 -9
  56. package/dist/esm2020/components/phoenix-ui.module.mjs +80 -68
  57. package/dist/esm2020/components/ring-loader/ring-loader.component.mjs +11 -7
  58. package/dist/esm2020/components/ui-menu/animate-camera/animate-camera.component.mjs +34 -9
  59. package/dist/esm2020/components/ui-menu/animate-event/animate-event.component.mjs +13 -7
  60. package/dist/esm2020/components/ui-menu/ar-toggle/ar-toggle.component.mjs +41 -7
  61. package/dist/esm2020/components/ui-menu/auto-rotate/auto-rotate.component.mjs +13 -7
  62. package/dist/esm2020/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.mjs +191 -11
  63. package/dist/esm2020/components/ui-menu/collections-info/collections-info.component.mjs +13 -7
  64. package/dist/esm2020/components/ui-menu/cycle-events/cycle-events.component.mjs +15 -9
  65. package/dist/esm2020/components/ui-menu/dark-theme/dark-theme.component.mjs +13 -7
  66. package/dist/esm2020/components/ui-menu/event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component.mjs +83 -13
  67. package/dist/esm2020/components/ui-menu/event-data-explorer/event-data-explorer.component.mjs +15 -9
  68. package/dist/esm2020/components/ui-menu/event-selector/event-selector.component.mjs +33 -7
  69. package/dist/esm2020/components/ui-menu/experiment-info/experiment-info.component.mjs +81 -13
  70. package/dist/esm2020/components/ui-menu/index.mjs +2 -1
  71. package/dist/esm2020/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.mjs +38 -9
  72. package/dist/esm2020/components/ui-menu/info-panel/info-panel.component.mjs +13 -7
  73. package/dist/esm2020/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.mjs +122 -10
  74. package/dist/esm2020/components/ui-menu/io-options/io-options.component.mjs +15 -9
  75. package/dist/esm2020/components/ui-menu/main-view-toggle/main-view-toggle.component.mjs +13 -7
  76. package/dist/esm2020/components/ui-menu/make-picture/make-picture.component.mjs +88 -0
  77. package/dist/esm2020/components/ui-menu/menu-toggle/menu-toggle.component.mjs +29 -15
  78. package/dist/esm2020/components/ui-menu/object-clipping/object-clipping.component.mjs +42 -11
  79. package/dist/esm2020/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.mjs +40 -9
  80. package/dist/esm2020/components/ui-menu/object-selection/object-selection.component.mjs +13 -7
  81. package/dist/esm2020/components/ui-menu/overlay/overlay.component.mjs +102 -23
  82. package/dist/esm2020/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.mjs +38 -12
  83. package/dist/esm2020/components/ui-menu/overlay-view/overlay-view.component.mjs +13 -7
  84. package/dist/esm2020/components/ui-menu/performance-toggle/performance-toggle.component.mjs +13 -7
  85. package/dist/esm2020/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.mjs +96 -11
  86. package/dist/esm2020/components/ui-menu/share-link/share-link.component.mjs +13 -7
  87. package/dist/esm2020/components/ui-menu/ss-mode/ss-mode.component.mjs +13 -7
  88. package/dist/esm2020/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.mjs +69 -12
  89. package/dist/esm2020/components/ui-menu/tree-menu/tree-menu.component.mjs +14 -7
  90. package/dist/esm2020/components/ui-menu/ui-menu-wrapper/ui-menu-wrapper.component.mjs +26 -7
  91. package/dist/esm2020/components/ui-menu/ui-menu.component.mjs +26 -13
  92. package/dist/esm2020/components/ui-menu/view-options/view-options.component.mjs +54 -7
  93. package/dist/esm2020/components/ui-menu/vr-toggle/vr-toggle.component.mjs +13 -7
  94. package/dist/esm2020/components/ui-menu/zoom-controls/zoom-controls.component.mjs +19 -7
  95. package/dist/esm2020/services/error-message-service.mjs +9 -9
  96. package/dist/esm2020/services/event-display.service.mjs +9 -9
  97. package/dist/esm2020/services/extras/attribute.pipe.mjs +9 -9
  98. package/dist/esm2020/services/extras/event-data-import.mjs +2 -1
  99. package/dist/esm2020/services/global-error-handler.mjs +6 -6
  100. package/dist/fesm2015/phoenix-ui-components.mjs +2325 -343
  101. package/dist/fesm2015/phoenix-ui-components.mjs.map +1 -1
  102. package/dist/fesm2020/phoenix-ui-components.mjs +2016 -468
  103. package/dist/fesm2020/phoenix-ui-components.mjs.map +1 -1
  104. package/dist/services/extras/event-data-import.d.ts +2 -1
  105. package/package.json +11 -7
@@ -8,13 +8,15 @@ import * as i2$1 from '@angular/material/slider';
8
8
  import { MatSliderModule } from '@angular/material/slider';
9
9
  import * as i2$2 from '@angular/material/button';
10
10
  import { MatButtonModule } from '@angular/material/button';
11
- import * as i3 from '@angular/material/slide-toggle';
11
+ import * as i3 from '@angular/forms';
12
+ import { FormsModule } from '@angular/forms';
13
+ import * as i4 from '@angular/material/slide-toggle';
12
14
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
13
- import * as i4 from '@angular/material/checkbox';
15
+ import * as i4$1 from '@angular/material/checkbox';
14
16
  import { MatCheckboxModule } from '@angular/material/checkbox';
15
- import * as i5 from '@rp3e11/ngx-slider';
17
+ import * as i6 from '@rp3e11/ngx-slider';
16
18
  import { NgxSliderModule } from '@rp3e11/ngx-slider';
17
- import { EventDisplay, SceneManager, PrettySymbols, JiveXMLLoader, CMSLoader, readZipFile, VRManager, XRSessionType, ARManager, phoenixURLOptions, ActiveVariable } from 'phoenix-event-display';
19
+ import { EventDisplay, SceneManager, PrettySymbols, Edm4hepJsonLoader, JiveXMLLoader, CMSLoader, readZipFile, VRManager, XRSessionType, ARManager, phoenixURLOptions, ActiveVariable } from 'phoenix-event-display';
18
20
  import * as i3$1 from '@angular/material/menu';
19
21
  import { MatMenuModule } from '@angular/material/menu';
20
22
  import * as i2$3 from '@angular/material/tooltip';
@@ -29,12 +31,15 @@ import packageJson from 'phoenix-event-display/package.json';
29
31
  import { __awaiter } from 'tslib';
30
32
  import * as i1$2 from '@angular/material/dialog';
31
33
  import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
32
- import * as i4$1 from '@angular/material/icon';
34
+ import * as i4$2 from '@angular/material/icon';
33
35
  import { MatIconModule } from '@angular/material/icon';
36
+ import * as i5 from '@angular/material/radio';
37
+ import { MatRadioModule } from '@angular/material/radio';
34
38
  import QRCode from 'qrcode';
35
39
  import * as i2$5 from '@angular/cdk/tree';
36
40
  import { NestedTreeControl, CdkTreeModule } from '@angular/cdk/tree';
37
41
  import { MatTreeNestedDataSource } from '@angular/material/tree';
42
+ import JSZip from 'jszip';
38
43
  import * as i5$1 from '@angular/material/tabs';
39
44
  import { MatTabsModule } from '@angular/material/tabs';
40
45
 
@@ -42,13 +47,33 @@ class NavComponent {
42
47
  constructor() { }
43
48
  ngOnInit() { }
44
49
  }
45
- NavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
- NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NavComponent, decorators: [{
50
+ NavComponent.ɵfac = function NavComponent_Factory(t) { return new (t || NavComponent)(); };
51
+ 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) {
52
+ if (rf & 1) {
53
+ i0.ɵɵelementStart(0, "a", 0);
54
+ i0.ɵɵelement(1, "img", 1);
55
+ i0.ɵɵelementEnd();
56
+ }
57
+ }, 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}"] });
58
+ (function () {
59
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NavComponent, [{
48
60
  type: Component,
49
61
  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"] }]
50
- }], ctorParameters: function () { return []; } });
62
+ }], function () { return []; }, null);
63
+ })();
51
64
 
65
+ function ConfigSliderComponent_input_3_Template(rf, ctx) {
66
+ if (rf & 1) {
67
+ const _r2 = i0.ɵɵgetCurrentView();
68
+ i0.ɵɵelementStart(0, "input", 4);
69
+ 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)); });
70
+ i0.ɵɵelementEnd();
71
+ }
72
+ if (rf & 2) {
73
+ const ctx_r0 = i0.ɵɵnextContext();
74
+ i0.ɵɵproperty("value", ctx_r0.value);
75
+ }
76
+ }
52
77
  class ConfigSliderComponent {
53
78
  constructor() {
54
79
  this.value = 0;
@@ -59,17 +84,32 @@ class ConfigSliderComponent {
59
84
  this.onChange = new EventEmitter();
60
85
  }
61
86
  onValueChange(value) {
62
- if (value) {
63
- this.onChange.emit(value);
64
- }
87
+ value && this.onChange.emit(value);
65
88
  }
66
89
  }
67
- ConfigSliderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ConfigSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
68
- ConfigSliderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
69
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ConfigSliderComponent, decorators: [{
90
+ ConfigSliderComponent.ɵfac = function ConfigSliderComponent_Factory(t) { return new (t || ConfigSliderComponent)(); };
91
+ 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) {
92
+ if (rf & 1) {
93
+ i0.ɵɵelementStart(0, "div", 0)(1, "mat-slider", 1)(2, "input", 2);
94
+ i0.ɵɵlistener("valueChange", function ConfigSliderComponent_Template_input_valueChange_2_listener($event) { return ctx.onValueChange($event); });
95
+ i0.ɵɵelementEnd()();
96
+ i0.ɵɵtemplate(3, ConfigSliderComponent_input_3_Template, 1, 1, "input", 3);
97
+ i0.ɵɵelementEnd();
98
+ }
99
+ if (rf & 2) {
100
+ i0.ɵɵadvance(1);
101
+ i0.ɵɵproperty("min", ctx.min)("max", ctx.max)("step", ctx.step);
102
+ i0.ɵɵadvance(1);
103
+ i0.ɵɵproperty("value", ctx.value);
104
+ i0.ɵɵadvance(1);
105
+ i0.ɵɵproperty("ngIf", ctx.allowCustomValue);
106
+ }
107
+ }, 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}"] });
108
+ (function () {
109
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConfigSliderComponent, [{
70
110
  type: Component,
71
- 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"] }]
72
- }], propDecorators: { value: [{
111
+ 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"] }]
112
+ }], null, { value: [{
73
113
  type: Input
74
114
  }], min: [{
75
115
  type: Input
@@ -81,8 +121,311 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImpor
81
121
  type: Input
82
122
  }], onChange: [{
83
123
  type: Output
84
- }] } });
124
+ }] });
125
+ })();
85
126
 
127
+ const _c0$9 = ["phoenixMenuItem"];
128
+ function PhoenixMenuItemComponent_ng_container_3_ng_container_2_Template(rf, ctx) {
129
+ if (rf & 1) {
130
+ i0.ɵɵelementContainer(0);
131
+ }
132
+ }
133
+ function PhoenixMenuItemComponent_ng_container_3_Template(rf, ctx) {
134
+ if (rf & 1) {
135
+ const _r9 = i0.ɵɵgetCurrentView();
136
+ i0.ɵɵelementContainerStart(0);
137
+ i0.ɵɵelementStart(1, "mat-slide-toggle", 9);
138
+ 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)); });
139
+ i0.ɵɵtemplate(2, PhoenixMenuItemComponent_ng_container_3_ng_container_2_Template, 1, 0, "ng-container", 10);
140
+ i0.ɵɵelementEnd();
141
+ i0.ɵɵelementContainerEnd();
142
+ }
143
+ if (rf & 2) {
144
+ const ctx_r1 = i0.ɵɵnextContext();
145
+ const _r2 = i0.ɵɵreference(5);
146
+ i0.ɵɵadvance(1);
147
+ i0.ɵɵproperty("checked", ctx_r1.currentNode.toggleState);
148
+ i0.ɵɵadvance(1);
149
+ i0.ɵɵproperty("ngTemplateOutlet", _r2);
150
+ }
151
+ }
152
+ function PhoenixMenuItemComponent_ng_template_4_span_1_Template(rf, ctx) {
153
+ if (rf & 1) {
154
+ i0.ɵɵelementStart(0, "span", 14);
155
+ i0.ɵɵnamespaceSVG();
156
+ i0.ɵɵelementStart(1, "svg");
157
+ i0.ɵɵelement(2, "use");
158
+ i0.ɵɵelementEnd()();
159
+ }
160
+ if (rf & 2) {
161
+ const ctx_r10 = i0.ɵɵnextContext(2);
162
+ i0.ɵɵadvance(2);
163
+ i0.ɵɵattributeInterpolate2("href", "assets/icons/", ctx_r10.currentNode.icon, ".svg#", ctx_r10.currentNode.icon, "");
164
+ }
165
+ }
166
+ function PhoenixMenuItemComponent_ng_template_4_Template(rf, ctx) {
167
+ if (rf & 1) {
168
+ i0.ɵɵelementStart(0, "span", 11);
169
+ i0.ɵɵtemplate(1, PhoenixMenuItemComponent_ng_template_4_span_1_Template, 3, 2, "span", 12);
170
+ i0.ɵɵelementStart(2, "span", 13);
171
+ i0.ɵɵtext(3);
172
+ i0.ɵɵelementEnd()();
173
+ }
174
+ if (rf & 2) {
175
+ const ctx_r3 = i0.ɵɵnextContext();
176
+ i0.ɵɵadvance(1);
177
+ i0.ɵɵproperty("ngIf", ctx_r3.currentNode.icon);
178
+ i0.ɵɵadvance(1);
179
+ i0.ɵɵproperty("title", ctx_r3.currentNode.name);
180
+ i0.ɵɵadvance(1);
181
+ i0.ɵɵtextInterpolate(ctx_r3.currentNode.name);
182
+ }
183
+ }
184
+ function PhoenixMenuItemComponent_div_7_div_4_Template(rf, ctx) {
185
+ if (rf & 1) {
186
+ const _r14 = i0.ɵɵgetCurrentView();
187
+ i0.ɵɵnamespaceSVG();
188
+ i0.ɵɵnamespaceHTML();
189
+ i0.ɵɵelementStart(0, "div", 20);
190
+ 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); });
191
+ i0.ɵɵelementEnd();
192
+ }
193
+ }
194
+ const _c1$4 = function (a0) { return { "font-weight-bold w-100": a0 }; };
195
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_span_1_Template(rf, ctx) {
196
+ if (rf & 1) {
197
+ i0.ɵɵelementStart(0, "span", 26);
198
+ i0.ɵɵtext(1);
199
+ i0.ɵɵelementEnd();
200
+ }
201
+ if (rf & 2) {
202
+ const config_r15 = i0.ɵɵnextContext(2).$implicit;
203
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c1$4, config_r15.type === "label"));
204
+ i0.ɵɵadvance(1);
205
+ i0.ɵɵtextInterpolate1(" ", config_r15.label, " ");
206
+ }
207
+ }
208
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_mat_checkbox_1_Template(rf, ctx) {
209
+ if (rf & 1) {
210
+ const _r28 = i0.ɵɵgetCurrentView();
211
+ i0.ɵɵelementStart(0, "mat-checkbox", 9);
212
+ 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); });
213
+ i0.ɵɵelementEnd();
214
+ }
215
+ if (rf & 2) {
216
+ const config_r15 = i0.ɵɵnextContext(3).$implicit;
217
+ i0.ɵɵproperty("checked", config_r15.isChecked);
218
+ }
219
+ }
220
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_app_config_slider_2_Template(rf, ctx) {
221
+ if (rf & 1) {
222
+ const _r32 = i0.ɵɵgetCurrentView();
223
+ i0.ɵɵelementStart(0, "app-config-slider", 34);
224
+ 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); });
225
+ i0.ɵɵelementEnd();
226
+ }
227
+ if (rf & 2) {
228
+ const config_r15 = i0.ɵɵnextContext(3).$implicit;
229
+ i0.ɵɵproperty("value", config_r15.value)("min", config_r15.min)("max", config_r15.max)("step", config_r15.step)("allowCustomValue", config_r15.allowCustomValue);
230
+ }
231
+ }
232
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_button_3_Template(rf, ctx) {
233
+ if (rf & 1) {
234
+ const _r36 = i0.ɵɵgetCurrentView();
235
+ i0.ɵɵelementStart(0, "button", 35);
236
+ 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()); });
237
+ i0.ɵɵtext(1);
238
+ i0.ɵɵelementEnd();
239
+ }
240
+ if (rf & 2) {
241
+ const config_r15 = i0.ɵɵnextContext(3).$implicit;
242
+ i0.ɵɵadvance(1);
243
+ i0.ɵɵtextInterpolate1(" ", config_r15.label, " ");
244
+ }
245
+ }
246
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_input_4_Template(rf, ctx) {
247
+ if (rf & 1) {
248
+ const _r40 = i0.ɵɵgetCurrentView();
249
+ i0.ɵɵelementStart(0, "input", 36);
250
+ 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); });
251
+ i0.ɵɵelementEnd();
252
+ }
253
+ if (rf & 2) {
254
+ const config_r15 = i0.ɵɵnextContext(3).$implicit;
255
+ i0.ɵɵproperty("value", config_r15.color);
256
+ }
257
+ }
258
+ const _c2$1 = function (a0, a1, a2) { return { floor: a0, ceil: a1, step: a2, animate: false }; };
259
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_div_5_Template(rf, ctx) {
260
+ if (rf & 1) {
261
+ const _r44 = i0.ɵɵgetCurrentView();
262
+ i0.ɵɵelementStart(0, "div", 37)(1, "div", 38)(2, "input", 39);
263
+ 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)); });
264
+ i0.ɵɵelementEnd();
265
+ i0.ɵɵelementStart(3, "input", 40);
266
+ 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)); });
267
+ i0.ɵɵelementEnd()();
268
+ i0.ɵɵelementStart(4, "ngx-slider", 41);
269
+ 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)); });
270
+ i0.ɵɵelementEnd()();
271
+ }
272
+ if (rf & 2) {
273
+ const config_r15 = i0.ɵɵnextContext(3).$implicit;
274
+ i0.ɵɵadvance(2);
275
+ i0.ɵɵproperty("value", config_r15.value);
276
+ i0.ɵɵadvance(1);
277
+ i0.ɵɵproperty("value", config_r15.highValue);
278
+ i0.ɵɵadvance(1);
279
+ 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));
280
+ }
281
+ }
282
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_select_6_option_1_Template(rf, ctx) {
283
+ if (rf & 1) {
284
+ i0.ɵɵelementStart(0, "option", 44);
285
+ i0.ɵɵtext(1);
286
+ i0.ɵɵelementEnd();
287
+ }
288
+ if (rf & 2) {
289
+ const singleOption_r55 = ctx.$implicit;
290
+ i0.ɵɵproperty("value", singleOption_r55);
291
+ i0.ɵɵadvance(1);
292
+ i0.ɵɵtextInterpolate1(" ", singleOption_r55, " ");
293
+ }
294
+ }
295
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_select_6_Template(rf, ctx) {
296
+ if (rf & 1) {
297
+ const _r58 = i0.ɵɵgetCurrentView();
298
+ i0.ɵɵelementStart(0, "select", 42);
299
+ 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)); });
300
+ i0.ɵɵtemplate(1, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_select_6_option_1_Template, 2, 2, "option", 43);
301
+ i0.ɵɵelementEnd();
302
+ }
303
+ if (rf & 2) {
304
+ const config_r15 = i0.ɵɵnextContext(3).$implicit;
305
+ i0.ɵɵadvance(1);
306
+ i0.ɵɵproperty("ngForOf", config_r15.options);
307
+ }
308
+ }
309
+ const _c3$1 = function (a0) { return { "p-0": a0 }; };
310
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_Template(rf, ctx) {
311
+ if (rf & 1) {
312
+ i0.ɵɵelementStart(0, "div", 27);
313
+ i0.ɵɵtemplate(1, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_mat_checkbox_1_Template, 1, 1, "mat-checkbox", 28);
314
+ i0.ɵɵtemplate(2, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_app_config_slider_2_Template, 1, 5, "app-config-slider", 29);
315
+ i0.ɵɵtemplate(3, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_button_3_Template, 2, 1, "button", 30);
316
+ i0.ɵɵtemplate(4, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_input_4_Template, 1, 1, "input", 31);
317
+ i0.ɵɵtemplate(5, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_div_5_Template, 5, 9, "div", 32);
318
+ i0.ɵɵtemplate(6, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_select_6_Template, 2, 1, "select", 33);
319
+ i0.ɵɵelementEnd();
320
+ }
321
+ if (rf & 2) {
322
+ const config_r15 = i0.ɵɵnextContext(2).$implicit;
323
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(7, _c3$1, config_r15.type === "button"));
324
+ i0.ɵɵadvance(1);
325
+ i0.ɵɵproperty("ngSwitchCase", "checkbox");
326
+ i0.ɵɵadvance(1);
327
+ i0.ɵɵproperty("ngSwitchCase", "slider");
328
+ i0.ɵɵadvance(1);
329
+ i0.ɵɵproperty("ngSwitchCase", "button");
330
+ i0.ɵɵadvance(1);
331
+ i0.ɵɵproperty("ngSwitchCase", "color");
332
+ i0.ɵɵadvance(1);
333
+ i0.ɵɵproperty("ngSwitchCase", "rangeSlider");
334
+ i0.ɵɵadvance(1);
335
+ i0.ɵɵproperty("ngSwitchCase", "select");
336
+ }
337
+ }
338
+ function PhoenixMenuItemComponent_div_7_ng_container_6_label_1_Template(rf, ctx) {
339
+ if (rf & 1) {
340
+ i0.ɵɵelementStart(0, "label", 23);
341
+ i0.ɵɵtemplate(1, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_span_1_Template, 2, 4, "span", 24);
342
+ i0.ɵɵtemplate(2, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_div_2_Template, 7, 9, "div", 25);
343
+ i0.ɵɵelementEnd();
344
+ }
345
+ if (rf & 2) {
346
+ const config_r15 = i0.ɵɵnextContext().$implicit;
347
+ i0.ɵɵadvance(1);
348
+ i0.ɵɵproperty("ngIf", config_r15.type !== "button");
349
+ i0.ɵɵadvance(1);
350
+ i0.ɵɵproperty("ngIf", config_r15.type !== "label");
351
+ }
352
+ }
353
+ function PhoenixMenuItemComponent_div_7_ng_container_6_Template(rf, ctx) {
354
+ if (rf & 1) {
355
+ i0.ɵɵelementContainerStart(0, 21);
356
+ i0.ɵɵtemplate(1, PhoenixMenuItemComponent_div_7_ng_container_6_label_1_Template, 3, 2, "label", 22);
357
+ i0.ɵɵelementContainerEnd();
358
+ }
359
+ if (rf & 2) {
360
+ const config_r15 = ctx.$implicit;
361
+ i0.ɵɵproperty("ngSwitch", config_r15.type);
362
+ i0.ɵɵadvance(1);
363
+ i0.ɵɵproperty("ngIf", !config_r15.hidden);
364
+ }
365
+ }
366
+ const _c4$1 = function (a0) { return { "top.px": a0 }; };
367
+ function PhoenixMenuItemComponent_div_7_Template(rf, ctx) {
368
+ if (rf & 1) {
369
+ const _r63 = i0.ɵɵgetCurrentView();
370
+ i0.ɵɵelementStart(0, "div")(1, "button", 15);
371
+ 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); });
372
+ i0.ɵɵnamespaceSVG();
373
+ i0.ɵɵelementStart(2, "svg");
374
+ i0.ɵɵelement(3, "use", 16);
375
+ i0.ɵɵelementEnd()();
376
+ i0.ɵɵtemplate(4, PhoenixMenuItemComponent_div_7_div_4_Template, 1, 0, "div", 17);
377
+ i0.ɵɵnamespaceHTML();
378
+ i0.ɵɵelementStart(5, "div", 18);
379
+ i0.ɵɵtemplate(6, PhoenixMenuItemComponent_div_7_ng_container_6_Template, 2, 2, "ng-container", 19);
380
+ i0.ɵɵelementEnd()();
381
+ }
382
+ if (rf & 2) {
383
+ const ctx_r4 = i0.ɵɵnextContext();
384
+ i0.ɵɵadvance(4);
385
+ i0.ɵɵproperty("ngIf", ctx_r4.currentNode.configActive);
386
+ i0.ɵɵadvance(1);
387
+ i0.ɵɵproperty("hidden", !ctx_r4.currentNode.configActive)("ngStyle", i0.ɵɵpureFunction1(4, _c4$1, ctx_r4.configTop));
388
+ i0.ɵɵadvance(1);
389
+ i0.ɵɵproperty("ngForOf", ctx_r4.castConfigsToAny(ctx_r4.currentNode.configs));
390
+ }
391
+ }
392
+ const _c5$1 = function (a0) { return { expanded: a0 }; };
393
+ function PhoenixMenuItemComponent_button_8_Template(rf, ctx) {
394
+ if (rf & 1) {
395
+ const _r65 = i0.ɵɵgetCurrentView();
396
+ i0.ɵɵelementStart(0, "button", 45);
397
+ 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); });
398
+ i0.ɵɵnamespaceSVG();
399
+ i0.ɵɵelementStart(1, "svg");
400
+ i0.ɵɵelement(2, "use", 46);
401
+ i0.ɵɵelementEnd()();
402
+ }
403
+ if (rf & 2) {
404
+ const ctx_r5 = i0.ɵɵnextContext();
405
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c5$1, ctx_r5.currentNode.childrenActive));
406
+ }
407
+ }
408
+ function PhoenixMenuItemComponent_div_9_app_phoenix_menu_item_1_Template(rf, ctx) {
409
+ if (rf & 1) {
410
+ i0.ɵɵelement(0, "app-phoenix-menu-item", 49);
411
+ }
412
+ if (rf & 2) {
413
+ const childNode_r67 = ctx.$implicit;
414
+ i0.ɵɵproperty("currentNode", childNode_r67);
415
+ }
416
+ }
417
+ function PhoenixMenuItemComponent_div_9_Template(rf, ctx) {
418
+ if (rf & 1) {
419
+ i0.ɵɵelementStart(0, "div", 47);
420
+ i0.ɵɵtemplate(1, PhoenixMenuItemComponent_div_9_app_phoenix_menu_item_1_Template, 1, 1, "app-phoenix-menu-item", 48);
421
+ i0.ɵɵelementEnd();
422
+ }
423
+ if (rf & 2) {
424
+ const ctx_r6 = i0.ɵɵnextContext();
425
+ i0.ɵɵadvance(1);
426
+ i0.ɵɵproperty("ngForOf", ctx_r6.currentNode.children);
427
+ }
428
+ }
86
429
  class PhoenixMenuItemComponent {
87
430
  constructor(cdr) {
88
431
  this.cdr = cdr;
@@ -99,28 +442,73 @@ class PhoenixMenuItemComponent {
99
442
  return configs;
100
443
  }
101
444
  }
102
- PhoenixMenuItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: PhoenixMenuItemComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
103
- PhoenixMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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 });
104
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: PhoenixMenuItemComponent, decorators: [{
445
+ PhoenixMenuItemComponent.ɵfac = function PhoenixMenuItemComponent_Factory(t) { return new (t || PhoenixMenuItemComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
446
+ PhoenixMenuItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PhoenixMenuItemComponent, selectors: [["app-phoenix-menu-item"]], viewQuery: function PhoenixMenuItemComponent_Query(rf, ctx) {
447
+ if (rf & 1) {
448
+ i0.ɵɵviewQuery(_c0$9, 5);
449
+ }
450
+ if (rf & 2) {
451
+ let _t;
452
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.phoenixMenuItem = _t.first);
453
+ }
454
+ }, 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) {
455
+ if (rf & 1) {
456
+ i0.ɵɵelementStart(0, "div", 0, 1)(2, "div", 2);
457
+ i0.ɵɵtemplate(3, PhoenixMenuItemComponent_ng_container_3_Template, 3, 2, "ng-container", 3);
458
+ i0.ɵɵtemplate(4, PhoenixMenuItemComponent_ng_template_4_Template, 4, 3, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
459
+ i0.ɵɵelementEnd();
460
+ i0.ɵɵelementStart(6, "div", 5);
461
+ i0.ɵɵtemplate(7, PhoenixMenuItemComponent_div_7_Template, 7, 6, "div", 6);
462
+ i0.ɵɵtemplate(8, PhoenixMenuItemComponent_button_8_Template, 3, 3, "button", 7);
463
+ i0.ɵɵelementEnd()();
464
+ i0.ɵɵtemplate(9, PhoenixMenuItemComponent_div_9_Template, 2, 1, "div", 8);
465
+ }
466
+ if (rf & 2) {
467
+ const _r2 = i0.ɵɵreference(5);
468
+ i0.ɵɵadvance(3);
469
+ i0.ɵɵproperty("ngIf", ctx.currentNode.onToggle)("ngIfElse", _r2);
470
+ i0.ɵɵadvance(4);
471
+ i0.ɵɵproperty("ngIf", ctx.currentNode.configs.length > 0);
472
+ i0.ɵɵadvance(1);
473
+ i0.ɵɵproperty("ngIf", ctx.currentNode.children.length > 0);
474
+ i0.ɵɵadvance(1);
475
+ i0.ɵɵproperty("ngIf", ctx.currentNode.childrenActive);
476
+ }
477
+ }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i2.NgTemplateOutlet, i2.NgStyle, i2.NgSwitch, i2.NgSwitchCase, i2$2.MatButton, i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i4.MatSlideToggle, i4$1.MatCheckbox, i6.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 });
478
+ (function () {
479
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PhoenixMenuItemComponent, [{
105
480
  type: Component,
106
481
  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"] }]
107
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { currentNode: [{
482
+ }], function () { return [{ type: i0.ChangeDetectorRef }]; }, { currentNode: [{
108
483
  type: Input
109
484
  }], phoenixMenuItem: [{
110
485
  type: ViewChild,
111
486
  args: ['phoenixMenuItem']
112
- }] } });
487
+ }] });
488
+ })();
113
489
 
114
490
  class PhoenixMenuComponent {
115
491
  }
116
- PhoenixMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: PhoenixMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
117
- PhoenixMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
118
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: PhoenixMenuComponent, decorators: [{
492
+ PhoenixMenuComponent.ɵfac = function PhoenixMenuComponent_Factory(t) { return new (t || PhoenixMenuComponent)(); };
493
+ 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) {
494
+ if (rf & 1) {
495
+ i0.ɵɵelementStart(0, "div", 0);
496
+ i0.ɵɵelement(1, "app-phoenix-menu-item", 1);
497
+ i0.ɵɵelementEnd();
498
+ }
499
+ if (rf & 2) {
500
+ i0.ɵɵadvance(1);
501
+ i0.ɵɵproperty("currentNode", ctx.rootNode);
502
+ }
503
+ }, 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}}"] });
504
+ (function () {
505
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PhoenixMenuComponent, [{
119
506
  type: Component,
120
507
  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"] }]
121
- }], propDecorators: { rootNode: [{
508
+ }], null, { rootNode: [{
122
509
  type: Input
123
- }] } });
510
+ }] });
511
+ })();
124
512
 
125
513
  /**
126
514
  * Service for all event display related functions.
@@ -133,26 +521,46 @@ class EventDisplayService extends EventDisplay {
133
521
  super();
134
522
  }
135
523
  }
136
- EventDisplayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: EventDisplayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
137
- EventDisplayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: EventDisplayService, providedIn: 'root' });
138
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: EventDisplayService, decorators: [{
524
+ EventDisplayService.ɵfac = function EventDisplayService_Factory(t) { return new (t || EventDisplayService)(); };
525
+ EventDisplayService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EventDisplayService, factory: EventDisplayService.ɵfac, providedIn: 'root' });
526
+ (function () {
527
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EventDisplayService, [{
139
528
  type: Injectable,
140
529
  args: [{
141
530
  providedIn: 'root',
142
531
  }]
143
- }], ctorParameters: function () { return []; } });
532
+ }], function () { return []; }, null);
533
+ })();
144
534
 
535
+ const _c0$8 = function (a0) { return { disabled: a0 }; };
536
+ const _c1$3 = function (a0) { return { "active-icon": a0 }; };
145
537
  class MenuToggleComponent {
146
538
  constructor() {
147
539
  this.disabled = false;
148
540
  }
149
541
  }
150
- MenuToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: MenuToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
151
- MenuToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
152
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: MenuToggleComponent, decorators: [{
542
+ MenuToggleComponent.ɵfac = function MenuToggleComponent_Factory(t) { return new (t || MenuToggleComponent)(); };
543
+ 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) {
544
+ if (rf & 1) {
545
+ i0.ɵɵelementStart(0, "button", 0);
546
+ i0.ɵɵnamespaceSVG();
547
+ i0.ɵɵelementStart(1, "svg", 1);
548
+ i0.ɵɵelement(2, "use");
549
+ i0.ɵɵelementEnd()();
550
+ }
551
+ if (rf & 2) {
552
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(5, _c0$8, ctx.disabled))("matTooltip", ctx.tooltip);
553
+ i0.ɵɵadvance(1);
554
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(7, _c1$3, ctx.active));
555
+ i0.ɵɵadvance(1);
556
+ i0.ɵɵattributeInterpolate2("href", "assets/icons/", ctx.icon, ".svg#", ctx.icon, "");
557
+ }
558
+ }, 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}"] });
559
+ (function () {
560
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MenuToggleComponent, [{
153
561
  type: Component,
154
562
  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"] }]
155
- }], propDecorators: { icon: [{
563
+ }], null, { icon: [{
156
564
  type: Input
157
565
  }], active: [{
158
566
  type: Input
@@ -160,8 +568,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImpor
160
568
  type: Input
161
569
  }], disabled: [{
162
570
  type: Input
163
- }] } });
571
+ }] });
572
+ })();
164
573
 
574
+ function AnimateCameraComponent_button_2_Template(rf, ctx) {
575
+ if (rf & 1) {
576
+ const _r4 = i0.ɵɵgetCurrentView();
577
+ i0.ɵɵelementStart(0, "button", 2);
578
+ 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)); });
579
+ i0.ɵɵtext(1);
580
+ i0.ɵɵelementEnd();
581
+ }
582
+ if (rf & 2) {
583
+ const preset_r2 = ctx.$implicit;
584
+ i0.ɵɵadvance(1);
585
+ i0.ɵɵtextInterpolate1(" ", preset_r2, " ");
586
+ }
587
+ }
165
588
  const defaultAnimationPresets = {
166
589
  'Preset 1': {
167
590
  positions: [
@@ -221,14 +644,33 @@ class AnimateCameraComponent {
221
644
  sceneManager.setGeometryOpacity(geometriesGroup, opacity);
222
645
  }
223
646
  }
224
- AnimateCameraComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: AnimateCameraComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
225
- AnimateCameraComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
226
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: AnimateCameraComponent, decorators: [{
647
+ AnimateCameraComponent.ɵfac = function AnimateCameraComponent_Factory(t) { return new (t || AnimateCameraComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
648
+ 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) {
649
+ if (rf & 1) {
650
+ i0.ɵɵelementStart(0, "mat-menu", null, 0);
651
+ i0.ɵɵtemplate(2, AnimateCameraComponent_button_2_Template, 2, 1, "button", 1);
652
+ i0.ɵɵelementStart(3, "button", 2);
653
+ i0.ɵɵlistener("click", function AnimateCameraComponent_Template_button_click_3_listener() { return ctx.animateCamera(); });
654
+ i0.ɵɵtext(4, "Animate camera");
655
+ i0.ɵɵelementEnd()();
656
+ i0.ɵɵelement(5, "app-menu-toggle", 3);
657
+ }
658
+ if (rf & 2) {
659
+ const _r0 = i0.ɵɵreference(1);
660
+ i0.ɵɵadvance(2);
661
+ i0.ɵɵproperty("ngForOf", ctx.animationPresetsKeys);
662
+ i0.ɵɵadvance(3);
663
+ i0.ɵɵproperty("matMenuTriggerFor", _r0);
664
+ }
665
+ }, dependencies: [i2.NgForOf, i3$1.MatMenu, i3$1.MatMenuItem, i3$1.MatMenuTrigger, MenuToggleComponent] });
666
+ (function () {
667
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnimateCameraComponent, [{
227
668
  type: Component,
228
669
  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" }]
229
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { animationPresets: [{
670
+ }], function () { return [{ type: EventDisplayService }]; }, { animationPresets: [{
230
671
  type: Input
231
- }] } });
672
+ }] });
673
+ })();
232
674
 
233
675
  class AnimateEventComponent {
234
676
  constructor(eventDisplay) {
@@ -244,12 +686,23 @@ class AnimateEventComponent {
244
686
  }
245
687
  }
246
688
  }
247
- AnimateEventComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: AnimateEventComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
248
- AnimateEventComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
249
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: AnimateEventComponent, decorators: [{
689
+ AnimateEventComponent.ɵfac = function AnimateEventComponent_Factory(t) { return new (t || AnimateEventComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
690
+ 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) {
691
+ if (rf & 1) {
692
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
693
+ i0.ɵɵlistener("click", function AnimateEventComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleAnimateEvent(); });
694
+ i0.ɵɵelementEnd();
695
+ }
696
+ if (rf & 2) {
697
+ i0.ɵɵproperty("active", ctx.isAnimating);
698
+ }
699
+ }, dependencies: [MenuToggleComponent] });
700
+ (function () {
701
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnimateEventComponent, [{
250
702
  type: Component,
251
703
  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" }]
252
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
704
+ }], function () { return [{ type: EventDisplayService }]; }, null);
705
+ })();
253
706
 
254
707
  class AutoRotateComponent {
255
708
  constructor(eventDisplay) {
@@ -261,13 +714,93 @@ class AutoRotateComponent {
261
714
  this.eventDisplay.getUIManager().setAutoRotate(this.autoRotate);
262
715
  }
263
716
  }
264
- AutoRotateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: AutoRotateComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
265
- AutoRotateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
266
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: AutoRotateComponent, decorators: [{
717
+ AutoRotateComponent.ɵfac = function AutoRotateComponent_Factory(t) { return new (t || AutoRotateComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
718
+ 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) {
719
+ if (rf & 1) {
720
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
721
+ i0.ɵɵlistener("click", function AutoRotateComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleAutoRotate(); });
722
+ i0.ɵɵelementEnd();
723
+ }
724
+ if (rf & 2) {
725
+ i0.ɵɵproperty("active", ctx.autoRotate);
726
+ }
727
+ }, dependencies: [MenuToggleComponent] });
728
+ (function () {
729
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AutoRotateComponent, [{
267
730
  type: Component,
268
731
  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" }]
269
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
732
+ }], function () { return [{ type: EventDisplayService }]; }, null);
733
+ })();
270
734
 
735
+ const _c0$7 = ["overlayCard"];
736
+ const _c1$2 = ["resizeHandleCorner"];
737
+ function OverlayComponent_div_2_div_1_Template(rf, ctx) {
738
+ if (rf & 1) {
739
+ i0.ɵɵelementStart(0, "div", 10);
740
+ i0.ɵɵnamespaceSVG();
741
+ i0.ɵɵelementStart(1, "svg");
742
+ i0.ɵɵelement(2, "use");
743
+ i0.ɵɵelementEnd()();
744
+ }
745
+ if (rf & 2) {
746
+ const ctx_r4 = i0.ɵɵnextContext(2);
747
+ i0.ɵɵadvance(2);
748
+ i0.ɵɵattributeInterpolate2("href", "assets/icons/", ctx_r4.icon, ".svg#", ctx_r4.icon, "");
749
+ }
750
+ }
751
+ const _c2 = function (a0) { return { "with-body": a0 }; };
752
+ const _c3 = function (a0) { return { expand: a0 }; };
753
+ function OverlayComponent_div_2_Template(rf, ctx) {
754
+ if (rf & 1) {
755
+ const _r6 = i0.ɵɵgetCurrentView();
756
+ i0.ɵɵelementStart(0, "div", 5);
757
+ i0.ɵɵtemplate(1, OverlayComponent_div_2_div_1_Template, 3, 2, "div", 6);
758
+ i0.ɵɵelementStart(2, "h5", 7);
759
+ i0.ɵɵtext(3);
760
+ i0.ɵɵelementEnd();
761
+ i0.ɵɵelementStart(4, "button", 8);
762
+ 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); });
763
+ i0.ɵɵnamespaceSVG();
764
+ i0.ɵɵelementStart(5, "svg");
765
+ i0.ɵɵelement(6, "use", 9);
766
+ i0.ɵɵelementEnd()()();
767
+ }
768
+ if (rf & 2) {
769
+ const ctx_r1 = i0.ɵɵnextContext();
770
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c2, ctx_r1.showBody));
771
+ i0.ɵɵadvance(1);
772
+ i0.ɵɵproperty("ngIf", ctx_r1.icon);
773
+ i0.ɵɵadvance(2);
774
+ i0.ɵɵtextInterpolate(ctx_r1.overlayTitle);
775
+ i0.ɵɵadvance(1);
776
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(6, _c3, ctx_r1.showBody));
777
+ }
778
+ }
779
+ const _c4 = function (a0) { return { "transparent-bg": a0 }; };
780
+ function OverlayComponent_div_3_Template(rf, ctx) {
781
+ if (rf & 1) {
782
+ i0.ɵɵelementStart(0, "div", 11);
783
+ i0.ɵɵprojection(1);
784
+ i0.ɵɵelementEnd();
785
+ }
786
+ if (rf & 2) {
787
+ const ctx_r2 = i0.ɵɵnextContext();
788
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c4, ctx_r2.transparentBody));
789
+ }
790
+ }
791
+ function OverlayComponent_span_4_Template(rf, ctx) {
792
+ if (rf & 1) {
793
+ const _r9 = i0.ɵɵgetCurrentView();
794
+ i0.ɵɵelementStart(0, "span", 12, 13);
795
+ 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()); });
796
+ i0.ɵɵelementEnd();
797
+ }
798
+ if (rf & 2) {
799
+ const ctx_r3 = i0.ɵɵnextContext();
800
+ i0.ɵɵproperty("hidden", !ctx_r3.showBody);
801
+ }
802
+ }
803
+ const _c5 = ["*"];
271
804
  /**
272
805
  * Component for overlay panel.
273
806
  */
@@ -338,12 +871,41 @@ class OverlayComponent {
338
871
  this.resizeHandleCorner.nativeElement.style.transform = `translate3d(${translateX}px, ${translateY}px, 0)`;
339
872
  }
340
873
  }
341
- OverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
342
- OverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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 });
343
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OverlayComponent, decorators: [{
874
+ OverlayComponent.ɵfac = function OverlayComponent_Factory(t) { return new (t || OverlayComponent)(); };
875
+ OverlayComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OverlayComponent, selectors: [["app-overlay"]], viewQuery: function OverlayComponent_Query(rf, ctx) {
876
+ if (rf & 1) {
877
+ i0.ɵɵviewQuery(_c0$7, 5);
878
+ i0.ɵɵviewQuery(_c1$2, 5);
879
+ }
880
+ if (rf & 2) {
881
+ let _t;
882
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.overlayCard = _t.first);
883
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.resizeHandleCorner = _t.first);
884
+ }
885
+ }, 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) {
886
+ if (rf & 1) {
887
+ i0.ɵɵprojectionDef();
888
+ i0.ɵɵelementStart(0, "div", 0, 1);
889
+ i0.ɵɵtemplate(2, OverlayComponent_div_2_Template, 7, 8, "div", 2);
890
+ i0.ɵɵtemplate(3, OverlayComponent_div_3_Template, 2, 3, "div", 3);
891
+ i0.ɵɵtemplate(4, OverlayComponent_span_4_Template, 2, 1, "span", 4);
892
+ i0.ɵɵelementEnd();
893
+ }
894
+ if (rf & 2) {
895
+ i0.ɵɵproperty("hidden", !ctx.active);
896
+ i0.ɵɵadvance(2);
897
+ i0.ɵɵproperty("ngIf", ctx.overlayTitle);
898
+ i0.ɵɵadvance(1);
899
+ i0.ɵɵproperty("ngIf", ctx.showBody);
900
+ i0.ɵɵadvance(1);
901
+ i0.ɵɵproperty("ngIf", ctx.resizable);
902
+ }
903
+ }, 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 });
904
+ (function () {
905
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OverlayComponent, [{
344
906
  type: Component,
345
907
  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"] }]
346
- }], propDecorators: { overlayTitle: [{
908
+ }], null, { overlayTitle: [{
347
909
  type: Input
348
910
  }], active: [{
349
911
  type: Input
@@ -359,8 +921,207 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImpor
359
921
  }], resizeHandleCorner: [{
360
922
  type: ViewChild,
361
923
  args: ['resizeHandleCorner']
362
- }] } });
924
+ }] });
925
+ })();
363
926
 
927
+ function CollectionsInfoOverlayComponent_div_1_div_1_option_10_Template(rf, ctx) {
928
+ if (rf & 1) {
929
+ i0.ɵɵelementStart(0, "option", 15);
930
+ i0.ɵɵtext(1);
931
+ i0.ɵɵelementEnd();
932
+ }
933
+ if (rf & 2) {
934
+ const collection_r6 = ctx.$implicit;
935
+ i0.ɵɵproperty("value", collection_r6);
936
+ i0.ɵɵadvance(1);
937
+ i0.ɵɵtextInterpolate1(" ", collection_r6, " ");
938
+ }
939
+ }
940
+ function CollectionsInfoOverlayComponent_div_1_div_1_mat_checkbox_11_Template(rf, ctx) {
941
+ if (rf & 1) {
942
+ const _r8 = i0.ɵɵgetCurrentView();
943
+ i0.ɵɵelementStart(0, "mat-checkbox", 16);
944
+ 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)); });
945
+ i0.ɵɵtext(1, " Hide Invisible Objects ");
946
+ i0.ɵɵelementEnd();
947
+ }
948
+ }
949
+ function CollectionsInfoOverlayComponent_div_1_div_1_Template(rf, ctx) {
950
+ if (rf & 1) {
951
+ const _r10 = i0.ɵɵgetCurrentView();
952
+ i0.ɵɵelementStart(0, "div", 7)(1, "div", 8)(2, "span");
953
+ i0.ɵɵtext(3, "Choose a collection: ");
954
+ i0.ɵɵelementEnd();
955
+ i0.ɵɵelementStart(4, "div", 9)(5, "label", 10);
956
+ i0.ɵɵtext(6, "Event");
957
+ i0.ɵɵelementEnd();
958
+ i0.ɵɵelementStart(7, "select", 11);
959
+ 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)); });
960
+ i0.ɵɵelementStart(8, "option", 12);
961
+ i0.ɵɵtext(9, "Choose Collection");
962
+ i0.ɵɵelementEnd();
963
+ i0.ɵɵtemplate(10, CollectionsInfoOverlayComponent_div_1_div_1_option_10_Template, 2, 2, "option", 13);
964
+ i0.ɵɵelementEnd()();
965
+ i0.ɵɵtemplate(11, CollectionsInfoOverlayComponent_div_1_div_1_mat_checkbox_11_Template, 2, 0, "mat-checkbox", 14);
966
+ i0.ɵɵelementEnd()();
967
+ }
968
+ if (rf & 2) {
969
+ const ctx_r1 = i0.ɵɵnextContext(2);
970
+ i0.ɵɵadvance(10);
971
+ i0.ɵɵproperty("ngForOf", ctx_r1.collections);
972
+ i0.ɵɵadvance(1);
973
+ i0.ɵɵproperty("ngIf", ctx_r1.showingCollection);
974
+ }
975
+ }
976
+ function CollectionsInfoOverlayComponent_div_1_table_3_th_9_Template(rf, ctx) {
977
+ if (rf & 1) {
978
+ const _r15 = i0.ɵɵgetCurrentView();
979
+ i0.ɵɵelementStart(0, "th")(1, "div", 20)(2, "div");
980
+ i0.ɵɵtext(3);
981
+ i0.ɵɵelementEnd();
982
+ i0.ɵɵelementStart(4, "div", 21)(5, "button", 22);
983
+ 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")); });
984
+ i0.ɵɵnamespaceSVG();
985
+ i0.ɵɵelementStart(6, "svg");
986
+ i0.ɵɵelement(7, "use", 23);
987
+ i0.ɵɵelementEnd()();
988
+ i0.ɵɵnamespaceHTML();
989
+ i0.ɵɵelementStart(8, "button", 24);
990
+ 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")); });
991
+ i0.ɵɵnamespaceSVG();
992
+ i0.ɵɵelementStart(9, "svg");
993
+ i0.ɵɵelement(10, "use", 23);
994
+ i0.ɵɵelementEnd()()()()();
995
+ }
996
+ if (rf & 2) {
997
+ const column_r13 = ctx.$implicit;
998
+ const ctx_r11 = i0.ɵɵnextContext(3);
999
+ i0.ɵɵadvance(3);
1000
+ i0.ɵɵtextInterpolate1(" ", ctx_r11.getPrettySymbol(column_r13), " ");
1001
+ }
1002
+ }
1003
+ function CollectionsInfoOverlayComponent_div_1_table_3_tr_11_div_4_Template(rf, ctx) {
1004
+ if (rf & 1) {
1005
+ const _r23 = i0.ɵɵgetCurrentView();
1006
+ i0.ɵɵelementStart(0, "div", 33)(1, "button", 34);
1007
+ 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)); });
1008
+ i0.ɵɵnamespaceSVG();
1009
+ i0.ɵɵelementStart(2, "svg");
1010
+ i0.ɵɵelement(3, "use", 35);
1011
+ i0.ɵɵelementEnd()();
1012
+ i0.ɵɵnamespaceHTML();
1013
+ i0.ɵɵelementStart(4, "button", 36);
1014
+ 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)); });
1015
+ i0.ɵɵnamespaceSVG();
1016
+ i0.ɵɵelementStart(5, "svg");
1017
+ i0.ɵɵelement(6, "use", 37);
1018
+ i0.ɵɵelementEnd()()();
1019
+ }
1020
+ }
1021
+ function CollectionsInfoOverlayComponent_div_1_table_3_tr_11_td_13_Template(rf, ctx) {
1022
+ if (rf & 1) {
1023
+ i0.ɵɵnamespaceSVG();
1024
+ i0.ɵɵnamespaceHTML();
1025
+ i0.ɵɵelementStart(0, "td");
1026
+ i0.ɵɵtext(1);
1027
+ i0.ɵɵelementEnd();
1028
+ }
1029
+ if (rf & 2) {
1030
+ const column_r26 = ctx.$implicit;
1031
+ const object_r17 = i0.ɵɵnextContext().$implicit;
1032
+ i0.ɵɵadvance(1);
1033
+ i0.ɵɵtextInterpolate1(" ", object_r17[column_r26], " ");
1034
+ }
1035
+ }
1036
+ const _c0$6 = function (a0, a1, a2) { return { "active-object": a0, "is-cut": a1, "d-none": a2 }; };
1037
+ function CollectionsInfoOverlayComponent_div_1_table_3_tr_11_Template(rf, ctx) {
1038
+ if (rf & 1) {
1039
+ const _r29 = i0.ɵɵgetCurrentView();
1040
+ i0.ɵɵelementStart(0, "tr", 25)(1, "td");
1041
+ i0.ɵɵtext(2);
1042
+ i0.ɵɵelementEnd();
1043
+ i0.ɵɵelementStart(3, "td");
1044
+ i0.ɵɵtemplate(4, CollectionsInfoOverlayComponent_div_1_table_3_tr_11_div_4_Template, 7, 0, "div", 26);
1045
+ i0.ɵɵelementEnd();
1046
+ i0.ɵɵelementStart(5, "td")(6, "div", 27)(7, "div", 28);
1047
+ i0.ɵɵelement(8, "input", 29);
1048
+ i0.ɵɵelementEnd();
1049
+ i0.ɵɵelementStart(9, "div", 30)(10, "button", 31);
1050
+ 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)); });
1051
+ i0.ɵɵnamespaceSVG();
1052
+ i0.ɵɵelementStart(11, "svg");
1053
+ i0.ɵɵelement(12, "use", 32);
1054
+ i0.ɵɵelementEnd()()()()();
1055
+ i0.ɵɵtemplate(13, CollectionsInfoOverlayComponent_div_1_table_3_tr_11_td_13_Template, 2, 1, "td", 18);
1056
+ i0.ɵɵelementEnd();
1057
+ }
1058
+ if (rf & 2) {
1059
+ const object_r17 = ctx.$implicit;
1060
+ const i_r18 = ctx.index;
1061
+ const ctx_r12 = i0.ɵɵnextContext(3);
1062
+ 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));
1063
+ i0.ɵɵattribute("id", object_r17.uuid);
1064
+ i0.ɵɵadvance(2);
1065
+ i0.ɵɵtextInterpolate1("#", i_r18, "");
1066
+ i0.ɵɵadvance(2);
1067
+ i0.ɵɵproperty("ngIf", object_r17.uuid);
1068
+ i0.ɵɵadvance(4);
1069
+ i0.ɵɵproperty("id", "label" + i_r18);
1070
+ i0.ɵɵadvance(5);
1071
+ i0.ɵɵproperty("ngForOf", ctx_r12.collectionColumns);
1072
+ }
1073
+ }
1074
+ function CollectionsInfoOverlayComponent_div_1_table_3_Template(rf, ctx) {
1075
+ if (rf & 1) {
1076
+ i0.ɵɵelementStart(0, "table", 17)(1, "thead")(2, "tr")(3, "th");
1077
+ i0.ɵɵtext(4, "No.");
1078
+ i0.ɵɵelementEnd();
1079
+ i0.ɵɵelementStart(5, "th");
1080
+ i0.ɵɵtext(6, "Selection");
1081
+ i0.ɵɵelementEnd();
1082
+ i0.ɵɵelementStart(7, "th");
1083
+ i0.ɵɵtext(8, "Label");
1084
+ i0.ɵɵelementEnd();
1085
+ i0.ɵɵtemplate(9, CollectionsInfoOverlayComponent_div_1_table_3_th_9_Template, 11, 1, "th", 18);
1086
+ i0.ɵɵelementEnd()();
1087
+ i0.ɵɵelementStart(10, "tbody");
1088
+ i0.ɵɵtemplate(11, CollectionsInfoOverlayComponent_div_1_table_3_tr_11_Template, 14, 10, "tr", 19);
1089
+ i0.ɵɵelementEnd()();
1090
+ }
1091
+ if (rf & 2) {
1092
+ const ctx_r2 = i0.ɵɵnextContext(2);
1093
+ i0.ɵɵadvance(9);
1094
+ i0.ɵɵproperty("ngForOf", ctx_r2.collectionColumns);
1095
+ i0.ɵɵadvance(2);
1096
+ i0.ɵɵproperty("ngForOf", ctx_r2.showingCollection);
1097
+ }
1098
+ }
1099
+ function CollectionsInfoOverlayComponent_div_1_p_4_Template(rf, ctx) {
1100
+ if (rf & 1) {
1101
+ i0.ɵɵelementStart(0, "p", 38);
1102
+ i0.ɵɵtext(1, " Load event data to be able to display information about the collections here. ");
1103
+ i0.ɵɵelementEnd();
1104
+ }
1105
+ }
1106
+ function CollectionsInfoOverlayComponent_div_1_Template(rf, ctx) {
1107
+ if (rf & 1) {
1108
+ i0.ɵɵelementStart(0, "div", 2);
1109
+ i0.ɵɵtemplate(1, CollectionsInfoOverlayComponent_div_1_div_1_Template, 12, 2, "div", 3);
1110
+ i0.ɵɵelementStart(2, "div", 4);
1111
+ i0.ɵɵtemplate(3, CollectionsInfoOverlayComponent_div_1_table_3_Template, 12, 2, "table", 5);
1112
+ i0.ɵɵtemplate(4, CollectionsInfoOverlayComponent_div_1_p_4_Template, 2, 0, "p", 6);
1113
+ i0.ɵɵelementEnd()();
1114
+ }
1115
+ if (rf & 2) {
1116
+ const ctx_r0 = i0.ɵɵnextContext();
1117
+ i0.ɵɵadvance(1);
1118
+ i0.ɵɵproperty("ngIf", ctx_r0.collections != null);
1119
+ i0.ɵɵadvance(2);
1120
+ i0.ɵɵproperty("ngIf", ctx_r0.showingCollection);
1121
+ i0.ɵɵadvance(1);
1122
+ i0.ɵɵproperty("ngIf", !ctx_r0.collections);
1123
+ }
1124
+ }
364
1125
  class CollectionsInfoOverlayComponent {
365
1126
  constructor(elementRef, eventDisplay) {
366
1127
  this.elementRef = elementRef;
@@ -424,14 +1185,27 @@ class CollectionsInfoOverlayComponent {
424
1185
  .getObjectByName(SceneManager.EVENT_DATA_ID);
425
1186
  }
426
1187
  }
427
- CollectionsInfoOverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: CollectionsInfoOverlayComponent, deps: [{ token: i0.ElementRef }, { token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
428
- CollectionsInfoOverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
429
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: CollectionsInfoOverlayComponent, decorators: [{
1188
+ CollectionsInfoOverlayComponent.ɵfac = function CollectionsInfoOverlayComponent_Factory(t) { return new (t || CollectionsInfoOverlayComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(EventDisplayService)); };
1189
+ 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) {
1190
+ if (rf & 1) {
1191
+ i0.ɵɵelementStart(0, "app-overlay", 0);
1192
+ i0.ɵɵtemplate(1, CollectionsInfoOverlayComponent_div_1_Template, 5, 3, "div", 1);
1193
+ i0.ɵɵelementEnd();
1194
+ }
1195
+ if (rf & 2) {
1196
+ i0.ɵɵproperty("resizable", true)("active", ctx.showObjectsInfo);
1197
+ i0.ɵɵadvance(1);
1198
+ i0.ɵɵproperty("ngIf", ctx.showObjectsInfo);
1199
+ }
1200
+ }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i2$3.MatTooltip, i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i4$1.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)}"] });
1201
+ (function () {
1202
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CollectionsInfoOverlayComponent, [{
430
1203
  type: Component,
431
1204
  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"] }]
432
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: EventDisplayService }]; }, propDecorators: { showObjectsInfo: [{
1205
+ }], function () { return [{ type: i0.ElementRef }, { type: EventDisplayService }]; }, { showObjectsInfo: [{
433
1206
  type: Input
434
- }] } });
1207
+ }] });
1208
+ })();
435
1209
 
436
1210
  class CollectionsInfoComponent {
437
1211
  constructor(overlay) {
@@ -452,12 +1226,23 @@ class CollectionsInfoComponent {
452
1226
  this.overlayWindow.instance.showObjectsInfo = this.showObjectsInfo;
453
1227
  }
454
1228
  }
455
- CollectionsInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: CollectionsInfoComponent, deps: [{ token: i1$1.Overlay }], target: i0.ɵɵFactoryTarget.Component });
456
- CollectionsInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
457
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: CollectionsInfoComponent, decorators: [{
1229
+ CollectionsInfoComponent.ɵfac = function CollectionsInfoComponent_Factory(t) { return new (t || CollectionsInfoComponent)(i0.ɵɵdirectiveInject(i1$1.Overlay)); };
1230
+ 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) {
1231
+ if (rf & 1) {
1232
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
1233
+ i0.ɵɵlistener("click", function CollectionsInfoComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleOverlay(); });
1234
+ i0.ɵɵelementEnd();
1235
+ }
1236
+ if (rf & 2) {
1237
+ i0.ɵɵproperty("active", ctx.showObjectsInfo);
1238
+ }
1239
+ }, dependencies: [MenuToggleComponent] });
1240
+ (function () {
1241
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CollectionsInfoComponent, [{
458
1242
  type: Component,
459
1243
  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" }]
460
- }], ctorParameters: function () { return [{ type: i1$1.Overlay }]; } });
1244
+ }], function () { return [{ type: i1$1.Overlay }]; }, null);
1245
+ })();
461
1246
 
462
1247
  class DarkThemeComponent {
463
1248
  constructor(eventDisplay) {
@@ -472,13 +1257,51 @@ class DarkThemeComponent {
472
1257
  this.eventDisplay.getUIManager().setDarkTheme(this.darkTheme);
473
1258
  }
474
1259
  }
475
- DarkThemeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: DarkThemeComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
476
- DarkThemeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
477
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: DarkThemeComponent, decorators: [{
1260
+ DarkThemeComponent.ɵfac = function DarkThemeComponent_Factory(t) { return new (t || DarkThemeComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
1261
+ 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) {
1262
+ if (rf & 1) {
1263
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
1264
+ i0.ɵɵlistener("click", function DarkThemeComponent_Template_app_menu_toggle_click_0_listener() { return ctx.setDarkTheme(); });
1265
+ i0.ɵɵelementEnd();
1266
+ }
1267
+ if (rf & 2) {
1268
+ i0.ɵɵproperty("active", ctx.darkTheme);
1269
+ }
1270
+ }, dependencies: [MenuToggleComponent] });
1271
+ (function () {
1272
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DarkThemeComponent, [{
478
1273
  type: Component,
479
1274
  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" }]
480
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
1275
+ }], function () { return [{ type: EventDisplayService }]; }, null);
1276
+ })();
481
1277
 
1278
+ function EventSelectorComponent_div_0_option_2_Template(rf, ctx) {
1279
+ if (rf & 1) {
1280
+ i0.ɵɵelementStart(0, "option", 4);
1281
+ i0.ɵɵtext(1);
1282
+ i0.ɵɵelementEnd();
1283
+ }
1284
+ if (rf & 2) {
1285
+ const event_r2 = ctx.$implicit;
1286
+ i0.ɵɵproperty("value", event_r2);
1287
+ i0.ɵɵadvance(1);
1288
+ i0.ɵɵtextInterpolate1(" ", event_r2, " ");
1289
+ }
1290
+ }
1291
+ function EventSelectorComponent_div_0_Template(rf, ctx) {
1292
+ if (rf & 1) {
1293
+ const _r4 = i0.ɵɵgetCurrentView();
1294
+ i0.ɵɵelementStart(0, "div", 1)(1, "select", 2);
1295
+ 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)); });
1296
+ i0.ɵɵtemplate(2, EventSelectorComponent_div_0_option_2_Template, 2, 2, "option", 3);
1297
+ i0.ɵɵelementEnd()();
1298
+ }
1299
+ if (rf & 2) {
1300
+ const ctx_r0 = i0.ɵɵnextContext();
1301
+ i0.ɵɵadvance(2);
1302
+ i0.ɵɵproperty("ngForOf", ctx_r0.events);
1303
+ }
1304
+ }
482
1305
  class EventSelectorComponent {
483
1306
  constructor(eventDisplay) {
484
1307
  this.eventDisplay = eventDisplay;
@@ -491,13 +1314,91 @@ class EventSelectorComponent {
491
1314
  this.eventDisplay.loadEvent(value);
492
1315
  }
493
1316
  }
494
- EventSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: EventSelectorComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
495
- EventSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
496
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: EventSelectorComponent, decorators: [{
1317
+ EventSelectorComponent.ɵfac = function EventSelectorComponent_Factory(t) { return new (t || EventSelectorComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
1318
+ 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) {
1319
+ if (rf & 1) {
1320
+ i0.ɵɵtemplate(0, EventSelectorComponent_div_0_Template, 3, 1, "div", 0);
1321
+ }
1322
+ if (rf & 2) {
1323
+ i0.ɵɵproperty("ngIf", ctx.events != null);
1324
+ }
1325
+ }, dependencies: [i2.NgForOf, i2.NgIf, i2$3.MatTooltip, i3.NgSelectOption, i3.ɵNgSelectMultipleOption], 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)}"] });
1326
+ (function () {
1327
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EventSelectorComponent, [{
497
1328
  type: Component,
498
1329
  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"] }]
499
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
1330
+ }], function () { return [{ type: EventDisplayService }]; }, null);
1331
+ })();
500
1332
 
1333
+ function ExperimentInfoComponent_a_1_Template(rf, ctx) {
1334
+ if (rf & 1) {
1335
+ i0.ɵɵelementStart(0, "a", 5);
1336
+ i0.ɵɵelement(1, "img", 6);
1337
+ i0.ɵɵelementEnd();
1338
+ }
1339
+ if (rf & 2) {
1340
+ const ctx_r0 = i0.ɵɵnextContext();
1341
+ i0.ɵɵproperty("href", ctx_r0.url, i0.ɵɵsanitizeUrl);
1342
+ i0.ɵɵadvance(1);
1343
+ i0.ɵɵproperty("src", ctx_r0.logo, i0.ɵɵsanitizeUrl);
1344
+ }
1345
+ }
1346
+ function ExperimentInfoComponent_p_3_Template(rf, ctx) {
1347
+ if (rf & 1) {
1348
+ i0.ɵɵelementStart(0, "p")(1, "b");
1349
+ i0.ɵɵtext(2);
1350
+ i0.ɵɵelementEnd()();
1351
+ }
1352
+ if (rf & 2) {
1353
+ const ctx_r1 = i0.ɵɵnextContext();
1354
+ i0.ɵɵadvance(2);
1355
+ i0.ɵɵtextInterpolate(ctx_r1.tagline);
1356
+ }
1357
+ }
1358
+ function ExperimentInfoComponent_p_4_ng_container_1_Template(rf, ctx) {
1359
+ if (rf & 1) {
1360
+ i0.ɵɵelementContainerStart(0);
1361
+ i0.ɵɵelementStart(1, "b");
1362
+ i0.ɵɵtext(2);
1363
+ i0.ɵɵelementEnd();
1364
+ i0.ɵɵtext(3);
1365
+ i0.ɵɵelementContainerEnd();
1366
+ }
1367
+ if (rf & 2) {
1368
+ const infoField_r3 = i0.ɵɵnextContext().$implicit;
1369
+ i0.ɵɵadvance(2);
1370
+ i0.ɵɵtextInterpolate1("", infoField_r3.label, ": ");
1371
+ i0.ɵɵadvance(1);
1372
+ i0.ɵɵtextInterpolate1("", infoField_r3.value, " ");
1373
+ }
1374
+ }
1375
+ function ExperimentInfoComponent_p_4_ng_container_2_Template(rf, ctx) {
1376
+ if (rf & 1) {
1377
+ i0.ɵɵelementContainerStart(0);
1378
+ i0.ɵɵtext(1);
1379
+ i0.ɵɵelementContainerEnd();
1380
+ }
1381
+ if (rf & 2) {
1382
+ const infoField_r3 = i0.ɵɵnextContext().$implicit;
1383
+ i0.ɵɵadvance(1);
1384
+ i0.ɵɵtextInterpolate1(" ", infoField_r3, " ");
1385
+ }
1386
+ }
1387
+ function ExperimentInfoComponent_p_4_Template(rf, ctx) {
1388
+ if (rf & 1) {
1389
+ i0.ɵɵelementStart(0, "p");
1390
+ i0.ɵɵtemplate(1, ExperimentInfoComponent_p_4_ng_container_1_Template, 4, 2, "ng-container", 3);
1391
+ i0.ɵɵtemplate(2, ExperimentInfoComponent_p_4_ng_container_2_Template, 2, 1, "ng-container", 3);
1392
+ i0.ɵɵelementEnd();
1393
+ }
1394
+ if (rf & 2) {
1395
+ const infoField_r3 = ctx.$implicit;
1396
+ i0.ɵɵadvance(1);
1397
+ i0.ɵɵproperty("ngIf", infoField_r3.label);
1398
+ i0.ɵɵadvance(1);
1399
+ i0.ɵɵproperty("ngIf", !infoField_r3.label);
1400
+ }
1401
+ }
501
1402
  class ExperimentInfoComponent {
502
1403
  constructor(eventDisplay) {
503
1404
  this.eventDisplay = eventDisplay;
@@ -508,19 +1409,57 @@ class ExperimentInfoComponent {
508
1409
  });
509
1410
  }
510
1411
  }
511
- ExperimentInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ExperimentInfoComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
512
- ExperimentInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
513
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ExperimentInfoComponent, decorators: [{
1412
+ ExperimentInfoComponent.ɵfac = function ExperimentInfoComponent_Factory(t) { return new (t || ExperimentInfoComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
1413
+ 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) {
1414
+ if (rf & 1) {
1415
+ i0.ɵɵelementStart(0, "div", 0);
1416
+ i0.ɵɵtemplate(1, ExperimentInfoComponent_a_1_Template, 2, 2, "a", 1);
1417
+ i0.ɵɵelementStart(2, "div", 2);
1418
+ i0.ɵɵtemplate(3, ExperimentInfoComponent_p_3_Template, 3, 1, "p", 3);
1419
+ i0.ɵɵtemplate(4, ExperimentInfoComponent_p_4_Template, 3, 2, "p", 4);
1420
+ i0.ɵɵelementEnd()();
1421
+ }
1422
+ if (rf & 2) {
1423
+ i0.ɵɵadvance(1);
1424
+ i0.ɵɵproperty("ngIf", ctx.url);
1425
+ i0.ɵɵadvance(2);
1426
+ i0.ɵɵproperty("ngIf", ctx.tagline);
1427
+ i0.ɵɵadvance(1);
1428
+ i0.ɵɵproperty("ngForOf", ctx.experimentInfo);
1429
+ }
1430
+ }, 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}}"] });
1431
+ (function () {
1432
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ExperimentInfoComponent, [{
514
1433
  type: Component,
515
1434
  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"] }]
516
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { url: [{
1435
+ }], function () { return [{ type: EventDisplayService }]; }, { url: [{
517
1436
  type: Input
518
1437
  }], logo: [{
519
1438
  type: Input
520
1439
  }], tagline: [{
521
1440
  type: Input
522
- }] } });
1441
+ }] });
1442
+ })();
523
1443
 
1444
+ function InfoPanelOverlayComponent_li_4_Template(rf, ctx) {
1445
+ if (rf & 1) {
1446
+ i0.ɵɵelementStart(0, "li", 2);
1447
+ i0.ɵɵtext(1, " No actions. ");
1448
+ i0.ɵɵelementEnd();
1449
+ }
1450
+ }
1451
+ function InfoPanelOverlayComponent_li_5_Template(rf, ctx) {
1452
+ if (rf & 1) {
1453
+ i0.ɵɵelementStart(0, "li", 2);
1454
+ i0.ɵɵtext(1);
1455
+ i0.ɵɵelementEnd();
1456
+ }
1457
+ if (rf & 2) {
1458
+ const action_r2 = ctx.$implicit;
1459
+ i0.ɵɵadvance(1);
1460
+ i0.ɵɵtextInterpolate1(" ", action_r2, " ");
1461
+ }
1462
+ }
524
1463
  /**
525
1464
  * Component for displaying information from the logger
526
1465
  */
@@ -543,14 +1482,34 @@ class InfoPanelOverlayComponent {
543
1482
  this.actionsList = this.eventDisplay.getInfoLogger().getInfoLoggerList();
544
1483
  }
545
1484
  }
546
- InfoPanelOverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: InfoPanelOverlayComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
547
- InfoPanelOverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
548
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: InfoPanelOverlayComponent, decorators: [{
1485
+ InfoPanelOverlayComponent.ɵfac = function InfoPanelOverlayComponent_Factory(t) { return new (t || InfoPanelOverlayComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
1486
+ 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) {
1487
+ if (rf & 1) {
1488
+ i0.ɵɵelementStart(0, "app-overlay", 0)(1, "ul", 1)(2, "li", 2);
1489
+ i0.ɵɵtext(3);
1490
+ i0.ɵɵelementEnd();
1491
+ i0.ɵɵtemplate(4, InfoPanelOverlayComponent_li_4_Template, 2, 0, "li", 3);
1492
+ i0.ɵɵtemplate(5, InfoPanelOverlayComponent_li_5_Template, 2, 1, "li", 4);
1493
+ i0.ɵɵelementEnd()();
1494
+ }
1495
+ if (rf & 2) {
1496
+ i0.ɵɵproperty("resizable", true)("active", ctx.showInfoPanel);
1497
+ i0.ɵɵadvance(3);
1498
+ i0.ɵɵtextInterpolate1(" Phoenix Version: ", ctx.version, " ");
1499
+ i0.ɵɵadvance(1);
1500
+ i0.ɵɵproperty("ngIf", ctx.actionsList.length === 0);
1501
+ i0.ɵɵadvance(1);
1502
+ i0.ɵɵproperty("ngForOf", ctx.actionsList);
1503
+ }
1504
+ }, dependencies: [i2.NgForOf, i2.NgIf, OverlayComponent], styles: [".list-group-item[_ngcontent-%COMP%]{font-size:.8rem;padding:.5rem 1rem}"] });
1505
+ (function () {
1506
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoPanelOverlayComponent, [{
549
1507
  type: Component,
550
1508
  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"] }]
551
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { showInfoPanel: [{
1509
+ }], function () { return [{ type: EventDisplayService }]; }, { showInfoPanel: [{
552
1510
  type: Input
553
- }] } });
1511
+ }] });
1512
+ })();
554
1513
 
555
1514
  /**
556
1515
  * Component for toggling info panel overlay
@@ -588,16 +1547,28 @@ class InfoPanelComponent {
588
1547
  this.overlayWindow.instance.showInfoPanel = this.showInfoPanel;
589
1548
  }
590
1549
  }
591
- InfoPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: InfoPanelComponent, deps: [{ token: i1$1.Overlay }], target: i0.ɵɵFactoryTarget.Component });
592
- InfoPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
593
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: InfoPanelComponent, decorators: [{
1550
+ InfoPanelComponent.ɵfac = function InfoPanelComponent_Factory(t) { return new (t || InfoPanelComponent)(i0.ɵɵdirectiveInject(i1$1.Overlay)); };
1551
+ 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) {
1552
+ if (rf & 1) {
1553
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
1554
+ i0.ɵɵlistener("click", function InfoPanelComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleOverlay(); });
1555
+ i0.ɵɵelementEnd();
1556
+ }
1557
+ if (rf & 2) {
1558
+ i0.ɵɵproperty("active", ctx.showInfoPanel);
1559
+ }
1560
+ }, dependencies: [MenuToggleComponent] });
1561
+ (function () {
1562
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoPanelComponent, [{
594
1563
  type: Component,
595
1564
  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" }]
596
- }], ctorParameters: function () { return [{ type: i1$1.Overlay }]; } });
1565
+ }], function () { return [{ type: i1$1.Overlay }]; }, null);
1566
+ })();
597
1567
 
598
1568
  var EventDataFormat;
599
1569
  (function (EventDataFormat) {
600
1570
  EventDataFormat["JSON"] = "JSON";
1571
+ EventDataFormat["EDM4HEPJSON"] = "EDM4HEPJSON";
601
1572
  EventDataFormat["JIVEXML"] = "JIVEXML";
602
1573
  EventDataFormat["IG"] = "IG";
603
1574
  EventDataFormat["ZIP"] = "ZIP";
@@ -611,6 +1582,43 @@ class ImportOption {
611
1582
  }
612
1583
  }
613
1584
 
1585
+ function IOOptionsDialogComponent_div_4_ng_container_5_Template(rf, ctx) {
1586
+ if (rf & 1) {
1587
+ const _r10 = i0.ɵɵgetCurrentView();
1588
+ i0.ɵɵelementContainerStart(0);
1589
+ i0.ɵɵelementStart(1, "input", 28, 29);
1590
+ 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)); });
1591
+ i0.ɵɵelementEnd();
1592
+ i0.ɵɵelementStart(3, "button", 8);
1593
+ 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()); });
1594
+ i0.ɵɵelement(4, "img", 30);
1595
+ i0.ɵɵtext(5);
1596
+ i0.ɵɵelementEnd();
1597
+ i0.ɵɵelementContainerEnd();
1598
+ }
1599
+ if (rf & 2) {
1600
+ const eventDataImportOption_r7 = ctx.$implicit;
1601
+ i0.ɵɵadvance(1);
1602
+ i0.ɵɵproperty("accept", eventDataImportOption_r7.accept);
1603
+ i0.ɵɵadvance(4);
1604
+ i0.ɵɵtextInterpolate1(" Load ", eventDataImportOption_r7.fileType, " ");
1605
+ }
1606
+ }
1607
+ function IOOptionsDialogComponent_div_4_Template(rf, ctx) {
1608
+ if (rf & 1) {
1609
+ i0.ɵɵelementStart(0, "div")(1, "p", 4)(2, "b");
1610
+ i0.ɵɵtext(3, "Event data");
1611
+ i0.ɵɵelementEnd()();
1612
+ i0.ɵɵelementStart(4, "div", 5);
1613
+ i0.ɵɵtemplate(5, IOOptionsDialogComponent_div_4_ng_container_5_Template, 6, 2, "ng-container", 27);
1614
+ i0.ɵɵelementEnd()();
1615
+ }
1616
+ if (rf & 2) {
1617
+ const ctx_r0 = i0.ɵɵnextContext();
1618
+ i0.ɵɵadvance(5);
1619
+ i0.ɵɵproperty("ngForOf", ctx_r0.eventDataOptionsWithHandler);
1620
+ }
1621
+ }
614
1622
  class IOOptionsDialogComponent {
615
1623
  constructor(eventDisplay, dialogRef) {
616
1624
  this.eventDisplay = eventDisplay;
@@ -618,6 +1626,7 @@ class IOOptionsDialogComponent {
618
1626
  this.eventDataImportOptions = [EventDataFormat.JSON];
619
1627
  this.supportedEventDataFormats = [
620
1628
  new ImportOption(EventDataFormat.JSON, '.json', this.handleJSONEventDataInput.bind(this), 'application/json'),
1629
+ new ImportOption(EventDataFormat.EDM4HEPJSON, '.edm4hep.json', this.handleEDM4HEPJSONEventDataInput.bind(this), 'application/json'),
621
1630
  new ImportOption(EventDataFormat.JIVEXML, '.xml', this.handleJiveXMLDataInput.bind(this), 'text/xml'),
622
1631
  new ImportOption(EventDataFormat.ZIP, '.zip', this.handleZipEventDataInput.bind(this), '.zip'),
623
1632
  new ImportOption(EventDataFormat.IG, '.ig', this.handleIgEventDataInput.bind(this), '.ig'),
@@ -657,6 +1666,16 @@ class IOOptionsDialogComponent {
657
1666
  };
658
1667
  this.handleFileInput(files[0], 'json', callback);
659
1668
  }
1669
+ handleEDM4HEPJSONEventDataInput(files) {
1670
+ const callback = (content) => {
1671
+ const json = typeof content === 'string' ? JSON.parse(content) : content;
1672
+ const edm4hepJsonLoader = new Edm4hepJsonLoader();
1673
+ edm4hepJsonLoader.setRawEventData(json);
1674
+ edm4hepJsonLoader.processEventData();
1675
+ this.eventDisplay.parsePhoenixEvents(edm4hepJsonLoader.getEventData());
1676
+ };
1677
+ this.handleFileInput(files[0], 'json', callback);
1678
+ }
660
1679
  handleJiveXMLDataInput(files) {
661
1680
  const callback = (content) => {
662
1681
  const jiveloader = new JiveXMLLoader();
@@ -778,14 +1797,89 @@ class IOOptionsDialogComponent {
778
1797
  this.eventDisplay.exportToOBJ();
779
1798
  }
780
1799
  }
781
- IOOptionsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: IOOptionsDialogComponent, deps: [{ token: EventDisplayService }, { token: i1$2.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
782
- IOOptionsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
783
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: IOOptionsDialogComponent, decorators: [{
1800
+ IOOptionsDialogComponent.ɵfac = function IOOptionsDialogComponent_Factory(t) { return new (t || IOOptionsDialogComponent)(i0.ɵɵdirectiveInject(EventDisplayService), i0.ɵɵdirectiveInject(i1$2.MatDialogRef)); };
1801
+ 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) {
1802
+ if (rf & 1) {
1803
+ const _r12 = i0.ɵɵgetCurrentView();
1804
+ i0.ɵɵelementStart(0, "div", 0)(1, "h1", 1);
1805
+ i0.ɵɵtext(2, "Import and export");
1806
+ i0.ɵɵelementEnd();
1807
+ i0.ɵɵelementStart(3, "div", 2);
1808
+ i0.ɵɵtemplate(4, IOOptionsDialogComponent_div_4_Template, 6, 1, "div", 3);
1809
+ i0.ɵɵelementStart(5, "p", 4)(6, "b");
1810
+ i0.ɵɵtext(7, "Geometries");
1811
+ i0.ɵɵelementEnd()();
1812
+ i0.ɵɵelementStart(8, "div", 5)(9, "input", 6, 7);
1813
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_9_listener($event) { return ctx.handleOBJInput($event.target.files); });
1814
+ i0.ɵɵelementEnd();
1815
+ i0.ɵɵelementStart(11, "button", 8);
1816
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r12); const _r1 = i0.ɵɵreference(10); return i0.ɵɵresetView(_r1.click()); });
1817
+ i0.ɵɵelement(12, "img", 9);
1818
+ i0.ɵɵtext(13, " Load .obj ");
1819
+ i0.ɵɵelementEnd();
1820
+ i0.ɵɵelementStart(14, "input", 10, 11);
1821
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_14_listener($event) { return ctx.handleGLTFInput($event.target.files); });
1822
+ i0.ɵɵelementEnd();
1823
+ i0.ɵɵelementStart(16, "button", 8);
1824
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r12); const _r2 = i0.ɵɵreference(15); return i0.ɵɵresetView(_r2.click()); });
1825
+ i0.ɵɵelement(17, "img", 12);
1826
+ i0.ɵɵtext(18, " Load .gltf ");
1827
+ i0.ɵɵelementEnd();
1828
+ i0.ɵɵelementStart(19, "input", 13, 14);
1829
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_19_listener($event) { return ctx.handleROOTInput($event.target.files); });
1830
+ i0.ɵɵelementEnd();
1831
+ i0.ɵɵelementStart(21, "button", 8);
1832
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r12); const _r3 = i0.ɵɵreference(20); return i0.ɵɵresetView(_r3.click()); });
1833
+ i0.ɵɵelement(22, "img", 15);
1834
+ i0.ɵɵtext(23, " Load .root ");
1835
+ i0.ɵɵelementEnd();
1836
+ i0.ɵɵelementStart(24, "input", 16, 17);
1837
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_24_listener($event) { return ctx.handleRootJSONInput($event.target.files); });
1838
+ i0.ɵɵelementEnd();
1839
+ i0.ɵɵelementStart(26, "button", 8);
1840
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_26_listener() { i0.ɵɵrestoreView(_r12); const _r4 = i0.ɵɵreference(25); return i0.ɵɵresetView(_r4.click()); });
1841
+ i0.ɵɵelement(27, "img", 15);
1842
+ i0.ɵɵtext(28, " Load .json.gz ");
1843
+ i0.ɵɵelementEnd()();
1844
+ i0.ɵɵelementStart(29, "p", 4)(30, "b");
1845
+ i0.ɵɵtext(31, "Scene");
1846
+ i0.ɵɵelementEnd()();
1847
+ i0.ɵɵelementStart(32, "div", 5)(33, "button", 18);
1848
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_33_listener() { return ctx.saveScene(); });
1849
+ i0.ɵɵelement(34, "img", 19);
1850
+ i0.ɵɵtext(35, " Save scene ");
1851
+ i0.ɵɵelementEnd();
1852
+ i0.ɵɵelementStart(36, "input", 20, 21);
1853
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_36_listener($event) { return ctx.handlePhoenixInput($event.target.files); });
1854
+ i0.ɵɵelementEnd();
1855
+ i0.ɵɵelementStart(38, "button", 22);
1856
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_38_listener() { i0.ɵɵrestoreView(_r12); const _r5 = i0.ɵɵreference(37); return i0.ɵɵresetView(_r5.click()); });
1857
+ i0.ɵɵelement(39, "img", 23);
1858
+ i0.ɵɵtext(40, " Load scene ");
1859
+ i0.ɵɵelementEnd();
1860
+ i0.ɵɵelementStart(41, "button", 24);
1861
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_41_listener() { return ctx.exportOBJ(); });
1862
+ i0.ɵɵelement(42, "img", 9);
1863
+ i0.ɵɵtext(43, " Save OBJ ");
1864
+ i0.ɵɵelementEnd()()();
1865
+ i0.ɵɵelementStart(44, "div", 25)(45, "button", 26);
1866
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_45_listener() { return ctx.onClose(); });
1867
+ i0.ɵɵtext(46, " Close ");
1868
+ i0.ɵɵelementEnd()()();
1869
+ }
1870
+ if (rf & 2) {
1871
+ i0.ɵɵadvance(4);
1872
+ i0.ɵɵproperty("ngIf", ctx.eventDataImportOptions.length > 0);
1873
+ }
1874
+ }, 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}"] });
1875
+ (function () {
1876
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IOOptionsDialogComponent, [{
784
1877
  type: Component,
785
- 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"] }]
786
- }], ctorParameters: function () { return [{ type: EventDisplayService }, { type: i1$2.MatDialogRef }]; }, propDecorators: { eventDataImportOptions: [{
1878
+ 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"] }]
1879
+ }], function () { return [{ type: EventDisplayService }, { type: i1$2.MatDialogRef }]; }, { eventDataImportOptions: [{
787
1880
  type: Input
788
- }] } });
1881
+ }] });
1882
+ })();
789
1883
 
790
1884
  class IoOptionsComponent {
791
1885
  constructor(dialog) {
@@ -800,14 +1894,25 @@ class IoOptionsComponent {
800
1894
  this.eventDataImportOptions;
801
1895
  }
802
1896
  }
803
- IoOptionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: IoOptionsComponent, deps: [{ token: i1$2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
804
- IoOptionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
805
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: IoOptionsComponent, decorators: [{
1897
+ IoOptionsComponent.ɵfac = function IoOptionsComponent_Factory(t) { return new (t || IoOptionsComponent)(i0.ɵɵdirectiveInject(i1$2.MatDialog)); };
1898
+ 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) {
1899
+ if (rf & 1) {
1900
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
1901
+ i0.ɵɵlistener("click", function IoOptionsComponent_Template_app_menu_toggle_click_0_listener() { return ctx.openIODialog(); });
1902
+ i0.ɵɵelementEnd();
1903
+ }
1904
+ if (rf & 2) {
1905
+ i0.ɵɵproperty("active", false);
1906
+ }
1907
+ }, dependencies: [MenuToggleComponent] });
1908
+ (function () {
1909
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IoOptionsComponent, [{
806
1910
  type: Component,
807
1911
  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" }]
808
- }], ctorParameters: function () { return [{ type: i1$2.MatDialog }]; }, propDecorators: { eventDataImportOptions: [{
1912
+ }], function () { return [{ type: i1$2.MatDialog }]; }, { eventDataImportOptions: [{
809
1913
  type: Input
810
- }] } });
1914
+ }] });
1915
+ })();
811
1916
 
812
1917
  class MainViewToggleComponent {
813
1918
  constructor(eventDisplay) {
@@ -821,12 +1926,23 @@ class MainViewToggleComponent {
821
1926
  .toggleOrthographicView(this.orthographicView);
822
1927
  }
823
1928
  }
824
- MainViewToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: MainViewToggleComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
825
- MainViewToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
826
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: MainViewToggleComponent, decorators: [{
1929
+ MainViewToggleComponent.ɵfac = function MainViewToggleComponent_Factory(t) { return new (t || MainViewToggleComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
1930
+ 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) {
1931
+ if (rf & 1) {
1932
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
1933
+ i0.ɵɵlistener("click", function MainViewToggleComponent_Template_app_menu_toggle_click_0_listener() { return ctx.switchMainView(); });
1934
+ i0.ɵɵelementEnd();
1935
+ }
1936
+ if (rf & 2) {
1937
+ i0.ɵɵproperty("icon", ctx.orthographicView ? "perspective" : "orthographic")("matTooltip", "Switch to " + (ctx.orthographicView ? "perspective" : "orthographic") + " view");
1938
+ }
1939
+ }, dependencies: [i2$3.MatTooltip, MenuToggleComponent] });
1940
+ (function () {
1941
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MainViewToggleComponent, [{
827
1942
  type: Component,
828
1943
  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" }]
829
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
1944
+ }], function () { return [{ type: EventDisplayService }]; }, null);
1945
+ })();
830
1946
 
831
1947
  class ObjectClippingComponent {
832
1948
  constructor(eventDisplay) {
@@ -836,12 +1952,10 @@ class ObjectClippingComponent {
836
1952
  stateManager.startClippingAngle.onUpdate((value) => (this.startClippingAngle = value));
837
1953
  stateManager.openingClippingAngle.onUpdate((value) => (this.openingClippingAngle = value));
838
1954
  }
839
- changeStartClippingAngle(change) {
840
- const startingAngle = change.value;
1955
+ changeStartClippingAngle(startingAngle) {
841
1956
  this.eventDisplay.getUIManager().rotateStartAngleClipping(startingAngle);
842
1957
  }
843
- changeOpeningClippingAngle(change) {
844
- const openingAngle = change.value;
1958
+ changeOpeningClippingAngle(openingAngle) {
845
1959
  this.eventDisplay.getUIManager().rotateOpeningAngleClipping(openingAngle);
846
1960
  }
847
1961
  toggleClipping(change) {
@@ -850,12 +1964,50 @@ class ObjectClippingComponent {
850
1964
  this.clippingEnabled = value;
851
1965
  }
852
1966
  }
853
- ObjectClippingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ObjectClippingComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
854
- ObjectClippingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
855
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ObjectClippingComponent, decorators: [{
1967
+ ObjectClippingComponent.ɵfac = function ObjectClippingComponent_Factory(t) { return new (t || ObjectClippingComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
1968
+ 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) {
1969
+ if (rf & 1) {
1970
+ const _r4 = i0.ɵɵgetCurrentView();
1971
+ i0.ɵɵelementStart(0, "mat-menu", 0, 1)(2, "button", 2);
1972
+ 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()); });
1973
+ i0.ɵɵelementStart(3, "mat-checkbox", 3, 4);
1974
+ 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); });
1975
+ i0.ɵɵtext(5, " Clipping ");
1976
+ i0.ɵɵelementEnd()();
1977
+ i0.ɵɵelementStart(6, "button", 5);
1978
+ i0.ɵɵlistener("focus", function ObjectClippingComponent_Template_button_focus_6_listener() { i0.ɵɵrestoreView(_r4); const _r2 = i0.ɵɵreference(9); return i0.ɵɵresetView(_r2.focus()); });
1979
+ i0.ɵɵelementStart(7, "mat-slider", 6)(8, "input", 7, 8);
1980
+ i0.ɵɵlistener("valueChange", function ObjectClippingComponent_Template_input_valueChange_8_listener($event) { return ctx.changeStartClippingAngle($event); });
1981
+ i0.ɵɵelementEnd()();
1982
+ i0.ɵɵtext(10, " Start Angle ");
1983
+ i0.ɵɵelementEnd();
1984
+ i0.ɵɵelementStart(11, "button", 5);
1985
+ i0.ɵɵlistener("focus", function ObjectClippingComponent_Template_button_focus_11_listener() { i0.ɵɵrestoreView(_r4); const _r3 = i0.ɵɵreference(14); return i0.ɵɵresetView(_r3.focus()); });
1986
+ i0.ɵɵelementStart(12, "mat-slider", 6)(13, "input", 7, 9);
1987
+ i0.ɵɵlistener("valueChange", function ObjectClippingComponent_Template_input_valueChange_13_listener($event) { return ctx.changeOpeningClippingAngle($event); });
1988
+ i0.ɵɵelementEnd()();
1989
+ i0.ɵɵtext(15, " Opening Angle ");
1990
+ i0.ɵɵelementEnd()();
1991
+ i0.ɵɵelement(16, "app-menu-toggle", 10);
1992
+ }
1993
+ if (rf & 2) {
1994
+ const _r0 = i0.ɵɵreference(1);
1995
+ i0.ɵɵadvance(3);
1996
+ i0.ɵɵproperty("checked", ctx.clippingEnabled);
1997
+ i0.ɵɵadvance(5);
1998
+ i0.ɵɵproperty("value", ctx.startClippingAngle);
1999
+ i0.ɵɵadvance(5);
2000
+ i0.ɵɵproperty("value", ctx.openingClippingAngle);
2001
+ i0.ɵɵadvance(3);
2002
+ i0.ɵɵproperty("matMenuTriggerFor", _r0)("active", ctx.clippingEnabled);
2003
+ }
2004
+ }, dependencies: [i3$1.MatMenu, i3$1.MatMenuItem, i3$1.MatMenuTrigger, i2$1.MatSlider, i2$1.MatSliderThumb, i4$1.MatCheckbox, MenuToggleComponent], styles: [".slider-btn[_ngcontent-%COMP%]{overflow:visible}mat-slider[_ngcontent-%COMP%]{margin-left:.75rem;margin-right:.75rem}"] });
2005
+ (function () {
2006
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ObjectClippingComponent, [{
856
2007
  type: Component,
857
- 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"] }]
858
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
2008
+ 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"] }]
2009
+ }], function () { return [{ type: EventDisplayService }]; }, null);
2010
+ })();
859
2011
 
860
2012
  /**
861
2013
  * Pipe for transforming selected object attributes to a better format.
@@ -879,15 +2031,46 @@ class AttributePipe {
879
2031
  return transformedValue;
880
2032
  }
881
2033
  }
882
- AttributePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: AttributePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
883
- AttributePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.3", ngImport: i0, type: AttributePipe, name: "attributePipe" });
884
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: AttributePipe, decorators: [{
2034
+ AttributePipe.ɵfac = function AttributePipe_Factory(t) { return new (t || AttributePipe)(); };
2035
+ AttributePipe.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "attributePipe", type: AttributePipe, pure: true });
2036
+ (function () {
2037
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AttributePipe, [{
885
2038
  type: Pipe,
886
2039
  args: [{
887
2040
  name: 'attributePipe',
888
2041
  }]
889
- }] });
2042
+ }], null, null);
2043
+ })();
890
2044
 
2045
+ function ObjectSelectionOverlayComponent_div_1_div_1_Template(rf, ctx) {
2046
+ if (rf & 1) {
2047
+ i0.ɵɵelementStart(0, "div", 4)(1, "strong");
2048
+ i0.ɵɵtext(2);
2049
+ i0.ɵɵelementEnd();
2050
+ i0.ɵɵtext(3);
2051
+ i0.ɵɵpipe(4, "attributePipe");
2052
+ i0.ɵɵelementEnd();
2053
+ }
2054
+ if (rf & 2) {
2055
+ const attribute_r2 = ctx.$implicit;
2056
+ i0.ɵɵadvance(2);
2057
+ i0.ɵɵtextInterpolate(attribute_r2.attributeName);
2058
+ i0.ɵɵadvance(1);
2059
+ i0.ɵɵtextInterpolate1(" : ", i0.ɵɵpipeBind1(4, 2, attribute_r2.attributeValue), " ");
2060
+ }
2061
+ }
2062
+ function ObjectSelectionOverlayComponent_div_1_Template(rf, ctx) {
2063
+ if (rf & 1) {
2064
+ i0.ɵɵelementStart(0, "div", 2);
2065
+ i0.ɵɵtemplate(1, ObjectSelectionOverlayComponent_div_1_div_1_Template, 5, 4, "div", 3);
2066
+ i0.ɵɵelementEnd();
2067
+ }
2068
+ if (rf & 2) {
2069
+ const ctx_r0 = i0.ɵɵnextContext();
2070
+ i0.ɵɵadvance(1);
2071
+ i0.ɵɵproperty("ngForOf", ctx_r0.selectedObject.attributes);
2072
+ }
2073
+ }
891
2074
  class ObjectSelectionOverlayComponent {
892
2075
  constructor(eventDisplay) {
893
2076
  this.eventDisplay = eventDisplay;
@@ -897,14 +2080,27 @@ class ObjectSelectionOverlayComponent {
897
2080
  this.eventDisplay.allowSelection(this.selectedObject);
898
2081
  }
899
2082
  }
900
- ObjectSelectionOverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ObjectSelectionOverlayComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
901
- ObjectSelectionOverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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" }] });
902
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ObjectSelectionOverlayComponent, decorators: [{
2083
+ ObjectSelectionOverlayComponent.ɵfac = function ObjectSelectionOverlayComponent_Factory(t) { return new (t || ObjectSelectionOverlayComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2084
+ 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) {
2085
+ if (rf & 1) {
2086
+ i0.ɵɵelementStart(0, "app-overlay", 0);
2087
+ i0.ɵɵtemplate(1, ObjectSelectionOverlayComponent_div_1_Template, 2, 1, "div", 1);
2088
+ i0.ɵɵelementEnd();
2089
+ }
2090
+ if (rf & 2) {
2091
+ i0.ɵɵproperty("overlayTitle", ctx.selectedObject.name)("active", !ctx.hiddenSelectedInfo);
2092
+ i0.ɵɵadvance(1);
2093
+ i0.ɵɵproperty("ngIf", ctx.selectedObject.attributes.length > 0);
2094
+ }
2095
+ }, 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}"] });
2096
+ (function () {
2097
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ObjectSelectionOverlayComponent, [{
903
2098
  type: Component,
904
2099
  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"] }]
905
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { hiddenSelectedInfo: [{
2100
+ }], function () { return [{ type: EventDisplayService }]; }, { hiddenSelectedInfo: [{
906
2101
  type: Input
907
- }] } });
2102
+ }] });
2103
+ })();
908
2104
 
909
2105
  class ObjectSelectionComponent {
910
2106
  constructor(overlay, eventDisplay) {
@@ -928,13 +2124,25 @@ class ObjectSelectionComponent {
928
2124
  this.eventDisplay.enableSelecting(!this.hiddenSelectedInfo);
929
2125
  }
930
2126
  }
931
- ObjectSelectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ObjectSelectionComponent, deps: [{ token: i1$1.Overlay }, { token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
932
- ObjectSelectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
933
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ObjectSelectionComponent, decorators: [{
2127
+ ObjectSelectionComponent.ɵfac = function ObjectSelectionComponent_Factory(t) { return new (t || ObjectSelectionComponent)(i0.ɵɵdirectiveInject(i1$1.Overlay), i0.ɵɵdirectiveInject(EventDisplayService)); };
2128
+ 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) {
2129
+ if (rf & 1) {
2130
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
2131
+ i0.ɵɵlistener("click", function ObjectSelectionComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleOverlay(); });
2132
+ i0.ɵɵelementEnd();
2133
+ }
2134
+ if (rf & 2) {
2135
+ i0.ɵɵproperty("active", !ctx.hiddenSelectedInfo);
2136
+ }
2137
+ }, dependencies: [MenuToggleComponent] });
2138
+ (function () {
2139
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ObjectSelectionComponent, [{
934
2140
  type: Component,
935
2141
  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" }]
936
- }], ctorParameters: function () { return [{ type: i1$1.Overlay }, { type: EventDisplayService }]; } });
2142
+ }], function () { return [{ type: i1$1.Overlay }, { type: EventDisplayService }]; }, null);
2143
+ })();
937
2144
 
2145
+ const _c0$5 = ["overlayWindow"];
938
2146
  class OverlayViewWindowComponent {
939
2147
  constructor(eventDisplay) {
940
2148
  this.eventDisplay = eventDisplay;
@@ -970,17 +2178,50 @@ class OverlayViewWindowComponent {
970
2178
  this.transparentBody = !this.transparentBody;
971
2179
  }
972
2180
  }
973
- OverlayViewWindowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OverlayViewWindowComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
974
- OverlayViewWindowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
975
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OverlayViewWindowComponent, decorators: [{
2181
+ OverlayViewWindowComponent.ɵfac = function OverlayViewWindowComponent_Factory(t) { return new (t || OverlayViewWindowComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2182
+ OverlayViewWindowComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OverlayViewWindowComponent, selectors: [["app-overlay-view-window"]], viewQuery: function OverlayViewWindowComponent_Query(rf, ctx) {
2183
+ if (rf & 1) {
2184
+ i0.ɵɵviewQuery(_c0$5, 5);
2185
+ }
2186
+ if (rf & 2) {
2187
+ let _t;
2188
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.overlayWindow = _t.first);
2189
+ }
2190
+ }, 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) {
2191
+ if (rf & 1) {
2192
+ i0.ɵɵelementStart(0, "app-overlay", 0)(1, "div", 1);
2193
+ i0.ɵɵelement(2, "canvas", 2, 3);
2194
+ i0.ɵɵelementStart(4, "div", 4)(5, "app-menu-toggle", 5);
2195
+ i0.ɵɵlistener("click", function OverlayViewWindowComponent_Template_app_menu_toggle_click_5_listener() { return ctx.toggleBgTransparency(); });
2196
+ i0.ɵɵelementEnd();
2197
+ i0.ɵɵelementStart(6, "app-menu-toggle", 6);
2198
+ i0.ɵɵlistener("click", function OverlayViewWindowComponent_Template_app_menu_toggle_click_6_listener() { return ctx.fixOverlayView(); });
2199
+ i0.ɵɵelementEnd();
2200
+ i0.ɵɵelementStart(7, "app-menu-toggle", 7);
2201
+ i0.ɵɵlistener("click", function OverlayViewWindowComponent_Template_app_menu_toggle_click_7_listener() { return ctx.switchOverlayView(); });
2202
+ i0.ɵɵelementEnd()()()();
2203
+ }
2204
+ if (rf & 2) {
2205
+ i0.ɵɵproperty("resizable", true)("transparentBody", ctx.transparentBody)("active", ctx.showOverlay);
2206
+ i0.ɵɵadvance(2);
2207
+ i0.ɵɵproperty("hidden", !ctx.showOverlay);
2208
+ i0.ɵɵadvance(4);
2209
+ i0.ɵɵproperty("matTooltip", (ctx.overlayViewFixed ? "Restore" : "Fix") + " overlay view")("active", ctx.overlayViewFixed);
2210
+ i0.ɵɵadvance(1);
2211
+ i0.ɵɵproperty("icon", ctx.orthographicView ? "orthographic" : "perspective")("matTooltip", "Switch to " + (ctx.orthographicView ? "orthographic" : "perspective") + " view");
2212
+ }
2213
+ }, 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}"] });
2214
+ (function () {
2215
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OverlayViewWindowComponent, [{
976
2216
  type: Component,
977
2217
  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"] }]
978
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { showOverlay: [{
2218
+ }], function () { return [{ type: EventDisplayService }]; }, { showOverlay: [{
979
2219
  type: Input
980
2220
  }], overlayWindow: [{
981
2221
  type: ViewChild,
982
2222
  args: ['overlayWindow']
983
- }] } });
2223
+ }] });
2224
+ })();
984
2225
 
985
2226
  class OverlayViewComponent {
986
2227
  constructor(overlay) {
@@ -1001,13 +2242,81 @@ class OverlayViewComponent {
1001
2242
  this.overlayWindow.instance.showOverlay = this.showOverlay;
1002
2243
  }
1003
2244
  }
1004
- OverlayViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OverlayViewComponent, deps: [{ token: i1$1.Overlay }], target: i0.ɵɵFactoryTarget.Component });
1005
- OverlayViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1006
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: OverlayViewComponent, decorators: [{
2245
+ OverlayViewComponent.ɵfac = function OverlayViewComponent_Factory(t) { return new (t || OverlayViewComponent)(i0.ɵɵdirectiveInject(i1$1.Overlay)); };
2246
+ 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) {
2247
+ if (rf & 1) {
2248
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
2249
+ i0.ɵɵlistener("click", function OverlayViewComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleOverlay(); });
2250
+ i0.ɵɵelementEnd();
2251
+ }
2252
+ if (rf & 2) {
2253
+ i0.ɵɵproperty("active", ctx.showOverlay);
2254
+ }
2255
+ }, dependencies: [MenuToggleComponent] });
2256
+ (function () {
2257
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OverlayViewComponent, [{
1007
2258
  type: Component,
1008
2259
  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" }]
1009
- }], ctorParameters: function () { return [{ type: i1$1.Overlay }]; } });
2260
+ }], function () { return [{ type: i1$1.Overlay }]; }, null);
2261
+ })();
1010
2262
 
2263
+ function TreeMenuItemComponent_ng_container_0_button_2_Template(rf, ctx) {
2264
+ if (rf & 1) {
2265
+ const _r4 = i0.ɵɵgetCurrentView();
2266
+ i0.ɵɵelementStart(0, "button", 7);
2267
+ 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); });
2268
+ i0.ɵɵelementStart(1, "mat-icon", 8);
2269
+ i0.ɵɵtext(2);
2270
+ i0.ɵɵelementEnd()();
2271
+ }
2272
+ if (rf & 2) {
2273
+ const ctx_r1 = i0.ɵɵnextContext(2);
2274
+ i0.ɵɵadvance(2);
2275
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.isExpanded ? "expand_more" : "chevron_right", " ");
2276
+ }
2277
+ }
2278
+ function TreeMenuItemComponent_ng_container_0_li_7_Template(rf, ctx) {
2279
+ if (rf & 1) {
2280
+ i0.ɵɵelementStart(0, "li");
2281
+ i0.ɵɵelement(1, "app-tree-menu-item", 9);
2282
+ i0.ɵɵelementEnd();
2283
+ }
2284
+ if (rf & 2) {
2285
+ const node_r5 = ctx.$implicit;
2286
+ i0.ɵɵadvance(1);
2287
+ i0.ɵɵproperty("node", node_r5);
2288
+ }
2289
+ }
2290
+ const _c0$4 = function (a0) { return { visible: a0 }; };
2291
+ function TreeMenuItemComponent_ng_container_0_Template(rf, ctx) {
2292
+ if (rf & 1) {
2293
+ const _r7 = i0.ɵɵgetCurrentView();
2294
+ i0.ɵɵelementContainerStart(0);
2295
+ i0.ɵɵelementStart(1, "div", 1);
2296
+ i0.ɵɵtemplate(2, TreeMenuItemComponent_ng_container_0_button_2_Template, 3, 1, "button", 2);
2297
+ i0.ɵɵelementStart(3, "div", 3);
2298
+ 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)); });
2299
+ i0.ɵɵtext(4);
2300
+ i0.ɵɵelementEnd()();
2301
+ i0.ɵɵelementStart(5, "ul", 4)(6, "div", 5);
2302
+ i0.ɵɵtemplate(7, TreeMenuItemComponent_ng_container_0_li_7_Template, 2, 1, "li", 6);
2303
+ i0.ɵɵelementEnd()();
2304
+ i0.ɵɵelementContainerEnd();
2305
+ }
2306
+ if (rf & 2) {
2307
+ const ctx_r0 = i0.ɵɵnextContext();
2308
+ i0.ɵɵadvance(1);
2309
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(5, _c0$4, ctx_r0.visible));
2310
+ i0.ɵɵadvance(1);
2311
+ i0.ɵɵproperty("ngIf", ctx_r0.node.children);
2312
+ i0.ɵɵadvance(2);
2313
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.node.name, " ");
2314
+ i0.ɵɵadvance(1);
2315
+ i0.ɵɵproperty("hidden", !ctx_r0.isExpanded);
2316
+ i0.ɵɵadvance(2);
2317
+ i0.ɵɵproperty("ngForOf", ctx_r0.node.children);
2318
+ }
2319
+ }
1011
2320
  class TreeMenuItemComponent {
1012
2321
  constructor(eventDisplay) {
1013
2322
  this.eventDisplay = eventDisplay;
@@ -1023,17 +2332,34 @@ class TreeMenuItemComponent {
1023
2332
  this.children.forEach((child) => child.toggleVisibility(visible));
1024
2333
  }
1025
2334
  }
1026
- TreeMenuItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: TreeMenuItemComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1027
- TreeMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1028
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: TreeMenuItemComponent, decorators: [{
2335
+ TreeMenuItemComponent.ɵfac = function TreeMenuItemComponent_Factory(t) { return new (t || TreeMenuItemComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2336
+ TreeMenuItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TreeMenuItemComponent, selectors: [["app-tree-menu-item"]], viewQuery: function TreeMenuItemComponent_Query(rf, ctx) {
2337
+ if (rf & 1) {
2338
+ i0.ɵɵviewQuery(TreeMenuItemComponent, 5);
2339
+ }
2340
+ if (rf & 2) {
2341
+ let _t;
2342
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.children = _t);
2343
+ }
2344
+ }, 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) {
2345
+ if (rf & 1) {
2346
+ i0.ɵɵtemplate(0, TreeMenuItemComponent_ng_container_0_Template, 8, 7, "ng-container", 0);
2347
+ }
2348
+ if (rf & 2) {
2349
+ i0.ɵɵproperty("ngIf", ctx.node);
2350
+ }
2351
+ }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i2$2.MatIconButton, i4$2.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}"] });
2352
+ (function () {
2353
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TreeMenuItemComponent, [{
1029
2354
  type: Component,
1030
2355
  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"] }]
1031
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { children: [{
2356
+ }], function () { return [{ type: EventDisplayService }]; }, { children: [{
1032
2357
  type: ViewChildren,
1033
2358
  args: [TreeMenuItemComponent]
1034
2359
  }], node: [{
1035
2360
  type: Input
1036
- }] } });
2361
+ }] });
2362
+ })();
1037
2363
 
1038
2364
  class TreeMenuComponent {
1039
2365
  constructor() {
@@ -1096,13 +2422,55 @@ class TreeMenuComponent {
1096
2422
  }
1097
2423
  ngOnInit() { }
1098
2424
  }
1099
- TreeMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: TreeMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1100
- TreeMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: TreeMenuComponent, decorators: [{
2425
+ TreeMenuComponent.ɵfac = function TreeMenuComponent_Factory(t) { return new (t || TreeMenuComponent)(); };
2426
+ 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) {
2427
+ if (rf & 1) {
2428
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
2429
+ i0.ɵɵelement(2, "app-tree-menu-item", 2);
2430
+ i0.ɵɵelementEnd()();
2431
+ }
2432
+ if (rf & 2) {
2433
+ i0.ɵɵadvance(2);
2434
+ i0.ɵɵproperty("node", ctx.rootNode);
2435
+ }
2436
+ }, 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}"] });
2437
+ (function () {
2438
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TreeMenuComponent, [{
1102
2439
  type: Component,
1103
2440
  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"] }]
1104
- }], ctorParameters: function () { return []; } });
2441
+ }], function () { return []; }, null);
2442
+ })();
1105
2443
 
2444
+ function ViewOptionsComponent_button_10__svg_svg_1_Template(rf, ctx) {
2445
+ if (rf & 1) {
2446
+ i0.ɵɵnamespaceSVG();
2447
+ i0.ɵɵelementStart(0, "svg", 8);
2448
+ i0.ɵɵelement(1, "use");
2449
+ i0.ɵɵelementEnd();
2450
+ }
2451
+ if (rf & 2) {
2452
+ const view_r4 = i0.ɵɵnextContext().$implicit;
2453
+ i0.ɵɵadvance(1);
2454
+ i0.ɵɵattributeInterpolate2("href", "assets/icons/", view_r4.icon, ".svg#", view_r4.icon, "");
2455
+ }
2456
+ }
2457
+ function ViewOptionsComponent_button_10_Template(rf, ctx) {
2458
+ if (rf & 1) {
2459
+ const _r8 = i0.ɵɵgetCurrentView();
2460
+ i0.ɵɵelementStart(0, "button", 1);
2461
+ 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)); });
2462
+ i0.ɵɵtemplate(1, ViewOptionsComponent_button_10__svg_svg_1_Template, 2, 2, "svg", 7);
2463
+ i0.ɵɵtext(2);
2464
+ i0.ɵɵelementEnd();
2465
+ }
2466
+ if (rf & 2) {
2467
+ const view_r4 = ctx.$implicit;
2468
+ i0.ɵɵadvance(1);
2469
+ i0.ɵɵproperty("ngIf", view_r4.icon);
2470
+ i0.ɵɵadvance(1);
2471
+ i0.ɵɵtextInterpolate1(" ", view_r4.name, " ");
2472
+ }
2473
+ }
1106
2474
  class ViewOptionsComponent {
1107
2475
  constructor(eventDisplay) {
1108
2476
  this.eventDisplay = eventDisplay;
@@ -1123,12 +2491,40 @@ class ViewOptionsComponent {
1123
2491
  this.eventDisplay.getUIManager().setShowGrid(value);
1124
2492
  }
1125
2493
  }
1126
- ViewOptionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ViewOptionsComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1127
- ViewOptionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1128
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ViewOptionsComponent, decorators: [{
2494
+ ViewOptionsComponent.ɵfac = function ViewOptionsComponent_Factory(t) { return new (t || ViewOptionsComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2495
+ 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) {
2496
+ if (rf & 1) {
2497
+ const _r9 = i0.ɵɵgetCurrentView();
2498
+ i0.ɵɵelementStart(0, "mat-menu", null, 0)(2, "button", 1);
2499
+ 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()); });
2500
+ i0.ɵɵelementStart(3, "mat-checkbox", 2, 3);
2501
+ 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); });
2502
+ i0.ɵɵtext(5, "Show Grid ");
2503
+ i0.ɵɵelementEnd()();
2504
+ i0.ɵɵelementStart(6, "button", 1);
2505
+ 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()); });
2506
+ i0.ɵɵelementStart(7, "mat-checkbox", 2, 4);
2507
+ 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); });
2508
+ i0.ɵɵtext(9, "Show Axis ");
2509
+ i0.ɵɵelementEnd()();
2510
+ i0.ɵɵtemplate(10, ViewOptionsComponent_button_10_Template, 3, 2, "button", 5);
2511
+ i0.ɵɵelementEnd();
2512
+ i0.ɵɵelement(11, "app-menu-toggle", 6);
2513
+ }
2514
+ if (rf & 2) {
2515
+ const _r0 = i0.ɵɵreference(1);
2516
+ i0.ɵɵadvance(10);
2517
+ i0.ɵɵproperty("ngForOf", ctx.views);
2518
+ i0.ɵɵadvance(1);
2519
+ i0.ɵɵproperty("matMenuTriggerFor", _r0)("active", false);
2520
+ }
2521
+ }, dependencies: [i2.NgForOf, i2.NgIf, i3$1.MatMenu, i3$1.MatMenuItem, i3$1.MatMenuTrigger, i4$1.MatCheckbox, MenuToggleComponent], styles: [".view-icon[_ngcontent-%COMP%]{width:1.2rem;height:1.2rem;margin-right:.5rem}"] });
2522
+ (function () {
2523
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ViewOptionsComponent, [{
1129
2524
  type: Component,
1130
2525
  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"] }]
1131
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
2526
+ }], function () { return [{ type: EventDisplayService }]; }, null);
2527
+ })();
1132
2528
 
1133
2529
  class VrToggleComponent {
1134
2530
  constructor(eventDisplay) {
@@ -1160,13 +2556,46 @@ class VrToggleComponent {
1160
2556
  }
1161
2557
  }
1162
2558
  }
1163
- VrToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: VrToggleComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1164
- VrToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1165
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: VrToggleComponent, decorators: [{
2559
+ VrToggleComponent.ɵfac = function VrToggleComponent_Factory(t) { return new (t || VrToggleComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2560
+ 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) {
2561
+ if (rf & 1) {
2562
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
2563
+ i0.ɵɵlistener("click", function VrToggleComponent_Template_app_menu_toggle_click_0_listener() { return ctx.vrSupported && ctx.toggleVr(); });
2564
+ i0.ɵɵelementEnd();
2565
+ }
2566
+ if (rf & 2) {
2567
+ i0.ɵɵproperty("disabled", !ctx.vrSupported)("active", ctx.vrActive)("tooltip", ctx.vrSupported ? ctx.vrActive ? "Exit VR" : "Enter VR" : "VR not supported");
2568
+ }
2569
+ }, dependencies: [MenuToggleComponent] });
2570
+ (function () {
2571
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(VrToggleComponent, [{
1166
2572
  type: Component,
1167
2573
  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" }]
1168
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
2574
+ }], function () { return [{ type: EventDisplayService }]; }, null);
2575
+ })();
1169
2576
 
2577
+ function ArToggleComponent_ng_container_2_Template(rf, ctx) {
2578
+ if (rf & 1) {
2579
+ const _r4 = i0.ɵɵgetCurrentView();
2580
+ i0.ɵɵelementContainerStart(0);
2581
+ i0.ɵɵelementStart(1, "button", 4);
2582
+ 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)); });
2583
+ i0.ɵɵtext(2, "AR with overlays");
2584
+ i0.ɵɵelementEnd();
2585
+ i0.ɵɵelementStart(3, "button", 4);
2586
+ 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)); });
2587
+ i0.ɵɵtext(4, "AR without overlays");
2588
+ i0.ɵɵelementEnd();
2589
+ i0.ɵɵelementContainerEnd();
2590
+ }
2591
+ }
2592
+ function ArToggleComponent_button_3_Template(rf, ctx) {
2593
+ if (rf & 1) {
2594
+ i0.ɵɵelementStart(0, "button", 5);
2595
+ i0.ɵɵtext(1, "AR not supported");
2596
+ i0.ɵɵelementEnd();
2597
+ }
2598
+ }
1170
2599
  class ArToggleComponent {
1171
2600
  constructor(eventDisplay) {
1172
2601
  var _a, _b;
@@ -1198,12 +2627,33 @@ class ArToggleComponent {
1198
2627
  }
1199
2628
  }
1200
2629
  }
1201
- ArToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ArToggleComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1202
- ArToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1203
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ArToggleComponent, decorators: [{
2630
+ ArToggleComponent.ɵfac = function ArToggleComponent_Factory(t) { return new (t || ArToggleComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2631
+ 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) {
2632
+ if (rf & 1) {
2633
+ i0.ɵɵelementStart(0, "mat-menu", null, 0);
2634
+ i0.ɵɵtemplate(2, ArToggleComponent_ng_container_2_Template, 5, 0, "ng-container", 1);
2635
+ i0.ɵɵtemplate(3, ArToggleComponent_button_3_Template, 2, 0, "button", 2);
2636
+ i0.ɵɵelementEnd();
2637
+ i0.ɵɵelementStart(4, "app-menu-toggle", 3);
2638
+ i0.ɵɵlistener("click", function ArToggleComponent_Template_app_menu_toggle_click_4_listener() { return ctx.arSupported && (ctx.arActive ? ctx.toggleAr() : null); });
2639
+ i0.ɵɵelementEnd();
2640
+ }
2641
+ if (rf & 2) {
2642
+ const _r0 = i0.ɵɵreference(1);
2643
+ i0.ɵɵadvance(2);
2644
+ i0.ɵɵproperty("ngIf", ctx.arSupported);
2645
+ i0.ɵɵadvance(1);
2646
+ i0.ɵɵproperty("ngIf", !ctx.arSupported);
2647
+ i0.ɵɵadvance(1);
2648
+ i0.ɵɵproperty("matMenuTriggerFor", _r0)("disabled", !ctx.arSupported)("active", ctx.arActive)("tooltip", ctx.arSupported ? ctx.arActive ? "Exit AR" : "Enter AR" : "AR not supported");
2649
+ }
2650
+ }, dependencies: [i2.NgIf, i3$1.MatMenu, i3$1.MatMenuItem, i3$1.MatMenuTrigger, MenuToggleComponent] });
2651
+ (function () {
2652
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArToggleComponent, [{
1204
2653
  type: Component,
1205
2654
  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" }]
1206
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
2655
+ }], function () { return [{ type: EventDisplayService }]; }, null);
2656
+ })();
1207
2657
 
1208
2658
  /**
1209
2659
  * Component for adding zoom controls for the main and overlay cameras.
@@ -1255,12 +2705,29 @@ class ZoomControlsComponent {
1255
2705
  clearTimeout(this.zoomTimeout);
1256
2706
  }
1257
2707
  }
1258
- ZoomControlsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ZoomControlsComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1259
- ZoomControlsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1260
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ZoomControlsComponent, decorators: [{
2708
+ ZoomControlsComponent.ɵfac = function ZoomControlsComponent_Factory(t) { return new (t || ZoomControlsComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2709
+ 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) {
2710
+ if (rf & 1) {
2711
+ i0.ɵɵelementStart(0, "div", 0)(1, "app-menu-toggle", 1);
2712
+ 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(); });
2713
+ i0.ɵɵelementEnd();
2714
+ i0.ɵɵelementStart(2, "app-menu-toggle", 2);
2715
+ 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(); });
2716
+ i0.ɵɵelementEnd()();
2717
+ }
2718
+ if (rf & 2) {
2719
+ i0.ɵɵadvance(1);
2720
+ i0.ɵɵproperty("active", false);
2721
+ i0.ɵɵadvance(1);
2722
+ i0.ɵɵproperty("active", false);
2723
+ }
2724
+ }, dependencies: [MenuToggleComponent] });
2725
+ (function () {
2726
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ZoomControlsComponent, [{
1261
2727
  type: Component,
1262
2728
  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" }]
1263
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
2729
+ }], function () { return [{ type: EventDisplayService }]; }, null);
2730
+ })();
1264
2731
 
1265
2732
  class SSModeComponent {
1266
2733
  constructor() {
@@ -1295,12 +2762,111 @@ class SSModeComponent {
1295
2762
  }
1296
2763
  }
1297
2764
  }
1298
- SSModeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: SSModeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1299
- SSModeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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 });
1300
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: SSModeComponent, decorators: [{
2765
+ SSModeComponent.ɵfac = function SSModeComponent_Factory(t) { return new (t || SSModeComponent)(); };
2766
+ SSModeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SSModeComponent, selectors: [["app-ss-mode"]], decls: 1, vars: 1, consts: [["tooltip", "Screenshot mode: phoenix will become fullscreen and the menu is suppressed", "icon", "ss-mode", 3, "active", "click"]], template: function SSModeComponent_Template(rf, ctx) {
2767
+ if (rf & 1) {
2768
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
2769
+ i0.ɵɵlistener("click", function SSModeComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleSSMode(); });
2770
+ i0.ɵɵelementEnd();
2771
+ }
2772
+ if (rf & 2) {
2773
+ i0.ɵɵproperty("active", ctx.ssMode);
2774
+ }
2775
+ }, 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 });
2776
+ (function () {
2777
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SSModeComponent, [{
1301
2778
  type: Component,
1302
- 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"] }]
1303
- }] });
2779
+ args: [{ selector: 'app-ss-mode', encapsulation: ViewEncapsulation.None, template: "<app-menu-toggle\n tooltip=\"Screenshot mode: phoenix will become fullscreen and the menu is suppressed\"\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"] }]
2780
+ }], null, null);
2781
+ })();
2782
+
2783
+ function MakePictureComponent_mat_radio_button_14_Template(rf, ctx) {
2784
+ if (rf & 1) {
2785
+ i0.ɵɵelementStart(0, "mat-radio-button", 12);
2786
+ i0.ɵɵtext(1);
2787
+ i0.ɵɵelementEnd();
2788
+ }
2789
+ if (rf & 2) {
2790
+ const fitting_r4 = ctx.$implicit;
2791
+ i0.ɵɵproperty("value", fitting_r4);
2792
+ i0.ɵɵadvance(1);
2793
+ i0.ɵɵtextInterpolate1("", fitting_r4, " ");
2794
+ }
2795
+ }
2796
+ class MakePictureComponent {
2797
+ constructor(eventDisplay) {
2798
+ this.eventDisplay = eventDisplay;
2799
+ this.fittings = ['Crop', 'Stretch'];
2800
+ this.fitting = 'Crop';
2801
+ this.width = 3840;
2802
+ this.height = 2160;
2803
+ }
2804
+ ngOnInit() { }
2805
+ setWidth(value) {
2806
+ this.width = value;
2807
+ }
2808
+ setHeight(value) {
2809
+ this.height = value;
2810
+ }
2811
+ makePicture() {
2812
+ this.eventDisplay.makeScreenShot(this.width, this.height, this.fitting);
2813
+ }
2814
+ }
2815
+ MakePictureComponent.ɵfac = function MakePictureComponent_Factory(t) { return new (t || MakePictureComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2816
+ MakePictureComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MakePictureComponent, selectors: [["app-make-picture"]], decls: 20, vars: 5, consts: [[1, "mat-menu"], ["menu", ""], ["mat-menu-item", "", 1, "size-input", 3, "click"], ["mapInput", "", "type", "number", 3, "value", "change", "click"], ["width", ""], ["height", ""], ["mat-menu-item", "", 3, "click"], [1, "fitting-radios", 3, "ngModel", "ngModelChange"], [3, "value", 4, "ngFor", "ngForOf"], ["mat-menu-item", "", 1, "make-picture", 3, "click"], ["tooltip", "Creates a picture from the current view: directly saves a png of arbitrary size from the current view", "icon", "png", 3, "matMenuTriggerFor"], ["hidden", "", "id", "screenshotCanvas"], [3, "value"]], template: function MakePictureComponent_Template(rf, ctx) {
2817
+ if (rf & 1) {
2818
+ const _r5 = i0.ɵɵgetCurrentView();
2819
+ i0.ɵɵelementStart(0, "mat-menu", 0, 1)(2, "button", 2);
2820
+ i0.ɵɵlistener("click", function MakePictureComponent_Template_button_click_2_listener($event) { return $event.stopPropagation(); });
2821
+ i0.ɵɵelementStart(3, "label");
2822
+ i0.ɵɵtext(4, "width");
2823
+ i0.ɵɵelementEnd();
2824
+ i0.ɵɵelementStart(5, "input", 3, 4);
2825
+ i0.ɵɵlistener("change", function MakePictureComponent_Template_input_change_5_listener() { i0.ɵɵrestoreView(_r5); const _r1 = i0.ɵɵreference(6); return i0.ɵɵresetView(ctx.setWidth(_r1.value)); })("click", function MakePictureComponent_Template_input_click_5_listener($event) { return $event.stopPropagation(); });
2826
+ i0.ɵɵelementEnd()();
2827
+ i0.ɵɵelementStart(7, "button", 2);
2828
+ i0.ɵɵlistener("click", function MakePictureComponent_Template_button_click_7_listener($event) { return $event.stopPropagation(); });
2829
+ i0.ɵɵelementStart(8, "label");
2830
+ i0.ɵɵtext(9, "height");
2831
+ i0.ɵɵelementEnd();
2832
+ i0.ɵɵelementStart(10, "input", 3, 5);
2833
+ i0.ɵɵlistener("change", function MakePictureComponent_Template_input_change_10_listener() { i0.ɵɵrestoreView(_r5); const _r2 = i0.ɵɵreference(11); return i0.ɵɵresetView(ctx.setHeight(_r2.value)); })("click", function MakePictureComponent_Template_input_click_10_listener($event) { return $event.stopPropagation(); });
2834
+ i0.ɵɵelementEnd()();
2835
+ i0.ɵɵelementStart(12, "button", 6);
2836
+ i0.ɵɵlistener("click", function MakePictureComponent_Template_button_click_12_listener($event) { return $event.stopPropagation(); });
2837
+ i0.ɵɵelementStart(13, "mat-radio-group", 7);
2838
+ i0.ɵɵlistener("ngModelChange", function MakePictureComponent_Template_mat_radio_group_ngModelChange_13_listener($event) { return ctx.fitting = $event; });
2839
+ i0.ɵɵtemplate(14, MakePictureComponent_mat_radio_button_14_Template, 2, 2, "mat-radio-button", 8);
2840
+ i0.ɵɵelementEnd()();
2841
+ i0.ɵɵelementStart(15, "button", 9);
2842
+ i0.ɵɵlistener("click", function MakePictureComponent_Template_button_click_15_listener() { return ctx.makePicture(); });
2843
+ i0.ɵɵtext(16, " Create picture ");
2844
+ i0.ɵɵelementEnd()();
2845
+ i0.ɵɵelement(17, "app-menu-toggle", 10);
2846
+ i0.ɵɵelementStart(18, "div");
2847
+ i0.ɵɵelement(19, "canvas", 11);
2848
+ i0.ɵɵelementEnd();
2849
+ }
2850
+ if (rf & 2) {
2851
+ const _r0 = i0.ɵɵreference(1);
2852
+ i0.ɵɵadvance(5);
2853
+ i0.ɵɵproperty("value", 3840);
2854
+ i0.ɵɵadvance(5);
2855
+ i0.ɵɵproperty("value", 2610);
2856
+ i0.ɵɵadvance(3);
2857
+ i0.ɵɵproperty("ngModel", ctx.fitting);
2858
+ i0.ɵɵadvance(1);
2859
+ i0.ɵɵproperty("ngForOf", ctx.fittings);
2860
+ i0.ɵɵadvance(3);
2861
+ i0.ɵɵproperty("matMenuTriggerFor", _r0);
2862
+ }
2863
+ }, dependencies: [i2.NgForOf, i3.NgControlStatus, i3.NgModel, i3$1.MatMenu, i3$1.MatMenuItem, i3$1.MatMenuTrigger, i5.MatRadioGroup, i5.MatRadioButton, MenuToggleComponent], styles: [".size-input{background:transparent;color:var(--phoenix-text-color);text-align:center}.size-input label{width:60px}.size-input input{background:transparent;color:var(--phoenix-text-color);width:80px}.make-picture{text-align:center;display:block}.make-picture span{padding:5px 25px;border:2px solid var(--phoenix-text-color);border-radius:8px}\n"], encapsulation: 2 });
2864
+ (function () {
2865
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MakePictureComponent, [{
2866
+ type: Component,
2867
+ args: [{ selector: 'app-make-picture', encapsulation: ViewEncapsulation.None, template: "<mat-menu class=\"mat-menu\" #menu>\n <button mat-menu-item (click)=\"$event.stopPropagation()\" class=\"size-input\">\n <label>width</label>\n <input\n #width\n mapInput\n type=\"number\"\n [value]=\"3840\"\n (change)=\"setWidth(width.value)\"\n (click)=\"$event.stopPropagation()\"\n />\n </button>\n <button mat-menu-item (click)=\"$event.stopPropagation()\" class=\"size-input\">\n <label>height</label>\n <input\n #height\n mapInput\n type=\"number\"\n [value]=\"2610\"\n (change)=\"setHeight(height.value)\"\n (click)=\"$event.stopPropagation()\"\n />\n </button>\n <button mat-menu-item (click)=\"$event.stopPropagation()\">\n <mat-radio-group [(ngModel)]=\"fitting\" class=\"fitting-radios\">\n <mat-radio-button *ngFor=\"let fitting of fittings\" [value]=\"fitting\"\n >{{ fitting }}\n </mat-radio-button>\n </mat-radio-group>\n </button>\n <button mat-menu-item class=\"make-picture\" (click)=\"makePicture()\">\n Create picture\n </button>\n</mat-menu>\n<app-menu-toggle\n [matMenuTriggerFor]=\"menu\"\n tooltip=\"Creates a picture from the current view: directly saves a png of arbitrary size from the current view\"\n icon=\"png\"\n>\n</app-menu-toggle>\n<div>\n <canvas hidden id=\"screenshotCanvas\"></canvas>\n</div>\n", styles: [".size-input{background:transparent;color:var(--phoenix-text-color);text-align:center}.size-input label{width:60px}.size-input input{background:transparent;color:var(--phoenix-text-color);width:80px}.make-picture{text-align:center;display:block}.make-picture span{padding:5px 25px;border:2px solid var(--phoenix-text-color);border-radius:8px}\n"] }]
2868
+ }], function () { return [{ type: EventDisplayService }]; }, null);
2869
+ })();
1304
2870
 
1305
2871
  class PerformanceToggleComponent {
1306
2872
  constructor(eventDisplay) {
@@ -1312,25 +2878,61 @@ class PerformanceToggleComponent {
1312
2878
  this.eventDisplay.getThreeManager().setAntialiasing(!this.performanceMode);
1313
2879
  }
1314
2880
  }
1315
- PerformanceToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: PerformanceToggleComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1316
- PerformanceToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1317
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: PerformanceToggleComponent, decorators: [{
2881
+ PerformanceToggleComponent.ɵfac = function PerformanceToggleComponent_Factory(t) { return new (t || PerformanceToggleComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
2882
+ 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) {
2883
+ if (rf & 1) {
2884
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
2885
+ i0.ɵɵlistener("click", function PerformanceToggleComponent_Template_app_menu_toggle_click_0_listener() { return ctx.togglePerformance(); });
2886
+ i0.ɵɵelementEnd();
2887
+ }
2888
+ if (rf & 2) {
2889
+ i0.ɵɵproperty("active", ctx.performanceMode);
2890
+ }
2891
+ }, dependencies: [MenuToggleComponent] });
2892
+ (function () {
2893
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PerformanceToggleComponent, [{
1318
2894
  type: Component,
1319
2895
  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" }]
1320
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; } });
2896
+ }], function () { return [{ type: EventDisplayService }]; }, null);
2897
+ })();
1321
2898
 
2899
+ const _c0$3 = function (a0) { return { "ui-menu-hidden": a0 }; };
2900
+ const _c1$1 = ["*"];
1322
2901
  class UiMenuWrapperComponent {
1323
2902
  constructor() {
1324
2903
  this.hideUIMenu = false;
1325
2904
  }
1326
2905
  }
1327
- UiMenuWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: UiMenuWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1328
- UiMenuWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1329
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: UiMenuWrapperComponent, decorators: [{
2906
+ UiMenuWrapperComponent.ɵfac = function UiMenuWrapperComponent_Factory(t) { return new (t || UiMenuWrapperComponent)(); };
2907
+ 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) {
2908
+ if (rf & 1) {
2909
+ i0.ɵɵprojectionDef();
2910
+ i0.ɵɵelementStart(0, "div", 0)(1, "button", 1);
2911
+ i0.ɵɵlistener("click", function UiMenuWrapperComponent_Template_button_click_1_listener() { return ctx.hideUIMenu = !ctx.hideUIMenu; });
2912
+ i0.ɵɵnamespaceSVG();
2913
+ i0.ɵɵelementStart(2, "svg");
2914
+ i0.ɵɵelement(3, "use", 2);
2915
+ i0.ɵɵelementEnd()();
2916
+ i0.ɵɵnamespaceHTML();
2917
+ i0.ɵɵelementStart(4, "div", 3);
2918
+ i0.ɵɵprojection(5);
2919
+ i0.ɵɵelementEnd()();
2920
+ }
2921
+ if (rf & 2) {
2922
+ i0.ɵɵadvance(1);
2923
+ i0.ɵɵproperty("matTooltip", ctx.hideUIMenu ? "Show toolbar" : "Hide toolbar")("ngClass", i0.ɵɵpureFunction1(3, _c0$3, ctx.hideUIMenu));
2924
+ i0.ɵɵadvance(3);
2925
+ i0.ɵɵproperty("hidden", ctx.hideUIMenu);
2926
+ }
2927
+ }, 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}"] });
2928
+ (function () {
2929
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UiMenuWrapperComponent, [{
1330
2930
  type: Component,
1331
2931
  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"] }]
1332
- }] });
2932
+ }], null, null);
2933
+ })();
1333
2934
 
2935
+ const _c0$2 = ["qrcodeCanvas"];
1334
2936
  class ShareLinkDialogComponent {
1335
2937
  constructor(dialogRef) {
1336
2938
  this.dialogRef = dialogRef;
@@ -1387,15 +2989,106 @@ class ShareLinkDialogComponent {
1387
2989
  QRCode.toCanvas(this.qrcodeCanvas.nativeElement, link);
1388
2990
  }
1389
2991
  }
1390
- ShareLinkDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ShareLinkDialogComponent, deps: [{ token: i1$2.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
1391
- ShareLinkDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1392
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ShareLinkDialogComponent, decorators: [{
2992
+ ShareLinkDialogComponent.ɵfac = function ShareLinkDialogComponent_Factory(t) { return new (t || ShareLinkDialogComponent)(i0.ɵɵdirectiveInject(i1$2.MatDialogRef)); };
2993
+ ShareLinkDialogComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ShareLinkDialogComponent, selectors: [["app-share-link-dialog"]], viewQuery: function ShareLinkDialogComponent_Query(rf, ctx) {
2994
+ if (rf & 1) {
2995
+ i0.ɵɵviewQuery(_c0$2, 5);
2996
+ }
2997
+ if (rf & 2) {
2998
+ let _t;
2999
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.qrcodeCanvas = _t.first);
3000
+ }
3001
+ }, 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) {
3002
+ if (rf & 1) {
3003
+ i0.ɵɵelementStart(0, "div", 0)(1, "h1", 1);
3004
+ i0.ɵɵtext(2, "Create shareable link");
3005
+ i0.ɵɵelementEnd();
3006
+ i0.ɵɵelementStart(3, "div", 2)(4, "h5");
3007
+ i0.ɵɵtext(5, "URL options");
3008
+ i0.ɵɵelementEnd();
3009
+ i0.ɵɵelementStart(6, "div", 3)(7, "label", 4);
3010
+ i0.ɵɵtext(8, "Event data file (URL or path)");
3011
+ i0.ɵɵelementEnd();
3012
+ i0.ɵɵelementStart(9, "input", 5);
3013
+ i0.ɵɵlistener("input", function ShareLinkDialogComponent_Template_input_input_9_listener($event) { return ctx.setOptionValue("file", $event.target.value); });
3014
+ i0.ɵɵelementEnd()();
3015
+ i0.ɵɵelementStart(10, "div", 6)(11, "label", 7);
3016
+ i0.ɵɵtext(12, "Event data type");
3017
+ i0.ɵɵelementEnd();
3018
+ i0.ɵɵelementStart(13, "select", 8);
3019
+ i0.ɵɵlistener("input", function ShareLinkDialogComponent_Template_select_input_13_listener($event) { return ctx.setOptionValue("type", $event.target.value); });
3020
+ i0.ɵɵelementStart(14, "option", 9);
3021
+ i0.ɵɵtext(15, "Select");
3022
+ i0.ɵɵelementEnd();
3023
+ i0.ɵɵelementStart(16, "option", 10);
3024
+ i0.ɵɵtext(17, "JiveXML");
3025
+ i0.ɵɵelementEnd();
3026
+ i0.ɵɵelementStart(18, "option", 11);
3027
+ i0.ɵɵtext(19, "JSON");
3028
+ i0.ɵɵelementEnd()()();
3029
+ i0.ɵɵelementStart(20, "div", 6)(21, "label", 12);
3030
+ i0.ɵɵtext(22, "Configuration (URL or path)");
3031
+ i0.ɵɵelementEnd();
3032
+ i0.ɵɵelementStart(23, "input", 13);
3033
+ i0.ɵɵlistener("input", function ShareLinkDialogComponent_Template_input_input_23_listener($event) { return ctx.setOptionValue("config", $event.target.value); });
3034
+ i0.ɵɵelementEnd()();
3035
+ i0.ɵɵelementStart(24, "div", 6)(25, "mat-checkbox", 14);
3036
+ i0.ɵɵlistener("change", function ShareLinkDialogComponent_Template_mat_checkbox_change_25_listener($event) { return ctx.setOptionValue("hideWidgets", $event.checked); });
3037
+ i0.ɵɵtext(26, " Hide all widgets ");
3038
+ i0.ɵɵelementEnd()();
3039
+ i0.ɵɵelementStart(27, "h5");
3040
+ i0.ɵɵtext(28, "Share");
3041
+ i0.ɵɵelementEnd();
3042
+ i0.ɵɵelementStart(29, "div", 15)(30, "span");
3043
+ i0.ɵɵtext(31);
3044
+ i0.ɵɵelementEnd();
3045
+ i0.ɵɵelementStart(32, "button", 16);
3046
+ i0.ɵɵlistener("click", function ShareLinkDialogComponent_Template_button_click_32_listener($event) { return ctx.copyText(ctx.shareLink.value, $event.target); });
3047
+ i0.ɵɵtext(33, " COPY ");
3048
+ i0.ɵɵelementEnd()();
3049
+ i0.ɵɵelementStart(34, "h5");
3050
+ i0.ɵɵtext(35, "Embed");
3051
+ i0.ɵɵelementEnd();
3052
+ i0.ɵɵelementStart(36, "div", 15)(37, "span");
3053
+ i0.ɵɵtext(38);
3054
+ i0.ɵɵelementEnd();
3055
+ i0.ɵɵelementStart(39, "button", 16);
3056
+ i0.ɵɵlistener("click", function ShareLinkDialogComponent_Template_button_click_39_listener($event) { return ctx.copyText(ctx.embedLink, $event.target); });
3057
+ i0.ɵɵtext(40, " COPY ");
3058
+ i0.ɵɵelementEnd()();
3059
+ i0.ɵɵelementStart(41, "h5");
3060
+ i0.ɵɵtext(42, "QR Code");
3061
+ i0.ɵɵelementEnd();
3062
+ i0.ɵɵelementStart(43, "div", 17);
3063
+ i0.ɵɵelement(44, "canvas", null, 18);
3064
+ i0.ɵɵelementEnd()();
3065
+ i0.ɵɵelementStart(46, "div", 19)(47, "button", 20);
3066
+ i0.ɵɵlistener("click", function ShareLinkDialogComponent_Template_button_click_47_listener() { return ctx.onClose(); });
3067
+ i0.ɵɵtext(48, "Close");
3068
+ i0.ɵɵelementEnd()()();
3069
+ }
3070
+ if (rf & 2) {
3071
+ i0.ɵɵadvance(9);
3072
+ i0.ɵɵproperty("value", ctx.urlOptions.file);
3073
+ i0.ɵɵadvance(14);
3074
+ i0.ɵɵproperty("value", ctx.urlOptions.config);
3075
+ i0.ɵɵadvance(2);
3076
+ i0.ɵɵproperty("checked", ctx.urlOptions.hideWidgets);
3077
+ i0.ɵɵadvance(6);
3078
+ i0.ɵɵtextInterpolate(ctx.shareLink.value);
3079
+ i0.ɵɵadvance(7);
3080
+ i0.ɵɵtextInterpolate(ctx.embedLink);
3081
+ }
3082
+ }, dependencies: [i1$2.MatDialogTitle, i1$2.MatDialogContent, i1$2.MatDialogActions, i2$2.MatButton, i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i4$1.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)}"] });
3083
+ (function () {
3084
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ShareLinkDialogComponent, [{
1393
3085
  type: Component,
1394
3086
  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"] }]
1395
- }], ctorParameters: function () { return [{ type: i1$2.MatDialogRef }]; }, propDecorators: { qrcodeCanvas: [{
3087
+ }], function () { return [{ type: i1$2.MatDialogRef }]; }, { qrcodeCanvas: [{
1396
3088
  type: ViewChild,
1397
3089
  args: ['qrcodeCanvas']
1398
- }] } });
3090
+ }] });
3091
+ })();
1399
3092
 
1400
3093
  class ShareLinkComponent {
1401
3094
  constructor(dialog) {
@@ -1405,30 +3098,103 @@ class ShareLinkComponent {
1405
3098
  this.dialog.open(ShareLinkDialogComponent);
1406
3099
  }
1407
3100
  }
1408
- ShareLinkComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ShareLinkComponent, deps: [{ token: i1$2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
1409
- ShareLinkComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1410
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ShareLinkComponent, decorators: [{
3101
+ ShareLinkComponent.ɵfac = function ShareLinkComponent_Factory(t) { return new (t || ShareLinkComponent)(i0.ɵɵdirectiveInject(i1$2.MatDialog)); };
3102
+ 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) {
3103
+ if (rf & 1) {
3104
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
3105
+ i0.ɵɵlistener("click", function ShareLinkComponent_Template_app_menu_toggle_click_0_listener() { return ctx.openShareLinkDialog(); });
3106
+ i0.ɵɵelementEnd();
3107
+ }
3108
+ if (rf & 2) {
3109
+ i0.ɵɵproperty("active", false);
3110
+ }
3111
+ }, dependencies: [MenuToggleComponent] });
3112
+ (function () {
3113
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ShareLinkComponent, [{
1411
3114
  type: Component,
1412
3115
  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" }]
1413
- }], ctorParameters: function () { return [{ type: i1$2.MatDialog }]; } });
3116
+ }], function () { return [{ type: i1$2.MatDialog }]; }, null);
3117
+ })();
1414
3118
 
3119
+ const _c0$1 = ["*"];
1415
3120
  class UiMenuComponent {
1416
3121
  constructor() {
1417
3122
  this.eventDataImportOptions = Object.values(EventDataFormat);
1418
3123
  this.animationPresets = defaultAnimationPresets;
1419
3124
  }
1420
3125
  }
1421
- UiMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: UiMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1422
- UiMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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" }] });
1423
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: UiMenuComponent, decorators: [{
3126
+ UiMenuComponent.ɵfac = function UiMenuComponent_Factory(t) { return new (t || UiMenuComponent)(); };
3127
+ UiMenuComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UiMenuComponent, selectors: [["app-ui-menu"]], inputs: { eventDataImportOptions: "eventDataImportOptions", animationPresets: "animationPresets" }, ngContentSelectors: _c0$1, decls: 22, vars: 2, consts: [[3, "animationPresets"], [3, "eventDataImportOptions"]], template: function UiMenuComponent_Template(rf, ctx) {
3128
+ if (rf & 1) {
3129
+ i0.ɵɵprojectionDef();
3130
+ i0.ɵɵelementStart(0, "app-ui-menu-wrapper");
3131
+ 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-make-picture")(19, "app-io-options", 1)(20, "app-share-link");
3132
+ i0.ɵɵprojection(21);
3133
+ i0.ɵɵelementEnd();
3134
+ }
3135
+ if (rf & 2) {
3136
+ i0.ɵɵadvance(12);
3137
+ i0.ɵɵproperty("animationPresets", ctx.animationPresets);
3138
+ i0.ɵɵadvance(7);
3139
+ i0.ɵɵproperty("eventDataImportOptions", ctx.eventDataImportOptions);
3140
+ }
3141
+ }, dependencies: [UiMenuWrapperComponent, CollectionsInfoComponent, IoOptionsComponent, OverlayViewComponent, ObjectSelectionComponent, EventSelectorComponent, ObjectClippingComponent, DarkThemeComponent, AutoRotateComponent, ViewOptionsComponent, InfoPanelComponent, MainViewToggleComponent, ZoomControlsComponent, AnimateCameraComponent, AnimateEventComponent, VrToggleComponent, ArToggleComponent, SSModeComponent, MakePictureComponent, PerformanceToggleComponent, ShareLinkComponent] });
3142
+ (function () {
3143
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UiMenuComponent, [{
1424
3144
  type: Component,
1425
- 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" }]
1426
- }], propDecorators: { eventDataImportOptions: [{
3145
+ 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 <!-- Make pictures from scene -->\n <app-make-picture></app-make-picture>\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" }]
3146
+ }], null, { eventDataImportOptions: [{
1427
3147
  type: Input
1428
3148
  }], animationPresets: [{
1429
3149
  type: Input
1430
- }] } });
3150
+ }] });
3151
+ })();
1431
3152
 
3153
+ function FileExplorerComponent_cdk_tree_node_1_Template(rf, ctx) {
3154
+ if (rf & 1) {
3155
+ const _r4 = i0.ɵɵgetCurrentView();
3156
+ i0.ɵɵelementStart(0, "cdk-tree-node", 3)(1, "button", 4);
3157
+ 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)); });
3158
+ i0.ɵɵnamespaceSVG();
3159
+ i0.ɵɵelementStart(2, "svg", 5);
3160
+ i0.ɵɵelement(3, "use", 6);
3161
+ i0.ɵɵelementEnd();
3162
+ i0.ɵɵtext(4);
3163
+ i0.ɵɵelementEnd()();
3164
+ }
3165
+ if (rf & 2) {
3166
+ const node_r2 = ctx.$implicit;
3167
+ i0.ɵɵadvance(4);
3168
+ i0.ɵɵtextInterpolate1(" ", node_r2.name, " ");
3169
+ }
3170
+ }
3171
+ function FileExplorerComponent_cdk_nested_tree_node_2_Template(rf, ctx) {
3172
+ if (rf & 1) {
3173
+ i0.ɵɵelementStart(0, "cdk-nested-tree-node", 3)(1, "button", 7);
3174
+ i0.ɵɵnamespaceSVG();
3175
+ i0.ɵɵelementStart(2, "svg", 5);
3176
+ i0.ɵɵelement(3, "use", 8);
3177
+ i0.ɵɵelementEnd();
3178
+ i0.ɵɵtext(4);
3179
+ i0.ɵɵelementEnd();
3180
+ i0.ɵɵnamespaceHTML();
3181
+ i0.ɵɵelementStart(5, "div");
3182
+ i0.ɵɵelementContainer(6, 9);
3183
+ i0.ɵɵelementEnd()();
3184
+ }
3185
+ if (rf & 2) {
3186
+ const node_r5 = ctx.$implicit;
3187
+ const ctx_r1 = i0.ɵɵnextContext();
3188
+ i0.ɵɵadvance(1);
3189
+ i0.ɵɵattribute("aria-label", "Toggle " + node_r5.name);
3190
+ i0.ɵɵadvance(1);
3191
+ i0.ɵɵclassProp("node-icon-filled", !ctx_r1.treeControl.isExpanded(node_r5));
3192
+ i0.ɵɵadvance(2);
3193
+ i0.ɵɵtextInterpolate1(" ", node_r5.name, " ");
3194
+ i0.ɵɵadvance(1);
3195
+ i0.ɵɵclassProp("file-tree-invisible", !ctx_r1.treeControl.isExpanded(node_r5));
3196
+ }
3197
+ }
1432
3198
  class FileNode {
1433
3199
  constructor(name) {
1434
3200
  this.name = name;
@@ -1462,26 +3228,78 @@ class FileExplorerComponent {
1462
3228
  return Object.values(node.children).sort((a, b) => !a.url && b.url ? -1 : 1);
1463
3229
  }
1464
3230
  }
1465
- FileExplorerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: FileExplorerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1466
- FileExplorerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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]" }] });
1467
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: FileExplorerComponent, decorators: [{
3231
+ FileExplorerComponent.ɵfac = function FileExplorerComponent_Factory(t) { return new (t || FileExplorerComponent)(); };
3232
+ 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) {
3233
+ if (rf & 1) {
3234
+ i0.ɵɵelementStart(0, "cdk-tree", 0);
3235
+ i0.ɵɵtemplate(1, FileExplorerComponent_cdk_tree_node_1_Template, 5, 1, "cdk-tree-node", 1);
3236
+ i0.ɵɵtemplate(2, FileExplorerComponent_cdk_nested_tree_node_2_Template, 7, 6, "cdk-nested-tree-node", 2);
3237
+ i0.ɵɵelementEnd();
3238
+ }
3239
+ if (rf & 2) {
3240
+ i0.ɵɵproperty("dataSource", ctx.dataSource)("treeControl", ctx.treeControl);
3241
+ i0.ɵɵadvance(2);
3242
+ i0.ɵɵproperty("cdkTreeNodeDefWhen", ctx.hasChildren);
3243
+ }
3244
+ }, 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)}"] });
3245
+ (function () {
3246
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FileExplorerComponent, [{
1468
3247
  type: Component,
1469
3248
  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"] }]
1470
- }], propDecorators: { rootFileNode: [{
3249
+ }], null, { rootFileNode: [{
1471
3250
  type: Input
1472
3251
  }], onFileSelect: [{
1473
3252
  type: Output
1474
- }] } });
3253
+ }] });
3254
+ })();
1475
3255
 
1476
3256
  class RingLoaderComponent {
1477
3257
  }
1478
- RingLoaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: RingLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1479
- RingLoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] });
1480
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: RingLoaderComponent, decorators: [{
3258
+ RingLoaderComponent.ɵfac = function RingLoaderComponent_Factory(t) { return new (t || RingLoaderComponent)(); };
3259
+ RingLoaderComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RingLoaderComponent, selectors: [["app-ring-loader"]], decls: 5, vars: 0, consts: [[1, "ring"]], template: function RingLoaderComponent_Template(rf, ctx) {
3260
+ if (rf & 1) {
3261
+ i0.ɵɵelementStart(0, "div", 0);
3262
+ i0.ɵɵelement(1, "div")(2, "div")(3, "div")(4, "div");
3263
+ i0.ɵɵelementEnd();
3264
+ }
3265
+ }, 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)}}"] });
3266
+ (function () {
3267
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RingLoaderComponent, [{
1481
3268
  type: Component,
1482
- 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"] }]
1483
- }] });
3269
+ 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"] }]
3270
+ }], null, null);
3271
+ })();
1484
3272
 
3273
+ function EventDataExplorerDialogComponent_app_ring_loader_4_Template(rf, ctx) {
3274
+ if (rf & 1) {
3275
+ i0.ɵɵelement(0, "app-ring-loader");
3276
+ }
3277
+ }
3278
+ function EventDataExplorerDialogComponent_div_6_Template(rf, ctx) {
3279
+ if (rf & 1) {
3280
+ i0.ɵɵelementStart(0, "div");
3281
+ i0.ɵɵtext(1, "Error processing request.");
3282
+ i0.ɵɵelementEnd();
3283
+ }
3284
+ }
3285
+ function EventDataExplorerDialogComponent_mat_tab_group_7_Template(rf, ctx) {
3286
+ if (rf & 1) {
3287
+ const _r4 = i0.ɵɵgetCurrentView();
3288
+ i0.ɵɵelementStart(0, "mat-tab-group", 8)(1, "mat-tab", 9)(2, "div", 10)(3, "app-file-explorer", 11);
3289
+ 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)); });
3290
+ i0.ɵɵelementEnd()()();
3291
+ i0.ɵɵelementStart(4, "mat-tab", 12)(5, "div", 10)(6, "app-file-explorer", 11);
3292
+ 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)); });
3293
+ i0.ɵɵelementEnd()()()();
3294
+ }
3295
+ if (rf & 2) {
3296
+ const ctx_r2 = i0.ɵɵnextContext();
3297
+ i0.ɵɵadvance(3);
3298
+ i0.ɵɵproperty("rootFileNode", ctx_r2.eventDataFileNode);
3299
+ i0.ɵɵadvance(3);
3300
+ i0.ɵɵproperty("rootFileNode", ctx_r2.configFileNode);
3301
+ }
3302
+ }
1485
3303
  const supportFileTypes = ['json', 'xml'];
1486
3304
  class EventDataExplorerDialogComponent {
1487
3305
  constructor(eventDisplay, dialogRef, dialogData) {
@@ -1502,8 +3320,10 @@ class EventDataExplorerDialogComponent {
1502
3320
  });
1503
3321
  }
1504
3322
  loadEvent(file) {
1505
- this.makeRequest(file, 'text', (eventData) => {
1506
- switch (file.split('.').pop()) {
3323
+ const isZip = file.split('.').pop() === 'zip';
3324
+ const rawfile = isZip ? file.substring(0, file.length - 4) : file;
3325
+ this.makeRequest(file, isZip ? 'blob' : 'text', (eventData) => {
3326
+ switch (rawfile.split('.').pop()) {
1507
3327
  case 'xml':
1508
3328
  this.loadJiveXMLEvent(eventData);
1509
3329
  break;
@@ -1535,12 +3355,37 @@ class EventDataExplorerDialogComponent {
1535
3355
  onClose() {
1536
3356
  this.dialogRef.close();
1537
3357
  }
3358
+ unzip(data) {
3359
+ return __awaiter(this, void 0, void 0, function* () {
3360
+ const archive = new JSZip();
3361
+ yield archive.loadAsync(data);
3362
+ let fileData = '';
3363
+ let multiFile = false;
3364
+ for (const filePath in archive.files) {
3365
+ if (multiFile) {
3366
+ console.error('Zip archive contains more than one file. Ignoring all but first');
3367
+ break;
3368
+ }
3369
+ fileData = yield archive.file(filePath).async('string');
3370
+ multiFile = true;
3371
+ }
3372
+ return fileData;
3373
+ });
3374
+ }
1538
3375
  makeRequest(urlPath, responseType, onData) {
1539
3376
  this.loading = true;
1540
3377
  fetch(urlPath)
1541
3378
  .then((res) => res[responseType]())
1542
3379
  .then((data) => {
1543
- onData(data);
3380
+ if (responseType === 'blob') {
3381
+ data
3382
+ .arrayBuffer()
3383
+ .then((buf) => this.unzip(buf))
3384
+ .then((d) => onData(d));
3385
+ }
3386
+ else {
3387
+ onData(data);
3388
+ }
1544
3389
  this.error = false;
1545
3390
  })
1546
3391
  .catch((error) => {
@@ -1567,17 +3412,43 @@ class EventDataExplorerDialogComponent {
1567
3412
  return rootNode;
1568
3413
  }
1569
3414
  }
1570
- EventDataExplorerDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: EventDataExplorerDialogComponent, deps: [{ token: EventDisplayService }, { token: i1$2.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
1571
- EventDataExplorerDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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" }] });
1572
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: EventDataExplorerDialogComponent, decorators: [{
3415
+ EventDataExplorerDialogComponent.ɵfac = function EventDataExplorerDialogComponent_Factory(t) { return new (t || EventDataExplorerDialogComponent)(i0.ɵɵdirectiveInject(EventDisplayService), i0.ɵɵdirectiveInject(i1$2.MatDialogRef), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA)); };
3416
+ 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) {
3417
+ if (rf & 1) {
3418
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h1", 2);
3419
+ i0.ɵɵtext(3, "Event data from directory");
3420
+ i0.ɵɵelementEnd();
3421
+ i0.ɵɵtemplate(4, EventDataExplorerDialogComponent_app_ring_loader_4_Template, 1, 0, "app-ring-loader", 3);
3422
+ i0.ɵɵelementEnd();
3423
+ i0.ɵɵelementStart(5, "div", 4);
3424
+ i0.ɵɵtemplate(6, EventDataExplorerDialogComponent_div_6_Template, 2, 0, "div", 3);
3425
+ i0.ɵɵtemplate(7, EventDataExplorerDialogComponent_mat_tab_group_7_Template, 7, 2, "mat-tab-group", 5);
3426
+ i0.ɵɵelementEnd();
3427
+ i0.ɵɵelementStart(8, "div", 6)(9, "button", 7);
3428
+ i0.ɵɵlistener("click", function EventDataExplorerDialogComponent_Template_button_click_9_listener() { return ctx.onClose(); });
3429
+ i0.ɵɵtext(10, "Close");
3430
+ i0.ɵɵelementEnd()()();
3431
+ }
3432
+ if (rf & 2) {
3433
+ i0.ɵɵadvance(4);
3434
+ i0.ɵɵproperty("ngIf", ctx.loading);
3435
+ i0.ɵɵadvance(2);
3436
+ i0.ɵɵproperty("ngIf", ctx.error);
3437
+ i0.ɵɵadvance(1);
3438
+ i0.ɵɵproperty("ngIf", !ctx.error);
3439
+ }
3440
+ }, 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}"] });
3441
+ (function () {
3442
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EventDataExplorerDialogComponent, [{
1573
3443
  type: Component,
1574
3444
  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"] }]
1575
- }], ctorParameters: function () {
3445
+ }], function () {
1576
3446
  return [{ type: EventDisplayService }, { type: i1$2.MatDialogRef }, { type: undefined, decorators: [{
1577
3447
  type: Inject,
1578
3448
  args: [MAT_DIALOG_DATA]
1579
3449
  }] }];
1580
- } });
3450
+ }, null);
3451
+ })();
1581
3452
 
1582
3453
  class EventDataExplorerComponent {
1583
3454
  constructor(dialog) {
@@ -1591,14 +3462,25 @@ class EventDataExplorerComponent {
1591
3462
  });
1592
3463
  }
1593
3464
  }
1594
- EventDataExplorerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: EventDataExplorerComponent, deps: [{ token: i1$2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
1595
- EventDataExplorerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1596
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: EventDataExplorerComponent, decorators: [{
3465
+ EventDataExplorerComponent.ɵfac = function EventDataExplorerComponent_Factory(t) { return new (t || EventDataExplorerComponent)(i0.ɵɵdirectiveInject(i1$2.MatDialog)); };
3466
+ 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) {
3467
+ if (rf & 1) {
3468
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
3469
+ i0.ɵɵlistener("click", function EventDataExplorerComponent_Template_app_menu_toggle_click_0_listener() { return ctx.openEventDataExplorerDialog(); });
3470
+ i0.ɵɵelementEnd();
3471
+ }
3472
+ if (rf & 2) {
3473
+ i0.ɵɵproperty("active", false);
3474
+ }
3475
+ }, dependencies: [MenuToggleComponent] });
3476
+ (function () {
3477
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EventDataExplorerComponent, [{
1597
3478
  type: Component,
1598
3479
  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" }]
1599
- }], ctorParameters: function () { return [{ type: i1$2.MatDialog }]; }, propDecorators: { apiURL: [{
3480
+ }], function () { return [{ type: i1$2.MatDialog }]; }, { apiURL: [{
1600
3481
  type: Input
1601
- }] } });
3482
+ }] });
3483
+ })();
1602
3484
 
1603
3485
  class CycleEventsComponent {
1604
3486
  constructor(eventDisplay) {
@@ -1623,14 +3505,25 @@ class CycleEventsComponent {
1623
3505
  }, this.interval);
1624
3506
  }
1625
3507
  }
1626
- CycleEventsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: CycleEventsComponent, deps: [{ token: EventDisplayService }], target: i0.ɵɵFactoryTarget.Component });
1627
- CycleEventsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1628
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: CycleEventsComponent, decorators: [{
3508
+ CycleEventsComponent.ɵfac = function CycleEventsComponent_Factory(t) { return new (t || CycleEventsComponent)(i0.ɵɵdirectiveInject(EventDisplayService)); };
3509
+ 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) {
3510
+ if (rf & 1) {
3511
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
3512
+ i0.ɵɵlistener("click", function CycleEventsComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleCycle(); });
3513
+ i0.ɵɵelementEnd();
3514
+ }
3515
+ if (rf & 2) {
3516
+ i0.ɵɵproperty("active", ctx.active);
3517
+ }
3518
+ }, dependencies: [MenuToggleComponent], encapsulation: 2 });
3519
+ (function () {
3520
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CycleEventsComponent, [{
1629
3521
  type: Component,
1630
3522
  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" }]
1631
- }], ctorParameters: function () { return [{ type: EventDisplayService }]; }, propDecorators: { interval: [{
3523
+ }], function () { return [{ type: EventDisplayService }]; }, { interval: [{
1632
3524
  type: Input
1633
- }] } });
3525
+ }] });
3526
+ })();
1634
3527
 
1635
3528
  class ErrorMessageService {
1636
3529
  constructor() {
@@ -1652,15 +3545,57 @@ class ErrorMessageService {
1652
3545
  this.error.update(error);
1653
3546
  }
1654
3547
  }
1655
- ErrorMessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ErrorMessageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1656
- ErrorMessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ErrorMessageService, providedIn: 'root' });
1657
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ErrorMessageService, decorators: [{
3548
+ ErrorMessageService.ɵfac = function ErrorMessageService_Factory(t) { return new (t || ErrorMessageService)(); };
3549
+ ErrorMessageService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ErrorMessageService, factory: ErrorMessageService.ɵfac, providedIn: 'root' });
3550
+ (function () {
3551
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ErrorMessageService, [{
1658
3552
  type: Injectable,
1659
3553
  args: [{
1660
3554
  providedIn: 'root',
1661
3555
  }]
1662
- }] });
3556
+ }], null, null);
3557
+ })();
1663
3558
 
3559
+ const _c0 = function (a0) { return { width: a0 }; };
3560
+ function LoaderComponent_ng_container_1_div_7_Template(rf, ctx) {
3561
+ if (rf & 1) {
3562
+ i0.ɵɵelementStart(0, "div", 7);
3563
+ i0.ɵɵelement(1, "span");
3564
+ i0.ɵɵelementEnd();
3565
+ }
3566
+ if (rf & 2) {
3567
+ const ctx_r3 = i0.ɵɵnextContext(2);
3568
+ i0.ɵɵadvance(1);
3569
+ i0.ɵɵstyleMap(i0.ɵɵpureFunction1(2, _c0, ctx_r3.progress + "%"));
3570
+ }
3571
+ }
3572
+ function LoaderComponent_ng_container_1_Template(rf, ctx) {
3573
+ if (rf & 1) {
3574
+ i0.ɵɵelementContainerStart(0);
3575
+ i0.ɵɵelement(1, "img", 3);
3576
+ i0.ɵɵelementStart(2, "p", 4);
3577
+ i0.ɵɵtext(3, " Loading...");
3578
+ i0.ɵɵelement(4, "br");
3579
+ i0.ɵɵelementStart(5, "small", 5);
3580
+ i0.ɵɵtext(6, "(This may take a while)");
3581
+ i0.ɵɵelementEnd()();
3582
+ i0.ɵɵtemplate(7, LoaderComponent_ng_container_1_div_7_Template, 2, 4, "div", 6);
3583
+ i0.ɵɵelementContainerEnd();
3584
+ }
3585
+ if (rf & 2) {
3586
+ const ctx_r0 = i0.ɵɵnextContext();
3587
+ i0.ɵɵadvance(7);
3588
+ i0.ɵɵproperty("ngIf", ctx_r0.progress !== undefined);
3589
+ }
3590
+ }
3591
+ function LoaderComponent_ng_template_2_Template(rf, ctx) {
3592
+ if (rf & 1) {
3593
+ i0.ɵɵelementStart(0, "p");
3594
+ i0.ɵɵtext(1, " An error occurred while loading the application. Please try refreshing the page. ");
3595
+ i0.ɵɵelementEnd();
3596
+ }
3597
+ }
3598
+ const _c1 = function (a0) { return { "load-complete": a0 }; };
1664
3599
  class LoaderComponent {
1665
3600
  constructor(errorMessageService) {
1666
3601
  this.errorMessageService = errorMessageService;
@@ -1672,16 +3607,31 @@ class LoaderComponent {
1672
3607
  });
1673
3608
  }
1674
3609
  }
1675
- LoaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: LoaderComponent, deps: [{ token: ErrorMessageService }], target: i0.ɵɵFactoryTarget.Component });
1676
- LoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1677
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: LoaderComponent, decorators: [{
3610
+ LoaderComponent.ɵfac = function LoaderComponent_Factory(t) { return new (t || LoaderComponent)(i0.ɵɵdirectiveInject(ErrorMessageService)); };
3611
+ 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) {
3612
+ if (rf & 1) {
3613
+ i0.ɵɵelementStart(0, "div", 0);
3614
+ i0.ɵɵtemplate(1, LoaderComponent_ng_container_1_Template, 8, 1, "ng-container", 1);
3615
+ i0.ɵɵtemplate(2, LoaderComponent_ng_template_2_Template, 2, 0, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
3616
+ i0.ɵɵelementEnd();
3617
+ }
3618
+ if (rf & 2) {
3619
+ const _r1 = i0.ɵɵreference(3);
3620
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c1, ctx.loaded));
3621
+ i0.ɵɵadvance(1);
3622
+ i0.ɵɵproperty("ngIf", ctx.error === undefined)("ngIfElse", _r1);
3623
+ }
3624
+ }, 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)}}"] });
3625
+ (function () {
3626
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LoaderComponent, [{
1678
3627
  type: Component,
1679
- 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"] }]
1680
- }], ctorParameters: function () { return [{ type: ErrorMessageService }]; }, propDecorators: { loaded: [{
3628
+ 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"] }]
3629
+ }], function () { return [{ type: ErrorMessageService }]; }, { loaded: [{
1681
3630
  type: Input
1682
3631
  }], progress: [{
1683
3632
  type: Input
1684
- }] } });
3633
+ }] });
3634
+ })();
1685
3635
 
1686
3636
  /**
1687
3637
  * Global handler for handling app/module wide errors.
@@ -1703,11 +3653,13 @@ class GlobalErrorHandler {
1703
3653
  this.injector.get(ErrorMessageService).setError(error);
1704
3654
  }
1705
3655
  }
1706
- GlobalErrorHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: GlobalErrorHandler, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
1707
- GlobalErrorHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: GlobalErrorHandler });
1708
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: GlobalErrorHandler, decorators: [{
3656
+ GlobalErrorHandler.ɵfac = function GlobalErrorHandler_Factory(t) { return new (t || GlobalErrorHandler)(i0.ɵɵinject(i0.Injector)); };
3657
+ GlobalErrorHandler.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: GlobalErrorHandler, factory: GlobalErrorHandler.ɵfac });
3658
+ (function () {
3659
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GlobalErrorHandler, [{
1709
3660
  type: Injectable
1710
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
3661
+ }], function () { return [{ type: i0.Injector }]; }, null);
3662
+ })();
1711
3663
 
1712
3664
  class ExperimentLinkComponent {
1713
3665
  ngOnInit() {
@@ -1717,21 +3669,37 @@ class ExperimentLinkComponent {
1717
3669
  window.open(this.experimentLink, '_blank');
1718
3670
  }
1719
3671
  }
1720
- ExperimentLinkComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ExperimentLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1721
- ExperimentLinkComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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"] }] });
1722
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: ExperimentLinkComponent, decorators: [{
3672
+ ExperimentLinkComponent.ɵfac = function ExperimentLinkComponent_Factory(t) { return new (t || ExperimentLinkComponent)(); };
3673
+ 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) {
3674
+ if (rf & 1) {
3675
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
3676
+ i0.ɵɵlistener("click", function ExperimentLinkComponent_Template_app_menu_toggle_click_0_listener() { return ctx.goToExperiment(); });
3677
+ i0.ɵɵelementEnd();
3678
+ }
3679
+ }, dependencies: [MenuToggleComponent] });
3680
+ (function () {
3681
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ExperimentLinkComponent, [{
1723
3682
  type: Component,
1724
3683
  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" }]
1725
- }] });
3684
+ }], null, null);
3685
+ })();
1726
3686
 
1727
3687
  class EmbedMenuComponent {
1728
3688
  }
1729
- EmbedMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: EmbedMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1730
- EmbedMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", 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" }] });
1731
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: EmbedMenuComponent, decorators: [{
3689
+ EmbedMenuComponent.ɵfac = function EmbedMenuComponent_Factory(t) { return new (t || EmbedMenuComponent)(); };
3690
+ 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) {
3691
+ if (rf & 1) {
3692
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
3693
+ 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");
3694
+ i0.ɵɵelementEnd()();
3695
+ }
3696
+ }, 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}"] });
3697
+ (function () {
3698
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EmbedMenuComponent, [{
1732
3699
  type: Component,
1733
3700
  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"] }]
1734
- }] });
3701
+ }], null, null);
3702
+ })();
1735
3703
 
1736
3704
  const PHOENIX_COMPONENTS = [
1737
3705
  NavComponent,
@@ -1768,6 +3736,7 @@ const PHOENIX_COMPONENTS = [
1768
3736
  VrToggleComponent,
1769
3737
  ArToggleComponent,
1770
3738
  SSModeComponent,
3739
+ MakePictureComponent,
1771
3740
  PerformanceToggleComponent,
1772
3741
  LoaderComponent,
1773
3742
  ShareLinkComponent,
@@ -1782,111 +3751,9 @@ const PHOENIX_COMPONENTS = [
1782
3751
  ];
1783
3752
  class PhoenixUIModule {
1784
3753
  }
1785
- PhoenixUIModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: PhoenixUIModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1786
- PhoenixUIModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.3", ngImport: i0, type: PhoenixUIModule, declarations: [NavComponent,
1787
- UiMenuWrapperComponent,
1788
- UiMenuComponent,
1789
- CollectionsInfoComponent,
1790
- MenuToggleComponent,
1791
- CollectionsInfoOverlayComponent,
1792
- IoOptionsComponent,
1793
- IOOptionsDialogComponent,
1794
- OverlayViewComponent,
1795
- AttributePipe,
1796
- ObjectSelectionComponent,
1797
- ObjectSelectionOverlayComponent,
1798
- EventSelectorComponent,
1799
- ObjectClippingComponent,
1800
- DarkThemeComponent,
1801
- AutoRotateComponent,
1802
- ViewOptionsComponent,
1803
- OverlayViewWindowComponent,
1804
- OverlayComponent,
1805
- ExperimentInfoComponent,
1806
- InfoPanelComponent,
1807
- InfoPanelOverlayComponent,
1808
- MainViewToggleComponent,
1809
- ZoomControlsComponent,
1810
- TreeMenuComponent,
1811
- TreeMenuItemComponent,
1812
- PhoenixMenuComponent,
1813
- PhoenixMenuItemComponent,
1814
- ConfigSliderComponent,
1815
- AnimateCameraComponent,
1816
- AnimateEventComponent,
1817
- VrToggleComponent,
1818
- ArToggleComponent,
1819
- SSModeComponent,
1820
- PerformanceToggleComponent,
1821
- LoaderComponent,
1822
- ShareLinkComponent,
1823
- ShareLinkDialogComponent,
1824
- EmbedMenuComponent,
1825
- ExperimentLinkComponent,
1826
- EventDataExplorerComponent,
1827
- EventDataExplorerDialogComponent,
1828
- FileExplorerComponent,
1829
- RingLoaderComponent,
1830
- CycleEventsComponent], imports: [CommonModule,
1831
- RouterModule,
1832
- DragDropModule,
1833
- MatDialogModule,
1834
- MatButtonModule,
1835
- MatTooltipModule,
1836
- OverlayModule,
1837
- MatMenuModule,
1838
- MatSliderModule,
1839
- MatSlideToggleModule,
1840
- MatCheckboxModule,
1841
- MatIconModule,
1842
- NgxSliderModule,
1843
- CdkTreeModule,
1844
- MatTabsModule], exports: [NavComponent,
1845
- UiMenuWrapperComponent,
1846
- UiMenuComponent,
1847
- CollectionsInfoComponent,
1848
- MenuToggleComponent,
1849
- CollectionsInfoOverlayComponent,
1850
- IoOptionsComponent,
1851
- IOOptionsDialogComponent,
1852
- OverlayViewComponent,
1853
- AttributePipe,
1854
- ObjectSelectionComponent,
1855
- ObjectSelectionOverlayComponent,
1856
- EventSelectorComponent,
1857
- ObjectClippingComponent,
1858
- DarkThemeComponent,
1859
- AutoRotateComponent,
1860
- ViewOptionsComponent,
1861
- OverlayViewWindowComponent,
1862
- OverlayComponent,
1863
- ExperimentInfoComponent,
1864
- InfoPanelComponent,
1865
- InfoPanelOverlayComponent,
1866
- MainViewToggleComponent,
1867
- ZoomControlsComponent,
1868
- TreeMenuComponent,
1869
- TreeMenuItemComponent,
1870
- PhoenixMenuComponent,
1871
- PhoenixMenuItemComponent,
1872
- ConfigSliderComponent,
1873
- AnimateCameraComponent,
1874
- AnimateEventComponent,
1875
- VrToggleComponent,
1876
- ArToggleComponent,
1877
- SSModeComponent,
1878
- PerformanceToggleComponent,
1879
- LoaderComponent,
1880
- ShareLinkComponent,
1881
- ShareLinkDialogComponent,
1882
- EmbedMenuComponent,
1883
- ExperimentLinkComponent,
1884
- EventDataExplorerComponent,
1885
- EventDataExplorerDialogComponent,
1886
- FileExplorerComponent,
1887
- RingLoaderComponent,
1888
- CycleEventsComponent] });
1889
- PhoenixUIModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: PhoenixUIModule, providers: [
3754
+ PhoenixUIModule.ɵfac = function PhoenixUIModule_Factory(t) { return new (t || PhoenixUIModule)(); };
3755
+ PhoenixUIModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: PhoenixUIModule });
3756
+ PhoenixUIModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [
1890
3757
  EventDisplayService,
1891
3758
  ErrorMessageService,
1892
3759
  {
@@ -1900,7 +3767,9 @@ PhoenixUIModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version
1900
3767
  MatButtonModule,
1901
3768
  MatTooltipModule,
1902
3769
  OverlayModule,
3770
+ FormsModule,
1903
3771
  MatMenuModule,
3772
+ MatRadioModule,
1904
3773
  MatSliderModule,
1905
3774
  MatSlideToggleModule,
1906
3775
  MatCheckboxModule,
@@ -1908,7 +3777,8 @@ PhoenixUIModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version
1908
3777
  NgxSliderModule,
1909
3778
  CdkTreeModule,
1910
3779
  MatTabsModule] });
1911
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: PhoenixUIModule, decorators: [{
3780
+ (function () {
3781
+ (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PhoenixUIModule, [{
1912
3782
  type: NgModule,
1913
3783
  args: [{
1914
3784
  declarations: PHOENIX_COMPONENTS,
@@ -1920,7 +3790,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImpor
1920
3790
  MatButtonModule,
1921
3791
  MatTooltipModule,
1922
3792
  OverlayModule,
3793
+ FormsModule,
1923
3794
  MatMenuModule,
3795
+ MatRadioModule,
1924
3796
  MatSliderModule,
1925
3797
  MatSlideToggleModule,
1926
3798
  MatCheckboxModule,
@@ -1948,11 +3820,121 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImpor
1948
3820
  },
1949
3821
  ],
1950
3822
  }]
1951
- }] });
3823
+ }], null, null);
3824
+ })();
3825
+ (function () {
3826
+ (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(PhoenixUIModule, { declarations: [NavComponent,
3827
+ UiMenuWrapperComponent,
3828
+ UiMenuComponent,
3829
+ CollectionsInfoComponent,
3830
+ MenuToggleComponent,
3831
+ CollectionsInfoOverlayComponent,
3832
+ IoOptionsComponent,
3833
+ IOOptionsDialogComponent,
3834
+ OverlayViewComponent,
3835
+ AttributePipe,
3836
+ ObjectSelectionComponent,
3837
+ ObjectSelectionOverlayComponent,
3838
+ EventSelectorComponent,
3839
+ ObjectClippingComponent,
3840
+ DarkThemeComponent,
3841
+ AutoRotateComponent,
3842
+ ViewOptionsComponent,
3843
+ OverlayViewWindowComponent,
3844
+ OverlayComponent,
3845
+ ExperimentInfoComponent,
3846
+ InfoPanelComponent,
3847
+ InfoPanelOverlayComponent,
3848
+ MainViewToggleComponent,
3849
+ ZoomControlsComponent,
3850
+ TreeMenuComponent,
3851
+ TreeMenuItemComponent,
3852
+ PhoenixMenuComponent,
3853
+ PhoenixMenuItemComponent,
3854
+ ConfigSliderComponent,
3855
+ AnimateCameraComponent,
3856
+ AnimateEventComponent,
3857
+ VrToggleComponent,
3858
+ ArToggleComponent,
3859
+ SSModeComponent,
3860
+ MakePictureComponent,
3861
+ PerformanceToggleComponent,
3862
+ LoaderComponent,
3863
+ ShareLinkComponent,
3864
+ ShareLinkDialogComponent,
3865
+ EmbedMenuComponent,
3866
+ ExperimentLinkComponent,
3867
+ EventDataExplorerComponent,
3868
+ EventDataExplorerDialogComponent,
3869
+ FileExplorerComponent,
3870
+ RingLoaderComponent,
3871
+ CycleEventsComponent], imports: [CommonModule,
3872
+ RouterModule,
3873
+ DragDropModule,
3874
+ MatDialogModule,
3875
+ MatButtonModule,
3876
+ MatTooltipModule,
3877
+ OverlayModule,
3878
+ FormsModule,
3879
+ MatMenuModule,
3880
+ MatRadioModule,
3881
+ MatSliderModule,
3882
+ MatSlideToggleModule,
3883
+ MatCheckboxModule,
3884
+ MatIconModule,
3885
+ NgxSliderModule,
3886
+ CdkTreeModule,
3887
+ MatTabsModule], exports: [NavComponent,
3888
+ UiMenuWrapperComponent,
3889
+ UiMenuComponent,
3890
+ CollectionsInfoComponent,
3891
+ MenuToggleComponent,
3892
+ CollectionsInfoOverlayComponent,
3893
+ IoOptionsComponent,
3894
+ IOOptionsDialogComponent,
3895
+ OverlayViewComponent,
3896
+ AttributePipe,
3897
+ ObjectSelectionComponent,
3898
+ ObjectSelectionOverlayComponent,
3899
+ EventSelectorComponent,
3900
+ ObjectClippingComponent,
3901
+ DarkThemeComponent,
3902
+ AutoRotateComponent,
3903
+ ViewOptionsComponent,
3904
+ OverlayViewWindowComponent,
3905
+ OverlayComponent,
3906
+ ExperimentInfoComponent,
3907
+ InfoPanelComponent,
3908
+ InfoPanelOverlayComponent,
3909
+ MainViewToggleComponent,
3910
+ ZoomControlsComponent,
3911
+ TreeMenuComponent,
3912
+ TreeMenuItemComponent,
3913
+ PhoenixMenuComponent,
3914
+ PhoenixMenuItemComponent,
3915
+ ConfigSliderComponent,
3916
+ AnimateCameraComponent,
3917
+ AnimateEventComponent,
3918
+ VrToggleComponent,
3919
+ ArToggleComponent,
3920
+ SSModeComponent,
3921
+ MakePictureComponent,
3922
+ PerformanceToggleComponent,
3923
+ LoaderComponent,
3924
+ ShareLinkComponent,
3925
+ ShareLinkDialogComponent,
3926
+ EmbedMenuComponent,
3927
+ ExperimentLinkComponent,
3928
+ EventDataExplorerComponent,
3929
+ EventDataExplorerDialogComponent,
3930
+ FileExplorerComponent,
3931
+ RingLoaderComponent,
3932
+ CycleEventsComponent] });
3933
+ })();
1952
3934
 
1953
3935
  /**
1954
3936
  * Generated bundle index. Do not edit.
1955
3937
  */
1956
3938
 
1957
- export { AnimateCameraComponent, AnimateEventComponent, ArToggleComponent, AttributePipe, AutoRotateComponent, CollectionsInfoComponent, CollectionsInfoOverlayComponent, ConfigSliderComponent, CycleEventsComponent, DarkThemeComponent, EmbedMenuComponent, EventDataExplorerComponent, EventDataExplorerDialogComponent, EventDataFormat, EventDisplayService, EventSelectorComponent, ExperimentInfoComponent, ExperimentLinkComponent, FileExplorerComponent, FileNode, IOOptionsDialogComponent, ImportOption, InfoPanelComponent, InfoPanelOverlayComponent, IoOptionsComponent, LoaderComponent, MainViewToggleComponent, MenuToggleComponent, NavComponent, ObjectClippingComponent, ObjectSelectionComponent, ObjectSelectionOverlayComponent, OverlayComponent, OverlayViewComponent, OverlayViewWindowComponent, PerformanceToggleComponent, PhoenixMenuComponent, PhoenixMenuItemComponent, PhoenixUIModule, RingLoaderComponent, SSModeComponent, ShareLinkComponent, ShareLinkDialogComponent, TreeMenuComponent, TreeMenuItemComponent, UiMenuComponent, UiMenuWrapperComponent, ViewOptionsComponent, VrToggleComponent, ZoomControlsComponent, defaultAnimationPresets };
3939
+ export { AnimateCameraComponent, AnimateEventComponent, ArToggleComponent, AttributePipe, AutoRotateComponent, CollectionsInfoComponent, CollectionsInfoOverlayComponent, ConfigSliderComponent, CycleEventsComponent, DarkThemeComponent, EmbedMenuComponent, EventDataExplorerComponent, EventDataExplorerDialogComponent, EventDataFormat, EventDisplayService, EventSelectorComponent, ExperimentInfoComponent, ExperimentLinkComponent, FileExplorerComponent, FileNode, IOOptionsDialogComponent, ImportOption, InfoPanelComponent, InfoPanelOverlayComponent, IoOptionsComponent, LoaderComponent, MainViewToggleComponent, MakePictureComponent, MenuToggleComponent, NavComponent, ObjectClippingComponent, ObjectSelectionComponent, ObjectSelectionOverlayComponent, OverlayComponent, OverlayViewComponent, OverlayViewWindowComponent, PerformanceToggleComponent, PhoenixMenuComponent, PhoenixMenuItemComponent, PhoenixUIModule, RingLoaderComponent, SSModeComponent, ShareLinkComponent, ShareLinkDialogComponent, TreeMenuComponent, TreeMenuItemComponent, UiMenuComponent, UiMenuWrapperComponent, ViewOptionsComponent, VrToggleComponent, ZoomControlsComponent, defaultAnimationPresets };
1958
3940
  //# sourceMappingURL=phoenix-ui-components.mjs.map