phoenix-ui-components 3.0.4 → 3.0.6

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 (123) hide show
  1. package/dist/fesm2022/phoenix-ui-components.mjs +2262 -473
  2. package/dist/fesm2022/phoenix-ui-components.mjs.map +1 -1
  3. package/dist/index.d.ts +1109 -3
  4. package/package.json +10 -19
  5. package/dist/components/embed-menu/embed-menu.component.d.ts +0 -5
  6. package/dist/components/embed-menu/experiment-link/experiment-link.component.d.ts +0 -9
  7. package/dist/components/file-explorer/file-explorer.component.d.ts +0 -35
  8. package/dist/components/loader/loader.component.d.ts +0 -11
  9. package/dist/components/nav/nav.component.d.ts +0 -8
  10. package/dist/components/phoenix-menu/config/config-slider/config-slider.component.d.ts +0 -18
  11. package/dist/components/phoenix-menu/index.d.ts +0 -3
  12. package/dist/components/phoenix-menu/phoenix-menu-item/phoenix-menu-item.component.d.ts +0 -14
  13. package/dist/components/phoenix-menu/phoenix-menu.component.d.ts +0 -7
  14. package/dist/components/phoenix-ui.module.d.ts +0 -71
  15. package/dist/components/ring-loader/ring-loader.component.d.ts +0 -5
  16. package/dist/components/ui-menu/animate-camera/animate-camera.component.d.ts +0 -20
  17. package/dist/components/ui-menu/animate-event/animate-event.component.d.ts +0 -10
  18. package/dist/components/ui-menu/ar-toggle/ar-toggle.component.d.ts +0 -11
  19. package/dist/components/ui-menu/auto-rotate/auto-rotate.component.d.ts +0 -10
  20. package/dist/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.d.ts +0 -29
  21. package/dist/components/ui-menu/collections-info/collections-info.component.d.ts +0 -15
  22. package/dist/components/ui-menu/cycle-events/cycle-events.component.d.ts +0 -21
  23. package/dist/components/ui-menu/dark-theme/dark-theme.component.d.ts +0 -12
  24. package/dist/components/ui-menu/event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component.d.ts +0 -28
  25. package/dist/components/ui-menu/event-data-explorer/event-data-explorer.component.d.ts +0 -13
  26. package/dist/components/ui-menu/event-selector/event-selector.component.d.ts +0 -12
  27. package/dist/components/ui-menu/experiment-info/experiment-info.component.d.ts +0 -14
  28. package/dist/components/ui-menu/geometry-browser/geometry-browser-overlay/geometry-browser-overlay.component.d.ts +0 -22
  29. package/dist/components/ui-menu/geometry-browser/geometry-browser.component.d.ts +0 -15
  30. package/dist/components/ui-menu/index.d.ts +0 -39
  31. package/dist/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.d.ts +0 -26
  32. package/dist/components/ui-menu/info-panel/info-panel.component.d.ts +0 -33
  33. package/dist/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.d.ts +0 -34
  34. package/dist/components/ui-menu/io-options/io-options.component.d.ts +0 -11
  35. package/dist/components/ui-menu/main-view-toggle/main-view-toggle.component.d.ts +0 -10
  36. package/dist/components/ui-menu/make-picture/make-picture.component.d.ts +0 -20
  37. package/dist/components/ui-menu/menu-toggle/menu-toggle.component.d.ts +0 -9
  38. package/dist/components/ui-menu/object-clipping/object-clipping.component.d.ts +0 -15
  39. package/dist/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.d.ts +0 -15
  40. package/dist/components/ui-menu/object-selection/object-selection.component.d.ts +0 -17
  41. package/dist/components/ui-menu/overlay/overlay.component.d.ts +0 -52
  42. package/dist/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.d.ts +0 -20
  43. package/dist/components/ui-menu/overlay-view/overlay-view.component.d.ts +0 -15
  44. package/dist/components/ui-menu/performance-toggle/performance-toggle.component.d.ts +0 -10
  45. package/dist/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.d.ts +0 -28
  46. package/dist/components/ui-menu/share-link/share-link.component.d.ts +0 -9
  47. package/dist/components/ui-menu/ss-mode/ss-mode.component.d.ts +0 -10
  48. package/dist/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.d.ts +0 -19
  49. package/dist/components/ui-menu/tree-menu/tree-menu.component.d.ts +0 -10
  50. package/dist/components/ui-menu/ui-menu-wrapper/ui-menu-wrapper.component.d.ts +0 -6
  51. package/dist/components/ui-menu/ui-menu.component.d.ts +0 -10
  52. package/dist/components/ui-menu/view-options/cartesian-grid-config/cartesian-grid-config.component.d.ts +0 -51
  53. package/dist/components/ui-menu/view-options/view-options.component.d.ts +0 -33
  54. package/dist/components/ui-menu/vr-toggle/vr-toggle.component.d.ts +0 -11
  55. package/dist/components/ui-menu/zoom-controls/zoom-controls.component.d.ts +0 -39
  56. package/dist/esm2022/components/embed-menu/embed-menu.component.mjs +0 -22
  57. package/dist/esm2022/components/embed-menu/experiment-link/experiment-link.component.mjs +0 -27
  58. package/dist/esm2022/components/file-explorer/file-explorer.component.mjs +0 -109
  59. package/dist/esm2022/components/loader/loader.component.mjs +0 -71
  60. package/dist/esm2022/components/nav/nav.component.mjs +0 -19
  61. package/dist/esm2022/components/phoenix-menu/config/config-slider/config-slider.component.mjs +0 -82
  62. package/dist/esm2022/components/phoenix-menu/index.mjs +0 -4
  63. package/dist/esm2022/components/phoenix-menu/phoenix-menu-item/phoenix-menu-item.component.mjs +0 -308
  64. package/dist/esm2022/components/phoenix-menu/phoenix-menu.component.mjs +0 -23
  65. package/dist/esm2022/components/phoenix-ui.module.mjs +0 -257
  66. package/dist/esm2022/components/ring-loader/ring-loader.component.mjs +0 -16
  67. package/dist/esm2022/components/ui-menu/animate-camera/animate-camera.component.mjs +0 -120
  68. package/dist/esm2022/components/ui-menu/animate-event/animate-event.component.mjs +0 -33
  69. package/dist/esm2022/components/ui-menu/ar-toggle/ar-toggle.component.mjs +0 -83
  70. package/dist/esm2022/components/ui-menu/auto-rotate/auto-rotate.component.mjs +0 -29
  71. package/dist/esm2022/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.mjs +0 -274
  72. package/dist/esm2022/components/ui-menu/collections-info/collections-info.component.mjs +0 -47
  73. package/dist/esm2022/components/ui-menu/cycle-events/cycle-events.component.mjs +0 -90
  74. package/dist/esm2022/components/ui-menu/dark-theme/dark-theme.component.mjs +0 -32
  75. package/dist/esm2022/components/ui-menu/event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component.mjs +0 -128
  76. package/dist/esm2022/components/ui-menu/event-data-explorer/event-data-explorer.component.mjs +0 -35
  77. package/dist/esm2022/components/ui-menu/event-selector/event-selector.component.mjs +0 -54
  78. package/dist/esm2022/components/ui-menu/experiment-info/experiment-info.component.mjs +0 -100
  79. package/dist/esm2022/components/ui-menu/geometry-browser/geometry-browser-overlay/geometry-browser-overlay.component.mjs +0 -172
  80. package/dist/esm2022/components/ui-menu/geometry-browser/geometry-browser.component.mjs +0 -45
  81. package/dist/esm2022/components/ui-menu/index.mjs +0 -40
  82. package/dist/esm2022/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.mjs +0 -69
  83. package/dist/esm2022/components/ui-menu/info-panel/info-panel.component.mjs +0 -59
  84. package/dist/esm2022/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.mjs +0 -304
  85. package/dist/esm2022/components/ui-menu/io-options/io-options.component.mjs +0 -36
  86. package/dist/esm2022/components/ui-menu/main-view-toggle/main-view-toggle.component.mjs +0 -32
  87. package/dist/esm2022/components/ui-menu/make-picture/make-picture.component.mjs +0 -109
  88. package/dist/esm2022/components/ui-menu/menu-toggle/menu-toggle.component.mjs +0 -40
  89. package/dist/esm2022/components/ui-menu/object-clipping/object-clipping.component.mjs +0 -72
  90. package/dist/esm2022/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.mjs +0 -59
  91. package/dist/esm2022/components/ui-menu/object-selection/object-selection.component.mjs +0 -46
  92. package/dist/esm2022/components/ui-menu/overlay/overlay.component.mjs +0 -197
  93. package/dist/esm2022/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.mjs +0 -83
  94. package/dist/esm2022/components/ui-menu/overlay-view/overlay-view.component.mjs +0 -41
  95. package/dist/esm2022/components/ui-menu/performance-toggle/performance-toggle.component.mjs +0 -29
  96. package/dist/esm2022/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.mjs +0 -165
  97. package/dist/esm2022/components/ui-menu/share-link/share-link.component.mjs +0 -28
  98. package/dist/esm2022/components/ui-menu/ss-mode/ss-mode.component.mjs +0 -46
  99. package/dist/esm2022/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.mjs +0 -94
  100. package/dist/esm2022/components/ui-menu/tree-menu/tree-menu.component.mjs +0 -78
  101. package/dist/esm2022/components/ui-menu/ui-menu-wrapper/ui-menu-wrapper.component.mjs +0 -34
  102. package/dist/esm2022/components/ui-menu/ui-menu.component.mjs +0 -54
  103. package/dist/esm2022/components/ui-menu/view-options/cartesian-grid-config/cartesian-grid-config.component.mjs +0 -247
  104. package/dist/esm2022/components/ui-menu/view-options/view-options.component.mjs +0 -170
  105. package/dist/esm2022/components/ui-menu/vr-toggle/vr-toggle.component.mjs +0 -52
  106. package/dist/esm2022/components/ui-menu/zoom-controls/zoom-controls.component.mjs +0 -79
  107. package/dist/esm2022/phoenix-ui-components.mjs +0 -5
  108. package/dist/esm2022/public_api.mjs +0 -11
  109. package/dist/esm2022/services/error-message-service.mjs +0 -30
  110. package/dist/esm2022/services/event-display.service.mjs +0 -23
  111. package/dist/esm2022/services/extras/attribute.pipe.mjs +0 -33
  112. package/dist/esm2022/services/extras/event-data-import.mjs +0 -21
  113. package/dist/esm2022/services/file-loader.service.mjs +0 -93
  114. package/dist/esm2022/services/global-error-handler.mjs +0 -30
  115. package/dist/esm2022/services/index.mjs +0 -4
  116. package/dist/public_api.d.ts +0 -10
  117. package/dist/services/error-message-service.d.ts +0 -17
  118. package/dist/services/event-display.service.d.ts +0 -13
  119. package/dist/services/extras/attribute.pipe.d.ts +0 -16
  120. package/dist/services/extras/event-data-import.d.ts +0 -15
  121. package/dist/services/file-loader.service.d.ts +0 -17
  122. package/dist/services/global-error-handler.d.ts +0 -20
  123. package/dist/services/index.d.ts +0 -3
