phoenix-ui-components 2.14.1 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/README.md +2 -2
  2. package/dist/README.md +2 -2
  3. package/dist/components/file-explorer/file-explorer.component.d.ts +9 -3
  4. package/dist/components/loader/loader.component.d.ts +1 -1
  5. package/dist/components/phoenix-menu/config/config-slider/config-slider.component.d.ts +1 -1
  6. package/dist/components/phoenix-menu/phoenix-menu-item/phoenix-menu-item.component.d.ts +1 -1
  7. package/dist/components/phoenix-menu/phoenix-menu.component.d.ts +1 -1
  8. package/dist/components/phoenix-ui.module.d.ts +62 -59
  9. package/dist/components/ui-menu/animate-camera/animate-camera.component.d.ts +1 -1
  10. package/dist/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.d.ts +3 -1
  11. package/dist/components/ui-menu/cycle-events/cycle-events.component.d.ts +7 -2
  12. package/dist/components/ui-menu/event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component.d.ts +7 -8
  13. package/dist/components/ui-menu/event-data-explorer/event-data-explorer.component.d.ts +1 -1
  14. package/dist/components/ui-menu/experiment-info/experiment-info.component.d.ts +1 -1
  15. package/dist/components/ui-menu/geometry-browser/geometry-browser-overlay/geometry-browser-overlay.component.d.ts +22 -0
  16. package/dist/components/ui-menu/geometry-browser/geometry-browser.component.d.ts +15 -0
  17. package/dist/components/ui-menu/index.d.ts +3 -0
  18. package/dist/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.d.ts +1 -1
  19. package/dist/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.d.ts +1 -1
  20. package/dist/components/ui-menu/io-options/io-options.component.d.ts +1 -1
  21. package/dist/components/ui-menu/make-picture/make-picture.component.d.ts +3 -0
  22. package/dist/components/ui-menu/menu-toggle/menu-toggle.component.d.ts +1 -1
  23. package/dist/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.d.ts +1 -1
  24. package/dist/components/ui-menu/overlay/overlay.component.d.ts +1 -1
  25. package/dist/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.d.ts +1 -1
  26. package/dist/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.d.ts +1 -1
  27. package/dist/components/ui-menu/ui-menu.component.d.ts +1 -1
  28. package/dist/components/ui-menu/view-options/cartesian-grid-config/cartesian-grid-config.component.d.ts +51 -0
  29. package/dist/components/ui-menu/view-options/view-options.component.d.ts +21 -4
  30. package/dist/esm2022/components/embed-menu/embed-menu.component.mjs +22 -0
  31. package/dist/esm2022/components/embed-menu/experiment-link/experiment-link.component.mjs +27 -0
  32. package/dist/esm2022/components/file-explorer/file-explorer.component.mjs +109 -0
  33. package/dist/esm2022/components/loader/loader.component.mjs +71 -0
  34. package/dist/esm2022/components/nav/nav.component.mjs +19 -0
  35. package/dist/esm2022/components/phoenix-menu/config/config-slider/config-slider.component.mjs +81 -0
  36. package/dist/esm2022/components/phoenix-menu/phoenix-menu-item/phoenix-menu-item.component.mjs +304 -0
  37. package/dist/esm2022/components/phoenix-menu/phoenix-menu.component.mjs +23 -0
  38. package/dist/esm2022/components/phoenix-ui.module.mjs +254 -0
  39. package/dist/esm2022/components/ring-loader/ring-loader.component.mjs +16 -0
  40. package/dist/esm2022/components/ui-menu/animate-camera/animate-camera.component.mjs +120 -0
  41. package/dist/esm2022/components/ui-menu/animate-event/animate-event.component.mjs +33 -0
  42. package/dist/esm2022/components/ui-menu/ar-toggle/ar-toggle.component.mjs +83 -0
  43. package/dist/esm2022/components/ui-menu/auto-rotate/auto-rotate.component.mjs +29 -0
  44. package/dist/esm2022/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.mjs +273 -0
  45. package/dist/esm2022/components/ui-menu/collections-info/collections-info.component.mjs +44 -0
  46. package/dist/esm2022/components/ui-menu/cycle-events/cycle-events.component.mjs +90 -0
  47. package/dist/esm2022/components/ui-menu/dark-theme/dark-theme.component.mjs +32 -0
  48. package/dist/esm2022/components/ui-menu/event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component.mjs +128 -0
  49. package/dist/esm2022/components/ui-menu/event-data-explorer/event-data-explorer.component.mjs +35 -0
  50. package/dist/esm2022/components/ui-menu/event-selector/event-selector.component.mjs +54 -0
  51. package/dist/esm2022/components/ui-menu/experiment-info/experiment-info.component.mjs +100 -0
  52. package/dist/esm2022/components/ui-menu/geometry-browser/geometry-browser-overlay/geometry-browser-overlay.component.mjs +172 -0
  53. package/dist/esm2022/components/ui-menu/geometry-browser/geometry-browser.component.mjs +44 -0
  54. package/dist/esm2022/components/ui-menu/index.mjs +40 -0
  55. package/dist/esm2022/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.mjs +69 -0
  56. package/dist/esm2022/components/ui-menu/info-panel/info-panel.component.mjs +59 -0
  57. package/dist/esm2022/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.mjs +294 -0
  58. package/dist/esm2022/components/ui-menu/io-options/io-options.component.mjs +36 -0
  59. package/dist/esm2022/components/ui-menu/main-view-toggle/main-view-toggle.component.mjs +32 -0
  60. package/dist/esm2022/components/ui-menu/make-picture/make-picture.component.mjs +109 -0
  61. package/dist/esm2022/components/ui-menu/menu-toggle/menu-toggle.component.mjs +40 -0
  62. package/dist/esm2022/components/ui-menu/object-clipping/object-clipping.component.mjs +72 -0
  63. package/dist/esm2022/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.mjs +59 -0
  64. package/dist/esm2022/components/ui-menu/object-selection/object-selection.component.mjs +46 -0
  65. package/dist/esm2022/components/ui-menu/overlay/overlay.component.mjs +197 -0
  66. package/dist/esm2022/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.mjs +83 -0
  67. package/dist/esm2022/components/ui-menu/overlay-view/overlay-view.component.mjs +41 -0
  68. package/dist/esm2022/components/ui-menu/performance-toggle/performance-toggle.component.mjs +29 -0
  69. package/dist/esm2022/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.mjs +165 -0
  70. package/dist/esm2022/components/ui-menu/share-link/share-link.component.mjs +28 -0
  71. package/dist/esm2022/components/ui-menu/ss-mode/ss-mode.component.mjs +46 -0
  72. package/dist/esm2022/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.mjs +94 -0
  73. package/dist/esm2022/components/ui-menu/tree-menu/tree-menu.component.mjs +78 -0
  74. package/dist/esm2022/components/ui-menu/ui-menu-wrapper/ui-menu-wrapper.component.mjs +34 -0
  75. package/dist/esm2022/components/ui-menu/ui-menu.component.mjs +54 -0
  76. package/dist/esm2022/components/ui-menu/view-options/cartesian-grid-config/cartesian-grid-config.component.mjs +247 -0
  77. package/dist/esm2022/components/ui-menu/view-options/view-options.component.mjs +170 -0
  78. package/dist/esm2022/components/ui-menu/vr-toggle/vr-toggle.component.mjs +52 -0
  79. package/dist/esm2022/components/ui-menu/zoom-controls/zoom-controls.component.mjs +79 -0
  80. package/dist/esm2022/services/error-message-service.mjs +30 -0
  81. package/dist/{esm2020 → esm2022}/services/event-display.service.mjs +5 -5
  82. package/dist/esm2022/services/extras/attribute.pipe.mjs +33 -0
  83. package/dist/{esm2020 → esm2022}/services/extras/event-data-import.mjs +5 -1
  84. package/dist/esm2022/services/file-loader.service.mjs +86 -0
  85. package/dist/esm2022/services/global-error-handler.mjs +30 -0
  86. package/dist/fesm2022/phoenix-ui-components.mjs +4302 -0
  87. package/dist/fesm2022/phoenix-ui-components.mjs.map +1 -0
  88. package/dist/services/file-loader.service.d.ts +17 -0
  89. package/package.json +27 -16
  90. package/dist/esm2020/components/embed-menu/embed-menu.component.mjs +0 -21
  91. package/dist/esm2020/components/embed-menu/experiment-link/experiment-link.component.mjs +0 -25
  92. package/dist/esm2020/components/file-explorer/file-explorer.component.mjs +0 -97
  93. package/dist/esm2020/components/loader/loader.component.mjs +0 -68
  94. package/dist/esm2020/components/nav/nav.component.mjs +0 -18
  95. package/dist/esm2020/components/phoenix-menu/config/config-slider/config-slider.component.mjs +0 -82
  96. package/dist/esm2020/components/phoenix-menu/phoenix-menu-item/phoenix-menu-item.component.mjs +0 -309
  97. package/dist/esm2020/components/phoenix-menu/phoenix-menu.component.mjs +0 -21
  98. package/dist/esm2020/components/phoenix-ui.module.mjs +0 -254
  99. package/dist/esm2020/components/ring-loader/ring-loader.component.mjs +0 -15
  100. package/dist/esm2020/components/ui-menu/animate-camera/animate-camera.component.mjs +0 -117
  101. package/dist/esm2020/components/ui-menu/animate-event/animate-event.component.mjs +0 -31
  102. package/dist/esm2020/components/ui-menu/ar-toggle/ar-toggle.component.mjs +0 -81
  103. package/dist/esm2020/components/ui-menu/auto-rotate/auto-rotate.component.mjs +0 -27
  104. package/dist/esm2020/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.mjs +0 -261
  105. package/dist/esm2020/components/ui-menu/collections-info/collections-info.component.mjs +0 -38
  106. package/dist/esm2020/components/ui-menu/cycle-events/cycle-events.component.mjs +0 -42
  107. package/dist/esm2020/components/ui-menu/dark-theme/dark-theme.component.mjs +0 -30
  108. package/dist/esm2020/components/ui-menu/event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component.mjs +0 -176
  109. package/dist/esm2020/components/ui-menu/event-data-explorer/event-data-explorer.component.mjs +0 -32
  110. package/dist/esm2020/components/ui-menu/event-selector/event-selector.component.mjs +0 -50
  111. package/dist/esm2020/components/ui-menu/experiment-info/experiment-info.component.mjs +0 -96
  112. package/dist/esm2020/components/ui-menu/index.mjs +0 -37
  113. package/dist/esm2020/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.mjs +0 -66
  114. package/dist/esm2020/components/ui-menu/info-panel/info-panel.component.mjs +0 -55
  115. package/dist/esm2020/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.mjs +0 -290
  116. package/dist/esm2020/components/ui-menu/io-options/io-options.component.mjs +0 -34
  117. package/dist/esm2020/components/ui-menu/main-view-toggle/main-view-toggle.component.mjs +0 -30
  118. package/dist/esm2020/components/ui-menu/make-picture/make-picture.component.mjs +0 -88
  119. package/dist/esm2020/components/ui-menu/menu-toggle/menu-toggle.component.mjs +0 -38
  120. package/dist/esm2020/components/ui-menu/object-clipping/object-clipping.component.mjs +0 -67
  121. package/dist/esm2020/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.mjs +0 -55
  122. package/dist/esm2020/components/ui-menu/object-selection/object-selection.component.mjs +0 -42
  123. package/dist/esm2020/components/ui-menu/overlay/overlay.component.mjs +0 -189
  124. package/dist/esm2020/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.mjs +0 -79
  125. package/dist/esm2020/components/ui-menu/overlay-view/overlay-view.component.mjs +0 -38
  126. package/dist/esm2020/components/ui-menu/performance-toggle/performance-toggle.component.mjs +0 -27
  127. package/dist/esm2020/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.mjs +0 -158
  128. package/dist/esm2020/components/ui-menu/share-link/share-link.component.mjs +0 -26
  129. package/dist/esm2020/components/ui-menu/ss-mode/ss-mode.component.mjs +0 -47
  130. package/dist/esm2020/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.mjs +0 -90
  131. package/dist/esm2020/components/ui-menu/tree-menu/tree-menu.component.mjs +0 -78
  132. package/dist/esm2020/components/ui-menu/ui-menu-wrapper/ui-menu-wrapper.component.mjs +0 -35
  133. package/dist/esm2020/components/ui-menu/ui-menu.component.mjs +0 -54
  134. package/dist/esm2020/components/ui-menu/view-options/view-options.component.mjs +0 -81
  135. package/dist/esm2020/components/ui-menu/vr-toggle/vr-toggle.component.mjs +0 -50
  136. package/dist/esm2020/components/ui-menu/zoom-controls/zoom-controls.component.mjs +0 -73
  137. package/dist/esm2020/services/error-message-service.mjs +0 -32
  138. package/dist/esm2020/services/extras/attribute.pipe.mjs +0 -33
  139. package/dist/esm2020/services/global-error-handler.mjs +0 -29
  140. package/dist/fesm2015/phoenix-ui-components.mjs +0 -3994
  141. package/dist/fesm2015/phoenix-ui-components.mjs.map +0 -1
  142. package/dist/fesm2020/phoenix-ui-components.mjs +0 -3552
  143. package/dist/fesm2020/phoenix-ui-components.mjs.map +0 -1
  144. /package/dist/{esm2020 → esm2022}/components/phoenix-menu/index.mjs +0 -0
  145. /package/dist/{esm2020 → esm2022}/phoenix-ui-components.mjs +0 -0
  146. /package/dist/{esm2020 → esm2022}/public_api.mjs +0 -0
  147. /package/dist/{esm2020 → esm2022}/services/index.mjs +0 -0
