phoenix-ui-components 2.3.0 → 2.5.2

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 (148) hide show
  1. package/README.md +1 -1
  2. package/_theming.scss +5 -1
  3. package/dist/README.md +1 -1
  4. package/dist/components/embed-menu/embed-menu.component.d.ts +3 -0
  5. package/dist/components/embed-menu/experiment-link/experiment-link.component.d.ts +3 -0
  6. package/dist/components/loader/loader.component.d.ts +3 -0
  7. package/dist/components/nav/nav.component.d.ts +3 -0
  8. package/dist/components/phoenix-menu/config/config-slider/config-slider.component.d.ts +3 -0
  9. package/dist/components/phoenix-menu/pheonix-menu-item/phoenix-menu-item.component.d.ts +3 -0
  10. package/dist/components/phoenix-menu/phoenix-menu.component.d.ts +3 -0
  11. package/dist/components/phoenix-ui.module.d.ts +56 -0
  12. package/dist/components/ui-menu/animate-camera/animate-camera.component.d.ts +3 -0
  13. package/dist/components/ui-menu/animate-event/animate-event.component.d.ts +3 -0
  14. package/dist/components/ui-menu/ar-toggle/ar-toggle.component.d.ts +3 -0
  15. package/dist/components/ui-menu/auto-rotate/auto-rotate.component.d.ts +3 -0
  16. package/dist/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.d.ts +6 -0
  17. package/dist/components/ui-menu/collections-info/collections-info.component.d.ts +3 -0
  18. package/dist/components/ui-menu/dark-theme/dark-theme.component.d.ts +3 -0
  19. package/dist/components/ui-menu/event-selector/event-selector.component.d.ts +3 -0
  20. package/dist/components/ui-menu/experiment-info/experiment-info.component.d.ts +3 -0
  21. package/dist/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.d.ts +5 -0
  22. package/dist/components/ui-menu/info-panel/info-panel.component.d.ts +3 -0
  23. package/dist/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.d.ts +3 -0
  24. package/dist/components/ui-menu/io-options/io-options.component.d.ts +3 -0
  25. package/dist/components/ui-menu/main-view-toggle/main-view-toggle.component.d.ts +3 -0
  26. package/dist/components/ui-menu/menu-toggle/menu-toggle.component.d.ts +3 -0
  27. package/dist/components/ui-menu/object-clipping/object-clipping.component.d.ts +3 -0
  28. package/dist/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.d.ts +3 -0
  29. package/dist/components/ui-menu/object-selection/object-selection.component.d.ts +3 -0
  30. package/dist/components/ui-menu/overlay/overlay.component.d.ts +3 -0
  31. package/dist/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.d.ts +3 -0
  32. package/dist/components/ui-menu/overlay-view/overlay-view.component.d.ts +3 -0
  33. package/dist/components/ui-menu/performance-toggle/performance-toggle.component.d.ts +3 -0
  34. package/dist/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.d.ts +10 -2
  35. package/dist/components/ui-menu/share-link/share-link.component.d.ts +3 -0
  36. package/dist/components/ui-menu/ss-mode/ss-mode.component.d.ts +3 -0
  37. package/dist/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.d.ts +3 -0
  38. package/dist/components/ui-menu/tree-menu/tree-menu.component.d.ts +3 -0
  39. package/dist/components/ui-menu/ui-menu.component.d.ts +3 -0
  40. package/dist/components/ui-menu/view-options/view-options.component.d.ts +3 -0
  41. package/dist/components/ui-menu/vr-toggle/vr-toggle.component.d.ts +3 -0
  42. package/dist/components/ui-menu/zoom-controls/zoom-controls.component.d.ts +3 -0
  43. package/dist/esm2020/components/embed-menu/embed-menu.component.mjs +17 -0
  44. package/dist/esm2020/components/embed-menu/experiment-link/experiment-link.component.mjs +18 -0
  45. package/dist/esm2020/components/loader/loader.component.mjs +19 -0
  46. package/dist/esm2020/components/nav/nav.component.mjs +14 -0
  47. package/dist/esm2020/components/phoenix-menu/config/config-slider/config-slider.component.mjs +38 -0
  48. package/dist/{esm2015/components/phoenix-menu/index.js → esm2020/components/phoenix-menu/index.mjs} +1 -1
  49. package/dist/esm2020/components/phoenix-menu/pheonix-menu-item/phoenix-menu-item.component.mjs +32 -0
  50. package/dist/esm2020/components/phoenix-menu/phoenix-menu.component.mjs +14 -0
  51. package/dist/esm2020/components/phoenix-ui.module.mjs +201 -0
  52. package/dist/esm2020/components/ui-menu/animate-camera/animate-camera.component.mjs +76 -0
  53. package/dist/esm2020/components/ui-menu/animate-event/animate-event.component.mjs +25 -0
  54. package/dist/esm2020/components/ui-menu/ar-toggle/ar-toggle.component.mjs +47 -0
  55. package/dist/esm2020/components/ui-menu/auto-rotate/auto-rotate.component.mjs +21 -0
  56. package/dist/esm2020/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.mjs +81 -0
  57. package/dist/esm2020/components/ui-menu/collections-info/collections-info.component.mjs +32 -0
  58. package/dist/esm2020/components/ui-menu/dark-theme/dark-theme.component.mjs +24 -0
  59. package/dist/esm2020/components/ui-menu/event-selector/event-selector.component.mjs +24 -0
  60. package/dist/esm2020/components/ui-menu/experiment-info/experiment-info.component.mjs +26 -0
  61. package/dist/{esm2015/components/ui-menu/index.js → esm2020/components/ui-menu/index.mjs} +1 -1
  62. package/dist/esm2020/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.mjs +37 -0
  63. package/dist/esm2020/components/ui-menu/info-panel/info-panel.component.mjs +49 -0
  64. package/dist/esm2020/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.mjs +196 -0
  65. package/dist/esm2020/components/ui-menu/io-options/io-options.component.mjs +28 -0
  66. package/dist/esm2020/components/ui-menu/main-view-toggle/main-view-toggle.component.mjs +24 -0
  67. package/dist/esm2020/components/ui-menu/menu-toggle/menu-toggle.component.mjs +24 -0
  68. package/dist/esm2020/components/ui-menu/object-clipping/object-clipping.component.mjs +31 -0
  69. package/dist/esm2020/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.mjs +24 -0
  70. package/dist/esm2020/components/ui-menu/object-selection/object-selection.component.mjs +36 -0
  71. package/dist/esm2020/components/ui-menu/overlay/overlay.component.mjs +99 -0
  72. package/dist/esm2020/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.mjs +53 -0
  73. package/dist/esm2020/components/ui-menu/overlay-view/overlay-view.component.mjs +32 -0
  74. package/dist/esm2020/components/ui-menu/performance-toggle/performance-toggle.component.mjs +21 -0
  75. package/dist/esm2020/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.mjs +73 -0
  76. package/dist/esm2020/components/ui-menu/share-link/share-link.component.mjs +20 -0
  77. package/dist/esm2020/components/ui-menu/ss-mode/ss-mode.component.mjs +41 -0
  78. package/dist/esm2020/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.mjs +33 -0
  79. package/dist/esm2020/components/ui-menu/tree-menu/tree-menu.component.mjs +71 -0
  80. package/dist/esm2020/components/ui-menu/ui-menu.component.mjs +43 -0
  81. package/dist/esm2020/components/ui-menu/view-options/view-options.component.mjs +34 -0
  82. package/dist/esm2020/components/ui-menu/vr-toggle/vr-toggle.component.mjs +44 -0
  83. package/dist/esm2020/components/ui-menu/zoom-controls/zoom-controls.component.mjs +61 -0
  84. package/dist/esm2020/phoenix-ui-components.mjs +5 -0
  85. package/dist/esm2020/public_api.mjs +9 -0
  86. package/dist/esm2020/services/event-display.service.mjs +23 -0
  87. package/dist/esm2020/services/extras/attribute.pipe.mjs +33 -0
  88. package/dist/{esm2015/services/extras/event-data-import.js → esm2020/services/extras/event-data-import.mjs} +1 -1
  89. package/dist/esm2020/services/index.mjs +4 -0
  90. package/dist/fesm2015/phoenix-ui-components.mjs +1644 -0
  91. package/dist/fesm2015/phoenix-ui-components.mjs.map +1 -0
  92. package/dist/fesm2020/phoenix-ui-components.mjs +1644 -0
  93. package/dist/fesm2020/phoenix-ui-components.mjs.map +1 -0
  94. package/dist/phoenix-ui-components.d.ts +2 -6
  95. package/dist/{index.d.ts → public_api.d.ts} +2 -0
  96. package/dist/services/event-display.service.d.ts +3 -0
  97. package/dist/services/extras/attribute.pipe.d.ts +3 -0
  98. package/dist/services/index.d.ts +1 -0
  99. package/package.json +13 -13
  100. package/dist/bundles/phoenix-ui-components.umd.js +0 -2147
  101. package/dist/bundles/phoenix-ui-components.umd.js.map +0 -1
  102. package/dist/esm2015/components/embed-menu/embed-menu.component.js +0 -11
  103. package/dist/esm2015/components/embed-menu/experiment-link/experiment-link.component.js +0 -17
  104. package/dist/esm2015/components/loader/loader.component.js +0 -18
  105. package/dist/esm2015/components/nav/nav.component.js +0 -14
  106. package/dist/esm2015/components/phoenix-menu/config/config-slider/config-slider.component.js +0 -32
  107. package/dist/esm2015/components/phoenix-menu/pheonix-menu-item/phoenix-menu-item.component.js +0 -29
  108. package/dist/esm2015/components/phoenix-menu/phoenix-menu.component.js +0 -14
  109. package/dist/esm2015/components/phoenix-ui.module.js +0 -94
  110. package/dist/esm2015/components/ui-menu/animate-camera/animate-camera.component.js +0 -77
  111. package/dist/esm2015/components/ui-menu/animate-event/animate-event.component.js +0 -27
  112. package/dist/esm2015/components/ui-menu/ar-toggle/ar-toggle.component.js +0 -46
  113. package/dist/esm2015/components/ui-menu/auto-rotate/auto-rotate.component.js +0 -23
  114. package/dist/esm2015/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.js +0 -72
  115. package/dist/esm2015/components/ui-menu/collections-info/collections-info.component.js +0 -34
  116. package/dist/esm2015/components/ui-menu/dark-theme/dark-theme.component.js +0 -26
  117. package/dist/esm2015/components/ui-menu/event-selector/event-selector.component.js +0 -25
  118. package/dist/esm2015/components/ui-menu/experiment-info/experiment-info.component.js +0 -27
  119. package/dist/esm2015/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.js +0 -36
  120. package/dist/esm2015/components/ui-menu/info-panel/info-panel.component.js +0 -51
  121. package/dist/esm2015/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.js +0 -202
  122. package/dist/esm2015/components/ui-menu/io-options/io-options.component.js +0 -31
  123. package/dist/esm2015/components/ui-menu/main-view-toggle/main-view-toggle.component.js +0 -25
  124. package/dist/esm2015/components/ui-menu/menu-toggle/menu-toggle.component.js +0 -20
  125. package/dist/esm2015/components/ui-menu/object-clipping/object-clipping.component.js +0 -30
  126. package/dist/esm2015/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.js +0 -25
  127. package/dist/esm2015/components/ui-menu/object-selection/object-selection.component.js +0 -39
  128. package/dist/esm2015/components/ui-menu/overlay/overlay.component.js +0 -90
  129. package/dist/esm2015/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.js +0 -52
  130. package/dist/esm2015/components/ui-menu/overlay-view/overlay-view.component.js +0 -34
  131. package/dist/esm2015/components/ui-menu/performance-toggle/performance-toggle.component.js +0 -23
  132. package/dist/esm2015/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.js +0 -64
  133. package/dist/esm2015/components/ui-menu/share-link/share-link.component.js +0 -22
  134. package/dist/esm2015/components/ui-menu/ss-mode/ss-mode.component.js +0 -43
  135. package/dist/esm2015/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.js +0 -32
  136. package/dist/esm2015/components/ui-menu/tree-menu/tree-menu.component.js +0 -71
  137. package/dist/esm2015/components/ui-menu/ui-menu.component.js +0 -22
  138. package/dist/esm2015/components/ui-menu/view-options/view-options.component.js +0 -33
  139. package/dist/esm2015/components/ui-menu/vr-toggle/vr-toggle.component.js +0 -45
  140. package/dist/esm2015/components/ui-menu/zoom-controls/zoom-controls.component.js +0 -63
  141. package/dist/esm2015/index.js +0 -7
  142. package/dist/esm2015/phoenix-ui-components.js +0 -10
  143. package/dist/esm2015/services/event-display.service.js +0 -22
  144. package/dist/esm2015/services/extras/attribute.pipe.js +0 -29
  145. package/dist/esm2015/services/index.js +0 -3
  146. package/dist/fesm2015/phoenix-ui-components.js +0 -1619
  147. package/dist/fesm2015/phoenix-ui-components.js.map +0 -1
  148. package/dist/phoenix-ui-components.metadata.json +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"phoenix-ui-components.js","sources":["../../src/components/nav/nav.component.ts","../../src/components/phoenix-menu/config/config-slider/config-slider.component.ts","../../src/components/phoenix-menu/pheonix-menu-item/phoenix-menu-item.component.ts","../../src/components/phoenix-menu/phoenix-menu.component.ts","../../src/services/event-display.service.ts","../../src/components/ui-menu/animate-camera/animate-camera.component.ts","../../src/components/ui-menu/animate-event/animate-event.component.ts","../../src/components/ui-menu/auto-rotate/auto-rotate.component.ts","../../src/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.ts","../../src/components/ui-menu/collections-info/collections-info.component.ts","../../src/components/ui-menu/dark-theme/dark-theme.component.ts","../../src/components/ui-menu/event-selector/event-selector.component.ts","../../src/components/ui-menu/experiment-info/experiment-info.component.ts","../../src/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.ts","../../src/components/ui-menu/info-panel/info-panel.component.ts","../../src/services/extras/event-data-import.ts","../../src/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.ts","../../src/components/ui-menu/io-options/io-options.component.ts","../../src/components/ui-menu/main-view-toggle/main-view-toggle.component.ts","../../src/components/ui-menu/menu-toggle/menu-toggle.component.ts","../../src/components/ui-menu/object-clipping/object-clipping.component.ts","../../src/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.ts","../../src/components/ui-menu/object-selection/object-selection.component.ts","../../src/components/ui-menu/overlay/overlay.component.ts","../../src/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.ts","../../src/components/ui-menu/overlay-view/overlay-view.component.ts","../../src/components/ui-menu/tree-menu/tree-menu.component.ts","../../src/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.ts","../../src/components/ui-menu/view-options/view-options.component.ts","../../src/components/ui-menu/vr-toggle/vr-toggle.component.ts","../../src/components/ui-menu/ar-toggle/ar-toggle.component.ts","../../src/components/ui-menu/zoom-controls/zoom-controls.component.ts","../../src/components/ui-menu/ss-mode/ss-mode.component.ts","../../src/components/ui-menu/performance-toggle/performance-toggle.component.ts","../../src/components/ui-menu/ui-menu.component.ts","../../src/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.ts","../../src/components/ui-menu/share-link/share-link.component.ts","../../src/components/loader/loader.component.ts","../../src/services/extras/attribute.pipe.ts","../../src/components/embed-menu/embed-menu.component.ts","../../src/components/embed-menu/experiment-link/experiment-link.component.ts","../../src/components/phoenix-ui.module.ts","../../src/phoenix-ui-components.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-nav',\n templateUrl: './nav.component.html',\n styleUrls: ['./nav.component.scss'],\n})\nexport class NavComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'app-config-slider',\n templateUrl: './config-slider.component.html',\n styleUrls: ['./config-slider.component.scss'],\n})\nexport class ConfigSliderComponent {\n @Input() value: number = 0;\n @Input() min: number = 0;\n @Input() max: number = 100;\n @Input() step: number = 1;\n @Input() allowCustomValue: boolean = false;\n @Output() onChange: EventEmitter<number> = new EventEmitter<number>();\n\n onValueChange(value: number) {\n if (value) {\n this.onChange.emit(value);\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { PhoenixMenuNode } from 'phoenix-event-display';\n\n@Component({\n selector: 'app-phoenix-menu-item',\n templateUrl: './phoenix-menu-item.component.html',\n styleUrls: ['./phoenix-menu-item.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class PhoenixMenuItemComponent {\n @Input() currentNode: PhoenixMenuNode;\n @ViewChild('phoenixMenuItem') phoenixMenuItem: ElementRef<HTMLDivElement>;\n configTop: number;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n calculateConfigTop() {\n if (this.phoenixMenuItem) {\n this.configTop =\n this.phoenixMenuItem.nativeElement.getBoundingClientRect().top;\n this.cdr.detectChanges();\n }\n }\n}\n","import { Component, Input } from '@angular/core';\nimport type { PhoenixMenuNode } from 'phoenix-event-display';\n\n@Component({\n selector: 'app-phoenix-menu',\n templateUrl: './phoenix-menu.component.html',\n styleUrls: ['./phoenix-menu.component.scss'],\n})\nexport class PhoenixMenuComponent {\n @Input() rootNode: PhoenixMenuNode;\n}\n","import { Injectable } from '@angular/core';\nimport { EventDisplay } from 'phoenix-event-display';\n\n/**\n * Service for all event display related functions.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class EventDisplayService extends EventDisplay {\n /**\n * Instantiate the event display by calling the parent constructor.\n */\n constructor() {\n super();\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { AnimationPreset, SceneManager } from 'phoenix-event-display';\nimport { EventDisplayService } from '../../../services/event-display.service';\n\nexport const defaultAnimationPresets: {\n [key: string]: AnimationPreset;\n} = {\n 'Preset 1': {\n positions: [\n {\n position: [11976, 7262, 11927],\n duration: 1000,\n },\n {\n position: [-1000, 0, 11927],\n duration: 2000,\n },\n {\n position: [2000, 500, 1000],\n duration: 3500,\n },\n {\n position: [5000, 2000, 1000],\n duration: 3000,\n },\n {\n position: [5000, 2000, 1000],\n duration: 2000,\n },\n {\n position: [11976, 7262, 11927],\n duration: 1000,\n },\n ],\n animateEventAfterInterval: 5000,\n collisionDuration: 6000,\n },\n};\n\n@Component({\n selector: 'app-animate-camera',\n templateUrl: './animate-camera.component.html',\n styleUrls: ['./animate-camera.component.scss'],\n})\nexport class AnimateCameraComponent {\n @Input() animationPresets = defaultAnimationPresets;\n animationPresetsKeys = Object.keys(this.animationPresets);\n isAnimating = false;\n\n constructor(private eventDisplay: EventDisplayService) {}\n\n animatePreset(preset: string) {\n this.setDetectorOpacity(0.2);\n this.eventDisplay.animatePreset(this.animationPresets[preset], () => {\n this.setDetectorOpacity(1);\n });\n }\n\n animateCamera() {\n if (!this.isAnimating) {\n this.isAnimating = true;\n this.eventDisplay.animateThroughEvent([11976, 7262, 11927], 3000, () => {\n this.isAnimating = false;\n });\n }\n }\n\n private setDetectorOpacity(opacity: number) {\n this.eventDisplay\n .getThreeManager()\n .getSceneManager()\n .setGeometryOpacity(SceneManager.GEOMETRIES_ID, opacity);\n }\n}\n","import { Component } from '@angular/core';\nimport { EventDisplayService } from '../../../services/event-display.service';\n\n@Component({\n selector: 'app-animate-event',\n templateUrl: './animate-event.component.html',\n styleUrls: ['./animate-event.component.scss'],\n})\nexport class AnimateEventComponent {\n isAnimating: boolean = false;\n\n constructor(private eventDisplay: EventDisplayService) {}\n\n toggleAnimateEvent() {\n if (!this.isAnimating) {\n this.isAnimating = true;\n this.eventDisplay.animateEventWithCollision(10000, () => {\n this.isAnimating = false;\n });\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { EventDisplayService } from '../../../services/event-display.service';\n\n@Component({\n selector: 'app-auto-rotate',\n templateUrl: './auto-rotate.component.html',\n styleUrls: ['./auto-rotate.component.scss'],\n})\nexport class AutoRotateComponent {\n autoRotate = false;\n\n constructor(private eventDisplay: EventDisplayService) {}\n\n toggleAutoRotate() {\n this.autoRotate = !this.autoRotate;\n this.eventDisplay.getUIManager().setAutoRotate(this.autoRotate);\n }\n}\n","import { Component, OnInit, Input, ElementRef } from '@angular/core';\nimport {\n PrettySymbols,\n ActiveVariable,\n SceneManager,\n} from 'phoenix-event-display';\nimport { EventDisplayService } from '../../../../services/event-display.service';\n\n@Component({\n selector: 'app-collections-info-overlay',\n templateUrl: './collections-info-overlay.component.html',\n styleUrls: ['./collections-info-overlay.component.scss'],\n})\nexport class CollectionsInfoOverlayComponent implements OnInit {\n @Input() showObjectsInfo: boolean;\n collections: string[];\n selectedCollection: string;\n showingCollection: any;\n collectionColumns: string[];\n getPrettySymbol = PrettySymbols.getPrettySymbol;\n activeObject: ActiveVariable<string>;\n\n constructor(\n private elementRef: ElementRef,\n private eventDisplay: EventDisplayService\n ) {}\n\n ngOnInit() {\n this.eventDisplay.listenToDisplayedEventChange(\n (_event) => (this.collections = this.eventDisplay.getCollections())\n );\n this.activeObject = this.eventDisplay.getActiveObjectId();\n this.activeObject.onUpdate((value: string) => {\n if (document.getElementById(value)) {\n document.getElementById(value).scrollIntoView(false);\n }\n });\n }\n\n changeCollection(selectedCollection: string) {\n const eventDataGroup = this.getEventDataGroup();\n this.selectedCollection = selectedCollection;\n\n this.showingCollection = this.eventDisplay\n .getCollection(selectedCollection)\n .map((object: any) => ({\n ...object,\n isCut: !eventDataGroup.getObjectByProperty('uuid', object.uuid)\n ?.visible,\n }));\n\n this.collectionColumns = Object.keys(this.showingCollection[0]).filter(\n (column) => !['uuid', 'hits', 'isCut'].includes(column) // FIXME - this is an ugly hack. But currently hits from tracks make track collections unusable. Better to have exlusion list passed in.\n );\n }\n\n lookAtObject(uuid: string) {\n if (uuid) {\n this.activeObject.update(uuid);\n this.eventDisplay.lookAtObject(uuid);\n }\n }\n\n highlightObject(uuid: string) {\n if (uuid) {\n this.activeObject.update(uuid);\n this.eventDisplay.highlightObject(uuid);\n }\n }\n\n addLabel(index: number, uuid: string) {\n const labelValue = this.elementRef.nativeElement.querySelector(\n `#label${index}`\n ).value;\n if (this.selectedCollection) {\n // Empty labelValue will remove the label object\n this.eventDisplay.addLabelToObject(\n labelValue,\n this.selectedCollection,\n index,\n uuid\n );\n }\n }\n\n private getEventDataGroup() {\n return this.eventDisplay\n .getThreeManager()\n .getSceneManager()\n .getScene()\n .getObjectByName(SceneManager.EVENT_DATA_ID);\n }\n}\n","import { Component, OnInit, ComponentRef, OnDestroy } from '@angular/core';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { CollectionsInfoOverlayComponent } from './collections-info-overlay/collections-info-overlay.component';\n\n@Component({\n selector: 'app-collections-info',\n templateUrl: './collections-info.component.html',\n styleUrls: ['./collections-info.component.scss'],\n})\nexport class CollectionsInfoComponent implements OnInit, OnDestroy {\n showObjectsInfo = false;\n overlayWindow: ComponentRef<CollectionsInfoOverlayComponent>;\n\n constructor(private overlay: Overlay) {}\n\n ngOnInit() {\n const overlayRef = this.overlay.create();\n const overlayPortal = new ComponentPortal(CollectionsInfoOverlayComponent);\n this.overlayWindow = overlayRef.attach(overlayPortal);\n this.overlayWindow.instance.showObjectsInfo = this.showObjectsInfo;\n }\n\n ngOnDestroy(): void {\n this.overlayWindow.destroy();\n }\n\n toggleOverlay() {\n this.showObjectsInfo = !this.showObjectsInfo;\n this.overlayWindow.instance.showObjectsInfo = this.showObjectsInfo;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { EventDisplayService } from '../../../services/event-display.service';\n\n@Component({\n selector: 'app-dark-theme',\n templateUrl: './dark-theme.component.html',\n styleUrls: ['./dark-theme.component.scss'],\n})\nexport class DarkThemeComponent implements OnInit {\n darkTheme = false;\n\n constructor(private eventDisplay: EventDisplayService) {}\n\n ngOnInit(): void {\n this.darkTheme = this.eventDisplay.getUIManager().getDarkTheme();\n }\n\n setDarkTheme() {\n this.darkTheme = !this.darkTheme;\n this.eventDisplay.getUIManager().setDarkTheme(this.darkTheme);\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { EventDisplayService } from '../../../services/event-display.service';\n\n@Component({\n selector: 'app-event-selector',\n templateUrl: './event-selector.component.html',\n styleUrls: ['./event-selector.component.scss'],\n})\nexport class EventSelectorComponent implements OnInit {\n // Array containing the keys of the multiple loaded events\n events: string[];\n\n constructor(private eventDisplay: EventDisplayService) {}\n\n ngOnInit() {\n this.eventDisplay.listenToLoadedEventsChange(\n (events) => (this.events = events)\n );\n }\n\n changeEvent(selected: any) {\n const value = selected.target.value;\n this.eventDisplay.loadEvent(value);\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { EventDisplayService } from '../../../services/event-display.service';\n\n@Component({\n selector: 'app-experiment-info',\n templateUrl: './experiment-info.component.html',\n styleUrls: ['./experiment-info.component.scss'],\n})\nexport class ExperimentInfoComponent implements OnInit {\n experimentInfo: any[];\n @Input() experiment: string;\n @Input() experimentTagline: string;\n\n constructor(private eventDisplay: EventDisplayService) {}\n\n ngOnInit(): void {\n this.eventDisplay.listenToDisplayedEventChange(() => {\n this.experimentInfo = this.eventDisplay.getEventMetadata();\n });\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { EventDisplayService } from '../../../../services/event-display.service';\n\n/**\n * Component for displaying information from the logger\n */\n@Component({\n selector: 'app-info-panel-overlay',\n templateUrl: './info-panel-overlay.component.html',\n styleUrls: ['./info-panel-overlay.component.scss'],\n})\nexport class InfoPanelOverlayComponent implements OnInit {\n /** @ignore */\n @Input() showInfoPanel: boolean;\n /** List of actions to be displayed in the info panel */\n actionsList = [];\n\n /**\n * Create the information panel overlay\n * @param infoLogger Service containing operations related to info logs\n */\n constructor(private eventDisplay: EventDisplayService) {}\n\n /**\n * Get the list of logs from the info logger service\n */\n ngOnInit() {\n this.actionsList = this.eventDisplay.getInfoLogger().getInfoLoggerList();\n }\n}\n","import { Component, OnInit, ComponentRef, OnDestroy } from '@angular/core';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { InfoPanelOverlayComponent } from './info-panel-overlay/info-panel-overlay.component';\n\n/**\n * Component for toggling info panel overlay\n */\n@Component({\n selector: 'app-info-panel',\n templateUrl: './info-panel.component.html',\n styleUrls: ['./info-panel.component.scss'],\n})\nexport class InfoPanelComponent implements OnInit, OnDestroy {\n /** @ignore */\n showInfoPanel = false;\n /** Information panel overlay window */\n overlayWindow: ComponentRef<InfoPanelOverlayComponent>;\n\n /**\n * Create the info panel toggle\n * @param overlay Info panel overlay containing logger data\n */\n constructor(private overlay: Overlay) {}\n\n /**\n * Create the info panel overlay\n */\n ngOnInit() {\n const overlayRef = this.overlay.create();\n const overlayPortal = new ComponentPortal(InfoPanelOverlayComponent);\n this.overlayWindow = overlayRef.attach(overlayPortal);\n this.overlayWindow.instance.showInfoPanel = this.showInfoPanel;\n }\n\n /**\n * Destroy the info panel overlay\n */\n ngOnDestroy(): void {\n this.overlayWindow.destroy();\n }\n\n /**\n * Toggle the info panel overlay\n */\n toggleOverlay() {\n this.showInfoPanel = !this.showInfoPanel;\n this.overlayWindow.instance.showInfoPanel = this.showInfoPanel;\n }\n}\n","export enum EventDataFormat {\n JSON = 'JSON',\n JIVEXML = 'JIVEXML',\n IG = 'IG',\n ZIP = 'ZIP',\n}\n\nexport type EventDataImportOption = EventDataFormat | ImportOption;\n\nexport class ImportOption {\n constructor(\n public format: string,\n public fileType: string,\n public handler: (files: FileList) => void,\n public accept?: string\n ) {}\n}\n","import { OnInit, Component, Input } from '@angular/core';\nimport { CMSLoader, JiveXMLLoader, ScriptLoader } from 'phoenix-event-display';\nimport JSZip from 'jszip';\nimport { EventDisplayService } from '../../../../services/event-display.service';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport {\n EventDataFormat,\n EventDataImportOption,\n ImportOption,\n} from '../../../../services/extras/event-data-import';\n\n@Component({\n selector: 'app-io-options-dialog',\n templateUrl: './io-options-dialog.component.html',\n styleUrls: ['./io-options-dialog.component.scss'],\n})\nexport class IOOptionsDialogComponent implements OnInit {\n @Input()\n eventDataImportOptions: EventDataImportOption[] = [EventDataFormat.JSON];\n\n eventDataOptionsWithHandler: ImportOption[];\n\n private supportedEventDataFormats = [\n new ImportOption(\n EventDataFormat.JSON,\n '.json',\n this.handleJSONEventDataInput.bind(this),\n 'application/json'\n ),\n new ImportOption(\n EventDataFormat.JIVEXML,\n '.xml',\n this.handleJiveXMLDataInput.bind(this),\n 'text/xml'\n ),\n new ImportOption(\n EventDataFormat.ZIP,\n '.zip',\n this.handleZipEventDataInput.bind(this),\n '.zip'\n ),\n new ImportOption(\n EventDataFormat.IG,\n '.ig',\n this.handleIgEventDataInput.bind(this),\n '.ig'\n ),\n ];\n\n constructor(\n private eventDisplay: EventDisplayService,\n public dialogRef: MatDialogRef<IOOptionsDialogComponent>\n ) {}\n\n ngOnInit() {\n this.eventDataOptionsWithHandler = this.supportedEventDataFormats.filter(\n (eventDataFormat) =>\n this.eventDataImportOptions.includes(\n eventDataFormat.format as EventDataFormat\n )\n );\n\n this.eventDataImportOptions.forEach((eventDataImportOption) => {\n if (eventDataImportOption instanceof ImportOption) {\n const importHandler = eventDataImportOption.handler.bind(this);\n eventDataImportOption.handler = (files: FileList) => {\n importHandler(files);\n this.onClose();\n };\n this.eventDataOptionsWithHandler.push(eventDataImportOption);\n }\n });\n }\n\n getSupportedEventDataFormats() {\n return this.eventDataImportOptions\n .map((format) => {\n if (format instanceof ImportOption) {\n return format.format;\n }\n\n return format;\n })\n .filter((format) => format !== 'ZIP')\n .join(', ');\n }\n\n onClose(): void {\n this.dialogRef.close();\n }\n\n handleJSONEventDataInput(files: FileList) {\n const callback = (content: any) => {\n const json = typeof content === 'string' ? JSON.parse(content) : content;\n this.eventDisplay.parsePhoenixEvents(json);\n };\n this.handleFileInput(files[0], 'json', callback);\n }\n\n handleJiveXMLDataInput(files: FileList) {\n const callback = (content: any) => {\n const jiveloader = new JiveXMLLoader();\n jiveloader.process(content);\n const eventData = jiveloader.getEventData();\n this.eventDisplay.buildEventDataFromJSON(eventData);\n };\n this.handleFileInput(files[0], 'xml', callback);\n }\n\n handleOBJInput(files: FileList) {\n const callback = (content: any, name: string) => {\n this.eventDisplay.parseOBJGeometry(content, name);\n };\n this.handleFileInput(files[0], 'obj', callback);\n }\n\n handleSceneInput(files: FileList) {\n const callback = (content: any) => {\n this.eventDisplay.parsePhoenixDisplay(content);\n };\n this.handleFileInput(files[0], 'phnx', callback);\n }\n\n handleGLTFInput(files: FileList) {\n const callback = (content: any, name: string) => {\n this.eventDisplay.parseGLTFGeometry(content, name);\n };\n this.handleFileInput(files[0], 'gltf', callback);\n }\n\n handlePhoenixInput(files: FileList) {\n const callback = (content: any) => {\n this.eventDisplay.parsePhoenixDisplay(content);\n };\n this.handleFileInput(files[0], 'phnx', callback);\n }\n\n handleROOTInput(files: FileList) {\n ScriptLoader.loadJSRootScripts().then((JSROOT: any) => {\n const objectName = prompt('Enter object name in ROOT file');\n JSROOT.openFile(files[0]).then((file: any) => {\n file.readObject(objectName).then((obj: any) => {\n this.eventDisplay.loadJSONGeometry(\n JSROOT.GEO.build(obj, { dflt_colors: true }).toJSON(),\n files[0].name.split('.')[0]\n );\n });\n });\n });\n this.onClose();\n }\n\n handleRootJSONInput(files: FileList) {\n ScriptLoader.loadJSRootScripts().then((JSROOT: any) => {\n const callback = (content: any, name: string) => {\n this.eventDisplay.loadJSONGeometry(\n JSROOT.GEO.build(JSROOT.parse(content), {\n dflt_colors: true,\n }).toJSON(),\n name\n );\n };\n this.handleFileInput(files[0], 'gz', callback);\n });\n }\n\n handleIgEventDataInput(files: FileList) {\n const cmsLoader = new CMSLoader();\n cmsLoader.readIgArchive(files[0], (allEvents: any[]) => {\n const allEventsData = cmsLoader.getAllEventsData(allEvents);\n this.eventDisplay.parsePhoenixEvents(allEventsData);\n this.onClose();\n });\n }\n\n handleZipEventDataInput(files: FileList) {\n if (this.isFileOfExtension(files[0], 'zip')) {\n this.handleZipInput(files[0], (allFilesWithData) => {\n const allEventsObject = {};\n\n // JSON event data\n Object.keys(allFilesWithData)\n .filter((fileName) => fileName.endsWith('.json'))\n .forEach((fileName) => {\n Object.assign(\n allEventsObject,\n JSON.parse(allFilesWithData[fileName])\n );\n });\n\n // JiveXML event data\n const jiveloader = new JiveXMLLoader();\n Object.keys(allFilesWithData)\n .filter((fileName) => fileName.endsWith('.xml'))\n .forEach((fileName) => {\n jiveloader.process(allFilesWithData[fileName]);\n const eventData = jiveloader.getEventData();\n Object.assign(allEventsObject, { [fileName]: eventData });\n });\n\n this.eventDisplay.parsePhoenixEvents(allEventsObject);\n\n this.onClose();\n });\n } else {\n console.error('Error: Invalid file format!');\n this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');\n }\n }\n\n async handleZipInput(\n file: File,\n callback: (allFilesWithData: { [key: string]: string }) => void\n ) {\n const allFilesWithData: { [key: string]: string } = {};\n // Using a try catch block to catch any errors in Promises\n try {\n const zipArchive = new JSZip();\n await zipArchive.loadAsync(file);\n const allFiles = Object.keys(zipArchive.files);\n for (const singleFile of allFiles) {\n const fileData = await zipArchive.file(singleFile).async('string');\n allFilesWithData[singleFile] = fileData;\n }\n callback(allFilesWithData);\n } catch (error) {\n console.error('Error while reading zip', error);\n this.eventDisplay.getInfoLogger().add('Could not read zip file', 'Error');\n }\n }\n\n handleFileInput(\n file: File,\n extension: string,\n callback: (result: string, fileName?: string) => void\n ) {\n const reader = new FileReader();\n if (this.isFileOfExtension(file, extension)) {\n reader.onload = () => {\n callback(reader.result.toString(), file.name.split('.')[0]);\n };\n reader.readAsText(file);\n } else {\n console.error('Error: Invalid file format!');\n this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');\n }\n this.onClose();\n }\n\n private isFileOfExtension(file: File, extension: string) {\n return file.name.split('.').pop() === extension;\n }\n\n saveScene() {\n this.eventDisplay.exportPhoenixDisplay();\n }\n\n exportOBJ() {\n this.eventDisplay.exportToOBJ();\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n EventDataFormat,\n EventDataImportOption,\n} from '../../../services/extras/event-data-import';\nimport { IOOptionsDialogComponent } from './io-options-dialog/io-options-dialog.component';\n\n@Component({\n selector: 'app-io-options',\n templateUrl: './io-options.component.html',\n styleUrls: ['./io-options.component.scss'],\n})\nexport class IoOptionsComponent {\n @Input()\n eventDataImportOptions: EventDataImportOption[] =\n Object.values(EventDataFormat);\n\n constructor(private dialog: MatDialog) {}\n\n openIODialog() {\n const dialogRef = this.dialog.open(IOOptionsDialogComponent, {\n panelClass: 'dialog',\n });\n dialogRef.componentInstance.eventDataImportOptions =\n this.eventDataImportOptions;\n }\n}\n","import { Component } from '@angular/core';\nimport { EventDisplayService } from '../../../services/event-display.service';\n\n@Component({\n selector: 'app-main-view-toggle',\n templateUrl: './main-view-toggle.component.html',\n styleUrls: ['./main-view-toggle.component.scss'],\n})\nexport class MainViewToggleComponent {\n orthographicView: boolean = false;\n\n constructor(private eventDisplay: EventDisplayService) {}\n\n switchMainView() {\n this.orthographicView = !this.orthographicView;\n this.eventDisplay\n .getUIManager()\n .toggleOrthographicView(this.orthographicView);\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'app-menu-toggle',\n templateUrl: './menu-toggle.component.html',\n styleUrls: ['./menu-toggle.component.scss'],\n})\nexport class MenuToggleComponent {\n @Input() icon: string;\n @Input() active: boolean;\n @Input() tooltip: string;\n @Input() disabled: boolean = false;\n}\n","import { Component } from '@angular/core';\nimport { MatSliderChange } from '@angular/material/slider';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { EventDisplayService } from '../../../services/event-display.service';\n\n@Component({\n selector: 'app-object-clipping',\n templateUrl: './object-clipping.component.html',\n styleUrls: ['./object-clipping.component.scss'],\n})\nexport class ObjectClippingComponent {\n clippingEnabled: boolean;\n clippingAngle: number;\n\n constructor(private eventDisplay: EventDisplayService) {\n const stateManager = this.eventDisplay.getStateManager();\n stateManager.clippingEnabled.onUpdate(\n (clippingValue) => (this.clippingEnabled = clippingValue)\n );\n stateManager.clippingAngle.onUpdate(\n (value) => (this.clippingAngle = value)\n );\n }\n\n changeClippingAngle(change: MatSliderChange) {\n const angle = change.value;\n this.eventDisplay.getUIManager().rotateClipping(angle);\n }\n\n toggleClipping(change: MatCheckboxChange) {\n const value = change.checked;\n this.eventDisplay.getUIManager().setClipping(value);\n this.clippingEnabled = value;\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { EventDisplayService } from '../../../../services/event-display.service';\n\n@Component({\n selector: 'app-object-selection-overlay',\n templateUrl: './object-selection-overlay.component.html',\n styleUrls: ['./object-selection-overlay.component.scss'],\n})\nexport class ObjectSelectionOverlayComponent implements OnInit {\n // Attributes for displaying the information of selected objects\n @Input() hiddenSelectedInfo: boolean;\n selectedObject = { name: 'Object', attributes: [] };\n\n constructor(private eventDisplay: EventDisplayService) {}\n\n ngOnInit() {\n this.eventDisplay.allowSelection(this.selectedObject);\n }\n}\n","import { Component, OnInit, ComponentRef, OnDestroy } from '@angular/core';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ObjectSelectionOverlayComponent } from './object-selection-overlay/object-selection-overlay.component';\nimport { EventDisplayService } from '../../../services/event-display.service';\n\n@Component({\n selector: 'app-object-selection',\n templateUrl: './object-selection.component.html',\n styleUrls: ['./object-selection.component.scss'],\n})\nexport class ObjectSelectionComponent implements OnInit, OnDestroy {\n // Attributes for displaying the information of selected objects\n hiddenSelectedInfo = true;\n overlayWindow: ComponentRef<ObjectSelectionOverlayComponent>;\n\n constructor(\n private overlay: Overlay,\n private eventDisplay: EventDisplayService\n ) {}\n\n ngOnInit() {\n const overlayRef = this.overlay.create();\n const overlayPortal = new ComponentPortal(ObjectSelectionOverlayComponent);\n this.overlayWindow = overlayRef.attach(overlayPortal);\n this.overlayWindow.instance.hiddenSelectedInfo = this.hiddenSelectedInfo;\n }\n\n ngOnDestroy(): void {\n this.overlayWindow.destroy();\n }\n\n toggleOverlay() {\n this.hiddenSelectedInfo = !this.hiddenSelectedInfo;\n this.overlayWindow.instance.hiddenSelectedInfo = this.hiddenSelectedInfo;\n this.eventDisplay.enableSelecting(!this.hiddenSelectedInfo);\n }\n}\n","import {\n Component,\n Input,\n ViewChild,\n AfterViewInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ElementRef } from '@angular/core';\nimport { ResizeSensor } from 'css-element-queries';\n\n/**\n * Component for overlay panel.\n */\n@Component({\n selector: 'app-overlay',\n templateUrl: './overlay.component.html',\n styleUrls: ['./overlay.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class OverlayComponent implements AfterViewInit {\n /** Title of the overlay. */\n @Input() overlayTitle: string;\n /** If the overlay is open or not. */\n @Input() active: boolean = false;\n /** Icon of the overlay header. */\n @Input() icon: string;\n /** If the overlay is resizable. */\n @Input() resizable: boolean = false;\n /** If the overlay body is transparent or not. */\n @Input() transparentBody: boolean = false;\n /** If the overlay body is visible or not. */\n showBody: boolean = true;\n\n // ********************************************************************************\n // * Below code is specific to the overlay resize feature. (LOOK INTO CSS RESIZE) *\n // ********************************************************************************\n\n /** Complete overlay card containing both header and body. */\n @ViewChild('overlayCard') overlayCard: ElementRef;\n /** Handle for resizing the overlay. */\n @ViewChild('resizeHandleCorner') resizeHandleCorner: ElementRef;\n /** Minimum resizable width. */\n private MIN_RES_WIDTH: number = 300;\n /** Minimum resizable height */\n private MIN_RES_HEIGHT: number = 100;\n\n /**\n * Move the resizable handle to the bottom right after the component is created.\n */\n ngAfterViewInit() {\n if (this.resizable) {\n const resizeHandleElement = this.resizeHandleCorner.nativeElement;\n resizeHandleElement.style.bottom = '0';\n resizeHandleElement.style.right = '0';\n\n new ResizeSensor(this.overlayCard.nativeElement, () => {\n this.resetHandlePosition();\n });\n\n window.addEventListener('resize', () => {\n this.resetHandlePosition();\n });\n }\n }\n\n /**\n * Resize the overlay card when the resize handle is dragged.\n */\n onResize() {\n const resizeHandleElement = this.resizeHandleCorner.nativeElement;\n const overlayCardElement = this.overlayCard.nativeElement;\n\n const dragRect = resizeHandleElement.getBoundingClientRect();\n const overlayRect = overlayCardElement.getBoundingClientRect();\n\n const width = dragRect.left - overlayRect.left + dragRect.width;\n const height = dragRect.top - overlayRect.top + dragRect.height;\n\n this.setHandleTransform(overlayRect, dragRect);\n\n if (width > this.MIN_RES_WIDTH && height > this.MIN_RES_HEIGHT) {\n overlayCardElement.style.width = width + 'px';\n overlayCardElement.style.height = height + 'px';\n }\n }\n\n /**\n * Reset resize handle position.\n */\n resetHandlePosition() {\n const resizeHandleElement = this.resizeHandleCorner.nativeElement;\n\n this.setHandleTransform(\n this.overlayCard.nativeElement.getBoundingClientRect(),\n resizeHandleElement.getBoundingClientRect()\n );\n\n resizeHandleElement.style.bottom = null;\n resizeHandleElement.style.right = null;\n }\n\n /**\n * Set the position of the resize handle using transform3d.\n * @param overlayRect Bounding client rectangle of the overlay card.\n * @param dragRect Bounding client rectangle of the resize handle.\n */\n private setHandleTransform(overlayRect: any, dragRect: any) {\n const translateX = overlayRect.width - dragRect.width;\n const translateY = overlayRect.height - dragRect.height;\n this.resizeHandleCorner.nativeElement.style.transform = `translate3d(${translateX}px, ${translateY}px, 0)`;\n }\n}\n","import { Component, ViewChild, AfterViewInit, Input } from '@angular/core';\nimport type { ElementRef } from '@angular/core';\nimport { EventDisplayService } from '../../../../services/event-display.service';\n\n@Component({\n selector: 'app-overlay-view-window',\n templateUrl: './overlay-view-window.component.html',\n styleUrls: ['./overlay-view-window.component.scss'],\n})\nexport class OverlayViewWindowComponent implements AfterViewInit {\n @Input() showOverlay = true;\n transparentBody = false;\n orthographicView = false;\n overlayViewFixed = false;\n @ViewChild('overlayWindow') overlayWindow: ElementRef<HTMLCanvasElement>;\n\n constructor(private eventDisplay: EventDisplayService) {}\n\n ngAfterViewInit(): void {\n const canvas = this.initializeCanvas(this.overlayWindow.nativeElement);\n this.eventDisplay.setOverlayRenderer(canvas);\n }\n\n initializeCanvas(canvas: HTMLCanvasElement): HTMLCanvasElement {\n const width = window.innerWidth / 2.5;\n const height = window.innerHeight / 2.5;\n canvas.width = width;\n canvas.height = height;\n canvas.style.width = width.toString() + ' px';\n canvas.style.height = height.toString() + ' px';\n return canvas;\n }\n\n switchOverlayView() {\n this.orthographicView = !this.orthographicView;\n this.eventDisplay\n .getUIManager()\n .toggleOrthographicView(this.orthographicView);\n }\n\n fixOverlayView() {\n this.overlayViewFixed = !this.overlayViewFixed;\n this.eventDisplay.fixOverlayView(this.overlayViewFixed);\n }\n\n toggleBgTransparency() {\n this.transparentBody = !this.transparentBody;\n }\n}\n","import { Component, ComponentRef, OnDestroy, OnInit } from '@angular/core';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { OverlayViewWindowComponent } from './overlay-view-window/overlay-view-window.component';\n\n@Component({\n selector: 'app-overlay-view',\n templateUrl: './overlay-view.component.html',\n styleUrls: ['./overlay-view.component.scss'],\n})\nexport class OverlayViewComponent implements OnInit, OnDestroy {\n overlayWindow: ComponentRef<OverlayViewWindowComponent>;\n showOverlay = false;\n\n constructor(private overlay: Overlay) {}\n\n ngOnInit() {\n const overlayRef = this.overlay.create();\n const overlayPortal = new ComponentPortal(OverlayViewWindowComponent);\n this.overlayWindow = overlayRef.attach(overlayPortal);\n this.overlayWindow.instance.showOverlay = this.showOverlay;\n }\n\n ngOnDestroy(): void {\n this.overlayWindow.destroy();\n }\n\n toggleOverlay() {\n this.showOverlay = !this.showOverlay;\n this.overlayWindow.instance.showOverlay = this.showOverlay;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { TreeMenuItemComponent } from './tree-menu-item/tree-menu-item.component';\n\n@Component({\n selector: 'app-tree-menu',\n templateUrl: './tree-menu.component.html',\n styleUrls: ['./tree-menu.component.scss'],\n})\nexport class TreeMenuComponent implements OnInit {\n rootNode = {\n name: 'Atlas Detector',\n geometryId: 'AtlasDetector',\n children: [\n {\n name: 'Magnet systems',\n geometryId: 'MagnetSys',\n children: [\n {\n name: 'Toroids',\n geometryId: 'Toroids',\n },\n ],\n },\n {\n name: 'Calorimeters',\n geometryId: 'CaloSys',\n children: [\n {\n name: 'LAr Barrel',\n geometryId: 'LAr Barrel',\n },\n {\n name: 'LAr EC1',\n geometryId: 'LAr EC1',\n },\n {\n name: 'LAr EC2',\n geometryId: 'LAr EC2',\n },\n {\n name: 'Tile Cal',\n geometryId: 'Tile Cal',\n },\n ],\n },\n {\n name: 'Inner detector',\n geometryId: 'InDetSys',\n children: [\n {\n name: 'Pixel',\n geometryId: 'Pixel',\n },\n {\n name: 'SCT',\n geometryId: 'SCT',\n },\n {\n name: 'TRT',\n geometryId: 'TRT',\n },\n ],\n },\n ],\n };\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","import { Component, Input, ViewChildren } from '@angular/core';\nimport type { QueryList } from '@angular/core';\nimport { EventDisplayService } from '../../../../services/event-display.service';\n\n@Component({\n selector: 'app-tree-menu-item',\n templateUrl: './tree-menu-item.component.html',\n styleUrls: ['./tree-menu-item.component.scss'],\n})\nexport class TreeMenuItemComponent {\n @ViewChildren(TreeMenuItemComponent)\n children!: QueryList<TreeMenuItemComponent>;\n @Input() node: { name: string; geometryId: string; children: [] };\n isExpanded = false;\n visible = true;\n\n constructor(private eventDisplay: EventDisplayService) {}\n\n public toggleVisibility(visible: boolean) {\n console.log(\"hi! it's \" + this.node.name);\n this.eventDisplay\n .getUIManager()\n .geometryVisibility(this.node.geometryId, visible);\n this.visible = visible;\n this.children.forEach((child) => child.toggleVisibility(visible));\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { PresetView } from 'phoenix-event-display';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { EventDisplayService } from '../../../services/event-display.service';\n\n@Component({\n selector: 'app-view-options',\n templateUrl: './view-options.component.html',\n styleUrls: ['./view-options.component.scss'],\n})\nexport class ViewOptionsComponent implements OnInit {\n views: PresetView[];\n\n constructor(private eventDisplay: EventDisplayService) {}\n\n ngOnInit(): void {\n this.views = this.eventDisplay.getUIManager().getPresetViews();\n }\n\n displayView($event: any, view: PresetView) {\n $event.stopPropagation();\n this.eventDisplay.getUIManager().displayView(view);\n }\n\n setAxis(change: MatCheckboxChange) {\n const value = change.checked;\n this.eventDisplay.getUIManager().setShowAxis(value);\n }\n\n setGrid(change: MatCheckboxChange) {\n const value = change.checked;\n this.eventDisplay.getUIManager().setShowGrid(value);\n }\n}\n","import { Component } from '@angular/core';\nimport { EventDisplayService } from '../../../services/event-display.service';\nimport { VRManager, XRSessionType } from 'phoenix-event-display';\n\n@Component({\n selector: 'app-vr-toggle',\n templateUrl: './vr-toggle.component.html',\n styleUrls: ['./vr-toggle.component.scss'],\n})\nexport class VrToggleComponent {\n vrSupported: boolean = false;\n vrActive: boolean = false;\n\n constructor(private eventDisplay: EventDisplayService) {\n // NOTE: WebXR needs secure HTTPS context\n if ('xr' in navigator) {\n (navigator as any)?.xr\n ?.isSessionSupported?.(VRManager.SESSION_TYPE)\n .then((supported: boolean) => {\n if (supported) {\n this.vrSupported = true;\n }\n });\n } // else VR not supported\n }\n\n toggleVr() {\n // If toggling VR on\n if (!this.vrActive) {\n this.eventDisplay.initXR(XRSessionType.VR, () => {\n this.vrActive = false;\n // Disable renderer XR and remove animation loop\n this.eventDisplay.endXR(XRSessionType.VR);\n });\n this.vrActive = true;\n } else {\n this.eventDisplay.endXR(XRSessionType.VR);\n this.vrActive = false;\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { EventDisplayService } from '../../../services/event-display.service';\nimport { ARManager, XRSessionType } from 'phoenix-event-display';\n\n@Component({\n selector: 'app-ar-toggle',\n templateUrl: './ar-toggle.component.html',\n styleUrls: ['./ar-toggle.component.scss'],\n})\nexport class ArToggleComponent {\n arSupported: boolean = false;\n arActive: boolean = false;\n\n constructor(private eventDisplay: EventDisplayService) {\n // NOTE: WebXR needs secure HTTPS context\n if ('xr' in navigator) {\n (navigator as any).xr\n ?.isSessionSupported?.(ARManager.SESSION_TYPE)\n .then((supported: boolean) => {\n if (supported) {\n this.arSupported = true;\n }\n });\n } // else AR not supported\n }\n\n toggleAr(enableDomOverlay: boolean = true) {\n ARManager.enableDomOverlay = enableDomOverlay;\n\n // If toggling AR on\n if (!this.arActive) {\n this.eventDisplay.initXR(XRSessionType.AR, () => {\n this.arActive = false;\n // Disable renderer XR and remove animation loop\n this.eventDisplay.endXR(XRSessionType.AR);\n });\n this.arActive = true;\n } else {\n this.eventDisplay.endXR(XRSessionType.AR);\n this.arActive = false;\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { EventDisplayService } from '../../../services/event-display.service';\n\n/**\n * Component for adding zoom controls for the main and overlay cameras.\n */\n@Component({\n selector: 'app-zoom-controls',\n templateUrl: './zoom-controls.component.html',\n styleUrls: ['./zoom-controls.component.scss'],\n})\nexport class ZoomControlsComponent {\n /** All camera being used by the scene. */\n allCameras: any[];\n /** Factor to zoom by. */\n private zoomFactor: number = 1.1;\n /** Timeout for clearing mouse hold. */\n private zoomTimeout: any;\n /** The speed and time of zoom. */\n private zoomTime: number = 200;\n\n constructor(private eventDisplay: EventDisplayService) {}\n\n /**\n * Zoom all the cameras by a specific zoom factor.\n * The factor may either be greater (zoom in) or smaller (zoom out) than 1.\n * @param zoomFactor The factor to zoom by.\n */\n zoomTo(zoomFactor: number) {\n this.zoomTime =\n this.zoomTime > 30 ? Math.floor(this.zoomTime / 1.1) : this.zoomTime;\n\n this.eventDisplay.zoomTo(zoomFactor, this.zoomTime);\n\n this.zoomTimeout = setTimeout(() => {\n this.zoomTo(zoomFactor);\n }, this.zoomTime);\n }\n\n /**\n * Zoom the camera in.\n * @param leftClick Whether the mouse click is left or not.\n */\n zoomIn(leftClick: boolean) {\n if (leftClick) {\n this.zoomTo(1 / this.zoomFactor);\n }\n }\n\n /**\n * Zoom the camera out.\n * @param leftClick Whether the mouse click is left or not.s\n */\n zoomOut(leftClick: boolean) {\n if (leftClick) {\n this.zoomTo(this.zoomFactor);\n }\n }\n\n /**\n * Reset the zoom time which decreases upon hold and clear the zoom timeout.\n */\n clearZoom() {\n this.zoomTime = 200;\n clearTimeout(this.zoomTimeout);\n }\n}\n","import { OnInit } from '@angular/core';\nimport { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'app-ss-mode',\n templateUrl: './ss-mode.component.html',\n styleUrls: ['./ss-mode.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SSModeComponent implements OnInit {\n ssMode: boolean = false;\n\n ngOnInit() {\n document.onfullscreenchange = () => {\n if (!document.fullscreenElement) {\n this.toggleSSMode();\n }\n };\n }\n\n toggleSSMode() {\n this.ssMode = !this.ssMode;\n document.body.classList.toggle('ss-mode');\n if (this.ssMode) {\n // WORKAROUND - Adding the event listener directly somehow calls it on the first click\n setTimeout(() => {\n document.addEventListener('click', this.onDocumentClick);\n document.addEventListener('touchstart', this.onDocumentClick);\n }, 1);\n document.documentElement.requestFullscreen?.();\n } else {\n document.removeEventListener('click', this.onDocumentClick);\n document.removeEventListener('touchstart', this.onDocumentClick);\n }\n }\n\n private onDocumentClick = () => {\n document.exitFullscreen?.();\n };\n}\n","import { Component } from '@angular/core';\nimport { EventDisplayService } from '../../../services/event-display.service';\n\n@Component({\n selector: 'app-performance-toggle',\n templateUrl: './performance-toggle.component.html',\n styleUrls: ['./performance-toggle.component.scss'],\n})\nexport class PerformanceToggleComponent {\n performanceMode: boolean = false;\n\n constructor(private eventDisplay: EventDisplayService) {}\n\n togglePerformance() {\n this.performanceMode = !this.performanceMode;\n this.eventDisplay.getThreeManager().setAntialiasing(!this.performanceMode);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport {\n EventDataFormat,\n EventDataImportOption,\n} from '../../services/extras/event-data-import';\nimport { defaultAnimationPresets } from './animate-camera/animate-camera.component';\n\n@Component({\n selector: 'app-ui-menu',\n templateUrl: './ui-menu.component.html',\n styleUrls: ['./ui-menu.component.scss'],\n})\nexport class UiMenuComponent {\n @Input()\n eventDataImportOptions: EventDataImportOption[] =\n Object.values(EventDataFormat);\n @Input()\n animationPresets = defaultAnimationPresets;\n\n hideUIMenu: boolean = false;\n}\n","import { Component } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { phoenixURLOptions } from 'phoenix-event-display';\n\n@Component({\n selector: 'app-share-link-dialog',\n templateUrl: './share-link-dialog.component.html',\n styleUrls: ['./share-link-dialog.component.scss'],\n})\nexport class ShareLinkDialogComponent {\n baseLink: string;\n shareLink: string;\n embedLink: string;\n urlOptions = Object.assign({}, phoenixURLOptions);\n\n constructor(private dialogRef: MatDialogRef<ShareLinkDialogComponent>) {\n const locationHref = window.location.href;\n const lastIndex =\n locationHref.lastIndexOf('?') === -1\n ? locationHref.length\n : locationHref.lastIndexOf('?');\n this.baseLink = locationHref.slice(0, lastIndex);\n this.shareLink = this.baseLink;\n this.embedLink = this.getEmbedLink();\n }\n\n onClose() {\n this.dialogRef.close();\n }\n\n getEmbedLink(urlParametersString: string = '') {\n return `<iframe src=\"${this.baseLink}?embed=true${\n urlParametersString ? '&' : ''\n }${urlParametersString}\"></iframe>`;\n }\n\n setOptionValue(option: string, value: string) {\n this.urlOptions[option] = value;\n this.onOptionsChange();\n }\n\n onOptionsChange() {\n const urlParametersString = Object.getOwnPropertyNames(this.urlOptions)\n .reduce((filteredOptions: string[], option: string) => {\n if (this.urlOptions[option]) {\n filteredOptions.push(\n `${option}=${encodeURI(this.urlOptions[option])}`\n );\n }\n return filteredOptions;\n }, [])\n .join('&');\n\n this.shareLink =\n this.baseLink + (urlParametersString ? '?' : '') + urlParametersString;\n this.embedLink = this.getEmbedLink(urlParametersString);\n }\n\n copyText(text: string, element: HTMLElement) {\n const inputElement = document.createElement('input');\n document.body.appendChild(inputElement);\n inputElement.value = text;\n inputElement.select();\n document.execCommand('copy');\n document.body.removeChild(inputElement);\n element.focus();\n\n // Set text on copying\n element.innerText = 'COPIED';\n setTimeout(() => {\n element.innerText = 'COPY';\n }, 2000);\n }\n}\n","import { Component } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ShareLinkDialogComponent } from './share-link-dialog/share-link-dialog.component';\n\n@Component({\n selector: 'app-share-link',\n templateUrl: './share-link.component.html',\n styleUrls: ['./share-link.component.scss'],\n})\nexport class ShareLinkComponent {\n constructor(private dialog: MatDialog) {}\n\n openShareLinkDialog() {\n this.dialog.open(ShareLinkDialogComponent);\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'app-loader',\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.scss'],\n})\nexport class LoaderComponent {\n @Input() loaded = false;\n @Input() progress: number;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe for transforming selected object attributes to a better format.\n */\n@Pipe({\n name: 'attributePipe',\n})\nexport class AttributePipe implements PipeTransform {\n /**\n * Transform the attribute to a better presentable format.\n * @param value Value to be transformed.\n * @param args Additional arguments.\n * @returns The transformed value.\n */\n transform(value: any, args?: any): any {\n let transformedValue = '';\n if (Array.isArray(value)) {\n transformedValue += '\\n';\n value.forEach((v) => (transformedValue += v + '\\n'));\n } else {\n transformedValue = value.toString();\n }\n return transformedValue;\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-embed-menu',\n templateUrl: './embed-menu.component.html',\n styleUrls: ['./embed-menu.component.scss'],\n})\nexport class EmbedMenuComponent {}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-experiment-link',\n templateUrl: './experiment-link.component.html',\n styleUrls: ['./experiment-link.component.scss'],\n})\nexport class ExperimentLinkComponent implements OnInit {\n private experimentLink: string;\n\n ngOnInit() {\n this.experimentLink = window.location.href.split('?')[0];\n }\n\n goToExperiment() {\n window.open(this.experimentLink, '_blank');\n }\n}\n","import { NgModule, Type } from '@angular/core';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NgxSliderModule } from '@angular-slider/ngx-slider';\nimport { NavComponent } from './nav/nav.component';\nimport {\n PhoenixMenuComponent,\n PhoenixMenuItemComponent,\n ConfigSliderComponent,\n} from './phoenix-menu';\nimport {\n UiMenuComponent,\n CollectionsInfoComponent,\n MenuToggleComponent,\n CollectionsInfoOverlayComponent,\n IoOptionsComponent,\n IOOptionsDialogComponent,\n OverlayViewComponent,\n ObjectSelectionComponent,\n ObjectSelectionOverlayComponent,\n EventSelectorComponent,\n ObjectClippingComponent,\n DarkThemeComponent,\n AutoRotateComponent,\n ViewOptionsComponent,\n OverlayViewWindowComponent,\n OverlayComponent,\n ExperimentInfoComponent,\n InfoPanelComponent,\n InfoPanelOverlayComponent,\n MainViewToggleComponent,\n ZoomControlsComponent,\n TreeMenuComponent,\n TreeMenuItemComponent,\n AnimateCameraComponent,\n AnimateEventComponent,\n VrToggleComponent,\n ArToggleComponent,\n SSModeComponent,\n PerformanceToggleComponent,\n ShareLinkComponent,\n ShareLinkDialogComponent,\n} from './ui-menu';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { AttributePipe } from '../services/extras/attribute.pipe';\nimport { LoaderComponent } from './loader/loader.component';\nimport { EmbedMenuComponent } from './embed-menu/embed-menu.component';\nimport { ExperimentLinkComponent } from './embed-menu/experiment-link/experiment-link.component';\n\nconst PHOENIX_COMPONENTS: Type<any>[] = [\n NavComponent,\n UiMenuComponent,\n CollectionsInfoComponent,\n MenuToggleComponent,\n CollectionsInfoOverlayComponent,\n IoOptionsComponent,\n IOOptionsDialogComponent,\n OverlayViewComponent,\n AttributePipe,\n ObjectSelectionComponent,\n ObjectSelectionOverlayComponent,\n EventSelectorComponent,\n ObjectClippingComponent,\n DarkThemeComponent,\n AutoRotateComponent,\n ViewOptionsComponent,\n OverlayViewWindowComponent,\n OverlayComponent,\n ExperimentInfoComponent,\n InfoPanelComponent,\n InfoPanelOverlayComponent,\n MainViewToggleComponent,\n ZoomControlsComponent,\n TreeMenuComponent,\n TreeMenuItemComponent,\n PhoenixMenuComponent,\n PhoenixMenuItemComponent,\n ConfigSliderComponent,\n AnimateCameraComponent,\n AnimateEventComponent,\n VrToggleComponent,\n ArToggleComponent,\n SSModeComponent,\n PerformanceToggleComponent,\n LoaderComponent,\n ShareLinkComponent,\n ShareLinkDialogComponent,\n EmbedMenuComponent,\n ExperimentLinkComponent,\n];\n\n@NgModule({\n declarations: [...PHOENIX_COMPONENTS],\n imports: [\n CommonModule,\n RouterModule,\n DragDropModule,\n MatDialogModule,\n MatButtonModule,\n MatTooltipModule,\n OverlayModule,\n MatMenuModule,\n MatSliderModule,\n MatSlideToggleModule,\n MatCheckboxModule,\n MatIconModule,\n NgxSliderModule,\n ],\n entryComponents: [\n OverlayComponent,\n OverlayViewWindowComponent,\n IOOptionsDialogComponent,\n CollectionsInfoOverlayComponent,\n ObjectSelectionOverlayComponent,\n InfoPanelOverlayComponent,\n ],\n exports: [PHOENIX_COMPONENTS],\n})\nexport class PhoenixUIModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {EmbedMenuComponent as ɵbj} from './components/embed-menu/embed-menu.component';\nexport {ExperimentLinkComponent as ɵbk} from './components/embed-menu/experiment-link/experiment-link.component';\nexport {ConfigSliderComponent as ɵba,PhoenixMenuComponent as ɵy,PhoenixMenuItemComponent as ɵz} from './components/phoenix-menu';\nexport {AnimateCameraComponent as ɵbb,AnimateEventComponent as ɵbc,ArToggleComponent as ɵbe,AutoRotateComponent as ɵn,CollectionsInfoComponent as ɵb,CollectionsInfoOverlayComponent as ɵd,DarkThemeComponent as ɵm,EventSelectorComponent as ɵk,ExperimentInfoComponent as ɵr,IOOptionsDialogComponent as ɵf,InfoPanelComponent as ɵs,InfoPanelOverlayComponent as ɵt,IoOptionsComponent as ɵe,MainViewToggleComponent as ɵu,MenuToggleComponent as ɵc,ObjectClippingComponent as ɵl,ObjectSelectionComponent as ɵi,ObjectSelectionOverlayComponent as ɵj,OverlayComponent as ɵq,OverlayViewComponent as ɵg,OverlayViewWindowComponent as ɵp,PerformanceToggleComponent as ɵbg,SSModeComponent as ɵbf,ShareLinkComponent as ɵbh,ShareLinkDialogComponent as ɵbi,TreeMenuComponent as ɵw,TreeMenuItemComponent as ɵx,UiMenuComponent as ɵa,ViewOptionsComponent as ɵo,VrToggleComponent as ɵbd,ZoomControlsComponent as ɵv} from './components/ui-menu';\nexport {AttributePipe as ɵh} from './services/extras/attribute.pipe';"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"__symbolic":"module","version":4,"metadata":{"NavComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"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"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}]}},"ConfigSliderComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"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"]}]}],"members":{"value":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":8,"character":3}}]}],"min":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":9,"character":3}}]}],"max":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":10,"character":3}}]}],"step":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":11,"character":3}}]}],"allowCustomValue":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":12,"character":3}}]}],"onChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":13,"character":3}}]}],"onValueChange":[{"__symbolic":"method"}]}},"PhoenixMenuItemComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":10,"character":1},"arguments":[{"selector":"app-phoenix-menu-item","encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":14,"character":17},"member":"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 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 <ngx-slider\n *ngSwitchCase=\"'rangeSlider'\"\n class=\"range-slider\"\n [value]=\"config.value ? config.value : config.min\"\n [highValue]=\"config.highValue ? config.highValue : config.max\"\n (userChange)=\"\n config.onChange($event);\n config.value = $event.value;\n config.highValue = $event.highValue\n \"\n [options]=\"{\n floor: config.min,\n ceil: config.max,\n step: config.step,\n animate: false\n }\"\n ></ngx-slider>\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 >\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.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"]}]}],"members":{"currentNode":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":17,"character":3}}]}],"phoenixMenuItem":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":18,"character":3},"arguments":["phoenixMenuItem"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":21,"character":27}]}],"calculateConfigTop":[{"__symbolic":"method"}]}},"PhoenixMenuComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"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"]}]}],"members":{"rootNode":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":9,"character":3}}]}]}},"defaultAnimationPresets":{"Preset 1":{"positions":[{"position":[11976,7262,11927],"duration":1000},{"position":[-1000,0,11927],"duration":2000},{"position":[2000,500,1000],"duration":3500},{"position":[5000,2000,1000],"duration":3000},{"position":[5000,2000,1000],"duration":2000},{"position":[11976,7262,11927],"duration":1000}],"animateEventAfterInterval":5000,"collisionDuration":6000},"$quoted$":["Preset 1"]},"AnimateCameraComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":39,"character":1},"arguments":[{"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","styles":[""]}]}],"members":{"animationPresets":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"animatePreset":[{"__symbolic":"method"}],"animateCamera":[{"__symbolic":"method"}],"setDetectorOpacity":[{"__symbolic":"method"}]}},"AnimateEventComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"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","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"toggleAnimateEvent":[{"__symbolic":"method"}]}},"AutoRotateComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"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","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"toggleAutoRotate":[{"__symbolic":"method"}]}},"CollectionsInfoComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":5,"character":1},"arguments":[{"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","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/cdk/overlay","name":"Overlay","line":14,"character":31}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"toggleOverlay":[{"__symbolic":"method"}]}},"CollectionsInfoOverlayComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"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 <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 </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 {{ getPrettySymbol(column) }}\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 }\"\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}.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 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"]}]}],"members":{"showObjectsInfo":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":14,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":23,"character":24},{"__symbolic":"reference","name":"EventDisplayService"}]}],"ngOnInit":[{"__symbolic":"method"}],"changeCollection":[{"__symbolic":"method"}],"lookAtObject":[{"__symbolic":"method"}],"highlightObject":[{"__symbolic":"method"}],"addLabel":[{"__symbolic":"method"}],"getEventDataGroup":[{"__symbolic":"method"}]}},"DarkThemeComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"selector":"app-dark-theme","template":"<app-menu-toggle\n tooltip=\"Dark theme\"\n [active]=\"darkTheme\"\n icon=\"dark\"\n (click)=\"setDarkTheme()\"\n>\n</app-menu-toggle>\n","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"ngOnInit":[{"__symbolic":"method"}],"setDarkTheme":[{"__symbolic":"method"}]}},"EventSelectorComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"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"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"ngOnInit":[{"__symbolic":"method"}],"changeEvent":[{"__symbolic":"method"}]}},"ExperimentInfoComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"selector":"app-experiment-info","template":"<div id=\"experimentInfo\" class=\"experimentInfo\" cdkDrag cdkDragBoundary=\"body\">\n <a\n class=\"experimentLogoWrapper\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n *ngIf=\"experiment\"\n href=\"https://home.cern/science/experiments/{{ experiment }}\"\n >\n <img\n class=\"experimentLogo\"\n src=\"assets/images/{{ experiment }}.svg\"\n alt=\"\"\n />\n </a>\n <div class=\"textInfo\">\n <p *ngIf=\"experimentTagline\">\n <b>{{ experimentTagline }}</b>\n </p>\n <p *ngFor=\"let infoField of experimentInfo\">\n <ng-container *ngIf=\"infoField.label\">\n <b>{{ infoField.label }}: </b>{{ infoField.value }}\n </ng-container>\n <ng-container *ngIf=\"!infoField.label\">\n {{ infoField }}\n </ng-container>\n </p>\n </div>\n</div>\n","styles":[".experimentInfo{position:absolute;top:5rem;left:1rem;display:flex;flex-direction:row;justify-items:flex-end;justify-content:flex-end;align-items:center;align-content:center;cursor:move}.experimentLogoWrapper{width:6rem}.experimentLogoWrapper .experimentLogo{width:100%;height:100%}.textInfo{margin-left:1rem}.textInfo p{color:var(--phoenix-text-color-secondary);font-size:.8rem;margin-bottom:.5rem;-webkit-user-select:none;-moz-user-select:none;-ms-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"]}]}],"members":{"experiment":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":10,"character":3}}]}],"experimentTagline":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":11,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"ngOnInit":[{"__symbolic":"method"}]}},"InfoPanelComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"app-info-panel","template":"<app-menu-toggle\n tooltip=\"Info panel\"\n icon=\"info-panel\"\n [active]=\"showInfoPanel\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/cdk/overlay","name":"Overlay","line":23,"character":31}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"toggleOverlay":[{"__symbolic":"method"}]}},"InfoPanelOverlayComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"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\" *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"]}]}],"members":{"showInfoPanel":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"ngOnInit":[{"__symbolic":"method"}]}},"IoOptionsComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"app-io-options","template":"<app-menu-toggle\n tooltip=\"Import and export options\"\n icon=\"import\"\n [active]=\"false\"\n (click)=\"openIODialog()\"\n>\n</app-menu-toggle>\n","styles":[""]}]}],"members":{"eventDataImportOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":14,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/material/dialog","name":"MatDialog","line":18,"character":30}]}],"openIODialog":[{"__symbolic":"method"}]}},"IOOptionsDialogComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":11,"character":1},"arguments":[{"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"]}]}],"members":{"eventDataImportOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":17,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"},{"__symbolic":"reference","name":"MatDialogRef","module":"@angular/material/dialog","arguments":[{"__symbolic":"reference","name":"IOOptionsDialogComponent"}]}]}],"ngOnInit":[{"__symbolic":"method"}],"getSupportedEventDataFormats":[{"__symbolic":"method"}],"onClose":[{"__symbolic":"method"}],"handleJSONEventDataInput":[{"__symbolic":"method"}],"handleJiveXMLDataInput":[{"__symbolic":"method"}],"handleOBJInput":[{"__symbolic":"method"}],"handleSceneInput":[{"__symbolic":"method"}],"handleGLTFInput":[{"__symbolic":"method"}],"handlePhoenixInput":[{"__symbolic":"method"}],"handleROOTInput":[{"__symbolic":"method"}],"handleRootJSONInput":[{"__symbolic":"method"}],"handleIgEventDataInput":[{"__symbolic":"method"}],"handleZipEventDataInput":[{"__symbolic":"method"}],"handleZipInput":[{"__symbolic":"method"}],"handleFileInput":[{"__symbolic":"method"}],"isFileOfExtension":[{"__symbolic":"method"}],"saveScene":[{"__symbolic":"method"}],"exportOBJ":[{"__symbolic":"method"}]}},"MainViewToggleComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"selector":"app-main-view-toggle","template":"<app-menu-toggle\n [icon]=\"orthographicView ? 'perspective' : 'orthographic'\"\n [matTooltip]=\"\n 'Switch to ' + (orthographicView ? 'perspective' : 'orthographic') + ' view'\n \"\n (click)=\"switchMainView()\"\n>\n</app-menu-toggle>\n","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"switchMainView":[{"__symbolic":"method"}]}},"MenuToggleComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"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"]}]}],"members":{"icon":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":8,"character":3}}]}],"active":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":9,"character":3}}]}],"tooltip":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":10,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":11,"character":3}}]}]}},"ObjectClippingComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":5,"character":1},"arguments":[{"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 class=\"slider-btn\" mat-menu-item (focus)=\"clippingSlider.focus()\">\n <mat-slider\n #clippingSlider\n min=\"0\"\n max=\"180\"\n step=\"1\"\n thumbLabel\n [value]=\"clippingAngle\"\n (click)=\"$event.stopPropagation()\"\n (input)=\"changeClippingAngle($event)\"\n >\n </mat-slider>\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"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"changeClippingAngle":[{"__symbolic":"method"}],"toggleClipping":[{"__symbolic":"method"}]}},"ObjectSelectionComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"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","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/cdk/overlay","name":"Overlay","line":17,"character":21},{"__symbolic":"reference","name":"EventDisplayService"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"toggleOverlay":[{"__symbolic":"method"}]}},"ObjectSelectionOverlayComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"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"]}]}],"members":{"hiddenSelectedInfo":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":10,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"ngOnInit":[{"__symbolic":"method"}]}},"OverlayComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":13,"character":1},"arguments":[{"selector":"app-overlay","encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":17,"character":17},"member":"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"]}]}],"members":{"overlayTitle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":21,"character":3}}]}],"active":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":23,"character":3}}]}],"icon":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":25,"character":3}}]}],"resizable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":27,"character":3}}]}],"transparentBody":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":29,"character":3}}]}],"overlayCard":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":38,"character":3},"arguments":["overlayCard"]}]}],"resizeHandleCorner":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":40,"character":3},"arguments":["resizeHandleCorner"]}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"onResize":[{"__symbolic":"method"}],"resetHandlePosition":[{"__symbolic":"method"}],"setHandleTransform":[{"__symbolic":"method"}]}},"OverlayViewComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":5,"character":1},"arguments":[{"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","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/cdk/overlay","name":"Overlay","line":14,"character":31}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"toggleOverlay":[{"__symbolic":"method"}]}},"OverlayViewWindowComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"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"]}]}],"members":{"showOverlay":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":10,"character":3}}]}],"overlayWindow":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":14,"character":3},"arguments":["overlayWindow"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"initializeCanvas":[{"__symbolic":"method"}],"switchOverlayView":[{"__symbolic":"method"}],"fixOverlayView":[{"__symbolic":"method"}],"toggleBgTransparency":[{"__symbolic":"method"}]}},"TreeMenuComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"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"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}]}},"TreeMenuItemComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"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"]}]}],"members":{"children":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChildren","line":10,"character":3},"arguments":[{"__symbolic":"reference","name":"TreeMenuItemComponent"}]}]}],"node":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":12,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"toggleVisibility":[{"__symbolic":"method"}]}},"ViewOptionsComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":5,"character":1},"arguments":[{"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"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"ngOnInit":[{"__symbolic":"method"}],"displayView":[{"__symbolic":"method"}],"setAxis":[{"__symbolic":"method"}],"setGrid":[{"__symbolic":"method"}]}},"VrToggleComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"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","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"toggleVr":[{"__symbolic":"method"}]}},"ArToggleComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"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","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"toggleAr":[{"__symbolic":"method"}]}},"ZoomControlsComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"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","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"zoomTo":[{"__symbolic":"method"}],"zoomIn":[{"__symbolic":"method"}],"zoomOut":[{"__symbolic":"method"}],"clearZoom":[{"__symbolic":"method"}]}},"SSModeComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"selector":"app-ss-mode","encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":7,"character":17},"member":"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":["app-ui-menu #uiMenu,app-phoenix-menu #phoenixMenu,app-nav #mainLogo,#statsElement{visibility:visible;opacity:1;transition:opacity .4s}.ss-mode app-ui-menu #uiMenu,.ss-mode app-phoenix-menu #phoenixMenu,.ss-mode app-nav #mainLogo,.ss-mode #statsElement{visibility:hidden;opacity:0}\n"]}]}],"members":{"ngOnInit":[{"__symbolic":"method"}],"toggleSSMode":[{"__symbolic":"method"}]}},"PerformanceToggleComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"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","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"EventDisplayService"}]}],"togglePerformance":[{"__symbolic":"method"}]}},"UiMenuComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":7,"character":1},"arguments":[{"selector":"app-ui-menu","template":"<div id=\"uiMenu\">\n <button\n id=\"hide-ui-menu\"\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 <!-- 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 </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}#hide-ui-menu{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}#hide-ui-menu svg{height:100%;width:100%;vertical-align:top;transition:all .3s}#hide-ui-menu.ui-menu-hidden svg{transform:scaleY(-1);transition:all .3s}\n"]}]}],"members":{"eventDataImportOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"animationPresets":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}]}},"ShareLinkComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"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","styles":[""]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/material/dialog","name":"MatDialog","line":10,"character":30}]}],"openShareLinkDialog":[{"__symbolic":"method"}]}},"ShareLinkDialogComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"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 }}</span>\n <button\n class=\"share-box-copy\"\n (click)=\"copyText(shareLink, $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 </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"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"MatDialogRef","module":"@angular/material/dialog","arguments":[{"__symbolic":"reference","name":"ShareLinkDialogComponent"}]}]}],"onClose":[{"__symbolic":"method"}],"getEmbedLink":[{"__symbolic":"method"}],"setOptionValue":[{"__symbolic":"method"}],"onOptionsChange":[{"__symbolic":"method"}],"copyText":[{"__symbolic":"method"}]}},"LoaderComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"selector":"app-loader","template":"<div\n class=\"\n loader-wrapper\n d-flex\n position-absolute\n flex-column\n justify-content-center\n align-items-center\n w-100\n h-100\n text-center\n \"\n [ngClass]=\"{ 'load-complete': loaded }\"\n>\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</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;-webkit-animation:loader 2s infinite;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}@-webkit-keyframes loader{0%,to{transform:scale(.1) rotate(0)}95%{transform:scale(1) rotate(15deg)}}@keyframes loader{0%,to{transform:scale(.1) rotate(0)}95%{transform:scale(1) rotate(15deg)}}\n"]}]}],"members":{"loaded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":8,"character":3}}]}],"progress":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":9,"character":3}}]}]}},"PhoenixUIModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":100,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NavComponent"},{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"ɵg"},{"__symbolic":"reference","name":"ɵh"},{"__symbolic":"reference","name":"ɵi"},{"__symbolic":"reference","name":"ɵj"},{"__symbolic":"reference","name":"ɵk"},{"__symbolic":"reference","name":"ɵl"},{"__symbolic":"reference","name":"ɵm"},{"__symbolic":"reference","name":"ɵn"},{"__symbolic":"reference","name":"ɵo"},{"__symbolic":"reference","name":"ɵp"},{"__symbolic":"reference","name":"ɵq"},{"__symbolic":"reference","name":"ɵr"},{"__symbolic":"reference","name":"ɵs"},{"__symbolic":"reference","name":"ɵt"},{"__symbolic":"reference","name":"ɵu"},{"__symbolic":"reference","name":"ɵv"},{"__symbolic":"reference","name":"ɵw"},{"__symbolic":"reference","name":"ɵx"},{"__symbolic":"reference","name":"ɵy"},{"__symbolic":"reference","name":"ɵz"},{"__symbolic":"reference","name":"ɵba"},{"__symbolic":"reference","name":"ɵbb"},{"__symbolic":"reference","name":"ɵbc"},{"__symbolic":"reference","name":"ɵbd"},{"__symbolic":"reference","name":"ɵbe"},{"__symbolic":"reference","name":"ɵbf"},{"__symbolic":"reference","name":"ɵbg"},{"__symbolic":"reference","name":"LoaderComponent"},{"__symbolic":"reference","name":"ɵbh"},{"__symbolic":"reference","name":"ɵbi"},{"__symbolic":"reference","name":"ɵbj"},{"__symbolic":"reference","name":"ɵbk"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":103,"character":4},{"__symbolic":"reference","module":"@angular/router","name":"RouterModule","line":104,"character":4},{"__symbolic":"reference","module":"@angular/cdk/drag-drop","name":"DragDropModule","line":105,"character":4},{"__symbolic":"reference","module":"@angular/material/dialog","name":"MatDialogModule","line":106,"character":4},{"__symbolic":"reference","module":"@angular/material/button","name":"MatButtonModule","line":107,"character":4},{"__symbolic":"reference","module":"@angular/material/tooltip","name":"MatTooltipModule","line":108,"character":4},{"__symbolic":"reference","module":"@angular/cdk/overlay","name":"OverlayModule","line":109,"character":4},{"__symbolic":"reference","module":"@angular/material/menu","name":"MatMenuModule","line":110,"character":4},{"__symbolic":"reference","module":"@angular/material/slider","name":"MatSliderModule","line":111,"character":4},{"__symbolic":"reference","module":"@angular/material/slide-toggle","name":"MatSlideToggleModule","line":112,"character":4},{"__symbolic":"reference","module":"@angular/material/checkbox","name":"MatCheckboxModule","line":113,"character":4},{"__symbolic":"reference","module":"@angular/material/icon","name":"MatIconModule","line":114,"character":4},{"__symbolic":"reference","module":"@angular-slider/ngx-slider","name":"NgxSliderModule","line":115,"character":4}],"entryComponents":[{"__symbolic":"reference","name":"ɵq"},{"__symbolic":"reference","name":"ɵp"},{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"ɵj"},{"__symbolic":"reference","name":"ɵt"}],"exports":[[{"__symbolic":"reference","name":"NavComponent"},{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"ɵg"},{"__symbolic":"reference","name":"ɵh"},{"__symbolic":"reference","name":"ɵi"},{"__symbolic":"reference","name":"ɵj"},{"__symbolic":"reference","name":"ɵk"},{"__symbolic":"reference","name":"ɵl"},{"__symbolic":"reference","name":"ɵm"},{"__symbolic":"reference","name":"ɵn"},{"__symbolic":"reference","name":"ɵo"},{"__symbolic":"reference","name":"ɵp"},{"__symbolic":"reference","name":"ɵq"},{"__symbolic":"reference","name":"ɵr"},{"__symbolic":"reference","name":"ɵs"},{"__symbolic":"reference","name":"ɵt"},{"__symbolic":"reference","name":"ɵu"},{"__symbolic":"reference","name":"ɵv"},{"__symbolic":"reference","name":"ɵw"},{"__symbolic":"reference","name":"ɵx"},{"__symbolic":"reference","name":"ɵy"},{"__symbolic":"reference","name":"ɵz"},{"__symbolic":"reference","name":"ɵba"},{"__symbolic":"reference","name":"ɵbb"},{"__symbolic":"reference","name":"ɵbc"},{"__symbolic":"reference","name":"ɵbd"},{"__symbolic":"reference","name":"ɵbe"},{"__symbolic":"reference","name":"ɵbf"},{"__symbolic":"reference","name":"ɵbg"},{"__symbolic":"reference","name":"LoaderComponent"},{"__symbolic":"reference","name":"ɵbh"},{"__symbolic":"reference","name":"ɵbi"},{"__symbolic":"reference","name":"ɵbj"},{"__symbolic":"reference","name":"ɵbk"}]]}]}],"members":{}},"EventDisplayService":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"phoenix-event-display","name":"EventDisplay","line":9,"character":41},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}]},"statics":{"ɵprov":{}}},"EventDataFormat":{"JSON":"JSON","JIVEXML":"JIVEXML","IG":"IG","ZIP":"ZIP"},"EventDataImportOption":{"__symbolic":"interface"},"ImportOption":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"string"},{"__symbolic":"error","message":"Expression form not supported","line":13,"character":20,"module":"./services/extras/event-data-import"},{"__symbolic":"reference","name":"string"}]}]}},"ɵh":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Pipe","line":5,"character":1},"arguments":[{"name":"attributePipe"}]}],"members":{"transform":[{"__symbolic":"method"}]}},"ɵbj":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"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"]}]}],"members":{}},"ɵbk":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"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","styles":[""]}]}],"members":{"ngOnInit":[{"__symbolic":"method"}],"goToExperiment":[{"__symbolic":"method"}]}}},"origins":{"NavComponent":"./components/nav/nav.component","ConfigSliderComponent":"./components/phoenix-menu/config/config-slider/config-slider.component","PhoenixMenuItemComponent":"./components/phoenix-menu/pheonix-menu-item/phoenix-menu-item.component","PhoenixMenuComponent":"./components/phoenix-menu/phoenix-menu.component","defaultAnimationPresets":"./components/ui-menu/animate-camera/animate-camera.component","AnimateCameraComponent":"./components/ui-menu/animate-camera/animate-camera.component","AnimateEventComponent":"./components/ui-menu/animate-event/animate-event.component","AutoRotateComponent":"./components/ui-menu/auto-rotate/auto-rotate.component","CollectionsInfoComponent":"./components/ui-menu/collections-info/collections-info.component","CollectionsInfoOverlayComponent":"./components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component","DarkThemeComponent":"./components/ui-menu/dark-theme/dark-theme.component","EventSelectorComponent":"./components/ui-menu/event-selector/event-selector.component","ExperimentInfoComponent":"./components/ui-menu/experiment-info/experiment-info.component","InfoPanelComponent":"./components/ui-menu/info-panel/info-panel.component","InfoPanelOverlayComponent":"./components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component","IoOptionsComponent":"./components/ui-menu/io-options/io-options.component","IOOptionsDialogComponent":"./components/ui-menu/io-options/io-options-dialog/io-options-dialog.component","MainViewToggleComponent":"./components/ui-menu/main-view-toggle/main-view-toggle.component","MenuToggleComponent":"./components/ui-menu/menu-toggle/menu-toggle.component","ObjectClippingComponent":"./components/ui-menu/object-clipping/object-clipping.component","ObjectSelectionComponent":"./components/ui-menu/object-selection/object-selection.component","ObjectSelectionOverlayComponent":"./components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component","OverlayComponent":"./components/ui-menu/overlay/overlay.component","OverlayViewComponent":"./components/ui-menu/overlay-view/overlay-view.component","OverlayViewWindowComponent":"./components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component","TreeMenuComponent":"./components/ui-menu/tree-menu/tree-menu.component","TreeMenuItemComponent":"./components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component","ViewOptionsComponent":"./components/ui-menu/view-options/view-options.component","VrToggleComponent":"./components/ui-menu/vr-toggle/vr-toggle.component","ArToggleComponent":"./components/ui-menu/ar-toggle/ar-toggle.component","ZoomControlsComponent":"./components/ui-menu/zoom-controls/zoom-controls.component","SSModeComponent":"./components/ui-menu/ss-mode/ss-mode.component","PerformanceToggleComponent":"./components/ui-menu/performance-toggle/performance-toggle.component","UiMenuComponent":"./components/ui-menu/ui-menu.component","ShareLinkComponent":"./components/ui-menu/share-link/share-link.component","ShareLinkDialogComponent":"./components/ui-menu/share-link/share-link-dialog/share-link-dialog.component","LoaderComponent":"./components/loader/loader.component","PhoenixUIModule":"./components/phoenix-ui.module","EventDisplayService":"./services/event-display.service","EventDataFormat":"./services/extras/event-data-import","EventDataImportOption":"./services/extras/event-data-import","ImportOption":"./services/extras/event-data-import","ɵa":"./components/ui-menu","ɵb":"./components/ui-menu","ɵc":"./components/ui-menu","ɵd":"./components/ui-menu","ɵe":"./components/ui-menu","ɵf":"./components/ui-menu","ɵg":"./components/ui-menu","ɵh":"./services/extras/attribute.pipe","ɵi":"./components/ui-menu","ɵj":"./components/ui-menu","ɵk":"./components/ui-menu","ɵl":"./components/ui-menu","ɵm":"./components/ui-menu","ɵn":"./components/ui-menu","ɵo":"./components/ui-menu","ɵp":"./components/ui-menu","ɵq":"./components/ui-menu","ɵr":"./components/ui-menu","ɵs":"./components/ui-menu","ɵt":"./components/ui-menu","ɵu":"./components/ui-menu","ɵv":"./components/ui-menu","ɵw":"./components/ui-menu","ɵx":"./components/ui-menu","ɵy":"./components/phoenix-menu","ɵz":"./components/phoenix-menu","ɵba":"./components/phoenix-menu","ɵbb":"./components/ui-menu","ɵbc":"./components/ui-menu","ɵbd":"./components/ui-menu","ɵbe":"./components/ui-menu","ɵbf":"./components/ui-menu","ɵbg":"./components/ui-menu","ɵbh":"./components/ui-menu","ɵbi":"./components/ui-menu","ɵbj":"./components/embed-menu/embed-menu.component","ɵbk":"./components/embed-menu/experiment-link/experiment-link.component"},"importAs":"phoenix-ui-components"}