@@ -1,304 +0,0 @@
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 = this.getJiveXMLLoader();
103
- jiveloader.process(content);
104
- const eventData = jiveloader.getEventData();
105
- this.eventDisplay.buildEventDataFromJSON(eventData);
106
- };
107
- this.handleFileInput(files[0], 'xml', callback);
108
- }
109
- getJiveXMLLoader() {
110
- if (this.eventDisplay?.configuration?.eventDataLoader instanceof JiveXMLLoader) {
111
- return this.eventDisplay.configuration.eventDataLoader;
112
- }
113
- else {
114
- return new JiveXMLLoader();
115
- }
116
- }
117
- handleOBJInput(files) {
118
- const callback = (content, name) => {
119
- this.eventDisplay.parseOBJGeometry(content, name);
120
- };
121
- this.handleFileInput(files[0], 'obj', callback);
122
- }
123
- handleSceneInput(files) {
124
- const callback = (content) => {
125
- this.eventDisplay.parsePhoenixDisplay(content);
126
- };
127
- this.handleFileInput(files[0], 'phnx', callback);
128
- }
129
- handleGLTFInput(files) {
130
- const callback = (file) => {
131
- this.eventDisplay.parseGLTFGeometry(file);
132
- };
133
- if (this.isFileOfExtension(files[0].name, 'gltf,glb,gltf.zip,glb.zip')) {
134
- callback(files[0]);
135
- }
136
- }
137
- handlePhoenixInput(files) {
138
- const callback = (content) => {
139
- this.eventDisplay.parsePhoenixDisplay(content);
140
- };
141
- this.handleFileInput(files[0], 'phnx', callback);
142
- }
143
- async handleROOTInput(files) {
144
- const rootObjectName = prompt('Enter object name in ROOT file');
145
- await this.eventDisplay.loadRootGeometry(URL.createObjectURL(files[0]), rootObjectName, files[0].name.split('.')[0]);
146
- this.onClose();
147
- }
148
- async handleRootJSONInput(files) {
149
- if (!this.isFileOfExtension(files[0].name, 'gz')) {
150
- return;
151
- }
152
- const name = files[0].name.split('.')[0];
153
- await this.eventDisplay.loadRootJSONGeometry(URL.createObjectURL(files[0]), name);
154
- this.onClose();
155
- }
156
- handleIgEventDataInput(files) {
157
- const cmsLoader = new CMSLoader();
158
- cmsLoader.readIgArchive(files[0], (allEvents) => {
159
- const allEventsData = cmsLoader.getAllEventsData(allEvents);
160
- this.eventDisplay.parsePhoenixEvents(allEventsData);
161
- this.onClose();
162
- });
163
- }
164
- async handleZipEventDataInput(files) {
165
- if (!this.isFileOfExtension(files[0].name, 'zip,json.zip')) {
166
- return;
167
- }
168
- const allEventsObject = {};
169
- let filesWithData;
170
- // Using a try catch block to catch any errors in Promises
171
- try {
172
- filesWithData = await readZipFile(files[0]);
173
- }
174
- catch (error) {
175
- console.error('Error while reading zip', error);
176
- this.eventDisplay.getInfoLogger().add('Could not read zip file', 'Error');
177
- return;
178
- }
179
- // JSON event data
180
- Object.keys(filesWithData)
181
- .filter((fileName) => fileName.endsWith('.json'))
182
- .forEach((fileName) => {
183
- Object.assign(allEventsObject, JSON.parse(filesWithData[fileName]));
184
- });
185
- // JiveXML event data
186
- const jiveloader = this.getJiveXMLLoader();
187
- Object.keys(filesWithData)
188
- .filter((fileName) => {
189
- return fileName.endsWith('.xml') || fileName.startsWith('JiveXML');
190
- })
191
- .forEach((fileName) => {
192
- jiveloader.process(filesWithData[fileName]);
193
- const eventData = jiveloader.getEventData();
194
- Object.assign(allEventsObject, { [fileName]: eventData });
195
- });
196
- // For some reason the above doesn't pick up JiveXML_XXX_YYY.zip
197
- this.eventDisplay.parsePhoenixEvents(allEventsObject);
198
- this.onClose();
199
- }
200
- handleFileInput(file, extensions, callback) {
201
- const reader = new FileReader();
202
- if (this.isFileOfExtension(file.name, extensions)) {
203
- reader.onload = () => {
204
- callback(reader.result.toString(), file.name.split('.')[0]);
205
- };
206
- reader.readAsText(file);
207
- }
208
- this.onClose();
209
- }
210
- isFileOfExtension(fileName, extensions) {
211
- if (extensions.split(',').includes(fileName.slice(fileName.indexOf('.') + 1))) {
212
- return true;
213
- }
214
- console.error('Error: Invalid file format!');
215
- this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');
216
- return false;
217
- }
218
- saveScene() {
219
- this.eventDisplay.exportPhoenixDisplay();
220
- }
221
- exportOBJ() {
222
- this.eventDisplay.exportToOBJ();
223
- }
224
- static ɵfac = function IOOptionsDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || IOOptionsDialogComponent)(i0.ɵɵdirectiveInject(i1.EventDisplayService), i0.ɵɵdirectiveInject(i2.MatDialogRef)); };
225
- 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,.glb,.gltf.zip,.glb.zip", "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) {
226
- const _r1 = i0.ɵɵgetCurrentView();
227
- i0.ɵɵelementStart(0, "div", 6)(1, "h1", 7);
228
- i0.ɵɵtext(2, "Import and export");
229
- i0.ɵɵelementEnd();
230
- i0.ɵɵelementStart(3, "div", 8);
231
- i0.ɵɵtemplate(4, IOOptionsDialogComponent_div_4_Template, 6, 1, "div", 9);
232
- i0.ɵɵelementStart(5, "p", 10)(6, "b");
233
- i0.ɵɵtext(7, "Geometries");
234
- i0.ɵɵelementEnd()();
235
- i0.ɵɵelementStart(8, "div", 11)(9, "input", 12, 0);
236
- i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_9_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleOBJInput($event.target.files)); });
237
- i0.ɵɵelementEnd();
238
- i0.ɵɵelementStart(11, "button", 13);
239
- 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()); });
240
- i0.ɵɵelement(12, "img", 14);
241
- i0.ɵɵtext(13, " Load .obj ");
242
- i0.ɵɵelementEnd();
243
- i0.ɵɵelementStart(14, "input", 15, 1);
244
- i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_14_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleGLTFInput($event.target.files)); });
245
- i0.ɵɵelementEnd();
246
- i0.ɵɵelementStart(16, "button", 13);
247
- 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()); });
248
- i0.ɵɵelement(17, "img", 16);
249
- i0.ɵɵtext(18, " Load .gltf/.glb ");
250
- i0.ɵɵelementEnd();
251
- i0.ɵɵelementStart(19, "input", 17, 2);
252
- i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_19_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleROOTInput($event.target.files)); });
253
- i0.ɵɵelementEnd();
254
- i0.ɵɵelementStart(21, "button", 13);
255
- 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()); });
256
- i0.ɵɵelement(22, "img", 18);
257
- i0.ɵɵtext(23, " Load .root ");
258
- i0.ɵɵelementEnd();
259
- i0.ɵɵelementStart(24, "input", 19, 3);
260
- i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_24_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleRootJSONInput($event.target.files)); });
261
- i0.ɵɵelementEnd();
262
- i0.ɵɵelementStart(26, "button", 13);
263
- 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()); });
264
- i0.ɵɵelement(27, "img", 18);
265
- i0.ɵɵtext(28, " Load .json.gz ");
266
- i0.ɵɵelementEnd()();
267
- i0.ɵɵelementStart(29, "p", 10)(30, "b");
268
- i0.ɵɵtext(31, "Scene");
269
- i0.ɵɵelementEnd()();
270
- i0.ɵɵelementStart(32, "div", 11)(33, "button", 20);
271
- i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_33_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.saveScene()); });
272
- i0.ɵɵelement(34, "img", 21);
273
- i0.ɵɵtext(35, " Save scene ");
274
- i0.ɵɵelementEnd();
275
- i0.ɵɵelementStart(36, "input", 22, 4);
276
- i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_36_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handlePhoenixInput($event.target.files)); });
277
- i0.ɵɵelementEnd();
278
- i0.ɵɵelementStart(38, "button", 23);
279
- 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()); });
280
- i0.ɵɵelement(39, "img", 24);
281
- i0.ɵɵtext(40, " Load scene ");
282
- i0.ɵɵelementEnd();
283
- i0.ɵɵelementStart(41, "button", 25);
284
- i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_41_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.exportOBJ()); });
285
- i0.ɵɵelement(42, "img", 14);
286
- i0.ɵɵtext(43, " Save OBJ ");
287
- i0.ɵɵelementEnd()()();
288
- i0.ɵɵelementStart(44, "div", 26)(45, "button", 27);
289
- i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onClose()); });
290
- i0.ɵɵtext(46, " Close ");
291
- i0.ɵɵelementEnd()()();
292
- } if (rf & 2) {
293
- i0.ɵɵadvance(4);
294
- i0.ɵɵproperty("ngIf", ctx.eventDataImportOptions.length > 0);
295
- } }, 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}"] });
296
- }
297
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IOOptionsDialogComponent, [{
298
- type: Component,
299
- 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,.glb,.gltf.zip,.glb.zip\"\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/.glb\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"] }]
300
- }], () => [{ type: i1.EventDisplayService }, { type: i2.MatDialogRef }], { eventDataImportOptions: [{
301
- type: Input
302
- }] }); })();
303
- (() => { (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 }); })();
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbXBvbmVudHMvdWktbWVudS9pby1vcHRpb25zL2lvLW9wdGlvbnMtZGlhbG9nL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3VpLW1lbnUvaW8tb3B0aW9ucy9pby1vcHRpb25zLWRpYWxvZy9pby1vcHRpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsU0FBUyxFQUNULGFBQWEsRUFDYixXQUFXLEVBQ1gsaUJBQWlCLEdBQ2xCLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsT0FBTyxFQUNMLGVBQWUsRUFFZixZQUFZLEdBQ2IsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7Ozs7SUNOL0MsNkJBRUM7SUFDQyxvQ0FPRTtJQURBLGtOQUFVLHFEQUFrRCxLQUFDO0lBTi9ELGlCQU9FO0lBQ0Ysa0NBR0M7SUFEQyxpTkFBUyw2QkFBMEIsS0FBQztJQUVwQywwQkFBOEQ7SUFDOUQsWUFDRjtJQUFBLGlCQUFTOzs7O0lBVFAsY0FBdUM7SUFBdkMsd0RBQXVDO0lBUXZDLGVBQ0Y7SUFERSx1RUFDRjs7O0lBcEJtQixBQUF2QixBQURGLDJCQUErQyxZQUN0QixRQUFHO0lBQUEsMEJBQVU7SUFBSSxBQUFKLGlCQUFJLEVBQUk7SUFFNUMsK0JBQTBCO0lBQ3hCLGtHQUVDO0lBa0JMLEFBREUsaUJBQU0sRUFDRjs7O0lBbkJrQyxlQUE4QjtJQUE5Qiw0REFBOEI7O0FEWTFFLE1BQU0sT0FBTyx3QkFBd0I7SUF3Q3pCO0lBQ0Q7SUF2Q1Qsc0JBQXNCLEdBQTRCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxD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WUFFSixBQURFLEFBREUsaUJBQVMsRUFDTCxFQUNGO1lBR0osQUFERixnQ0FBb0Msa0JBQzBDO1lBQXBDLDRJQUFTLGFBQVMsS0FBQztZQUN6RCx3QkFDRjtZQUVKLEFBREUsQUFERSxpQkFBUyxFQUNMLEVBQ0Y7O1lBM0hJLGVBQXVDO1lBQXZDLDREQUF1Qzs7O2lGRGlCcEMsd0JBQXdCO2NBTHBDLFNBQVM7MkJBQ0UsdUJBQXVCOytFQU1qQyxzQkFBc0I7a0JBRHJCLEtBQUs7O2tGQURLLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgT25Jbml0LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDTVNMb2FkZXIsXG4gIEppdmVYTUxMb2FkZXIsXG4gIHJlYWRaaXBGaWxlLFxuICBFZG00aGVwSnNvbkxvYWRlcixcbn0gZnJvbSAncGhvZW5peC1ldmVudC1kaXNwbGF5JztcbmltcG9ydCB7IEV2ZW50RGlzcGxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9ldmVudC1kaXNwbGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7XG4gIEV2ZW50RGF0YUZvcm1hdCxcbiAgdHlwZSBFdmVudERhdGFJbXBvcnRPcHRpb24sXG4gIEltcG9ydE9wdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZXh0cmFzL2V2ZW50LWRhdGEtaW1wb3J0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWlvLW9wdGlvbnMtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgSU9PcHRpb25zRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgZXZlbnREYXRhSW1wb3J0T3B0aW9uczogRXZlbnREYXRhSW1wb3J0T3B0aW9uW10gPSBbRXZlbnREYXRhRm9ybWF0LkpTT05dO1xuXG4gIGV2ZW50RGF0YU9wdGlvbnNXaXRoSGFuZGxlcjogSW1wb3J0T3B0aW9uW107XG5cbiAgcHJpdmF0ZSBzdXBwb3J0ZWRFdmVudERhdGFGb3JtYXRzID0gW1xuICAgIG5ldyBJbXBvcnRPcHRpb24oXG4gICAgICBFdmVudERhdGFGb3JtYXQuSlNPTixcbiAgICAgICcuanNvbicsXG4gICAgICB0aGlzLmhhbmRsZUpTT05FdmVudERhdGFJbnB1dC5iaW5kKHRoaXMpLFxuICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5FRE00SEVQSlNPTixcbiAgICAgICcuZWRtNGhlcC5qc29uJyxcbiAgICAgIHRoaXMuaGFuZGxlRURNNEhFUEpTT05FdmVudERhdGFJbnB1dC5iaW5kKHRoaXMpLFxuICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5KSVZFWE1MLFxuICAgICAgJy54bWwnLFxuICAgICAgdGhpcy5oYW5kbGVKaXZlWE1MRGF0YUlucHV0LmJpbmQodGhpcyksXG4gICAgICAndGV4dC94bWwnLFxuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5aSVAsXG4gICAgICAnLnppcCcsXG4gICAgICB0aGlzLmhhbmRsZVppcEV2ZW50RGF0YUlucHV0LmJpbmQodGhpcyksXG4gICAgICAnLnppcCcsXG4gICAgKSxcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LklHLFxuICAgICAgJy5pZycsXG4gICAgICB0aGlzLmhhbmRsZUlnRXZlbnREYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICcuaWcnLFxuICAgICksXG4gIF07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBldmVudERpc3BsYXk6IEV2ZW50RGlzcGxheVNlcnZpY2UsXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPElPT3B0aW9uc0RpYWxvZ0NvbXBvbmVudD4sXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmV2ZW50RGF0YU9wdGlvbnNXaXRoSGFuZGxlciA9IHRoaXMuc3VwcG9ydGVkRXZlbnREYXRhRm9ybWF0cy5maWx0ZXIoXG4gICAgICAoZXZlbnREYXRhRm9ybWF0KSA9PlxuICAgICAgICB0aGlzLmV2ZW50RGF0YUltcG9ydE9wdGlvbnMuaW5jbHVkZXMoXG4gICAgICAgICAgZXZlbnREYXRhRm9ybWF0LmZvcm1hdCBhcyBFdmVudERhdGFGb3JtYXQsXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9ucy5mb3JFYWNoKChldmVudERhdGFJbXBvcnRPcHRpb24pID0+IHtcbiAgICAgIGlmIChldmVudERhdGFJbXBvcnRPcHRpb24gaW5zdGFuY2VvZiBJbXBvcnRPcHRpb24pIHtcbiAgICAgICAgY29uc3QgaW1wb3J0SGFuZGxlciA9IGV2ZW50RGF0YUltcG9ydE9wdGlvbi5oYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgIGV2ZW50RGF0YUltcG9ydE9wdGlvbi5oYW5kbGVyID0gKGZpbGVzOiBGaWxlTGlzdCkgPT4ge1xuICAgICAgICAgIGltcG9ydEhhbmRsZXIoZmlsZXMpO1xuICAgICAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhT3B0aW9uc1dpdGhIYW5kbGVyLnB1c2goZXZlbnREYXRhSW1wb3J0T3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFN1cHBvcnRlZEV2ZW50RGF0YUZvcm1hdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9uc1xuICAgICAgLm1hcCgoZm9ybWF0KSA9PiB7XG4gICAgICAgIGlmIChmb3JtYXQgaW5zdGFuY2VvZiBJbXBvcnRPcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0LmZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZm9ybWF0KSA9PiBmb3JtYXQgIT09ICdaSVAnKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBoYW5kbGVKU09ORXZlbnREYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBqc29uID0gdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShjb250ZW50KSA6IGNvbnRlbnQ7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoanNvbik7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ2pzb24nLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVFRE00SEVQSlNPTkV2ZW50RGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QganNvbiA9IHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoY29udGVudCkgOiBjb250ZW50O1xuICAgICAgY29uc3QgZWRtNGhlcEpzb25Mb2FkZXIgPSBuZXcgRWRtNGhlcEpzb25Mb2FkZXIoKTtcbiAgICAgIGVkbTRoZXBKc29uTG9hZGVyLnNldFJhd0V2ZW50RGF0YShqc29uKTtcbiAgICAgIGVkbTRoZXBKc29uTG9hZGVyLnByb2Nlc3NFdmVudERhdGEoKTtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peEV2ZW50cyhlZG00aGVwSnNvbkxvYWRlci5nZXRFdmVudERhdGEoKSk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ2pzb24nLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVKaXZlWE1MRGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgaml2ZWxvYWRlciA9IHRoaXMuZ2V0Sml2ZVhNTExvYWRlcigpO1xuICAgICAgaml2ZWxvYWRlci5wcm9jZXNzKGNvbnRlbnQpO1xuICAgICAgY29uc3QgZXZlbnREYXRhID0gaml2ZWxvYWRlci5nZXRFdmVudERhdGEoKTtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LmJ1aWxkRXZlbnREYXRhRnJvbUpTT04oZXZlbnREYXRhKTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAneG1sJywgY2FsbGJhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRKaXZlWE1MTG9hZGVyKCk6IEppdmVYTUxMb2FkZXIge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5Py5jb25maWd1cmF0aW9uPy5ldmVudERhdGFMb2FkZXIgaW5zdGFuY2VvZiBKaXZlWE1MTG9hZGVyXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVudERpc3BsYXkuY29uZmlndXJhdGlvbi5ldmVudERhdGFMb2FkZXIgYXMgSml2ZVhNTExvYWRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBKaXZlWE1MTG9hZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlT0JKSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55LCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlT0JKR2VvbWV0cnkoY29udGVudCwgbmFtZSk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ29iaicsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZVNjZW5lSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhEaXNwbGF5KGNvbnRlbnQpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICdwaG54JywgY2FsbGJhY2spO1xuICB9XG5cbiAgaGFuZGxlR0xURklucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlR0xURkdlb21ldHJ5KGZpbGUpO1xuICAgIH07XG4gICAgaWYgKHRoaXMuaXNGaWxlT2ZFeHRlbnNpb24oZmlsZXNbMF0ubmFtZSwgJ2dsdGYsZ2xiLGdsdGYuemlwLGdsYi56aXAnKSkge1xuICAgICAgY2FsbGJhY2soZmlsZXNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVBob2VuaXhJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peERpc3BsYXkoY29udGVudCk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ3BobngnLCBjYWxsYmFjayk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVST09USW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3Qgcm9vdE9iamVjdE5hbWUgPSBwcm9tcHQoJ0VudGVyIG9iamVjdCBuYW1lIGluIFJPT1QgZmlsZScpO1xuXG4gICAgYXdhaXQgdGhpcy5ldmVudERpc3BsYXkubG9hZFJvb3RHZW9tZXRyeShcbiAgICAgIFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZXNbMF0pLFxuICAgICAgcm9vdE9iamVjdE5hbWUsXG4gICAgICBmaWxlc1swXS5uYW1lLnNwbGl0KCcuJylbMF0sXG4gICAgKTtcblxuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlUm9vdEpTT05JbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBpZiAoIXRoaXMuaXNGaWxlT2ZFeHRlbnNpb24oZmlsZXNbMF0ubmFtZSwgJ2d6JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gZmlsZXNbMF0ubmFtZS5zcGxpdCgnLicpWzBdO1xuICAgIGF3YWl0IHRoaXMuZXZlbnREaXNwbGF5LmxvYWRSb290SlNPTkdlb21ldHJ5KFxuICAgICAgVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlc1swXSksXG4gICAgICBuYW1lLFxuICAgICk7XG5cbiAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUlnRXZlbnREYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY21zTG9hZGVyID0gbmV3IENNU0xvYWRlcigpO1xuICAgIGNtc0xvYWRlci5yZWFkSWdBcmNoaXZlKGZpbGVzWzBdLCAoYWxsRXZlbnRzOiBhbnlbXSkgPT4ge1xuICAgICAgY29uc3QgYWxsRXZlbnRzRGF0YSA9IGNtc0xvYWRlci5nZXRBbGxFdmVudHNEYXRhKGFsbEV2ZW50cyk7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoYWxsRXZlbnRzRGF0YSk7XG4gICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVppcEV2ZW50RGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGlmICghdGhpcy5pc0ZpbGVPZkV4dGVuc2lvbihmaWxlc1swXS5uYW1lLCAnemlwLGpzb24uemlwJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxFdmVudHNPYmplY3QgPSB7fTtcbiAgICBsZXQgZmlsZXNXaXRoRGF0YTogeyBbZmlsZU5hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gICAgLy8gVXNpbmcgYSB0cnkgY2F0Y2ggYmxvY2sgdG8gY2F0Y2ggYW55IGVycm9ycyBpbiBQcm9taXNlc1xuICAgIHRyeSB7XG4gICAgICBmaWxlc1dpdGhEYXRhID0gYXdhaXQgcmVhZFppcEZpbGUoZmlsZXNbMF0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSByZWFkaW5nIHppcCcsIGVycm9yKTtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LmdldEluZm9Mb2dnZXIoKS5hZGQoJ0NvdWxkIG5vdCByZWFkIHppcCBmaWxlJywgJ0Vycm9yJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSlNPTiBldmVudCBkYXRhXG4gICAgT2JqZWN0LmtleXMoZmlsZXNXaXRoRGF0YSlcbiAgICAgIC5maWx0ZXIoKGZpbGVOYW1lKSA9PiBmaWxlTmFtZS5lbmRzV2l0aCgnLmpzb24nKSlcbiAgICAgIC5mb3JFYWNoKChmaWxlTmFtZSkgPT4ge1xuICAgICAgICBPYmplY3QuYXNzaWduKGFsbEV2ZW50c09iamVjdCwgSlNPTi5wYXJzZShmaWxlc1dpdGhEYXRhW2ZpbGVOYW1lXSkpO1xuICAgICAgfSk7XG5cbiAgICAvLyBKaXZlWE1MIGV2ZW50IGRhdGFcbiAgICBjb25zdCBqaXZlbG9hZGVyID0gdGhpcy5nZXRKaXZlWE1MTG9hZGVyKCk7XG5cbiAgICBPYmplY3Qua2V5cyhmaWxlc1dpdGhEYXRhKVxuICAgICAgLmZpbHRlcigoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbGVOYW1lLmVuZHNXaXRoKCcueG1sJykgfHwgZmlsZU5hbWUuc3RhcnRzV2l0aCgnSml2ZVhNTCcpO1xuICAgICAgfSlcbiAgICAgIC5mb3JFYWNoKChmaWxlTmFtZSkgPT4ge1xuICAgICAgICBqaXZlbG9hZGVyLnByb2Nlc3MoZmlsZXNXaXRoRGF0YVtmaWxlTmFtZV0pO1xuICAgICAgICBjb25zdCBldmVudERhdGEgPSBqaXZlbG9hZGVyLmdldEV2ZW50RGF0YSgpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGFsbEV2ZW50c09iamVjdCwgeyBbZmlsZU5hbWVdOiBldmVudERhdGEgfSk7XG4gICAgICB9KTtcbiAgICAvLyBGb3Igc29tZSByZWFzb24gdGhlIGFib3ZlIGRvZXNuJ3QgcGljayB1cCBKaXZlWE1MX1hYWF9ZWVkuemlwXG5cbiAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoYWxsRXZlbnRzT2JqZWN0KTtcblxuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgaGFuZGxlRmlsZUlucHV0KFxuICAgIGZpbGU6IEZpbGUsXG4gICAgZXh0ZW5zaW9uczogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiAocmVzdWx0OiBzdHJpbmcsIGZpbGVOYW1lPzogc3RyaW5nKSA9PiB2b2lkLFxuICApIHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgaWYgKHRoaXMuaXNGaWxlT2ZFeHRlbnNpb24oZmlsZS5uYW1lLCBleHRlbnNpb25zKSkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY2FsbGJhY2socmVhZGVyLnJlc3VsdC50b1N0cmluZygpLCBmaWxlLm5hbWUuc3BsaXQoJy4nKVswXSk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gICAgfVxuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpbGVPZkV4dGVuc2lvbihmaWxlTmFtZTogc3RyaW5nLCBleHRlbnNpb25zOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICBleHRlbnNpb25zLnNwbGl0KCcsJykuaW5jbHVkZXMoZmlsZU5hbWUuc2xpY2UoZmlsZU5hbWUuaW5kZXhPZignLicpICsgMSkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogSW52YWxpZCBmaWxlIGZvcm1hdCEnKTtcbiAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRJbmZvTG9nZ2VyKCkuYWRkKCdJbnZhbGlkIGZpbGUgZm9ybWF0IScsICdFcnJvcicpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2F2ZVNjZW5lKCkge1xuICAgIHRoaXMuZXZlbnREaXNwbGF5LmV4cG9ydFBob2VuaXhEaXNwbGF5KCk7XG4gIH1cblxuICBleHBvcnRPQkooKSB7XG4gICAgdGhpcy5ldmVudERpc3BsYXkuZXhwb3J0VG9PQkooKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRpYWxvZ1wiPlxuICA8aDEgbWF0LWRpYWxvZy10aXRsZT5JbXBvcnQgYW5kIGV4cG9ydDwvaDE+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwiZGlhbG9nLWNvbnRlbnRcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXZlbnREYXRhSW1wb3J0T3B0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyXCI+PGI+RXZlbnQgZGF0YTwvYj48L3A+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyZWRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBldmVudERhdGFJbXBvcnRPcHRpb24gb2YgZXZlbnREYXRhT3B0aW9uc1dpdGhIYW5kbGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2V2ZW50RGF0YUZpbGVJbnB1dFxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXRcIlxuICAgICAgICAgICAgW2FjY2VwdF09XCJldmVudERhdGFJbXBvcnRPcHRpb24uYWNjZXB0XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZXZlbnREYXRhSW1wb3J0T3B0aW9uLmhhbmRsZXIoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXZlbnREYXRhRmlsZUlucHV0LmNsaWNrKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2V2ZW50RGF0YS5zdmdcIiBhbHQ9XCJFdmVudCBkYXRhIGljb25cIiAvPlxuICAgICAgICAgICAgTG9hZCB7eyBldmVudERhdGFJbXBvcnRPcHRpb24uZmlsZVR5cGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxwIGNsYXNzPVwidGV4dC1jZW50ZXJcIj48Yj5HZW9tZXRyaWVzPC9iPjwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyZWRcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjb2JqRmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5vYmpcIlxuICAgICAgICBuYW1lPVwiaW1hZ2VcIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZU9CSklucHV0KCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIiAoY2xpY2spPVwib2JqRmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvb2JqLnN2Z1wiIGFsdD1cIlwiIC8+IExvYWQgLm9ialxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjZ2x0ZkZpbGVJbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXRcIlxuICAgICAgICBhY2NlcHQ9XCIuZ2x0ZiwuZ2xiLC5nbHRmLnppcCwuZ2xiLnppcFwiXG4gICAgICAgIG5hbWU9XCJpbWFnZVwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlR0xURklucHV0KCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIiAoY2xpY2spPVwiZ2x0ZkZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2dsdGYuc3ZnXCIgYWx0PVwiXCIgLz4gTG9hZCAuZ2x0Zi8uZ2xiXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGlucHV0XG4gICAgICAgICNyb290RmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5yb290XCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVST09USW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJyb290RmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvZmlsZS1pbXBvcnQuc3ZnXCIgYWx0PVwiXCIgLz4gTG9hZCAucm9vdFxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjcm9vdEpTT05GaWxlSW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0XCJcbiAgICAgICAgYWNjZXB0PVwiLmpzb24uZ3pcIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVJvb3RKU09OSW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJyb290SlNPTkZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2ZpbGUtaW1wb3J0LnN2Z1wiIGFsdD1cIlwiIC8+IExvYWQgLmpzb24uZ3pcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxiPlNjZW5lPC9iPjwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyZWRcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvbiBsb2FkLWV4cG9ydFwiXG4gICAgICAgIGlkPVwiZXhwb3J0U2NlbmVcIlxuICAgICAgICAoY2xpY2spPVwic2F2ZVNjZW5lKClcIlxuICAgICAgPlxuICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9zYXZlLnN2Z1wiIGFsdD1cIlwiIC8+IFNhdmUgc2NlbmVcbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgI2xvYWRTY2VuZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5waG54XCJcbiAgICAgICAgbmFtZT1cImltYWdlXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVQaG9lbml4SW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvbiBsb2FkLWV4cG9ydFwiXG4gICAgICAgIGlkPVwiaW1wb3J0U2NlbmVcIlxuICAgICAgICAoY2xpY2spPVwibG9hZFNjZW5lSW5wdXQuY2xpY2soKVwiXG4gICAgICA+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL3VwbG9hZC5zdmdcIiBhbHQ9XCJcIiAvPiBMb2FkIHNjZW5lXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXQtYnV0dG9uIGV4cG9ydC1idXR0b25cIlxuICAgICAgICBpZD1cImV4cG9ydE9CSlwiXG4gICAgICAgIChjbGljayk9XCJleHBvcnRPQkooKVwiXG4gICAgICA+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL29iai5zdmdcIiBhbHQ9XCJcIiAvPiBTYXZlIE9CSlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XG4gICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiIGNka0ZvY3VzSW5pdGlhbD5cbiAgICAgIENsb3NlXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,36 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { EventDataFormat, } from '../../../services/extras/event-data-import';
3
- import { IOOptionsDialogComponent } from './io-options-dialog/io-options-dialog.component';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/material/dialog";
6
- import * as i2 from "../menu-toggle/menu-toggle.component";
7
- export class IoOptionsComponent {
8
- dialog;
9
- eventDataImportOptions = Object.values(EventDataFormat);
10
- constructor(dialog) {
11
- this.dialog = dialog;
12
- }
13
- openIODialog() {
14
- const dialogRef = this.dialog.open(IOOptionsDialogComponent, {
15
- panelClass: 'dialog',
16
- });
17
- dialogRef.componentInstance.eventDataImportOptions =
18
- this.eventDataImportOptions;
19
- }
20
- static ɵfac = function IoOptionsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || IoOptionsComponent)(i0.ɵɵdirectiveInject(i1.MatDialog)); };
21
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: IoOptionsComponent, selectors: [["app-io-options"]], inputs: { eventDataImportOptions: "eventDataImportOptions" }, decls: 1, vars: 1, consts: [["tooltip", "Import and export options", "icon", "import", 3, "click", "active"]], template: function IoOptionsComponent_Template(rf, ctx) { if (rf & 1) {
22
- i0.ɵɵelementStart(0, "app-menu-toggle", 0);
23
- i0.ɵɵlistener("click", function IoOptionsComponent_Template_app_menu_toggle_click_0_listener() { return ctx.openIODialog(); });
24
- i0.ɵɵelementEnd();
25
- } if (rf & 2) {
26
- i0.ɵɵproperty("active", false);
27
- } }, dependencies: [i2.MenuToggleComponent] });
28
- }
29
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IoOptionsComponent, [{
30
- type: Component,
31
- args: [{ selector: 'app-io-options', template: "<app-menu-toggle\n tooltip=\"Import and export options\"\n icon=\"import\"\n [active]=\"false\"\n (click)=\"openIODialog()\"\n>\n</app-menu-toggle>\n" }]
32
- }], () => [{ type: i1.MatDialog }], { eventDataImportOptions: [{
33
- type: Input
34
- }] }); })();
35
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(IoOptionsComponent, { className: "IoOptionsComponent", filePath: "components/ui-menu/io-options/io-options.component.ts", lineNumber: 14 }); })();
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tb3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L2lvLW9wdGlvbnMvaW8tb3B0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L2lvLW9wdGlvbnMvaW8tb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQ0wsZUFBZSxHQUVoQixNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOzs7O0FBTzNGLE1BQU0sT0FBTyxrQkFBa0I7SUFLVDtJQUhwQixzQkFBc0IsR0FDcEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUVqQyxZQUFvQixNQUFpQjtRQUFqQixXQUFNLEdBQU4sTUFBTSxDQUFXO0lBQUcsQ0FBQztJQUV6QyxZQUFZO1FBQ1YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDM0QsVUFBVSxFQUFFLFFBQVE7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQjtZQUNoRCxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDaEMsQ0FBQzs0R0FiVSxrQkFBa0I7NkRBQWxCLGtCQUFrQjtZQ2IvQiwwQ0FLQztZQURDLHdHQUFTLGtCQUFjLElBQUM7WUFFMUIsaUJBQWtCOztZQUhoQiw4QkFBZ0I7OztpRkRVTCxrQkFBa0I7Y0FMOUIsU0FBUzsyQkFDRSxnQkFBZ0I7MENBTTFCLHNCQUFzQjtrQkFEckIsS0FBSzs7a0ZBREssa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7XG4gIEV2ZW50RGF0YUZvcm1hdCxcbiAgdHlwZSBFdmVudERhdGFJbXBvcnRPcHRpb24sXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2V4dHJhcy9ldmVudC1kYXRhLWltcG9ydCc7XG5pbXBvcnQgeyBJT09wdGlvbnNEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2lvLW9wdGlvbnMtZGlhbG9nL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pby1vcHRpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lvLW9wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pby1vcHRpb25zLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIElvT3B0aW9uc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIGV2ZW50RGF0YUltcG9ydE9wdGlvbnM6IEV2ZW50RGF0YUltcG9ydE9wdGlvbltdID1cbiAgICBPYmplY3QudmFsdWVzKEV2ZW50RGF0YUZvcm1hdCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZykge31cblxuICBvcGVuSU9EaWFsb2coKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihJT09wdGlvbnNEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHBhbmVsQ2xhc3M6ICdkaWFsb2cnLFxuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5ldmVudERhdGFJbXBvcnRPcHRpb25zID1cbiAgICAgIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9ucztcbiAgfVxufVxuIiwiPGFwcC1tZW51LXRvZ2dsZVxuICB0b29sdGlwPVwiSW1wb3J0IGFuZCBleHBvcnQgb3B0aW9uc1wiXG4gIGljb249XCJpbXBvcnRcIlxuICBbYWN0aXZlXT1cImZhbHNlXCJcbiAgKGNsaWNrKT1cIm9wZW5JT0RpYWxvZygpXCJcbj5cbjwvYXBwLW1lbnUtdG9nZ2xlPlxuIl19
@@ -1,32 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../../services/event-display.service";
4
- import * as i2 from "@angular/material/tooltip";
5
- import * as i3 from "../menu-toggle/menu-toggle.component";
6
- export class MainViewToggleComponent {
7
- eventDisplay;
8
- orthographicView = false;
9
- constructor(eventDisplay) {
10
- this.eventDisplay = eventDisplay;
11
- }
12
- switchMainView() {
13
- this.orthographicView = !this.orthographicView;
14
- this.eventDisplay
15
- .getUIManager()
16
- .toggleOrthographicView(this.orthographicView);
17
- }
18
- static ɵfac = function MainViewToggleComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MainViewToggleComponent)(i0.ɵɵdirectiveInject(i1.EventDisplayService)); };
19
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MainViewToggleComponent, selectors: [["app-main-view-toggle"]], decls: 1, vars: 2, consts: [[3, "click", "icon", "matTooltip"]], template: function MainViewToggleComponent_Template(rf, ctx) { if (rf & 1) {
20
- i0.ɵɵelementStart(0, "app-menu-toggle", 0);
21
- i0.ɵɵlistener("click", function MainViewToggleComponent_Template_app_menu_toggle_click_0_listener() { return ctx.switchMainView(); });
22
- i0.ɵɵelementEnd();
23
- } if (rf & 2) {
24
- i0.ɵɵproperty("icon", ctx.orthographicView ? "perspective" : "orthographic")("matTooltip", "Switch to " + (ctx.orthographicView ? "perspective" : "orthographic") + " view");
25
- } }, dependencies: [i2.MatTooltip, i3.MenuToggleComponent] });
26
- }
27
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MainViewToggleComponent, [{
28
- type: Component,
29
- args: [{ selector: 'app-main-view-toggle', template: "<app-menu-toggle\n [icon]=\"orthographicView ? 'perspective' : 'orthographic'\"\n [matTooltip]=\"\n 'Switch to ' + (orthographicView ? 'perspective' : 'orthographic') + ' view'\n \"\n (click)=\"switchMainView()\"\n>\n</app-menu-toggle>\n" }]
30
- }], () => [{ type: i1.EventDisplayService }], null); })();
31
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MainViewToggleComponent, { className: "MainViewToggleComponent", filePath: "components/ui-menu/main-view-toggle/main-view-toggle.component.ts", lineNumber: 9 }); })();
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi12aWV3LXRvZ2dsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L21haW4tdmlldy10b2dnbGUvbWFpbi12aWV3LXRvZ2dsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L21haW4tdmlldy10b2dnbGUvbWFpbi12aWV3LXRvZ2dsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQVExQyxNQUFNLE9BQU8sdUJBQXVCO0lBR2Q7SUFGcEIsZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBRWxDLFlBQW9CLFlBQWlDO1FBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtJQUFHLENBQUM7SUFFekQsY0FBYztRQUNaLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsWUFBWTthQUNkLFlBQVksRUFBRTthQUNkLHNCQUFzQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7aUhBVlUsdUJBQXVCOzZEQUF2Qix1QkFBdUI7WUNScEMsMENBTUM7WUFEQyw2R0FBUyxvQkFBZ0IsSUFBQztZQUU1QixpQkFBa0I7O1lBTGhCLEFBREEsNEVBQTBELGdHQUd6RDs7O2lGRElVLHVCQUF1QjtjQUxuQyxTQUFTOzJCQUNFLHNCQUFzQjs7a0ZBSXJCLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnREaXNwbGF5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2V2ZW50LWRpc3BsYXkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tYWluLXZpZXctdG9nZ2xlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21haW4tdmlldy10b2dnbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYWluLXZpZXctdG9nZ2xlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE1haW5WaWV3VG9nZ2xlQ29tcG9uZW50IHtcbiAgb3J0aG9ncmFwaGljVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXZlbnREaXNwbGF5OiBFdmVudERpc3BsYXlTZXJ2aWNlKSB7fVxuXG4gIHN3aXRjaE1haW5WaWV3KCkge1xuICAgIHRoaXMub3J0aG9ncmFwaGljVmlldyA9ICF0aGlzLm9ydGhvZ3JhcGhpY1ZpZXc7XG4gICAgdGhpcy5ldmVudERpc3BsYXlcbiAgICAgIC5nZXRVSU1hbmFnZXIoKVxuICAgICAgLnRvZ2dsZU9ydGhvZ3JhcGhpY1ZpZXcodGhpcy5vcnRob2dyYXBoaWNWaWV3KTtcbiAgfVxufVxuIiwiPGFwcC1tZW51LXRvZ2dsZVxuICBbaWNvbl09XCJvcnRob2dyYXBoaWNWaWV3ID8gJ3BlcnNwZWN0aXZlJyA6ICdvcnRob2dyYXBoaWMnXCJcbiAgW21hdFRvb2x0aXBdPVwiXG4gICAgJ1N3aXRjaCB0byAnICsgKG9ydGhvZ3JhcGhpY1ZpZXcgPyAncGVyc3BlY3RpdmUnIDogJ29ydGhvZ3JhcGhpYycpICsgJyB2aWV3J1xuICBcIlxuICAoY2xpY2spPVwic3dpdGNoTWFpblZpZXcoKVwiXG4+XG48L2FwcC1tZW51LXRvZ2dsZT5cbiJdfQ==
@@ -1,109 +0,0 @@
1
- import { Component, ViewEncapsulation, } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../../services/event-display.service";
4
- import * as i2 from "@angular/common";
5
- import * as i3 from "@angular/forms";
6
- import * as i4 from "@angular/material/menu";
7
- import * as i5 from "@angular/material/radio";
8
- import * as i6 from "../menu-toggle/menu-toggle.component";
9
- function MakePictureComponent_mat_radio_button_14_Template(rf, ctx) { if (rf & 1) {
10
- i0.ɵɵelementStart(0, "mat-radio-button", 12);
11
- i0.ɵɵtext(1);
12
- i0.ɵɵelementEnd();
13
- } if (rf & 2) {
14
- const fitting_r4 = ctx.$implicit;
15
- i0.ɵɵproperty("value", fitting_r4);
16
- i0.ɵɵadvance();
17
- i0.ɵɵtextInterpolate1("", fitting_r4, " ");
18
- } }
19
- export class MakePictureComponent {
20
- eventDisplay;
21
- fittings = ['Crop', 'Stretch'];
22
- fitting = 'Crop';
23
- width = 3840;
24
- height = 2160;
25
- disabled = false;
26
- constructor(eventDisplay) {
27
- this.eventDisplay = eventDisplay;
28
- }
29
- ngOnInit() { }
30
- checkSize() {
31
- return this.eventDisplay
32
- .getThreeManager()
33
- .checkScreenShotCanvasSize(this.width, this.height, this.fitting);
34
- }
35
- setWidth(value) {
36
- this.width = value;
37
- this.disabled = !this.checkSize();
38
- }
39
- setHeight(value) {
40
- this.height = value;
41
- this.disabled = !this.checkSize();
42
- }
43
- buttonText() {
44
- return this.disabled ? 'Size too large' : 'Create picture';
45
- }
46
- makePicture() {
47
- this.eventDisplay
48
- .getThreeManager()
49
- .makeScreenShot(this.width, this.height, this.fitting);
50
- }
51
- static ɵfac = function MakePictureComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MakePictureComponent)(i0.ɵɵdirectiveInject(i1.EventDisplayService)); };
52
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MakePictureComponent, selectors: [["app-make-picture"]], decls: 20, vars: 11, consts: [["menu", ""], ["width", ""], ["height", ""], [1, "mat-menu"], ["mat-menu-item", "", 1, "size-input", 3, "click"], ["mapInput", "", "type", "number", 3, "change", "click", "value"], ["mat-menu-item", "", 3, "click"], [1, "fitting-radios", 3, "ngModelChange", "ngModel"], [3, "value", 4, "ngFor", "ngForOf"], ["mat-menu-item", "", 1, "make-picture", 3, "click", "disabled"], ["tooltip", "Creates a picture from the current view: directly saves a png of arbitrary size from the current view", "icon", "png", 3, "matMenuTriggerFor"], ["hidden", "", "id", "screenshotCanvas"], [3, "value"]], template: function MakePictureComponent_Template(rf, ctx) { if (rf & 1) {
53
- const _r1 = i0.ɵɵgetCurrentView();
54
- i0.ɵɵelementStart(0, "mat-menu", 3, 0)(2, "button", 4);
55
- i0.ɵɵlistener("click", function MakePictureComponent_Template_button_click_2_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
56
- i0.ɵɵelementStart(3, "label");
57
- i0.ɵɵtext(4, "width");
58
- i0.ɵɵelementEnd();
59
- i0.ɵɵelementStart(5, "input", 5, 1);
60
- i0.ɵɵlistener("change", function MakePictureComponent_Template_input_change_5_listener() { i0.ɵɵrestoreView(_r1); const width_r2 = i0.ɵɵreference(6); return i0.ɵɵresetView(ctx.setWidth(width_r2.value)); })("click", function MakePictureComponent_Template_input_click_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
61
- i0.ɵɵelementEnd()();
62
- i0.ɵɵelementStart(7, "button", 4);
63
- i0.ɵɵlistener("click", function MakePictureComponent_Template_button_click_7_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
64
- i0.ɵɵelementStart(8, "label");
65
- i0.ɵɵtext(9, "height");
66
- i0.ɵɵelementEnd();
67
- i0.ɵɵelementStart(10, "input", 5, 2);
68
- i0.ɵɵlistener("change", function MakePictureComponent_Template_input_change_10_listener() { i0.ɵɵrestoreView(_r1); const height_r3 = i0.ɵɵreference(11); return i0.ɵɵresetView(ctx.setHeight(height_r3.value)); })("click", function MakePictureComponent_Template_input_click_10_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
69
- i0.ɵɵelementEnd()();
70
- i0.ɵɵelementStart(12, "button", 6);
71
- i0.ɵɵlistener("click", function MakePictureComponent_Template_button_click_12_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
72
- i0.ɵɵelementStart(13, "mat-radio-group", 7);
73
- i0.ɵɵtwoWayListener("ngModelChange", function MakePictureComponent_Template_mat_radio_group_ngModelChange_13_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.fitting, $event) || (ctx.fitting = $event); return i0.ɵɵresetView($event); });
74
- i0.ɵɵtemplate(14, MakePictureComponent_mat_radio_button_14_Template, 2, 2, "mat-radio-button", 8);
75
- i0.ɵɵelementEnd()();
76
- i0.ɵɵelementStart(15, "button", 9);
77
- i0.ɵɵlistener("click", function MakePictureComponent_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.makePicture()); });
78
- i0.ɵɵtext(16);
79
- i0.ɵɵelementEnd()();
80
- i0.ɵɵelement(17, "app-menu-toggle", 10);
81
- i0.ɵɵelementStart(18, "div");
82
- i0.ɵɵelement(19, "canvas", 11);
83
- i0.ɵɵelementEnd();
84
- } if (rf & 2) {
85
- const menu_r5 = i0.ɵɵreference(1);
86
- i0.ɵɵadvance(5);
87
- i0.ɵɵclassProp("badSize", ctx.disabled);
88
- i0.ɵɵproperty("value", 3840);
89
- i0.ɵɵadvance(5);
90
- i0.ɵɵclassProp("badSize", ctx.disabled);
91
- i0.ɵɵproperty("value", 2610);
92
- i0.ɵɵadvance(3);
93
- i0.ɵɵtwoWayProperty("ngModel", ctx.fitting);
94
- i0.ɵɵadvance();
95
- i0.ɵɵproperty("ngForOf", ctx.fittings);
96
- i0.ɵɵadvance();
97
- i0.ɵɵproperty("disabled", ctx.disabled);
98
- i0.ɵɵadvance();
99
- i0.ɵɵtextInterpolate1(" ", ctx.buttonText(), " ");
100
- i0.ɵɵadvance();
101
- i0.ɵɵproperty("matMenuTriggerFor", menu_r5);
102
- } }, dependencies: [i2.NgForOf, i3.NgControlStatus, i3.NgModel, i4.MatMenu, i4.MatMenuItem, i4.MatMenuTrigger, i5.MatRadioGroup, i5.MatRadioButton, i6.MenuToggleComponent], styles: [".size-input{background:transparent;color:var(--phoenix-text-color);text-align:center}.size-input label{width:60px}.size-input input{background:transparent;color:var(--phoenix-text-color);width:80px}.badSize{border-color:red}.make-picture{text-align:center;display:block}.make-picture span{padding:5px 25px;border:2px solid var(--phoenix-text-color);border-radius:8px}\n"], encapsulation: 2 });
103
- }
104
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MakePictureComponent, [{
105
- type: Component,
106
- args: [{ selector: 'app-make-picture', encapsulation: ViewEncapsulation.None, template: "<mat-menu class=\"mat-menu\" #menu>\n <button mat-menu-item (click)=\"$event.stopPropagation()\" class=\"size-input\">\n <label>width</label>\n <input\n #width\n mapInput\n type=\"number\"\n [value]=\"3840\"\n (change)=\"setWidth(width.value)\"\n (click)=\"$event.stopPropagation()\"\n [class.badSize]=\"disabled\"\n />\n </button>\n <button mat-menu-item (click)=\"$event.stopPropagation()\" class=\"size-input\">\n <label>height</label>\n <input\n #height\n mapInput\n type=\"number\"\n [value]=\"2610\"\n (change)=\"setHeight(height.value)\"\n (click)=\"$event.stopPropagation()\"\n [class.badSize]=\"disabled\"\n />\n </button>\n <button mat-menu-item (click)=\"$event.stopPropagation()\">\n <mat-radio-group [(ngModel)]=\"fitting\" class=\"fitting-radios\">\n <mat-radio-button *ngFor=\"let fitting of fittings\" [value]=\"fitting\"\n >{{ fitting }}\n </mat-radio-button>\n </mat-radio-group>\n </button>\n <button\n mat-menu-item\n [disabled]=\"disabled\"\n class=\"make-picture\"\n (click)=\"makePicture()\"\n >\n {{ buttonText() }}\n </button>\n</mat-menu>\n<app-menu-toggle\n [matMenuTriggerFor]=\"menu\"\n tooltip=\"Creates a picture from the current view: directly saves a png of arbitrary size from the current view\"\n icon=\"png\"\n>\n</app-menu-toggle>\n<div>\n <canvas hidden id=\"screenshotCanvas\"></canvas>\n</div>\n", styles: [".size-input{background:transparent;color:var(--phoenix-text-color);text-align:center}.size-input label{width:60px}.size-input input{background:transparent;color:var(--phoenix-text-color);width:80px}.badSize{border-color:red}.make-picture{text-align:center;display:block}.make-picture span{padding:5px 25px;border:2px solid var(--phoenix-text-color);border-radius:8px}\n"] }]
107
- }], () => [{ type: i1.EventDisplayService }], null); })();
108
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MakePictureComponent, { className: "MakePictureComponent", filePath: "components/ui-menu/make-picture/make-picture.component.ts", lineNumber: 15 }); })();
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZS1waWN0dXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3VpLW1lbnUvbWFrZS1waWN0dXJlL21ha2UtcGljdHVyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L21ha2UtcGljdHVyZS9tYWtlLXBpY3R1cmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFHVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7OztJQ3NCakIsNENBQ0c7SUFBQSxZQUNIO0lBQUEsaUJBQW1COzs7SUFGZ0Msa0NBQWlCO0lBQ2pFLGNBQ0g7SUFERywwQ0FDSDs7QURmTixNQUFNLE9BQU8sb0JBQW9CO0lBTVg7SUFMcEIsUUFBUSxHQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sR0FBVyxNQUFNLENBQUM7SUFDekIsS0FBSyxHQUFXLElBQUksQ0FBQztJQUNyQixNQUFNLEdBQVcsSUFBSSxDQUFDO0lBQ3RCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsWUFBb0IsWUFBaUM7UUFBakMsaUJBQVksR0FBWixZQUFZLENBQXFCO0lBQUcsQ0FBQztJQUN6RCxRQUFRLEtBQUksQ0FBQztJQUNMLFNBQVM7UUFDZixPQUFPLElBQUksQ0FBQyxZQUFZO2FBQ3JCLGVBQWUsRUFBRTthQUNqQix5QkFBeUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxRQUFRLENBQUMsS0FBSztRQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNELFNBQVMsQ0FBQyxLQUFLO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0lBQzdELENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVk7YUFDZCxlQUFlLEVBQUU7YUFDakIsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0QsQ0FBQzs4R0E1QlUsb0JBQW9COzZEQUFwQixvQkFBb0I7O1lDYi9CLEFBREYsc0NBQWlDLGdCQUM2QztZQUF0RCw2SUFBUyx3QkFBd0IsS0FBQztZQUN0RCw2QkFBTztZQUFBLHFCQUFLO1lBQUEsaUJBQVE7WUFDcEIsbUNBUUU7WUFGQSxBQURBLDRLQUFVLDRCQUFxQixLQUFDLCtIQUN2Qix3QkFBd0IsS0FBQztZQUd0QyxBQVRFLGlCQVFFLEVBQ0s7WUFDVCxpQ0FBNEU7WUFBdEQsNklBQVMsd0JBQXdCLEtBQUM7WUFDdEQsNkJBQU87WUFBQSxzQkFBTTtZQUFBLGlCQUFRO1lBQ3JCLG9DQVFFO1lBRkEsQUFEQSwrS0FBVSw4QkFBdUIsS0FBQyxnSUFDekIsd0JBQXdCLEtBQUM7WUFHdEMsQUFURSxpQkFRRSxFQUNLO1lBQ1Qsa0NBQXlEO1lBQW5DLDhJQUFTLHdCQUF3QixLQUFDO1lBQ3RELDJDQUE4RDtZQUE3Qyw4UEFBcUI7WUFDcEMsaUdBQ0c7WUFHUCxBQURFLGlCQUFrQixFQUNYO1lBQ1Qsa0NBS0M7WUFEQyx3SUFBUyxpQkFBYSxLQUFDO1lBRXZCLGFBQ0Y7WUFDRixBQURFLGlCQUFTLEVBQ0E7WUFDWCx1Q0FLa0I7WUFDbEIsNEJBQUs7WUFDSCw4QkFBOEM7WUFDaEQsaUJBQU07OztZQXZDQSxlQUEwQjtZQUExQix1Q0FBMEI7WUFIMUIsNEJBQWM7WUFlZCxlQUEwQjtZQUExQix1Q0FBMEI7WUFIMUIsNEJBQWM7WUFPQyxlQUFxQjtZQUFyQiwyQ0FBcUI7WUFDRSxjQUFXO1lBQVgsc0NBQVc7WUFPbkQsY0FBcUI7WUFBckIsdUNBQXFCO1lBSXJCLGNBQ0Y7WUFERSxpREFDRjtZQUdBLGNBQTBCO1lBQTFCLDJDQUEwQjs7O2lGRDVCZixvQkFBb0I7Y0FOaEMsU0FBUzsyQkFDRSxrQkFBa0IsaUJBR2IsaUJBQWlCLENBQUMsSUFBSTs7a0ZBRTFCLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIHR5cGUgT25Jbml0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFdmVudERpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXZlbnQtZGlzcGxheS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1ha2UtcGljdHVyZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYWtlLXBpY3R1cmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYWtlLXBpY3R1cmUuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgTWFrZVBpY3R1cmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBmaXR0aW5nczogc3RyaW5nW10gPSBbJ0Nyb3AnLCAnU3RyZXRjaCddO1xuICBmaXR0aW5nOiBzdHJpbmcgPSAnQ3JvcCc7XG4gIHdpZHRoOiBudW1iZXIgPSAzODQwO1xuICBoZWlnaHQ6IG51bWJlciA9IDIxNjA7XG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXZlbnREaXNwbGF5OiBFdmVudERpc3BsYXlTZXJ2aWNlKSB7fVxuICBuZ09uSW5pdCgpIHt9XG4gIHByaXZhdGUgY2hlY2tTaXplKCkge1xuICAgIHJldHVybiB0aGlzLmV2ZW50RGlzcGxheVxuICAgICAgLmdldFRocmVlTWFuYWdlcigpXG4gICAgICAuY2hlY2tTY3JlZW5TaG90Q2FudmFzU2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5maXR0aW5nKTtcbiAgfVxuICBzZXRXaWR0aCh2YWx1ZSkge1xuICAgIHRoaXMud2lkdGggPSB2YWx1ZTtcbiAgICB0aGlzLmRpc2FibGVkID0gIXRoaXMuY2hlY2tTaXplKCk7XG4gIH1cbiAgc2V0SGVpZ2h0KHZhbHVlKSB7XG4gICAgdGhpcy5oZWlnaHQgPSB2YWx1ZTtcbiAgICB0aGlzLmRpc2FibGVkID0gIXRoaXMuY2hlY2tTaXplKCk7XG4gIH1cbiAgYnV0dG9uVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/ICdTaXplIHRvbyBsYXJnZScgOiAnQ3JlYXRlIHBpY3R1cmUnO1xuICB9XG4gIG1ha2VQaWN0dXJlKCkge1xuICAgIHRoaXMuZXZlbnREaXNwbGF5XG4gICAgICAuZ2V0VGhyZWVNYW5hZ2VyKClcbiAgICAgIC5tYWtlU2NyZWVuU2hvdCh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5maXR0aW5nKTtcbiAgfVxufVxuIiwiPG1hdC1tZW51IGNsYXNzPVwibWF0LW1lbnVcIiAjbWVudT5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBjbGFzcz1cInNpemUtaW5wdXRcIj5cbiAgICA8bGFiZWw+d2lkdGg8L2xhYmVsPlxuICAgIDxpbnB1dFxuICAgICAgI3dpZHRoXG4gICAgICBtYXBJbnB1dFxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICBbdmFsdWVdPVwiMzg0MFwiXG4gICAgICAoY2hhbmdlKT1cInNldFdpZHRoKHdpZHRoLnZhbHVlKVwiXG4gICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgIFtjbGFzcy5iYWRTaXplXT1cImRpc2FibGVkXCJcbiAgICAvPlxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBjbGFzcz1cInNpemUtaW5wdXRcIj5cbiAgICA8bGFiZWw+aGVpZ2h0PC9sYWJlbD5cbiAgICA8aW5wdXRcbiAgICAgICNoZWlnaHRcbiAgICAgIG1hcElucHV0XG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIFt2YWx1ZV09XCIyNjEwXCJcbiAgICAgIChjaGFuZ2UpPVwic2V0SGVpZ2h0KGhlaWdodC52YWx1ZSlcIlxuICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICBbY2xhc3MuYmFkU2l6ZV09XCJkaXNhYmxlZFwiXG4gICAgLz5cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgPG1hdC1yYWRpby1ncm91cCBbKG5nTW9kZWwpXT1cImZpdHRpbmdcIiBjbGFzcz1cImZpdHRpbmctcmFkaW9zXCI+XG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgZml0dGluZyBvZiBmaXR0aW5nc1wiIFt2YWx1ZV09XCJmaXR0aW5nXCJcbiAgICAgICAgPnt7IGZpdHRpbmcgfX1cbiAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBtYXQtbWVudS1pdGVtXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBjbGFzcz1cIm1ha2UtcGljdHVyZVwiXG4gICAgKGNsaWNrKT1cIm1ha2VQaWN0dXJlKClcIlxuICA+XG4gICAge3sgYnV0dG9uVGV4dCgpIH19XG4gIDwvYnV0dG9uPlxuPC9tYXQtbWVudT5cbjxhcHAtbWVudS10b2dnbGVcbiAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICB0b29sdGlwPVwiQ3JlYXRlcyBhIHBpY3R1cmUgZnJvbSB0aGUgY3VycmVudCB2aWV3OiBkaXJlY3RseSBzYXZlcyBhIHBuZyBvZiBhcmJpdHJhcnkgc2l6ZSBmcm9tIHRoZSBjdXJyZW50IHZpZXdcIlxuICBpY29uPVwicG5nXCJcbj5cbjwvYXBwLW1lbnUtdG9nZ2xlPlxuPGRpdj5cbiAgPGNhbnZhcyBoaWRkZW4gaWQ9XCJzY3JlZW5zaG90Q2FudmFzXCI+PC9jYW52YXM+XG48L2Rpdj5cbiJdfQ==