@@ -0,0 +1,44 @@
1
+ import { GeometryBrowserOverlayComponent } from './geometry-browser-overlay/geometry-browser-overlay.component';
2
+ import { Component } from '@angular/core';
3
+ import { ComponentPortal } from '@angular/cdk/portal';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/cdk/overlay";
6
+ import * as i2 from "../menu-toggle/menu-toggle.component";
7
+ export class GeometryBrowserComponent {
8
+ overlay;
9
+ browseDetectorParts = false;
10
+ overlayWindow;
11
+ constructor(overlay) {
12
+ this.overlay = overlay;
13
+ }
14
+ ngOnInit() {
15
+ const overlayRef = this.overlay.create();
16
+ const overlayPortal = new ComponentPortal(GeometryBrowserOverlayComponent);
17
+ this.overlayWindow = overlayRef.attach(overlayPortal);
18
+ this.overlayWindow.instance.browseDetectorParts = this.browseDetectorParts;
19
+ }
20
+ ngOnDestroy() {
21
+ this.overlayWindow.destroy();
22
+ }
23
+ toggleOverlay() {
24
+ this.browseDetectorParts = !this.browseDetectorParts;
25
+ this.overlayWindow.instance.browseDetectorParts = this.browseDetectorParts;
26
+ this.browseDetectorParts
27
+ ? this.overlayWindow.instance.enableHighlighting()
28
+ : this.overlayWindow.instance.disableHighlighting();
29
+ }
30
+ static ɵfac = function GeometryBrowserComponent_Factory(t) { return new (t || GeometryBrowserComponent)(i0.ɵɵdirectiveInject(i1.Overlay)); };
31
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: GeometryBrowserComponent, selectors: [["app-geometry-browser"]], decls: 1, vars: 1, consts: [["tooltip", "Browse geometry", "icon", "info", 3, "click", "active"]], template: function GeometryBrowserComponent_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
33
+ i0.ɵɵlistener("click", function GeometryBrowserComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleOverlay(); });
34
+ i0.ɵɵelementEnd();
35
+ } if (rf & 2) {
36
+ i0.ɵɵproperty("active", ctx.browseDetectorParts);
37
+ } }, dependencies: [i2.MenuToggleComponent] });
38
+ }
39
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GeometryBrowserComponent, [{
40
+ type: Component,
41
+ args: [{ selector: 'app-geometry-browser', template: "<app-menu-toggle\n tooltip=\"Browse geometry\"\n icon=\"info\"\n [active]=\"browseDetectorParts\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n" }]
42
+ }], () => [{ type: i1.Overlay }], null); })();
43
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(GeometryBrowserComponent, { className: "GeometryBrowserComponent", filePath: "components/ui-menu/geometry-browser/geometry-browser.component.ts", lineNumber: 11 }); })();
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnktYnJvd3Nlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L2dlb21ldHJ5LWJyb3dzZXIvZ2VvbWV0cnktYnJvd3Nlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L2dlb21ldHJ5LWJyb3dzZXIvZ2VvbWV0cnktYnJvd3Nlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUNoSCxPQUFPLEVBQUUsU0FBUyxFQUFtQyxNQUFNLGVBQWUsQ0FBQztBQUUzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFPdEQsTUFBTSxPQUFPLHdCQUF3QjtJQUlmO0lBSHBCLG1CQUFtQixHQUFZLEtBQUssQ0FBQztJQUNyQyxhQUFhLENBQWdEO0lBRTdELFlBQW9CLE9BQWdCO1FBQWhCLFlBQU8sR0FBUCxPQUFPLENBQVM7SUFBRyxDQUFDO0lBRXhDLFFBQVE7UUFDTixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3pDLE1BQU0sYUFBYSxHQUFHLElBQUksZUFBZSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUM3RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQzNFLElBQUksQ0FBQyxtQkFBbUI7WUFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFO1lBQ2xELENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ3hELENBQUM7a0ZBdkJVLHdCQUF3Qjs2REFBeEIsd0JBQXdCO1lDVnJDLDBDQUtDO1lBREMsOEdBQVMsbUJBQWUsSUFBQztZQUUzQixpQkFBa0I7O1lBSGhCLGdEQUE4Qjs7O2lGRE9uQix3QkFBd0I7Y0FMcEMsU0FBUzsyQkFDRSxzQkFBc0I7O2tGQUlyQix3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW9tZXRyeUJyb3dzZXJPdmVybGF5Q29tcG9uZW50IH0gZnJvbSAnLi9nZW9tZXRyeS1icm93c2VyLW92ZXJsYXkvZ2VvbWV0cnktYnJvd3Nlci1vdmVybGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgQ29tcG9uZW50UmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWdlb21ldHJ5LWJyb3dzZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2VvbWV0cnktYnJvd3Nlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dlb21ldHJ5LWJyb3dzZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VvbWV0cnlCcm93c2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBicm93c2VEZXRlY3RvclBhcnRzOiBib29sZWFuID0gZmFsc2U7XG4gIG92ZXJsYXlXaW5kb3c6IENvbXBvbmVudFJlZjxHZW9tZXRyeUJyb3dzZXJPdmVybGF5Q29tcG9uZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXkpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoKTtcbiAgICBjb25zdCBvdmVybGF5UG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChHZW9tZXRyeUJyb3dzZXJPdmVybGF5Q29tcG9uZW50KTtcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3cgPSBvdmVybGF5UmVmLmF0dGFjaChvdmVybGF5UG9ydGFsKTtcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3cuaW5zdGFuY2UuYnJvd3NlRGV0ZWN0b3JQYXJ0cyA9IHRoaXMuYnJvd3NlRGV0ZWN0b3JQYXJ0cztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub3ZlcmxheVdpbmRvdy5kZXN0cm95KCk7XG4gIH1cblxuICB0b2dnbGVPdmVybGF5KCkge1xuICAgIHRoaXMuYnJvd3NlRGV0ZWN0b3JQYXJ0cyA9ICF0aGlzLmJyb3dzZURldGVjdG9yUGFydHM7XG4gICAgdGhpcy5vdmVybGF5V2luZG93Lmluc3RhbmNlLmJyb3dzZURldGVjdG9yUGFydHMgPSB0aGlzLmJyb3dzZURldGVjdG9yUGFydHM7XG4gICAgdGhpcy5icm93c2VEZXRlY3RvclBhcnRzXG4gICAgICA/IHRoaXMub3ZlcmxheVdpbmRvdy5pbnN0YW5jZS5lbmFibGVIaWdobGlnaHRpbmcoKVxuICAgICAgOiB0aGlzLm92ZXJsYXlXaW5kb3cuaW5zdGFuY2UuZGlzYWJsZUhpZ2hsaWdodGluZygpO1xuICB9XG59XG4iLCI8YXBwLW1lbnUtdG9nZ2xlXG4gIHRvb2x0aXA9XCJCcm93c2UgZ2VvbWV0cnlcIlxuICBpY29uPVwiaW5mb1wiXG4gIFthY3RpdmVdPVwiYnJvd3NlRGV0ZWN0b3JQYXJ0c1wiXG4gIChjbGljayk9XCJ0b2dnbGVPdmVybGF5KClcIlxuPlxuPC9hcHAtbWVudS10b2dnbGU+XG4iXX0=
@@ -0,0 +1,40 @@
1
+ export * from './animate-camera/animate-camera.component';
2
+ export * from './animate-event/animate-event.component';
3
+ export * from './auto-rotate/auto-rotate.component';
4
+ export * from './collections-info/collections-info.component';
5
+ export * from './collections-info/collections-info-overlay/collections-info-overlay.component';
6
+ export * from './geometry-browser/geometry-browser.component';
7
+ export * from './geometry-browser/geometry-browser-overlay/geometry-browser-overlay.component';
8
+ export * from './dark-theme/dark-theme.component';
9
+ export * from './event-selector/event-selector.component';
10
+ export * from './experiment-info/experiment-info.component';
11
+ export * from './info-panel/info-panel.component';
12
+ export * from './info-panel/info-panel-overlay/info-panel-overlay.component';
13
+ export * from './io-options/io-options.component';
14
+ export * from './io-options/io-options-dialog/io-options-dialog.component';
15
+ export * from './main-view-toggle/main-view-toggle.component';
16
+ export * from './menu-toggle/menu-toggle.component';
17
+ export * from './object-clipping/object-clipping.component';
18
+ export * from './object-selection/object-selection.component';
19
+ export * from './object-selection/object-selection-overlay/object-selection-overlay.component';
20
+ export * from './overlay/overlay.component';
21
+ export * from './overlay-view/overlay-view.component';
22
+ export * from './overlay-view/overlay-view-window/overlay-view-window.component';
23
+ export * from './tree-menu/tree-menu.component';
24
+ export * from './tree-menu/tree-menu-item/tree-menu-item.component';
25
+ export * from './view-options/view-options.component';
26
+ export * from './view-options/cartesian-grid-config/cartesian-grid-config.component';
27
+ export * from './vr-toggle/vr-toggle.component';
28
+ export * from './ar-toggle/ar-toggle.component';
29
+ export * from './zoom-controls/zoom-controls.component';
30
+ export * from './ss-mode/ss-mode.component';
31
+ export * from './make-picture/make-picture.component';
32
+ export * from './performance-toggle/performance-toggle.component';
33
+ export * from './ui-menu.component';
34
+ export * from './share-link/share-link.component';
35
+ export * from './share-link/share-link-dialog/share-link-dialog.component';
36
+ export * from './event-data-explorer/event-data-explorer.component';
37
+ export * from './event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component';
38
+ export * from './cycle-events/cycle-events.component';
39
+ export * from './ui-menu-wrapper/ui-menu-wrapper.component';
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxnRkFBZ0YsQ0FBQztBQUMvRixjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsZ0ZBQWdGLENBQUM7QUFDL0YsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDhEQUE4RCxDQUFDO0FBQzdFLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw0REFBNEQsQ0FBQztBQUMzRSxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsZ0ZBQWdGLENBQUM7QUFDL0YsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsa0VBQWtFLENBQUM7QUFDakYsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxzRUFBc0UsQ0FBQztBQUNyRixjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw0REFBNEQsQ0FBQztBQUMzRSxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsdUZBQXVGLENBQUM7QUFDdEcsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDZDQUE2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hbmltYXRlLWNhbWVyYS9hbmltYXRlLWNhbWVyYS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9hbmltYXRlLWV2ZW50L2FuaW1hdGUtZXZlbnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYXV0by1yb3RhdGUvYXV0by1yb3RhdGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY29sbGVjdGlvbnMtaW5mby9jb2xsZWN0aW9ucy1pbmZvLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbGxlY3Rpb25zLWluZm8vY29sbGVjdGlvbnMtaW5mby1vdmVybGF5L2NvbGxlY3Rpb25zLWluZm8tb3ZlcmxheS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW9tZXRyeS1icm93c2VyL2dlb21ldHJ5LWJyb3dzZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZ2VvbWV0cnktYnJvd3Nlci9nZW9tZXRyeS1icm93c2VyLW92ZXJsYXkvZ2VvbWV0cnktYnJvd3Nlci1vdmVybGF5LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2RhcmstdGhlbWUvZGFyay10aGVtZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudC1zZWxlY3Rvci9ldmVudC1zZWxlY3Rvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9leHBlcmltZW50LWluZm8vZXhwZXJpbWVudC1pbmZvLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2luZm8tcGFuZWwvaW5mby1wYW5lbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmZvLXBhbmVsL2luZm8tcGFuZWwtb3ZlcmxheS9pbmZvLXBhbmVsLW92ZXJsYXkuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaW8tb3B0aW9ucy9pby1vcHRpb25zLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2lvLW9wdGlvbnMvaW8tb3B0aW9ucy1kaWFsb2cvaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbWFpbi12aWV3LXRvZ2dsZS9tYWluLXZpZXctdG9nZ2xlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL21lbnUtdG9nZ2xlL21lbnUtdG9nZ2xlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL29iamVjdC1jbGlwcGluZy9vYmplY3QtY2xpcHBpbmcuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0LXNlbGVjdGlvbi9vYmplY3Qtc2VsZWN0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL29iamVjdC1zZWxlY3Rpb24vb2JqZWN0LXNlbGVjdGlvbi1vdmVybGF5L29iamVjdC1zZWxlY3Rpb24tb3ZlcmxheS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9vdmVybGF5L292ZXJsYXkuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vb3ZlcmxheS12aWV3L292ZXJsYXktdmlldy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9vdmVybGF5LXZpZXcvb3ZlcmxheS12aWV3LXdpbmRvdy9vdmVybGF5LXZpZXctd2luZG93LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RyZWUtbWVudS90cmVlLW1lbnUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdHJlZS1tZW51L3RyZWUtbWVudS1pdGVtL3RyZWUtbWVudS1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXctb3B0aW9ucy92aWV3LW9wdGlvbnMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdmlldy1vcHRpb25zL2NhcnRlc2lhbi1ncmlkLWNvbmZpZy9jYXJ0ZXNpYW4tZ3JpZC1jb25maWcuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdnItdG9nZ2xlL3ZyLXRvZ2dsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9hci10b2dnbGUvYXItdG9nZ2xlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3pvb20tY29udHJvbHMvem9vbS1jb250cm9scy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcy1tb2RlL3NzLW1vZGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbWFrZS1waWN0dXJlL21ha2UtcGljdHVyZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJmb3JtYW5jZS10b2dnbGUvcGVyZm9ybWFuY2UtdG9nZ2xlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3VpLW1lbnUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2hhcmUtbGluay9zaGFyZS1saW5rLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NoYXJlLWxpbmsvc2hhcmUtbGluay1kaWFsb2cvc2hhcmUtbGluay1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZXZlbnQtZGF0YS1leHBsb3Jlci9ldmVudC1kYXRhLWV4cGxvcmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2V2ZW50LWRhdGEtZXhwbG9yZXIvZXZlbnQtZGF0YS1leHBsb3Jlci1kaWFsb2cvZXZlbnQtZGF0YS1leHBsb3Jlci1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY3ljbGUtZXZlbnRzL2N5Y2xlLWV2ZW50cy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi91aS1tZW51LXdyYXBwZXIvdWktbWVudS13cmFwcGVyLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,69 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import packageJson from 'phoenix-event-display/package.json';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../../../services/event-display.service";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "../../overlay/overlay.component";
7
+ function InfoPanelOverlayComponent_li_4_Template(rf, ctx) { if (rf & 1) {
8
+ i0.ɵɵelementStart(0, "li", 2);
9
+ i0.ɵɵtext(1, " No actions. ");
10
+ i0.ɵɵelementEnd();
11
+ } }
12
+ function InfoPanelOverlayComponent_li_5_Template(rf, ctx) { if (rf & 1) {
13
+ i0.ɵɵelementStart(0, "li", 2);
14
+ i0.ɵɵtext(1);
15
+ i0.ɵɵelementEnd();
16
+ } if (rf & 2) {
17
+ const action_r1 = ctx.$implicit;
18
+ i0.ɵɵadvance();
19
+ i0.ɵɵtextInterpolate1(" ", action_r1, " ");
20
+ } }
21
+ /**
22
+ * Component for displaying information from the logger
23
+ */
24
+ export class InfoPanelOverlayComponent {
25
+ eventDisplay;
26
+ /** @ignore */
27
+ showInfoPanel;
28
+ /** List of actions to be displayed in the info panel */
29
+ actionsList = [];
30
+ /** Get Phoenix Version */
31
+ version = packageJson.version;
32
+ /**
33
+ * Create the information panel overlay
34
+ * @param infoLogger Service containing operations related to info logs
35
+ */
36
+ constructor(eventDisplay) {
37
+ this.eventDisplay = eventDisplay;
38
+ }
39
+ /**
40
+ * Get the list of logs from the info logger service
41
+ */
42
+ ngOnInit() {
43
+ this.actionsList = this.eventDisplay.getInfoLogger().getInfoLoggerList();
44
+ }
45
+ static ɵfac = function InfoPanelOverlayComponent_Factory(t) { return new (t || InfoPanelOverlayComponent)(i0.ɵɵdirectiveInject(i1.EventDisplayService)); };
46
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: InfoPanelOverlayComponent, selectors: [["app-info-panel-overlay"]], inputs: { showInfoPanel: "showInfoPanel" }, decls: 6, vars: 5, consts: [["overlayTitle", "Info Panel", "icon", "info-panel", 3, "resizable", "active"], [1, "list-group", "list-group-flush"], [1, "list-group-item"], ["class", "list-group-item", 4, "ngIf"], ["class", "list-group-item", 4, "ngFor", "ngForOf"]], template: function InfoPanelOverlayComponent_Template(rf, ctx) { if (rf & 1) {
47
+ i0.ɵɵelementStart(0, "app-overlay", 0)(1, "ul", 1)(2, "li", 2);
48
+ i0.ɵɵtext(3);
49
+ i0.ɵɵelementEnd();
50
+ i0.ɵɵtemplate(4, InfoPanelOverlayComponent_li_4_Template, 2, 0, "li", 3)(5, InfoPanelOverlayComponent_li_5_Template, 2, 1, "li", 4);
51
+ i0.ɵɵelementEnd()();
52
+ } if (rf & 2) {
53
+ i0.ɵɵproperty("resizable", true)("active", ctx.showInfoPanel);
54
+ i0.ɵɵadvance(3);
55
+ i0.ɵɵtextInterpolate1(" Phoenix Version: ", ctx.version, " ");
56
+ i0.ɵɵadvance();
57
+ i0.ɵɵproperty("ngIf", ctx.actionsList.length === 0);
58
+ i0.ɵɵadvance();
59
+ i0.ɵɵproperty("ngForOf", ctx.actionsList);
60
+ } }, dependencies: [i2.NgForOf, i2.NgIf, i3.OverlayComponent], styles: [".list-group-item[_ngcontent-%COMP%]{font-size:.8rem;padding:.5rem 1rem}"] });
61
+ }
62
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoPanelOverlayComponent, [{
63
+ type: Component,
64
+ args: [{ selector: 'app-info-panel-overlay', template: "<app-overlay\n overlayTitle=\"Info Panel\"\n icon=\"info-panel\"\n [resizable]=\"true\"\n [active]=\"showInfoPanel\"\n>\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item\">\n <!-- Show Phoenix Current Version (ON by Default) -->\n Phoenix Version: {{ version }}\n </li>\n <li class=\"list-group-item\" *ngIf=\"actionsList.length === 0\">\n No actions.\n </li>\n <li class=\"list-group-item\" *ngFor=\"let action of actionsList\">\n {{ action }}\n </li>\n </ul>\n</app-overlay>\n", styles: [".list-group-item{font-size:.8rem;padding:.5rem 1rem}\n"] }]
65
+ }], () => [{ type: i1.EventDisplayService }], { showInfoPanel: [{
66
+ type: Input
67
+ }] }); })();
68
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InfoPanelOverlayComponent, { className: "InfoPanelOverlayComponent", filePath: "components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.ts", lineNumber: 13 }); })();
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby1wYW5lbC1vdmVybGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3VpLW1lbnUvaW5mby1wYW5lbC9pbmZvLXBhbmVsLW92ZXJsYXkvaW5mby1wYW5lbC1vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3VpLW1lbnUvaW5mby1wYW5lbC9pbmZvLXBhbmVsLW92ZXJsYXkvaW5mby1wYW5lbC1vdmVybGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sV0FBVyxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7SUNTekQsNkJBQTZEO0lBQzNELDZCQUNGO0lBQUEsaUJBQUs7OztJQUNMLDZCQUErRDtJQUM3RCxZQUNGO0lBQUEsaUJBQUs7OztJQURILGNBQ0Y7SUFERSwwQ0FDRjs7QURaSjs7R0FFRztBQU1ILE1BQU0sT0FBTyx5QkFBeUI7SUFZaEI7SUFYcEIsY0FBYztJQUNMLGFBQWEsQ0FBVTtJQUNoQyx3REFBd0Q7SUFDeEQsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNqQiwwQkFBMEI7SUFDMUIsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7SUFFOUI7OztPQUdHO0lBQ0gsWUFBb0IsWUFBaUM7UUFBakMsaUJBQVksR0FBWixZQUFZLENBQXFCO0lBQUcsQ0FBQztJQUV6RDs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzRSxDQUFDO21GQW5CVSx5QkFBeUI7NkRBQXpCLHlCQUF5QjtZQ0xsQyxBQURGLEFBTkYsc0NBS0MsWUFDeUMsWUFDVjtZQUUxQixZQUNGO1lBQUEsaUJBQUs7WUFJTCxBQUhBLHdFQUE2RCwyREFHRTtZQUluRSxBQURFLGlCQUFLLEVBQ087O1lBZFosQUFEQSxnQ0FBa0IsNkJBQ007WUFLcEIsZUFDRjtZQURFLDZEQUNGO1lBQzZCLGNBQThCO1lBQTlCLG1EQUE4QjtZQUdaLGNBQWM7WUFBZCx5Q0FBYzs7O2lGREZwRCx5QkFBeUI7Y0FMckMsU0FBUzsyQkFDRSx3QkFBd0I7b0RBTXpCLGFBQWE7a0JBQXJCLEtBQUs7O2tGQUZLLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnREaXNwbGF5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2V2ZW50LWRpc3BsYXkuc2VydmljZSc7XG5pbXBvcnQgcGFja2FnZUpzb24gZnJvbSAncGhvZW5peC1ldmVudC1kaXNwbGF5L3BhY2thZ2UuanNvbic7XG5cbi8qKlxuICogQ29tcG9uZW50IGZvciBkaXNwbGF5aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGxvZ2dlclxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtaW5mby1wYW5lbC1vdmVybGF5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2luZm8tcGFuZWwtb3ZlcmxheS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2luZm8tcGFuZWwtb3ZlcmxheS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBJbmZvUGFuZWxPdmVybGF5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgQElucHV0KCkgc2hvd0luZm9QYW5lbDogYm9vbGVhbjtcbiAgLyoqIExpc3Qgb2YgYWN0aW9ucyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGluZm8gcGFuZWwgKi9cbiAgYWN0aW9uc0xpc3QgPSBbXTtcbiAgLyoqIEdldCBQaG9lbml4IFZlcnNpb24gKi9cbiAgdmVyc2lvbiA9IHBhY2thZ2VKc29uLnZlcnNpb247XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgaW5mb3JtYXRpb24gcGFuZWwgb3ZlcmxheVxuICAgKiBAcGFyYW0gaW5mb0xvZ2dlciBTZXJ2aWNlIGNvbnRhaW5pbmcgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGluZm8gbG9nc1xuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBldmVudERpc3BsYXk6IEV2ZW50RGlzcGxheVNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBsb2dzIGZyb20gdGhlIGluZm8gbG9nZ2VyIHNlcnZpY2VcbiAgICovXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYWN0aW9uc0xpc3QgPSB0aGlzLmV2ZW50RGlzcGxheS5nZXRJbmZvTG9nZ2VyKCkuZ2V0SW5mb0xvZ2dlckxpc3QoKTtcbiAgfVxufVxuIiwiPGFwcC1vdmVybGF5XG4gIG92ZXJsYXlUaXRsZT1cIkluZm8gUGFuZWxcIlxuICBpY29uPVwiaW5mby1wYW5lbFwiXG4gIFtyZXNpemFibGVdPVwidHJ1ZVwiXG4gIFthY3RpdmVdPVwic2hvd0luZm9QYW5lbFwiXG4+XG4gIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxuICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxuICAgICAgPCEtLSBTaG93IFBob2VuaXggQ3VycmVudCBWZXJzaW9uIChPTiBieSBEZWZhdWx0KSAtLT5cbiAgICAgIFBob2VuaXggVmVyc2lvbjoge3sgdmVyc2lvbiB9fVxuICAgIDwvbGk+XG4gICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCIgKm5nSWY9XCJhY3Rpb25zTGlzdC5sZW5ndGggPT09IDBcIj5cbiAgICAgIE5vIGFjdGlvbnMuXG4gICAgPC9saT5cbiAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNMaXN0XCI+XG4gICAgICB7eyBhY3Rpb24gfX1cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9hcHAtb3ZlcmxheT5cbiJdfQ==
@@ -0,0 +1,59 @@
1
+ import { Component } from '@angular/core';
2
+ import { ComponentPortal } from '@angular/cdk/portal';
3
+ import { InfoPanelOverlayComponent } from './info-panel-overlay/info-panel-overlay.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/cdk/overlay";
6
+ import * as i2 from "../menu-toggle/menu-toggle.component";
7
+ /**
8
+ * Component for toggling info panel overlay
9
+ */
10
+ export class InfoPanelComponent {
11
+ overlay;
12
+ /** @ignore */
13
+ showInfoPanel = false;
14
+ /** Information panel overlay window */
15
+ overlayWindow;
16
+ /**
17
+ * Create the info panel toggle
18
+ * @param overlay Info panel overlay containing logger data
19
+ */
20
+ constructor(overlay) {
21
+ this.overlay = overlay;
22
+ }
23
+ /**
24
+ * Create the info panel overlay
25
+ */
26
+ ngOnInit() {
27
+ const overlayRef = this.overlay.create();
28
+ const overlayPortal = new ComponentPortal(InfoPanelOverlayComponent);
29
+ this.overlayWindow = overlayRef.attach(overlayPortal);
30
+ this.overlayWindow.instance.showInfoPanel = this.showInfoPanel;
31
+ }
32
+ /**
33
+ * Destroy the info panel overlay
34
+ */
35
+ ngOnDestroy() {
36
+ this.overlayWindow.destroy();
37
+ }
38
+ /**
39
+ * Toggle the info panel overlay
40
+ */
41
+ toggleOverlay() {
42
+ this.showInfoPanel = !this.showInfoPanel;
43
+ this.overlayWindow.instance.showInfoPanel = this.showInfoPanel;
44
+ }
45
+ static ɵfac = function InfoPanelComponent_Factory(t) { return new (t || InfoPanelComponent)(i0.ɵɵdirectiveInject(i1.Overlay)); };
46
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: InfoPanelComponent, selectors: [["app-info-panel"]], decls: 1, vars: 1, consts: [["tooltip", "Info panel", "icon", "info-panel", 3, "click", "active"]], template: function InfoPanelComponent_Template(rf, ctx) { if (rf & 1) {
47
+ i0.ɵɵelementStart(0, "app-menu-toggle", 0);
48
+ i0.ɵɵlistener("click", function InfoPanelComponent_Template_app_menu_toggle_click_0_listener() { return ctx.toggleOverlay(); });
49
+ i0.ɵɵelementEnd();
50
+ } if (rf & 2) {
51
+ i0.ɵɵproperty("active", ctx.showInfoPanel);
52
+ } }, dependencies: [i2.MenuToggleComponent] });
53
+ }
54
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoPanelComponent, [{
55
+ type: Component,
56
+ args: [{ selector: 'app-info-panel', template: "<app-menu-toggle\n tooltip=\"Info panel\"\n icon=\"info-panel\"\n [active]=\"showInfoPanel\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n" }]
57
+ }], () => [{ type: i1.Overlay }], null); })();
58
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InfoPanelComponent, { className: "InfoPanelComponent", filePath: "components/ui-menu/info-panel/info-panel.component.ts", lineNumber: 14 }); })();
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L2luZm8tcGFuZWwvaW5mby1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L2luZm8tcGFuZWwvaW5mby1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFtQyxNQUFNLGVBQWUsQ0FBQztBQUUzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbURBQW1ELENBQUM7Ozs7QUFFOUY7O0dBRUc7QUFNSCxNQUFNLE9BQU8sa0JBQWtCO0lBVVQ7SUFUcEIsY0FBYztJQUNkLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDdEIsdUNBQXVDO0lBQ3ZDLGFBQWEsQ0FBMEM7SUFFdkQ7OztPQUdHO0lBQ0gsWUFBb0IsT0FBZ0I7UUFBaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztJQUFHLENBQUM7SUFFeEM7O09BRUc7SUFDSCxRQUFRO1FBQ04sTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDakUsQ0FBQzs0RUFuQ1Usa0JBQWtCOzZEQUFsQixrQkFBa0I7WUNiL0IsMENBS0M7WUFEQyx3R0FBUyxtQkFBZSxJQUFDO1lBRTNCLGlCQUFrQjs7WUFIaEIsMENBQXdCOzs7aUZEVWIsa0JBQWtCO2NBTDlCLFNBQVM7MkJBQ0UsZ0JBQWdCOztrRkFJZixrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgQ29tcG9uZW50UmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEluZm9QYW5lbE92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuL2luZm8tcGFuZWwtb3ZlcmxheS9pbmZvLXBhbmVsLW92ZXJsYXkuY29tcG9uZW50JztcblxuLyoqXG4gKiBDb21wb25lbnQgZm9yIHRvZ2dsaW5nIGluZm8gcGFuZWwgb3ZlcmxheVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtaW5mby1wYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbmZvLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5mby1wYW5lbC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBJbmZvUGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBAaWdub3JlICovXG4gIHNob3dJbmZvUGFuZWwgPSBmYWxzZTtcbiAgLyoqIEluZm9ybWF0aW9uIHBhbmVsIG92ZXJsYXkgd2luZG93ICovXG4gIG92ZXJsYXlXaW5kb3c6IENvbXBvbmVudFJlZjxJbmZvUGFuZWxPdmVybGF5Q29tcG9uZW50PjtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBpbmZvIHBhbmVsIHRvZ2dsZVxuICAgKiBAcGFyYW0gb3ZlcmxheSBJbmZvIHBhbmVsIG92ZXJsYXkgY29udGFpbmluZyBsb2dnZXIgZGF0YVxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5KSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGluZm8gcGFuZWwgb3ZlcmxheVxuICAgKi9cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoKTtcbiAgICBjb25zdCBvdmVybGF5UG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChJbmZvUGFuZWxPdmVybGF5Q29tcG9uZW50KTtcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3cgPSBvdmVybGF5UmVmLmF0dGFjaChvdmVybGF5UG9ydGFsKTtcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3cuaW5zdGFuY2Uuc2hvd0luZm9QYW5lbCA9IHRoaXMuc2hvd0luZm9QYW5lbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95IHRoZSBpbmZvIHBhbmVsIG92ZXJsYXlcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub3ZlcmxheVdpbmRvdy5kZXN0cm95KCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBpbmZvIHBhbmVsIG92ZXJsYXlcbiAgICovXG4gIHRvZ2dsZU92ZXJsYXkoKSB7XG4gICAgdGhpcy5zaG93SW5mb1BhbmVsID0gIXRoaXMuc2hvd0luZm9QYW5lbDtcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3cuaW5zdGFuY2Uuc2hvd0luZm9QYW5lbCA9IHRoaXMuc2hvd0luZm9QYW5lbDtcbiAgfVxufVxuIiwiPGFwcC1tZW51LXRvZ2dsZVxuICB0b29sdGlwPVwiSW5mbyBwYW5lbFwiXG4gIGljb249XCJpbmZvLXBhbmVsXCJcbiAgW2FjdGl2ZV09XCJzaG93SW5mb1BhbmVsXCJcbiAgKGNsaWNrKT1cInRvZ2dsZU92ZXJsYXkoKVwiXG4+XG48L2FwcC1tZW51LXRvZ2dsZT5cbiJdfQ==
@@ -0,0 +1,294 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CMSLoader, JiveXMLLoader, readZipFile, Edm4hepJsonLoader, } from 'phoenix-event-display';
3
+ import { EventDataFormat, ImportOption, } from '../../../../services/extras/event-data-import';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../../../services/event-display.service";
6
+ import * as i2 from "@angular/material/dialog";
7
+ import * as i3 from "@angular/common";
8
+ import * as i4 from "@angular/material/button";
9
+ function IOOptionsDialogComponent_div_4_ng_container_5_Template(rf, ctx) { if (rf & 1) {
10
+ const _r2 = i0.ɵɵgetCurrentView();
11
+ i0.ɵɵelementContainerStart(0);
12
+ i0.ɵɵelementStart(1, "input", 29, 5);
13
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_div_4_ng_container_5_Template_input_change_1_listener($event) { const eventDataImportOption_r3 = i0.ɵɵrestoreView(_r2).$implicit; return i0.ɵɵresetView(eventDataImportOption_r3.handler($event.target.files)); });
14
+ i0.ɵɵelementEnd();
15
+ i0.ɵɵelementStart(3, "button", 13);
16
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_div_4_ng_container_5_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r2); const eventDataFileInput_r4 = i0.ɵɵreference(2); return i0.ɵɵresetView(eventDataFileInput_r4.click()); });
17
+ i0.ɵɵelement(4, "img", 30);
18
+ i0.ɵɵtext(5);
19
+ i0.ɵɵelementEnd();
20
+ i0.ɵɵelementContainerEnd();
21
+ } if (rf & 2) {
22
+ const eventDataImportOption_r3 = ctx.$implicit;
23
+ i0.ɵɵadvance();
24
+ i0.ɵɵproperty("accept", eventDataImportOption_r3.accept);
25
+ i0.ɵɵadvance(4);
26
+ i0.ɵɵtextInterpolate1(" Load ", eventDataImportOption_r3.fileType, " ");
27
+ } }
28
+ function IOOptionsDialogComponent_div_4_Template(rf, ctx) { if (rf & 1) {
29
+ i0.ɵɵelementStart(0, "div")(1, "p", 10)(2, "b");
30
+ i0.ɵɵtext(3, "Event data");
31
+ i0.ɵɵelementEnd()();
32
+ i0.ɵɵelementStart(4, "div", 11);
33
+ i0.ɵɵtemplate(5, IOOptionsDialogComponent_div_4_ng_container_5_Template, 6, 2, "ng-container", 28);
34
+ i0.ɵɵelementEnd()();
35
+ } if (rf & 2) {
36
+ const ctx_r4 = i0.ɵɵnextContext();
37
+ i0.ɵɵadvance(5);
38
+ i0.ɵɵproperty("ngForOf", ctx_r4.eventDataOptionsWithHandler);
39
+ } }
40
+ export class IOOptionsDialogComponent {
41
+ eventDisplay;
42
+ dialogRef;
43
+ eventDataImportOptions = [EventDataFormat.JSON];
44
+ eventDataOptionsWithHandler;
45
+ supportedEventDataFormats = [
46
+ new ImportOption(EventDataFormat.JSON, '.json', this.handleJSONEventDataInput.bind(this), 'application/json'),
47
+ new ImportOption(EventDataFormat.EDM4HEPJSON, '.edm4hep.json', this.handleEDM4HEPJSONEventDataInput.bind(this), 'application/json'),
48
+ new ImportOption(EventDataFormat.JIVEXML, '.xml', this.handleJiveXMLDataInput.bind(this), 'text/xml'),
49
+ new ImportOption(EventDataFormat.ZIP, '.zip', this.handleZipEventDataInput.bind(this), '.zip'),
50
+ new ImportOption(EventDataFormat.IG, '.ig', this.handleIgEventDataInput.bind(this), '.ig'),
51
+ ];
52
+ constructor(eventDisplay, dialogRef) {
53
+ this.eventDisplay = eventDisplay;
54
+ this.dialogRef = dialogRef;
55
+ }
56
+ ngOnInit() {
57
+ this.eventDataOptionsWithHandler = this.supportedEventDataFormats.filter((eventDataFormat) => this.eventDataImportOptions.includes(eventDataFormat.format));
58
+ this.eventDataImportOptions.forEach((eventDataImportOption) => {
59
+ if (eventDataImportOption instanceof ImportOption) {
60
+ const importHandler = eventDataImportOption.handler.bind(this);
61
+ eventDataImportOption.handler = (files) => {
62
+ importHandler(files);
63
+ this.onClose();
64
+ };
65
+ this.eventDataOptionsWithHandler.push(eventDataImportOption);
66
+ }
67
+ });
68
+ }
69
+ getSupportedEventDataFormats() {
70
+ return this.eventDataImportOptions
71
+ .map((format) => {
72
+ if (format instanceof ImportOption) {
73
+ return format.format;
74
+ }
75
+ return format;
76
+ })
77
+ .filter((format) => format !== 'ZIP')
78
+ .join(', ');
79
+ }
80
+ onClose() {
81
+ this.dialogRef.close();
82
+ }
83
+ handleJSONEventDataInput(files) {
84
+ const callback = (content) => {
85
+ const json = typeof content === 'string' ? JSON.parse(content) : content;
86
+ this.eventDisplay.parsePhoenixEvents(json);
87
+ };
88
+ this.handleFileInput(files[0], 'json', callback);
89
+ }
90
+ handleEDM4HEPJSONEventDataInput(files) {
91
+ const callback = (content) => {
92
+ const json = typeof content === 'string' ? JSON.parse(content) : content;
93
+ const edm4hepJsonLoader = new Edm4hepJsonLoader();
94
+ edm4hepJsonLoader.setRawEventData(json);
95
+ edm4hepJsonLoader.processEventData();
96
+ this.eventDisplay.parsePhoenixEvents(edm4hepJsonLoader.getEventData());
97
+ };
98
+ this.handleFileInput(files[0], 'json', callback);
99
+ }
100
+ handleJiveXMLDataInput(files) {
101
+ const callback = (content) => {
102
+ const jiveloader = new JiveXMLLoader();
103
+ jiveloader.process(content);
104
+ const eventData = jiveloader.getEventData();
105
+ this.eventDisplay.buildEventDataFromJSON(eventData);
106
+ };
107
+ this.handleFileInput(files[0], 'xml', callback);
108
+ }
109
+ handleOBJInput(files) {
110
+ const callback = (content, name) => {
111
+ this.eventDisplay.parseOBJGeometry(content, name);
112
+ };
113
+ this.handleFileInput(files[0], 'obj', callback);
114
+ }
115
+ handleSceneInput(files) {
116
+ const callback = (content) => {
117
+ this.eventDisplay.parsePhoenixDisplay(content);
118
+ };
119
+ this.handleFileInput(files[0], 'phnx', callback);
120
+ }
121
+ handleGLTFInput(files) {
122
+ const callback = (content, name) => {
123
+ this.eventDisplay.parseGLTFGeometry(content, name);
124
+ };
125
+ this.handleFileInput(files[0], 'gltf', callback);
126
+ }
127
+ handlePhoenixInput(files) {
128
+ const callback = (content) => {
129
+ this.eventDisplay.parsePhoenixDisplay(content);
130
+ };
131
+ this.handleFileInput(files[0], 'phnx', callback);
132
+ }
133
+ async handleROOTInput(files) {
134
+ const rootObjectName = prompt('Enter object name in ROOT file');
135
+ await this.eventDisplay.loadRootGeometry(URL.createObjectURL(files[0]), rootObjectName, files[0].name.split('.')[0]);
136
+ this.onClose();
137
+ }
138
+ async handleRootJSONInput(files) {
139
+ if (!this.isFileOfExtension(files[0], 'gz')) {
140
+ return;
141
+ }
142
+ const name = files[0].name.split('.')[0];
143
+ await this.eventDisplay.loadRootJSONGeometry(URL.createObjectURL(files[0]), name);
144
+ this.onClose();
145
+ }
146
+ handleIgEventDataInput(files) {
147
+ const cmsLoader = new CMSLoader();
148
+ cmsLoader.readIgArchive(files[0], (allEvents) => {
149
+ const allEventsData = cmsLoader.getAllEventsData(allEvents);
150
+ this.eventDisplay.parsePhoenixEvents(allEventsData);
151
+ this.onClose();
152
+ });
153
+ }
154
+ async handleZipEventDataInput(files) {
155
+ if (!this.isFileOfExtension(files[0], 'zip')) {
156
+ return;
157
+ }
158
+ const allEventsObject = {};
159
+ let filesWithData;
160
+ // Using a try catch block to catch any errors in Promises
161
+ try {
162
+ filesWithData = await readZipFile(files[0]);
163
+ }
164
+ catch (error) {
165
+ console.error('Error while reading zip', error);
166
+ this.eventDisplay.getInfoLogger().add('Could not read zip file', 'Error');
167
+ return;
168
+ }
169
+ // JSON event data
170
+ Object.keys(filesWithData)
171
+ .filter((fileName) => fileName.endsWith('.json'))
172
+ .forEach((fileName) => {
173
+ Object.assign(allEventsObject, JSON.parse(filesWithData[fileName]));
174
+ });
175
+ // JiveXML event data
176
+ const jiveloader = new JiveXMLLoader();
177
+ Object.keys(filesWithData)
178
+ .filter((fileName) => {
179
+ return fileName.endsWith('.xml') || fileName.startsWith('JiveXML');
180
+ })
181
+ .forEach((fileName) => {
182
+ jiveloader.process(filesWithData[fileName]);
183
+ const eventData = jiveloader.getEventData();
184
+ Object.assign(allEventsObject, { [fileName]: eventData });
185
+ });
186
+ // For some reason the above doesn't pick up JiveXML_XXX_YYY.zip
187
+ this.eventDisplay.parsePhoenixEvents(allEventsObject);
188
+ this.onClose();
189
+ }
190
+ handleFileInput(file, extension, callback) {
191
+ const reader = new FileReader();
192
+ if (this.isFileOfExtension(file, extension)) {
193
+ reader.onload = () => {
194
+ callback(reader.result.toString(), file.name.split('.')[0]);
195
+ };
196
+ reader.readAsText(file);
197
+ }
198
+ this.onClose();
199
+ }
200
+ isFileOfExtension(file, extension) {
201
+ if (file.name.split('.').pop() === extension) {
202
+ return true;
203
+ }
204
+ console.error('Error: Invalid file format!');
205
+ this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');
206
+ return false;
207
+ }
208
+ saveScene() {
209
+ this.eventDisplay.exportPhoenixDisplay();
210
+ }
211
+ exportOBJ() {
212
+ this.eventDisplay.exportToOBJ();
213
+ }
214
+ static ɵfac = function IOOptionsDialogComponent_Factory(t) { return new (t || IOOptionsDialogComponent)(i0.ɵɵdirectiveInject(i1.EventDisplayService), i0.ɵɵdirectiveInject(i2.MatDialogRef)); };
215
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: IOOptionsDialogComponent, selectors: [["app-io-options-dialog"]], inputs: { eventDataImportOptions: "eventDataImportOptions" }, decls: 47, vars: 1, consts: [["objFileInput", ""], ["gltfFileInput", ""], ["rootFileInput", ""], ["rootJSONFileInput", ""], ["loadSceneInput", ""], ["eventDataFileInput", ""], [1, "dialog"], ["mat-dialog-title", ""], ["mat-dialog-content", "", 1, "dialog-content"], [4, "ngIf"], [1, "text-center"], [1, "row", "centered"], ["type", "file", "tabindex", "-1", "accept", ".obj", "name", "image", 1, "file-input", 3, "change"], [1, "file-input-button", 3, "click"], ["src", "assets/icons/obj.svg", "alt", ""], ["type", "file", "tabindex", "-1", "accept", ".gltf", "name", "image", 1, "file-input", 3, "change"], ["src", "assets/icons/gltf.svg", "alt", ""], ["type", "file", "tabindex", "-1", "accept", ".root", 1, "file-input", 3, "change"], ["src", "assets/icons/file-import.svg", "alt", ""], ["type", "file", "tabindex", "-1", "accept", ".json.gz", 1, "file-input", 3, "change"], ["id", "exportScene", 1, "file-input-button", "load-export", 3, "click"], ["src", "assets/icons/save.svg", "alt", ""], ["type", "file", "tabindex", "-1", "accept", ".phnx", "name", "image", 1, "file-input", 3, "change"], ["id", "importScene", 1, "file-input-button", "load-export", 3, "click"], ["src", "assets/icons/upload.svg", "alt", ""], ["id", "exportOBJ", 1, "file-input-button", "export-button", 3, "click"], ["mat-dialog-actions", "", "align", "end"], ["mat-flat-button", "", "color", "primary", "cdkFocusInitial", "", 3, "click"], [4, "ngFor", "ngForOf"], ["type", "file", "tabindex", "-1", 1, "file-input", 3, "change", "accept"], ["src", "assets/icons/eventData.svg", "alt", "Event data icon"]], template: function IOOptionsDialogComponent_Template(rf, ctx) { if (rf & 1) {
216
+ const _r1 = i0.ɵɵgetCurrentView();
217
+ i0.ɵɵelementStart(0, "div", 6)(1, "h1", 7);
218
+ i0.ɵɵtext(2, "Import and export");
219
+ i0.ɵɵelementEnd();
220
+ i0.ɵɵelementStart(3, "div", 8);
221
+ i0.ɵɵtemplate(4, IOOptionsDialogComponent_div_4_Template, 6, 1, "div", 9);
222
+ i0.ɵɵelementStart(5, "p", 10)(6, "b");
223
+ i0.ɵɵtext(7, "Geometries");
224
+ i0.ɵɵelementEnd()();
225
+ i0.ɵɵelementStart(8, "div", 11)(9, "input", 12, 0);
226
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_9_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleOBJInput($event.target.files)); });
227
+ i0.ɵɵelementEnd();
228
+ i0.ɵɵelementStart(11, "button", 13);
229
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r1); const objFileInput_r6 = i0.ɵɵreference(10); return i0.ɵɵresetView(objFileInput_r6.click()); });
230
+ i0.ɵɵelement(12, "img", 14);
231
+ i0.ɵɵtext(13, " Load .obj ");
232
+ i0.ɵɵelementEnd();
233
+ i0.ɵɵelementStart(14, "input", 15, 1);
234
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_14_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleGLTFInput($event.target.files)); });
235
+ i0.ɵɵelementEnd();
236
+ i0.ɵɵelementStart(16, "button", 13);
237
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r1); const gltfFileInput_r7 = i0.ɵɵreference(15); return i0.ɵɵresetView(gltfFileInput_r7.click()); });
238
+ i0.ɵɵelement(17, "img", 16);
239
+ i0.ɵɵtext(18, " Load .gltf ");
240
+ i0.ɵɵelementEnd();
241
+ i0.ɵɵelementStart(19, "input", 17, 2);
242
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_19_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleROOTInput($event.target.files)); });
243
+ i0.ɵɵelementEnd();
244
+ i0.ɵɵelementStart(21, "button", 13);
245
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r1); const rootFileInput_r8 = i0.ɵɵreference(20); return i0.ɵɵresetView(rootFileInput_r8.click()); });
246
+ i0.ɵɵelement(22, "img", 18);
247
+ i0.ɵɵtext(23, " Load .root ");
248
+ i0.ɵɵelementEnd();
249
+ i0.ɵɵelementStart(24, "input", 19, 3);
250
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_24_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleRootJSONInput($event.target.files)); });
251
+ i0.ɵɵelementEnd();
252
+ i0.ɵɵelementStart(26, "button", 13);
253
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_26_listener() { i0.ɵɵrestoreView(_r1); const rootJSONFileInput_r9 = i0.ɵɵreference(25); return i0.ɵɵresetView(rootJSONFileInput_r9.click()); });
254
+ i0.ɵɵelement(27, "img", 18);
255
+ i0.ɵɵtext(28, " Load .json.gz ");
256
+ i0.ɵɵelementEnd()();
257
+ i0.ɵɵelementStart(29, "p", 10)(30, "b");
258
+ i0.ɵɵtext(31, "Scene");
259
+ i0.ɵɵelementEnd()();
260
+ i0.ɵɵelementStart(32, "div", 11)(33, "button", 20);
261
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_33_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.saveScene()); });
262
+ i0.ɵɵelement(34, "img", 21);
263
+ i0.ɵɵtext(35, " Save scene ");
264
+ i0.ɵɵelementEnd();
265
+ i0.ɵɵelementStart(36, "input", 22, 4);
266
+ i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_36_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handlePhoenixInput($event.target.files)); });
267
+ i0.ɵɵelementEnd();
268
+ i0.ɵɵelementStart(38, "button", 23);
269
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_38_listener() { i0.ɵɵrestoreView(_r1); const loadSceneInput_r10 = i0.ɵɵreference(37); return i0.ɵɵresetView(loadSceneInput_r10.click()); });
270
+ i0.ɵɵelement(39, "img", 24);
271
+ i0.ɵɵtext(40, " Load scene ");
272
+ i0.ɵɵelementEnd();
273
+ i0.ɵɵelementStart(41, "button", 25);
274
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_41_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.exportOBJ()); });
275
+ i0.ɵɵelement(42, "img", 14);
276
+ i0.ɵɵtext(43, " Save OBJ ");
277
+ i0.ɵɵelementEnd()()();
278
+ i0.ɵɵelementStart(44, "div", 26)(45, "button", 27);
279
+ i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onClose()); });
280
+ i0.ɵɵtext(46, " Close ");
281
+ i0.ɵɵelementEnd()()();
282
+ } if (rf & 2) {
283
+ i0.ɵɵadvance(4);
284
+ i0.ɵɵproperty("ngIf", ctx.eventDataImportOptions.length > 0);
285
+ } }, dependencies: [i3.NgForOf, i3.NgIf, i2.MatDialogTitle, i2.MatDialogActions, i2.MatDialogContent, i4.MatButton], styles: [".row[_ngcontent-%COMP%]{justify-content:center;margin:1rem 0}.file-input[_ngcontent-%COMP%]{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.file-input-button[_ngcontent-%COMP%]{font-size:1em;font-weight:700;color:#fff;background-color:#6eaece;padding:1em .5em;border:none;border-radius:10px;width:8rem;margin:0 .4rem}.file-input-button.load-export[_ngcontent-%COMP%]{padding:.8em .2em;width:7rem}.file-input-button.load-export[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{max-height:1.2em}.file-input-button.export-button[_ngcontent-%COMP%]{background-color:#cb7133}.file-input-button.export-button[_ngcontent-%COMP%]:hover{background-color:#ad5b2d}.file-input-button[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{max-height:2em;display:block;width:100%}.file-input-button[_ngcontent-%COMP%]:hover{background-color:#118ab2}#exportScene[_ngcontent-%COMP%]{background-color:#5bd99e}#exportScene[_ngcontent-%COMP%]:hover{background-color:#05c292}#importScene[_ngcontent-%COMP%]{background-color:#ecc25e}#importScene[_ngcontent-%COMP%]:hover{background-color:#d6b44d}"] });
286
+ }
287
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IOOptionsDialogComponent, [{
288
+ type: Component,
289
+ args: [{ selector: 'app-io-options-dialog', template: "<div class=\"dialog\">\n <h1 mat-dialog-title>Import and export</h1>\n <div mat-dialog-content class=\"dialog-content\">\n <div *ngIf=\"eventDataImportOptions.length > 0\">\n <p class=\"text-center\"><b>Event data</b></p>\n\n <div class=\"row centered\">\n <ng-container\n *ngFor=\"let eventDataImportOption of eventDataOptionsWithHandler\"\n >\n <input\n #eventDataFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n [accept]=\"eventDataImportOption.accept\"\n (change)=\"eventDataImportOption.handler($event.target.files)\"\n />\n <button\n class=\"file-input-button\"\n (click)=\"eventDataFileInput.click()\"\n >\n <img src=\"assets/icons/eventData.svg\" alt=\"Event data icon\" />\n Load {{ eventDataImportOption.fileType }}\n </button>\n </ng-container>\n </div>\n </div>\n\n <p class=\"text-center\"><b>Geometries</b></p>\n\n <div class=\"row centered\">\n <input\n #objFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".obj\"\n name=\"image\"\n (change)=\"handleOBJInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"objFileInput.click()\">\n <img src=\"assets/icons/obj.svg\" alt=\"\" /> Load .obj\n </button>\n\n <input\n #gltfFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".gltf\"\n name=\"image\"\n (change)=\"handleGLTFInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"gltfFileInput.click()\">\n <img src=\"assets/icons/gltf.svg\" alt=\"\" /> Load .gltf\n </button>\n\n <input\n #rootFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".root\"\n (change)=\"handleROOTInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"rootFileInput.click()\">\n <img src=\"assets/icons/file-import.svg\" alt=\"\" /> Load .root\n </button>\n\n <input\n #rootJSONFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".json.gz\"\n (change)=\"handleRootJSONInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"rootJSONFileInput.click()\">\n <img src=\"assets/icons/file-import.svg\" alt=\"\" /> Load .json.gz\n </button>\n </div>\n\n <p class=\"text-center\"><b>Scene</b></p>\n\n <div class=\"row centered\">\n <button\n class=\"file-input-button load-export\"\n id=\"exportScene\"\n (click)=\"saveScene()\"\n >\n <img src=\"assets/icons/save.svg\" alt=\"\" /> Save scene\n </button>\n\n <input\n #loadSceneInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".phnx\"\n name=\"image\"\n (change)=\"handlePhoenixInput($event.target.files)\"\n />\n <button\n class=\"file-input-button load-export\"\n id=\"importScene\"\n (click)=\"loadSceneInput.click()\"\n >\n <img src=\"assets/icons/upload.svg\" alt=\"\" /> Load scene\n </button>\n\n <button\n class=\"file-input-button export-button\"\n id=\"exportOBJ\"\n (click)=\"exportOBJ()\"\n >\n <img src=\"assets/icons/obj.svg\" alt=\"\" /> Save OBJ\n </button>\n </div>\n </div>\n\n <div mat-dialog-actions align=\"end\">\n <button mat-flat-button color=\"primary\" (click)=\"onClose()\" cdkFocusInitial>\n Close\n </button>\n </div>\n</div>\n", styles: [".row{justify-content:center;margin:1rem 0}.file-input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.file-input-button{font-size:1em;font-weight:700;color:#fff;background-color:#6eaece;padding:1em .5em;border:none;border-radius:10px;width:8rem;margin:0 .4rem}.file-input-button.load-export{padding:.8em .2em;width:7rem}.file-input-button.load-export img{max-height:1.2em}.file-input-button.export-button{background-color:#cb7133}.file-input-button.export-button:hover{background-color:#ad5b2d}.file-input-button img{max-height:2em;display:block;width:100%}.file-input-button:hover{background-color:#118ab2}#exportScene{background-color:#5bd99e}#exportScene:hover{background-color:#05c292}#importScene{background-color:#ecc25e}#importScene:hover{background-color:#d6b44d}\n"] }]
290
+ }], () => [{ type: i1.EventDisplayService }, { type: i2.MatDialogRef }], { eventDataImportOptions: [{
291
+ type: Input
292
+ }] }); })();
293
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(IOOptionsDialogComponent, { className: "IOOptionsDialogComponent", filePath: "components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.ts", lineNumber: 21 }); })();
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbXBvbmVudHMvdWktbWVudS9pby1vcHRpb25zL2lvLW9wdGlvbnMtZGlhbG9nL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3VpLW1lbnUvaW8tb3B0aW9ucy9pby1vcHRpb25zLWRpYWxvZy9pby1vcHRpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsU0FBUyxFQUNULGFBQWEsRUFDYixXQUFXLEVBQ1gsaUJBQWlCLEdBQ2xCLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsT0FBTyxFQUNMLGVBQWUsRUFFZixZQUFZLEdBQ2IsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7Ozs7SUNOL0MsNkJBRUM7SUFDQyxvQ0FPRTtJQURBLGtOQUFVLHFEQUFrRCxLQUFDO0lBTi9ELGlCQU9FO0lBQ0Ysa0NBR0M7SUFEQyxpTkFBUyw2QkFBMEIsS0FBQztJQUVwQywwQkFBOEQ7SUFDOUQsWUFDRjtJQUFBLGlCQUFTOzs7O0lBVFAsY0FBdUM7SUFBdkMsd0RBQXVDO0lBUXZDLGVBQ0Y7SUFERSx1RUFDRjs7O0lBcEJtQixBQUF2QixBQURGLDJCQUErQyxZQUN0QixRQUFHO0lBQUEsMEJBQVU7SUFBSSxBQUFKLGlCQUFJLEVBQUk7SUFFNUMsK0JBQTBCO0lBQ3hCLGtHQUVDO0lBa0JMLEFBREUsaUJBQU0sRUFDRjs7O0lBbkJrQyxlQUE4QjtJQUE5Qiw0REFBOEI7O0FEWTFFLE1BQU0sT0FBTyx3QkFBd0I7SUF3Q3pCO0lBQ0Q7SUF2Q1Qsc0JBQXNCLEdBQTRCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxD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LHFDQU9FO1lBREEsbUpBQVUsd0NBQW9DLEtBQUM7WUFOakQsaUJBT0U7WUFDRixtQ0FBa0U7WUFBaEMseUxBQVMsd0JBQXFCLEtBQUM7WUFDL0QsMkJBQWlEO1lBQUMsNkJBQ3BEO1lBQUEsaUJBQVM7WUFFVCxxQ0FPRTtZQURBLG1KQUFVLDRDQUF3QyxLQUFDO1lBTnJELGlCQU9FO1lBQ0YsbUNBQXNFO1lBQXBDLDZMQUFTLDRCQUF5QixLQUFDO1lBQ25FLDJCQUFpRDtZQUFDLGdDQUNwRDtZQUNGLEFBREUsaUJBQVMsRUFDTDtZQUVpQixBQUF2Qiw4QkFBdUIsU0FBRztZQUFBLHNCQUFLO1lBQUksQUFBSixpQkFBSSxFQUFJO1lBR3JDLEFBREYsZ0NBQTBCLGtCQUt2QjtZQURDLDRJQUFTLGVBQVcsS0FBQztZQUVyQiwyQkFBMEM7WUFBQyw2QkFDN0M7WUFBQSxpQkFBUztZQUVULHFDQVFFO1lBREEsbUpBQVUsMkNBQXVDLEtBQUM7WUFQcEQsaUJBUUU7WUFDRixtQ0FJQztZQURDLDJMQUFTLDBCQUFzQixLQUFDO1lBRWhDLDJCQUE0QztZQUFDLDZCQUMvQztZQUFBLGlCQUFTO1lBRVQsbUNBSUM7WUFEQyw0SUFBUyxlQUFXLEtBQUM7WUFFckIsMkJBQXlDO1lBQUMsMkJBQzVDO1lBRUosQUFERSxBQURFLGlCQUFTLEVBQ0wsRUFDRjtZQUdKLEFBREYsZ0NBQW9DLGtCQUMwQztZQUFwQyw0SUFBUyxhQUFTLEtBQUM7WUFDekQsd0JBQ0Y7WUFFSixBQURFLEFBREUsaUJBQVMsRUFDTCxFQUNGOztZQTNISSxlQUF1QztZQUF2Qyw0REFBdUM7OztpRkRpQnBDLHdCQUF3QjtjQUxwQyxTQUFTOzJCQUNFLHVCQUF1QjsrRUFNakMsc0JBQXNCO2tCQURyQixLQUFLOztrRkFESyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkluaXQsIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENNU0xvYWRlcixcbiAgSml2ZVhNTExvYWRlcixcbiAgcmVhZFppcEZpbGUsXG4gIEVkbTRoZXBKc29uTG9hZGVyLFxufSBmcm9tICdwaG9lbml4LWV2ZW50LWRpc3BsYXknO1xuaW1wb3J0IHsgRXZlbnREaXNwbGF5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2V2ZW50LWRpc3BsYXkuc2VydmljZSc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtcbiAgRXZlbnREYXRhRm9ybWF0LFxuICBFdmVudERhdGFJbXBvcnRPcHRpb24sXG4gIEltcG9ydE9wdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZXh0cmFzL2V2ZW50LWRhdGEtaW1wb3J0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWlvLW9wdGlvbnMtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgSU9PcHRpb25zRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgZXZlbnREYXRhSW1wb3J0T3B0aW9uczogRXZlbnREYXRhSW1wb3J0T3B0aW9uW10gPSBbRXZlbnREYXRhRm9ybWF0LkpTT05dO1xuXG4gIGV2ZW50RGF0YU9wdGlvbnNXaXRoSGFuZGxlcjogSW1wb3J0T3B0aW9uW107XG5cbiAgcHJpdmF0ZSBzdXBwb3J0ZWRFdmVudERhdGFGb3JtYXRzID0gW1xuICAgIG5ldyBJbXBvcnRPcHRpb24oXG4gICAgICBFdmVudERhdGFGb3JtYXQuSlNPTixcbiAgICAgICcuanNvbicsXG4gICAgICB0aGlzLmhhbmRsZUpTT05FdmVudERhdGFJbnB1dC5iaW5kKHRoaXMpLFxuICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5FRE00SEVQSlNPTixcbiAgICAgICcuZWRtNGhlcC5qc29uJyxcbiAgICAgIHRoaXMuaGFuZGxlRURNNEhFUEpTT05FdmVudERhdGFJbnB1dC5iaW5kKHRoaXMpLFxuICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5KSVZFWE1MLFxuICAgICAgJy54bWwnLFxuICAgICAgdGhpcy5oYW5kbGVKaXZlWE1MRGF0YUlucHV0LmJpbmQodGhpcyksXG4gICAgICAndGV4dC94bWwnLFxuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5aSVAsXG4gICAgICAnLnppcCcsXG4gICAgICB0aGlzLmhhbmRsZVppcEV2ZW50RGF0YUlucHV0LmJpbmQodGhpcyksXG4gICAgICAnLnppcCcsXG4gICAgKSxcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LklHLFxuICAgICAgJy5pZycsXG4gICAgICB0aGlzLmhhbmRsZUlnRXZlbnREYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICcuaWcnLFxuICAgICksXG4gIF07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBldmVudERpc3BsYXk6IEV2ZW50RGlzcGxheVNlcnZpY2UsXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPElPT3B0aW9uc0RpYWxvZ0NvbXBvbmVudD4sXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmV2ZW50RGF0YU9wdGlvbnNXaXRoSGFuZGxlciA9IHRoaXMuc3VwcG9ydGVkRXZlbnREYXRhRm9ybWF0cy5maWx0ZXIoXG4gICAgICAoZXZlbnREYXRhRm9ybWF0KSA9PlxuICAgICAgICB0aGlzLmV2ZW50RGF0YUltcG9ydE9wdGlvbnMuaW5jbHVkZXMoXG4gICAgICAgICAgZXZlbnREYXRhRm9ybWF0LmZvcm1hdCBhcyBFdmVudERhdGFGb3JtYXQsXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9ucy5mb3JFYWNoKChldmVudERhdGFJbXBvcnRPcHRpb24pID0+IHtcbiAgICAgIGlmIChldmVudERhdGFJbXBvcnRPcHRpb24gaW5zdGFuY2VvZiBJbXBvcnRPcHRpb24pIHtcbiAgICAgICAgY29uc3QgaW1wb3J0SGFuZGxlciA9IGV2ZW50RGF0YUltcG9ydE9wdGlvbi5oYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgIGV2ZW50RGF0YUltcG9ydE9wdGlvbi5oYW5kbGVyID0gKGZpbGVzOiBGaWxlTGlzdCkgPT4ge1xuICAgICAgICAgIGltcG9ydEhhbmRsZXIoZmlsZXMpO1xuICAgICAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhT3B0aW9uc1dpdGhIYW5kbGVyLnB1c2goZXZlbnREYXRhSW1wb3J0T3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFN1cHBvcnRlZEV2ZW50RGF0YUZvcm1hdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9uc1xuICAgICAgLm1hcCgoZm9ybWF0KSA9PiB7XG4gICAgICAgIGlmIChmb3JtYXQgaW5zdGFuY2VvZiBJbXBvcnRPcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0LmZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZm9ybWF0KSA9PiBmb3JtYXQgIT09ICdaSVAnKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBoYW5kbGVKU09ORXZlbnREYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBqc29uID0gdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShjb250ZW50KSA6IGNvbnRlbnQ7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoanNvbik7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ2pzb24nLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVFRE00SEVQSlNPTkV2ZW50RGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QganNvbiA9IHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoY29udGVudCkgOiBjb250ZW50O1xuICAgICAgY29uc3QgZWRtNGhlcEpzb25Mb2FkZXIgPSBuZXcgRWRtNGhlcEpzb25Mb2FkZXIoKTtcbiAgICAgIGVkbTRoZXBKc29uTG9hZGVyLnNldFJhd0V2ZW50RGF0YShqc29uKTtcbiAgICAgIGVkbTRoZXBKc29uTG9hZGVyLnByb2Nlc3NFdmVudERhdGEoKTtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peEV2ZW50cyhlZG00aGVwSnNvbkxvYWRlci5nZXRFdmVudERhdGEoKSk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ2pzb24nLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVKaXZlWE1MRGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgaml2ZWxvYWRlciA9IG5ldyBKaXZlWE1MTG9hZGVyKCk7XG4gICAgICBqaXZlbG9hZGVyLnByb2Nlc3MoY29udGVudCk7XG4gICAgICBjb25zdCBldmVudERhdGEgPSBqaXZlbG9hZGVyLmdldEV2ZW50RGF0YSgpO1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkuYnVpbGRFdmVudERhdGFGcm9tSlNPTihldmVudERhdGEpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICd4bWwnLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVPQkpJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnksIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VPQkpHZW9tZXRyeShjb250ZW50LCBuYW1lKTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAnb2JqJywgY2FsbGJhY2spO1xuICB9XG5cbiAgaGFuZGxlU2NlbmVJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peERpc3BsYXkoY29udGVudCk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ3BobngnLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVHTFRGSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55LCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlR0xURkdlb21ldHJ5KGNvbnRlbnQsIG5hbWUpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICdnbHRmJywgY2FsbGJhY2spO1xuICB9XG5cbiAgaGFuZGxlUGhvZW5peElucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VQaG9lbml4RGlzcGxheShjb250ZW50KTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAncGhueCcsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVJPT1RJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCByb290T2JqZWN0TmFtZSA9IHByb21wdCgnRW50ZXIgb2JqZWN0IG5hbWUgaW4gUk9PVCBmaWxlJyk7XG5cbiAgICBhd2FpdCB0aGlzLmV2ZW50RGlzcGxheS5sb2FkUm9vdEdlb21ldHJ5KFxuICAgICAgVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlc1swXSksXG4gICAgICByb290T2JqZWN0TmFtZSxcbiAgICAgIGZpbGVzWzBdLm5hbWUuc3BsaXQoJy4nKVswXSxcbiAgICApO1xuXG4gICAgdGhpcy5vbkNsb3NlKCk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVSb290SlNPTklucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGlmICghdGhpcy5pc0ZpbGVPZkV4dGVuc2lvbihmaWxlc1swXSwgJ2d6JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gZmlsZXNbMF0ubmFtZS5zcGxpdCgnLicpWzBdO1xuICAgIGF3YWl0IHRoaXMuZXZlbnREaXNwbGF5LmxvYWRSb290SlNPTkdlb21ldHJ5KFxuICAgICAgVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlc1swXSksXG4gICAgICBuYW1lLFxuICAgICk7XG5cbiAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUlnRXZlbnREYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY21zTG9hZGVyID0gbmV3IENNU0xvYWRlcigpO1xuICAgIGNtc0xvYWRlci5yZWFkSWdBcmNoaXZlKGZpbGVzWzBdLCAoYWxsRXZlbnRzOiBhbnlbXSkgPT4ge1xuICAgICAgY29uc3QgYWxsRXZlbnRzRGF0YSA9IGNtc0xvYWRlci5nZXRBbGxFdmVudHNEYXRhKGFsbEV2ZW50cyk7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoYWxsRXZlbnRzRGF0YSk7XG4gICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVppcEV2ZW50RGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGlmICghdGhpcy5pc0ZpbGVPZkV4dGVuc2lvbihmaWxlc1swXSwgJ3ppcCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWxsRXZlbnRzT2JqZWN0ID0ge307XG4gICAgbGV0IGZpbGVzV2l0aERhdGE6IHsgW2ZpbGVOYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAgIC8vIFVzaW5nIGEgdHJ5IGNhdGNoIGJsb2NrIHRvIGNhdGNoIGFueSBlcnJvcnMgaW4gUHJvbWlzZXNcbiAgICB0cnkge1xuICAgICAgZmlsZXNXaXRoRGF0YSA9IGF3YWl0IHJlYWRaaXBGaWxlKGZpbGVzWzBdKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgcmVhZGluZyB6aXAnLCBlcnJvcik7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRJbmZvTG9nZ2VyKCkuYWRkKCdDb3VsZCBub3QgcmVhZCB6aXAgZmlsZScsICdFcnJvcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEpTT04gZXZlbnQgZGF0YVxuICAgIE9iamVjdC5rZXlzKGZpbGVzV2l0aERhdGEpXG4gICAgICAuZmlsdGVyKChmaWxlTmFtZSkgPT4gZmlsZU5hbWUuZW5kc1dpdGgoJy5qc29uJykpXG4gICAgICAuZm9yRWFjaCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhbGxFdmVudHNPYmplY3QsIEpTT04ucGFyc2UoZmlsZXNXaXRoRGF0YVtmaWxlTmFtZV0pKTtcbiAgICAgIH0pO1xuXG4gICAgLy8gSml2ZVhNTCBldmVudCBkYXRhXG4gICAgY29uc3Qgaml2ZWxvYWRlciA9IG5ldyBKaXZlWE1MTG9hZGVyKCk7XG4gICAgT2JqZWN0LmtleXMoZmlsZXNXaXRoRGF0YSlcbiAgICAgIC5maWx0ZXIoKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWxlTmFtZS5lbmRzV2l0aCgnLnhtbCcpIHx8IGZpbGVOYW1lLnN0YXJ0c1dpdGgoJ0ppdmVYTUwnKTtcbiAgICAgIH0pXG4gICAgICAuZm9yRWFjaCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgaml2ZWxvYWRlci5wcm9jZXNzKGZpbGVzV2l0aERhdGFbZmlsZU5hbWVdKTtcbiAgICAgICAgY29uc3QgZXZlbnREYXRhID0gaml2ZWxvYWRlci5nZXRFdmVudERhdGEoKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhbGxFdmVudHNPYmplY3QsIHsgW2ZpbGVOYW1lXTogZXZlbnREYXRhIH0pO1xuICAgICAgfSk7XG4gICAgLy8gRm9yIHNvbWUgcmVhc29uIHRoZSBhYm92ZSBkb2Vzbid0IHBpY2sgdXAgSml2ZVhNTF9YWFhfWVlZLnppcFxuXG4gICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VQaG9lbml4RXZlbnRzKGFsbEV2ZW50c09iamVjdCk7XG5cbiAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUZpbGVJbnB1dChcbiAgICBmaWxlOiBGaWxlLFxuICAgIGV4dGVuc2lvbjogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiAocmVzdWx0OiBzdHJpbmcsIGZpbGVOYW1lPzogc3RyaW5nKSA9PiB2b2lkLFxuICApIHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgaWYgKHRoaXMuaXNGaWxlT2ZFeHRlbnNpb24oZmlsZSwgZXh0ZW5zaW9uKSkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY2FsbGJhY2socmVhZGVyLnJlc3VsdC50b1N0cmluZygpLCBmaWxlLm5hbWUuc3BsaXQoJy4nKVswXSk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gICAgfVxuXG4gICAgdGhpcy5vbkNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGlzRmlsZU9mRXh0ZW5zaW9uKGZpbGU6IEZpbGUsIGV4dGVuc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpID09PSBleHRlbnNpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiBJbnZhbGlkIGZpbGUgZm9ybWF0IScpO1xuICAgIHRoaXMuZXZlbnREaXNwbGF5LmdldEluZm9Mb2dnZXIoKS5hZGQoJ0ludmFsaWQgZmlsZSBmb3JtYXQhJywgJ0Vycm9yJyk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzYXZlU2NlbmUoKSB7XG4gICAgdGhpcy5ldmVudERpc3BsYXkuZXhwb3J0UGhvZW5peERpc3BsYXkoKTtcbiAgfVxuXG4gIGV4cG9ydE9CSigpIHtcbiAgICB0aGlzLmV2ZW50RGlzcGxheS5leHBvcnRUb09CSigpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGlhbG9nXCI+XG4gIDxoMSBtYXQtZGlhbG9nLXRpdGxlPkltcG9ydCBhbmQgZXhwb3J0PC9oMT5cbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJkaWFsb2ctY29udGVudFwiPlxuICAgIDxkaXYgKm5nSWY9XCJldmVudERhdGFJbXBvcnRPcHRpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1jZW50ZXJcIj48Yj5FdmVudCBkYXRhPC9iPjwvcD5cblxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBjZW50ZXJlZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGV2ZW50RGF0YUltcG9ydE9wdGlvbiBvZiBldmVudERhdGFPcHRpb25zV2l0aEhhbmRsZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjZXZlbnREYXRhRmlsZUlucHV0XG4gICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICBbYWNjZXB0XT1cImV2ZW50RGF0YUltcG9ydE9wdGlvbi5hY2NlcHRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJldmVudERhdGFJbXBvcnRPcHRpb24uaGFuZGxlcigkZXZlbnQudGFyZ2V0LmZpbGVzKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXQtYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJldmVudERhdGFGaWxlSW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvZXZlbnREYXRhLnN2Z1wiIGFsdD1cIkV2ZW50IGRhdGEgaWNvblwiIC8+XG4gICAgICAgICAgICBMb2FkIHt7IGV2ZW50RGF0YUltcG9ydE9wdGlvbi5maWxlVHlwZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxiPkdlb21ldHJpZXM8L2I+PC9wPlxuXG4gICAgPGRpdiBjbGFzcz1cInJvdyBjZW50ZXJlZFwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNvYmpGaWxlSW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0XCJcbiAgICAgICAgYWNjZXB0PVwiLm9ialwiXG4gICAgICAgIG5hbWU9XCJpbWFnZVwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlT0JKSW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJvYmpGaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9vYmouc3ZnXCIgYWx0PVwiXCIgLz4gTG9hZCAub2JqXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGlucHV0XG4gICAgICAgICNnbHRmRmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5nbHRmXCJcbiAgICAgICAgbmFtZT1cImltYWdlXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVHTFRGSW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJnbHRmRmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvZ2x0Zi5zdmdcIiBhbHQ9XCJcIiAvPiBMb2FkIC5nbHRmXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGlucHV0XG4gICAgICAgICNyb290RmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5yb290XCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVST09USW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJyb290RmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvZmlsZS1pbXBvcnQuc3ZnXCIgYWx0PVwiXCIgLz4gTG9hZCAucm9vdFxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjcm9vdEpTT05GaWxlSW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0XCJcbiAgICAgICAgYWNjZXB0PVwiLmpzb24uZ3pcIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVJvb3RKU09OSW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJyb290SlNPTkZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2ZpbGUtaW1wb3J0LnN2Z1wiIGFsdD1cIlwiIC8+IExvYWQgLmpzb24uZ3pcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxiPlNjZW5lPC9iPjwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyZWRcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvbiBsb2FkLWV4cG9ydFwiXG4gICAgICAgIGlkPVwiZXhwb3J0U2NlbmVcIlxuICAgICAgICAoY2xpY2spPVwic2F2ZVNjZW5lKClcIlxuICAgICAgPlxuICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9zYXZlLnN2Z1wiIGFsdD1cIlwiIC8+IFNhdmUgc2NlbmVcbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgI2xvYWRTY2VuZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5waG54XCJcbiAgICAgICAgbmFtZT1cImltYWdlXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVQaG9lbml4SW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvbiBsb2FkLWV4cG9ydFwiXG4gICAgICAgIGlkPVwiaW1wb3J0U2NlbmVcIlxuICAgICAgICAoY2xpY2spPVwibG9hZFNjZW5lSW5wdXQuY2xpY2soKVwiXG4gICAgICA+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL3VwbG9hZC5zdmdcIiBhbHQ9XCJcIiAvPiBMb2FkIHNjZW5lXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXQtYnV0dG9uIGV4cG9ydC1idXR0b25cIlxuICAgICAgICBpZD1cImV4cG9ydE9CSlwiXG4gICAgICAgIChjbGljayk9XCJleHBvcnRPQkooKVwiXG4gICAgICA+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL29iai5zdmdcIiBhbHQ9XCJcIiAvPiBTYXZlIE9CSlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XG4gICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiIGNka0ZvY3VzSW5pdGlhbD5cbiAgICAgIENsb3NlXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=