phoenix-ui-components 2.1.0 → 2.5.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 (148) hide show
  1. package/README.md +1 -1
  2. package/_theming.scss +14 -7
  3. package/dist/README.md +1 -1
  4. package/dist/components/embed-menu/embed-menu.component.d.ts +3 -0
  5. package/dist/components/embed-menu/experiment-link/experiment-link.component.d.ts +3 -0
  6. package/dist/components/loader/loader.component.d.ts +3 -0
  7. package/dist/components/nav/nav.component.d.ts +3 -0
  8. package/dist/components/phoenix-menu/config/config-slider/config-slider.component.d.ts +3 -0
  9. package/dist/components/phoenix-menu/pheonix-menu-item/phoenix-menu-item.component.d.ts +3 -0
  10. package/dist/components/phoenix-menu/phoenix-menu.component.d.ts +3 -0
  11. package/dist/components/phoenix-ui.module.d.ts +56 -0
  12. package/dist/components/ui-menu/animate-camera/animate-camera.component.d.ts +3 -0
  13. package/dist/components/ui-menu/animate-event/animate-event.component.d.ts +3 -0
  14. package/dist/components/ui-menu/ar-toggle/ar-toggle.component.d.ts +4 -1
  15. package/dist/components/ui-menu/auto-rotate/auto-rotate.component.d.ts +3 -0
  16. package/dist/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.d.ts +10 -2
  17. package/dist/components/ui-menu/collections-info/collections-info.component.d.ts +3 -0
  18. package/dist/components/ui-menu/dark-theme/dark-theme.component.d.ts +3 -0
  19. package/dist/components/ui-menu/event-selector/event-selector.component.d.ts +3 -0
  20. package/dist/components/ui-menu/experiment-info/experiment-info.component.d.ts +3 -0
  21. package/dist/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.d.ts +5 -0
  22. package/dist/components/ui-menu/info-panel/info-panel.component.d.ts +3 -0
  23. package/dist/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.d.ts +3 -0
  24. package/dist/components/ui-menu/io-options/io-options.component.d.ts +3 -0
  25. package/dist/components/ui-menu/main-view-toggle/main-view-toggle.component.d.ts +3 -0
  26. package/dist/components/ui-menu/menu-toggle/menu-toggle.component.d.ts +3 -0
  27. package/dist/components/ui-menu/object-clipping/object-clipping.component.d.ts +3 -0
  28. package/dist/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.d.ts +3 -0
  29. package/dist/components/ui-menu/object-selection/object-selection.component.d.ts +3 -0
  30. package/dist/components/ui-menu/overlay/overlay.component.d.ts +3 -0
  31. package/dist/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.d.ts +3 -0
  32. package/dist/components/ui-menu/overlay-view/overlay-view.component.d.ts +3 -0
  33. package/dist/components/ui-menu/performance-toggle/performance-toggle.component.d.ts +3 -0
  34. package/dist/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.d.ts +10 -2
  35. package/dist/components/ui-menu/share-link/share-link.component.d.ts +3 -0
  36. package/dist/components/ui-menu/ss-mode/ss-mode.component.d.ts +3 -0
  37. package/dist/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.d.ts +3 -0
  38. package/dist/components/ui-menu/tree-menu/tree-menu.component.d.ts +3 -0
  39. package/dist/components/ui-menu/ui-menu.component.d.ts +3 -0
  40. package/dist/components/ui-menu/view-options/view-options.component.d.ts +3 -0
  41. package/dist/components/ui-menu/vr-toggle/vr-toggle.component.d.ts +3 -0
  42. package/dist/components/ui-menu/zoom-controls/zoom-controls.component.d.ts +3 -0
  43. package/dist/esm2020/components/embed-menu/embed-menu.component.mjs +17 -0
  44. package/dist/esm2020/components/embed-menu/experiment-link/experiment-link.component.mjs +18 -0
  45. package/dist/esm2020/components/loader/loader.component.mjs +19 -0
  46. package/dist/esm2020/components/nav/nav.component.mjs +14 -0
  47. package/dist/esm2020/components/phoenix-menu/config/config-slider/config-slider.component.mjs +38 -0
  48. package/dist/{esm2015/components/phoenix-menu/index.js → esm2020/components/phoenix-menu/index.mjs} +1 -1
  49. package/dist/esm2020/components/phoenix-menu/pheonix-menu-item/phoenix-menu-item.component.mjs +32 -0
  50. package/dist/esm2020/components/phoenix-menu/phoenix-menu.component.mjs +14 -0
  51. package/dist/esm2020/components/phoenix-ui.module.mjs +201 -0
  52. package/dist/esm2020/components/ui-menu/animate-camera/animate-camera.component.mjs +76 -0
  53. package/dist/esm2020/components/ui-menu/animate-event/animate-event.component.mjs +25 -0
  54. package/dist/esm2020/components/ui-menu/ar-toggle/ar-toggle.component.mjs +47 -0
  55. package/dist/esm2020/components/ui-menu/auto-rotate/auto-rotate.component.mjs +21 -0
  56. package/dist/esm2020/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.mjs +81 -0
  57. package/dist/esm2020/components/ui-menu/collections-info/collections-info.component.mjs +32 -0
  58. package/dist/esm2020/components/ui-menu/dark-theme/dark-theme.component.mjs +24 -0
  59. package/dist/esm2020/components/ui-menu/event-selector/event-selector.component.mjs +24 -0
  60. package/dist/esm2020/components/ui-menu/experiment-info/experiment-info.component.mjs +26 -0
  61. package/dist/{esm2015/components/ui-menu/index.js → esm2020/components/ui-menu/index.mjs} +1 -1
  62. package/dist/esm2020/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.mjs +37 -0
  63. package/dist/esm2020/components/ui-menu/info-panel/info-panel.component.mjs +49 -0
  64. package/dist/esm2020/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.mjs +196 -0
  65. package/dist/esm2020/components/ui-menu/io-options/io-options.component.mjs +28 -0
  66. package/dist/esm2020/components/ui-menu/main-view-toggle/main-view-toggle.component.mjs +24 -0
  67. package/dist/esm2020/components/ui-menu/menu-toggle/menu-toggle.component.mjs +24 -0
  68. package/dist/esm2020/components/ui-menu/object-clipping/object-clipping.component.mjs +31 -0
  69. package/dist/esm2020/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.mjs +24 -0
  70. package/dist/esm2020/components/ui-menu/object-selection/object-selection.component.mjs +36 -0
  71. package/dist/esm2020/components/ui-menu/overlay/overlay.component.mjs +99 -0
  72. package/dist/esm2020/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.mjs +53 -0
  73. package/dist/esm2020/components/ui-menu/overlay-view/overlay-view.component.mjs +32 -0
  74. package/dist/esm2020/components/ui-menu/performance-toggle/performance-toggle.component.mjs +21 -0
  75. package/dist/esm2020/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.mjs +73 -0
  76. package/dist/esm2020/components/ui-menu/share-link/share-link.component.mjs +20 -0
  77. package/dist/esm2020/components/ui-menu/ss-mode/ss-mode.component.mjs +41 -0
  78. package/dist/esm2020/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.mjs +33 -0
  79. package/dist/esm2020/components/ui-menu/tree-menu/tree-menu.component.mjs +71 -0
  80. package/dist/esm2020/components/ui-menu/ui-menu.component.mjs +43 -0
  81. package/dist/esm2020/components/ui-menu/view-options/view-options.component.mjs +34 -0
  82. package/dist/esm2020/components/ui-menu/vr-toggle/vr-toggle.component.mjs +44 -0
  83. package/dist/esm2020/components/ui-menu/zoom-controls/zoom-controls.component.mjs +61 -0
  84. package/dist/esm2020/phoenix-ui-components.mjs +5 -0
  85. package/dist/esm2020/public_api.mjs +9 -0
  86. package/dist/esm2020/services/event-display.service.mjs +23 -0
  87. package/dist/esm2020/services/extras/attribute.pipe.mjs +33 -0
  88. package/dist/{esm2015/services/extras/event-data-import.js → esm2020/services/extras/event-data-import.mjs} +1 -1
  89. package/dist/esm2020/services/index.mjs +4 -0
  90. package/dist/fesm2015/phoenix-ui-components.mjs +1644 -0
  91. package/dist/fesm2015/phoenix-ui-components.mjs.map +1 -0
  92. package/dist/fesm2020/phoenix-ui-components.mjs +1644 -0
  93. package/dist/fesm2020/phoenix-ui-components.mjs.map +1 -0
  94. package/dist/phoenix-ui-components.d.ts +2 -6
  95. package/dist/{index.d.ts → public_api.d.ts} +2 -0
  96. package/dist/services/event-display.service.d.ts +3 -0
  97. package/dist/services/extras/attribute.pipe.d.ts +3 -0
  98. package/dist/services/index.d.ts +1 -0
  99. package/package.json +7 -6
  100. package/dist/bundles/phoenix-ui-components.umd.js +0 -2133
  101. package/dist/bundles/phoenix-ui-components.umd.js.map +0 -1
  102. package/dist/esm2015/components/embed-menu/embed-menu.component.js +0 -11
  103. package/dist/esm2015/components/embed-menu/experiment-link/experiment-link.component.js +0 -17
  104. package/dist/esm2015/components/loader/loader.component.js +0 -18
  105. package/dist/esm2015/components/nav/nav.component.js +0 -14
  106. package/dist/esm2015/components/phoenix-menu/config/config-slider/config-slider.component.js +0 -32
  107. package/dist/esm2015/components/phoenix-menu/pheonix-menu-item/phoenix-menu-item.component.js +0 -29
  108. package/dist/esm2015/components/phoenix-menu/phoenix-menu.component.js +0 -14
  109. package/dist/esm2015/components/phoenix-ui.module.js +0 -94
  110. package/dist/esm2015/components/ui-menu/animate-camera/animate-camera.component.js +0 -77
  111. package/dist/esm2015/components/ui-menu/animate-event/animate-event.component.js +0 -27
  112. package/dist/esm2015/components/ui-menu/ar-toggle/ar-toggle.component.js +0 -45
  113. package/dist/esm2015/components/ui-menu/auto-rotate/auto-rotate.component.js +0 -23
  114. package/dist/esm2015/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.js +0 -61
  115. package/dist/esm2015/components/ui-menu/collections-info/collections-info.component.js +0 -34
  116. package/dist/esm2015/components/ui-menu/dark-theme/dark-theme.component.js +0 -26
  117. package/dist/esm2015/components/ui-menu/event-selector/event-selector.component.js +0 -25
  118. package/dist/esm2015/components/ui-menu/experiment-info/experiment-info.component.js +0 -27
  119. package/dist/esm2015/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.js +0 -36
  120. package/dist/esm2015/components/ui-menu/info-panel/info-panel.component.js +0 -51
  121. package/dist/esm2015/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.js +0 -202
  122. package/dist/esm2015/components/ui-menu/io-options/io-options.component.js +0 -31
  123. package/dist/esm2015/components/ui-menu/main-view-toggle/main-view-toggle.component.js +0 -25
  124. package/dist/esm2015/components/ui-menu/menu-toggle/menu-toggle.component.js +0 -20
  125. package/dist/esm2015/components/ui-menu/object-clipping/object-clipping.component.js +0 -30
  126. package/dist/esm2015/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.js +0 -25
  127. package/dist/esm2015/components/ui-menu/object-selection/object-selection.component.js +0 -39
  128. package/dist/esm2015/components/ui-menu/overlay/overlay.component.js +0 -90
  129. package/dist/esm2015/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.js +0 -52
  130. package/dist/esm2015/components/ui-menu/overlay-view/overlay-view.component.js +0 -34
  131. package/dist/esm2015/components/ui-menu/performance-toggle/performance-toggle.component.js +0 -23
  132. package/dist/esm2015/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.js +0 -63
  133. package/dist/esm2015/components/ui-menu/share-link/share-link.component.js +0 -22
  134. package/dist/esm2015/components/ui-menu/ss-mode/ss-mode.component.js +0 -43
  135. package/dist/esm2015/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.js +0 -32
  136. package/dist/esm2015/components/ui-menu/tree-menu/tree-menu.component.js +0 -71
  137. package/dist/esm2015/components/ui-menu/ui-menu.component.js +0 -22
  138. package/dist/esm2015/components/ui-menu/view-options/view-options.component.js +0 -33
  139. package/dist/esm2015/components/ui-menu/vr-toggle/vr-toggle.component.js +0 -45
  140. package/dist/esm2015/components/ui-menu/zoom-controls/zoom-controls.component.js +0 -63
  141. package/dist/esm2015/index.js +0 -7
  142. package/dist/esm2015/phoenix-ui-components.js +0 -10
  143. package/dist/esm2015/services/event-display.service.js +0 -22
  144. package/dist/esm2015/services/extras/attribute.pipe.js +0 -29
  145. package/dist/esm2015/services/index.js +0 -3
  146. package/dist/fesm2015/phoenix-ui-components.js +0 -1606
  147. package/dist/fesm2015/phoenix-ui-components.js.map +0 -1
  148. package/dist/phoenix-ui-components.metadata.json +0 -1
@@ -1,202 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Component, Input } from '@angular/core';
3
- import { CMSLoader, JiveXMLLoader, ScriptLoader } from 'phoenix-event-display';
4
- import JSZip from 'jszip';
5
- import { EventDisplayService } from '../../../../services/event-display.service';
6
- import { MatDialogRef } from '@angular/material/dialog';
7
- import { EventDataFormat, ImportOption, } from '../../../../services/extras/event-data-import';
8
- export class IOOptionsDialogComponent {
9
- constructor(eventDisplay, dialogRef) {
10
- this.eventDisplay = eventDisplay;
11
- this.dialogRef = dialogRef;
12
- this.eventDataImportOptions = [EventDataFormat.JSON];
13
- this.supportedEventDataFormats = [
14
- new ImportOption(EventDataFormat.JSON, '.json', this.handleJSONEventDataInput.bind(this), 'application/json'),
15
- new ImportOption(EventDataFormat.JIVEXML, '.xml', this.handleJiveXMLDataInput.bind(this), 'text/xml'),
16
- new ImportOption(EventDataFormat.ZIP, '.zip', this.handleZipEventDataInput.bind(this)),
17
- new ImportOption(EventDataFormat.IG, '.ig', this.handleIgEventDataInput.bind(this)),
18
- ];
19
- }
20
- ngOnInit() {
21
- this.eventDataOptionsWithHandler = this.supportedEventDataFormats.filter((eventDataFormat) => this.eventDataImportOptions.includes(eventDataFormat.format));
22
- this.eventDataImportOptions.forEach((eventDataImportOption) => {
23
- if (eventDataImportOption instanceof ImportOption) {
24
- const importHandler = eventDataImportOption.handler.bind(this);
25
- eventDataImportOption.handler = (files) => {
26
- importHandler(files);
27
- this.onClose();
28
- };
29
- this.eventDataOptionsWithHandler.push(eventDataImportOption);
30
- }
31
- });
32
- }
33
- getSupportedEventDataFormats() {
34
- return this.eventDataImportOptions
35
- .map((format) => {
36
- if (format instanceof ImportOption) {
37
- return format.format;
38
- }
39
- return format;
40
- })
41
- .filter((format) => format !== 'ZIP')
42
- .join(', ');
43
- }
44
- onClose() {
45
- this.dialogRef.close();
46
- }
47
- handleJSONEventDataInput(files) {
48
- const callback = (content) => {
49
- const json = typeof content === 'string' ? JSON.parse(content) : content;
50
- this.eventDisplay.parsePhoenixEvents(json);
51
- };
52
- this.handleFileInput(files[0], 'json', callback);
53
- }
54
- handleJiveXMLDataInput(files) {
55
- const callback = (content) => {
56
- const jiveloader = new JiveXMLLoader();
57
- jiveloader.process(content);
58
- const eventData = jiveloader.getEventData();
59
- this.eventDisplay.buildEventDataFromJSON(eventData);
60
- };
61
- this.handleFileInput(files[0], 'xml', callback);
62
- }
63
- handleOBJInput(files) {
64
- const callback = (content, name) => {
65
- this.eventDisplay.parseOBJGeometry(content, name);
66
- };
67
- this.handleFileInput(files[0], 'obj', callback);
68
- }
69
- handleSceneInput(files) {
70
- const callback = (content) => {
71
- this.eventDisplay.parsePhoenixDisplay(content);
72
- };
73
- this.handleFileInput(files[0], 'phnx', callback);
74
- }
75
- handleGLTFInput(files) {
76
- const callback = (content, name) => {
77
- this.eventDisplay.parseGLTFGeometry(content, name);
78
- };
79
- this.handleFileInput(files[0], 'gltf', callback);
80
- }
81
- handlePhoenixInput(files) {
82
- const callback = (content) => {
83
- this.eventDisplay.parsePhoenixDisplay(content);
84
- };
85
- this.handleFileInput(files[0], 'phnx', callback);
86
- }
87
- handleROOTInput(files) {
88
- ScriptLoader.loadJSRootScripts().then((JSROOT) => {
89
- const objectName = prompt('Enter object name in ROOT file');
90
- JSROOT.openFile(files[0]).then((file) => {
91
- file.readObject(objectName).then((obj) => {
92
- this.eventDisplay.loadJSONGeometry(JSROOT.GEO.build(obj, { dflt_colors: true }).toJSON(), files[0].name.split('.')[0]);
93
- });
94
- });
95
- });
96
- this.onClose();
97
- }
98
- handleRootJSONInput(files) {
99
- ScriptLoader.loadJSRootScripts().then((JSROOT) => {
100
- const callback = (content, name) => {
101
- this.eventDisplay.loadJSONGeometry(JSROOT.GEO.build(JSROOT.parse(content), {
102
- dflt_colors: true,
103
- }).toJSON(), name);
104
- };
105
- this.handleFileInput(files[0], 'gz', callback);
106
- });
107
- }
108
- handleIgEventDataInput(files) {
109
- const cmsLoader = new CMSLoader();
110
- cmsLoader.readIgArchive(files[0], (allEvents) => {
111
- const allEventsData = cmsLoader.getAllEventsData(allEvents);
112
- this.eventDisplay.parsePhoenixEvents(allEventsData);
113
- this.onClose();
114
- });
115
- }
116
- handleZipEventDataInput(files) {
117
- if (this.isFileOfExtension(files[0], 'zip')) {
118
- this.handleZipInput(files[0], (allFilesWithData) => {
119
- const allEventsObject = {};
120
- // JSON event data
121
- Object.keys(allFilesWithData)
122
- .filter((fileName) => fileName.endsWith('.json'))
123
- .forEach((fileName) => {
124
- Object.assign(allEventsObject, JSON.parse(allFilesWithData[fileName]));
125
- });
126
- // JiveXML event data
127
- const jiveloader = new JiveXMLLoader();
128
- Object.keys(allFilesWithData)
129
- .filter((fileName) => fileName.endsWith('.xml'))
130
- .forEach((fileName) => {
131
- jiveloader.process(allFilesWithData[fileName]);
132
- const eventData = jiveloader.getEventData();
133
- Object.assign(allEventsObject, { [fileName]: eventData });
134
- });
135
- this.eventDisplay.parsePhoenixEvents(allEventsObject);
136
- this.onClose();
137
- });
138
- }
139
- else {
140
- console.error('Error: Invalid file format!');
141
- this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');
142
- }
143
- }
144
- handleZipInput(file, callback) {
145
- return __awaiter(this, void 0, void 0, function* () {
146
- const allFilesWithData = {};
147
- // Using a try catch block to catch any errors in Promises
148
- try {
149
- const zipArchive = new JSZip();
150
- yield zipArchive.loadAsync(file);
151
- const allFiles = Object.keys(zipArchive.files);
152
- for (const singleFile of allFiles) {
153
- const fileData = yield zipArchive.file(singleFile).async('string');
154
- allFilesWithData[singleFile] = fileData;
155
- }
156
- callback(allFilesWithData);
157
- }
158
- catch (error) {
159
- console.error('Error while reading zip', error);
160
- this.eventDisplay.getInfoLogger().add('Could not read zip file', 'Error');
161
- }
162
- });
163
- }
164
- handleFileInput(file, extension, callback) {
165
- const reader = new FileReader();
166
- if (this.isFileOfExtension(file, extension)) {
167
- reader.onload = () => {
168
- callback(reader.result.toString(), file.name.split('.')[0]);
169
- };
170
- reader.readAsText(file);
171
- }
172
- else {
173
- console.error('Error: Invalid file format!');
174
- this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');
175
- }
176
- this.onClose();
177
- }
178
- isFileOfExtension(file, extension) {
179
- return file.name.split('.').pop() === extension;
180
- }
181
- saveScene() {
182
- this.eventDisplay.exportPhoenixDisplay();
183
- }
184
- exportOBJ() {
185
- this.eventDisplay.exportToOBJ();
186
- }
187
- }
188
- IOOptionsDialogComponent.decorators = [
189
- { type: Component, args: [{
190
- selector: 'app-io-options-dialog',
191
- template: "<div class=\"dialog\">\n <h1 mat-dialog-title>Import and export options</h1>\n <div mat-dialog-content class=\"dialog-content\">\n <div *ngIf=\"eventDataImportOptions.length > 0\">\n <h5>Import</h5>\n\n <h6 class=\"text-center\">Event data</h6>\n\n <div class=\"row centered\">\n <ng-container\n *ngFor=\"let eventDataImportOption of eventDataOptionsWithHandler\"\n >\n <input\n type=\"file\"\n [id]=\"'eventData' + eventDataImportOption.format + 'File'\"\n class=\"inputfile\"\n [accept]=\"eventDataImportOption.accept\"\n (change)=\"eventDataImportOption.handler($event.target.files)\"\n />\n <label\n [for]=\"'eventData' + eventDataImportOption.format + 'File'\"\n class=\"imageLabel\"\n >\n <img src=\"assets/icons/eventData.svg\" alt=\"Event data icon\" />\n Load {{ eventDataImportOption.fileType }}\n </label>\n </ng-container>\n </div>\n\n <p class=\"text-center\">\n Supported formats: {{ getSupportedEventDataFormats() }}\n </p>\n </div>\n\n <h6 class=\"text-center\">Geometries</h6>\n\n <div class=\"row centered\">\n <input\n type=\"file\"\n id=\"objFile\"\n class=\"inputfile\"\n accept=\".obj\"\n name=\"image\"\n (change)=\"handleOBJInput($event.target.files)\"\n />\n <label for=\"objFile\" class=\"imageLabel\">\n <img src=\"assets/icons/obj.svg\" alt=\"\" /> Load .obj\n </label>\n\n <input\n type=\"file\"\n id=\"gltfFile\"\n class=\"inputfile\"\n accept=\".gltf\"\n name=\"image\"\n (change)=\"handleGLTFInput($event.target.files)\"\n />\n <label for=\"gltfFile\" class=\"imageLabel\">\n <img src=\"assets/icons/gltf.svg\" alt=\"\" /> Load .gltf\n </label>\n\n <input\n type=\"file\"\n id=\"rootFile\"\n class=\"inputfile\"\n accept=\".root\"\n (change)=\"handleROOTInput($event.target.files)\"\n />\n <label for=\"rootFile\" class=\"imageLabel\">\n <img src=\"assets/icons/file-import.svg\" alt=\"\" /> Load .root\n </label>\n\n <input\n type=\"file\"\n id=\"rootJSONFile\"\n class=\"inputfile\"\n accept=\".json.gz\"\n (change)=\"handleRootJSONInput($event.target.files)\"\n />\n <label for=\"rootJSONFile\" class=\"imageLabel\">\n <img src=\"assets/icons/file-import.svg\" alt=\"\" /> Load .json.gz\n </label>\n </div>\n\n <p class=\"text-center\">Supported formats: OBJ, GLTF, ROOT, ROOT JSON</p>\n\n <h5>Import / export scene</h5>\n\n <div class=\"row centered\">\n <label\n class=\"imageLabel loadExport\"\n id=\"exportScene\"\n (click)=\"saveScene()\"\n >\n <img src=\"assets/icons/save.svg\" alt=\"\" /> Save scene\n </label>\n\n <input\n type=\"file\"\n id=\"loadScene\"\n class=\"inputfile\"\n accept=\".phnx\"\n name=\"image\"\n (change)=\"handlePhoenixInput($event.target.files)\"\n />\n <label for=\"loadScene\" class=\"imageLabel loadExport\" id=\"importScene\">\n <img src=\"assets/icons/upload.svg\" alt=\"\" /> Load scene\n </label>\n\n <label\n class=\"imageLabel exportLabel\"\n id=\"exportOBJ\"\n (click)=\"exportOBJ()\"\n >\n <img src=\"assets/icons/obj.svg\" alt=\"\" /> Save OBJ\n </label>\n </div>\n </div>\n <div mat-dialog-actions>\n <button mat-button (click)=\"onClose()\" cdkFocusInitial>Close</button>\n </div>\n</div>\n",
192
- styles: [".row{justify-content:center;margin:1rem 0}.inputfile{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.imageLabel{font-size:1em;font-weight:700;color:#fff;background-color:#6eaece;display:flex;flex-direction:column;justify-items:center;justify-content:center;cursor:pointer;padding:1em .5em;border-radius:10px;width:8rem;text-align:center;margin:0 .4rem}.imageLabel.loadExport{padding:.8em .2em;width:7rem}.imageLabel.loadExport img{max-height:1.2em}.imageLabel img{max-height:2em}.imageLabel:hover{background-color:#118ab2}.imageLabel.exportLabel{background-color:#cb7133}.imageLabel.exportLabel:hover{background-color:#ad5b2d}#exportScene{background-color:#5bd99e}#exportScene:hover{background-color:#05c292}#importScene{background-color:#ecc25e}#importScene:hover{background-color:#d6b44d}.infoPanelWrapper{position:absolute;top:6rem;left:2rem}"]
193
- },] }
194
- ];
195
- IOOptionsDialogComponent.ctorParameters = () => [
196
- { type: EventDisplayService },
197
- { type: MatDialogRef }
198
- ];
199
- IOOptionsDialogComponent.propDecorators = {
200
- eventDataImportOptions: [{ type: Input }]
201
- };
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdWktbWVudS9pby1vcHRpb25zL2lvLW9wdGlvbnMtZGlhbG9nL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFVLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0UsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsZUFBZSxFQUVmLFlBQVksR0FDYixNQUFNLCtDQUErQyxDQUFDO0FBT3ZELE1BQU0sT0FBTyx3QkFBd0I7SUErQm5DLFlBQ1UsWUFBaUMsRUFDbEMsU0FBaUQ7UUFEaEQsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2xDLGNBQVMsR0FBVCxTQUFTLENBQXdDO1FBL0IxRCwyQkFBc0IsR0FBNEIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFJakUsOEJBQXlCLEdBQUc7WUFDbEMsSUFBSSxZQUFZLENBQ2QsZUFBZSxDQUFDLElBQUksRUFDcEIsT0FBTyxFQUNQLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3hDLGtCQUFrQixDQUNuQjtZQUNELElBQUksWUFBWSxDQUNkLGVBQWUsQ0FBQyxPQUFPLEVBQ3ZCLE1BQU0sRUFDTixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUN0QyxVQUFVLENBQ1g7WUFDRCxJQUFJ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QUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQVUsRUFBRSxTQUFpQjtRQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLFNBQVMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQzs7O1lBdFBGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxpcUhBQWlEOzthQUVsRDs7O1lBWlEsbUJBQW1CO1lBQ25CLFlBQVk7OztxQ0FhbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9uSW5pdCwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ01TTG9hZGVyLCBKaXZlWE1MTG9hZGVyLCBTY3JpcHRMb2FkZXIgfSBmcm9tICdwaG9lbml4LWV2ZW50LWRpc3BsYXknO1xuaW1wb3J0IEpTWmlwIGZyb20gJ2pzemlwJztcbmltcG9ydCB7IEV2ZW50RGlzcGxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9ldmVudC1kaXNwbGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7XG4gIEV2ZW50RGF0YUZvcm1hdCxcbiAgRXZlbnREYXRhSW1wb3J0T3B0aW9uLFxuICBJbXBvcnRPcHRpb24sXG59IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2V4dHJhcy9ldmVudC1kYXRhLWltcG9ydCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pby1vcHRpb25zLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pby1vcHRpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIElPT3B0aW9uc0RpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIGV2ZW50RGF0YUltcG9ydE9wdGlvbnM6IEV2ZW50RGF0YUltcG9ydE9wdGlvbltdID0gW0V2ZW50RGF0YUZvcm1hdC5KU09OXTtcblxuICBldmVudERhdGFPcHRpb25zV2l0aEhhbmRsZXI6IEltcG9ydE9wdGlvbltdO1xuXG4gIHByaXZhdGUgc3VwcG9ydGVkRXZlbnREYXRhRm9ybWF0cyA9IFtcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LkpTT04sXG4gICAgICAnLmpzb24nLFxuICAgICAgdGhpcy5oYW5kbGVKU09ORXZlbnREYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5KSVZFWE1MLFxuICAgICAgJy54bWwnLFxuICAgICAgdGhpcy5oYW5kbGVKaXZlWE1MRGF0YUlucHV0LmJpbmQodGhpcyksXG4gICAgICAndGV4dC94bWwnXG4gICAgKSxcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LlpJUCxcbiAgICAgICcuemlwJyxcbiAgICAgIHRoaXMuaGFuZGxlWmlwRXZlbnREYXRhSW5wdXQuYmluZCh0aGlzKVxuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5JRyxcbiAgICAgICcuaWcnLFxuICAgICAgdGhpcy5oYW5kbGVJZ0V2ZW50RGF0YUlucHV0LmJpbmQodGhpcylcbiAgICApLFxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZXZlbnREaXNwbGF5OiBFdmVudERpc3BsYXlTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxJT09wdGlvbnNEaWFsb2dDb21wb25lbnQ+XG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmV2ZW50RGF0YU9wdGlvbnNXaXRoSGFuZGxlciA9IHRoaXMuc3VwcG9ydGVkRXZlbnREYXRhRm9ybWF0cy5maWx0ZXIoXG4gICAgICAoZXZlbnREYXRhRm9ybWF0KSA9PlxuICAgICAgICB0aGlzLmV2ZW50RGF0YUltcG9ydE9wdGlvbnMuaW5jbHVkZXMoXG4gICAgICAgICAgZXZlbnREYXRhRm9ybWF0LmZvcm1hdCBhcyBFdmVudERhdGFGb3JtYXRcbiAgICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmV2ZW50RGF0YUltcG9ydE9wdGlvbnMuZm9yRWFjaCgoZXZlbnREYXRhSW1wb3J0T3B0aW9uKSA9PiB7XG4gICAgICBpZiAoZXZlbnREYXRhSW1wb3J0T3B0aW9uIGluc3RhbmNlb2YgSW1wb3J0T3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IGltcG9ydEhhbmRsZXIgPSBldmVudERhdGFJbXBvcnRPcHRpb24uaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICBldmVudERhdGFJbXBvcnRPcHRpb24uaGFuZGxlciA9IChmaWxlczogRmlsZUxpc3QpID0+IHtcbiAgICAgICAgICBpbXBvcnRIYW5kbGVyKGZpbGVzKTtcbiAgICAgICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ldmVudERhdGFPcHRpb25zV2l0aEhhbmRsZXIucHVzaChldmVudERhdGFJbXBvcnRPcHRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3VwcG9ydGVkRXZlbnREYXRhRm9ybWF0cygpIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudERhdGFJbXBvcnRPcHRpb25zXG4gICAgICAubWFwKChmb3JtYXQpID0+IHtcbiAgICAgICAgaWYgKGZvcm1hdCBpbnN0YW5jZW9mIEltcG9ydE9wdGlvbikge1xuICAgICAgICAgIHJldHVybiBmb3JtYXQuZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChmb3JtYXQpID0+IGZvcm1hdCAhPT0gJ1pJUCcpXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUpTT05FdmVudERhdGFJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGpzb24gPSB0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGNvbnRlbnQpIDogY29udGVudDtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peEV2ZW50cyhqc29uKTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAnanNvbicsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZUppdmVYTUxEYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBqaXZlbG9hZGVyID0gbmV3IEppdmVYTUxMb2FkZXIoKTtcbiAgICAgIGppdmVsb2FkZXIucHJvY2Vzcyhjb250ZW50KTtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IGppdmVsb2FkZXIuZ2V0RXZlbnREYXRhKCk7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5idWlsZEV2ZW50RGF0YUZyb21KU09OKGV2ZW50RGF0YSk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ3htbCcsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZU9CSklucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZU9CSkdlb21ldHJ5KGNvbnRlbnQsIG5hbWUpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICdvYmonLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVTY2VuZUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VQaG9lbml4RGlzcGxheShjb250ZW50KTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAncGhueCcsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZUdMVEZJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnksIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VHTFRGR2VvbWV0cnkoY29udGVudCwgbmFtZSk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ2dsdGYnLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVQaG9lbml4SW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhEaXNwbGF5KGNvbnRlbnQpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICdwaG54JywgY2FsbGJhY2spO1xuICB9XG5cbiAgaGFuZGxlUk9PVElucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIFNjcmlwdExvYWRlci5sb2FkSlNSb290U2NyaXB0cygpLnRoZW4oKEpTUk9PVDogYW55KSA9PiB7XG4gICAgICBjb25zdCBvYmplY3ROYW1lID0gcHJvbXB0KCdFbnRlciBvYmplY3QgbmFtZSBpbiBST09UIGZpbGUnKTtcbiAgICAgIEpTUk9PVC5vcGVuRmlsZShmaWxlc1swXSkudGhlbigoZmlsZTogYW55KSA9PiB7XG4gICAgICAgIGZpbGUucmVhZE9iamVjdChvYmplY3ROYW1lKS50aGVuKChvYmo6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXZlbnREaXNwbGF5LmxvYWRKU09OR2VvbWV0cnkoXG4gICAgICAgICAgICBKU1JPT1QuR0VPLmJ1aWxkKG9iaiwgeyBkZmx0X2NvbG9yczogdHJ1ZSB9KS50b0pTT04oKSxcbiAgICAgICAgICAgIGZpbGVzWzBdLm5hbWUuc3BsaXQoJy4nKVswXVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5vbkNsb3NlKCk7XG4gIH1cblxuICBoYW5kbGVSb290SlNPTklucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIFNjcmlwdExvYWRlci5sb2FkSlNSb290U2NyaXB0cygpLnRoZW4oKEpTUk9PVDogYW55KSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnksIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmV2ZW50RGlzcGxheS5sb2FkSlNPTkdlb21ldHJ5KFxuICAgICAgICAgIEpTUk9PVC5HRU8uYnVpbGQoSlNST09ULnBhcnNlKGNvbnRlbnQpLCB7XG4gICAgICAgICAgICBkZmx0X2NvbG9yczogdHJ1ZSxcbiAgICAgICAgICB9KS50b0pTT04oKSxcbiAgICAgICAgICBuYW1lXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICdneicsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUlnRXZlbnREYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY21zTG9hZGVyID0gbmV3IENNU0xvYWRlcigpO1xuICAgIGNtc0xvYWRlci5yZWFkSWdBcmNoaXZlKGZpbGVzWzBdLCAoYWxsRXZlbnRzOiBhbnlbXSkgPT4ge1xuICAgICAgY29uc3QgYWxsRXZlbnRzRGF0YSA9IGNtc0xvYWRlci5nZXRBbGxFdmVudHNEYXRhKGFsbEV2ZW50cyk7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoYWxsRXZlbnRzRGF0YSk7XG4gICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVppcEV2ZW50RGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGlmICh0aGlzLmlzRmlsZU9mRXh0ZW5zaW9uKGZpbGVzWzBdLCAnemlwJykpIHtcbiAgICAgIHRoaXMuaGFuZGxlWmlwSW5wdXQoZmlsZXNbMF0sIChhbGxGaWxlc1dpdGhEYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsbEV2ZW50c09iamVjdCA9IHt9O1xuXG4gICAgICAgIC8vIEpTT04gZXZlbnQgZGF0YVxuICAgICAgICBPYmplY3Qua2V5cyhhbGxGaWxlc1dpdGhEYXRhKVxuICAgICAgICAgIC5maWx0ZXIoKGZpbGVOYW1lKSA9PiBmaWxlTmFtZS5lbmRzV2l0aCgnLmpzb24nKSlcbiAgICAgICAgICAuZm9yRWFjaCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgIGFsbEV2ZW50c09iamVjdCxcbiAgICAgICAgICAgICAgSlNPTi5wYXJzZShhbGxGaWxlc1dpdGhEYXRhW2ZpbGVOYW1lXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSml2ZVhNTCBldmVudCBkYXRhXG4gICAgICAgIGNvbnN0IGppdmVsb2FkZXIgPSBuZXcgSml2ZVhNTExvYWRlcigpO1xuICAgICAgICBPYmplY3Qua2V5cyhhbGxGaWxlc1dpdGhEYXRhKVxuICAgICAgICAgIC5maWx0ZXIoKGZpbGVOYW1lKSA9PiBmaWxlTmFtZS5lbmRzV2l0aCgnLnhtbCcpKVxuICAgICAgICAgIC5mb3JFYWNoKChmaWxlTmFtZSkgPT4ge1xuICAgICAgICAgICAgaml2ZWxvYWRlci5wcm9jZXNzKGFsbEZpbGVzV2l0aERhdGFbZmlsZU5hbWVdKTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IGppdmVsb2FkZXIuZ2V0RXZlbnREYXRhKCk7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGFsbEV2ZW50c09iamVjdCwgeyBbZmlsZU5hbWVdOiBldmVudERhdGEgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VQaG9lbml4RXZlbnRzKGFsbEV2ZW50c09iamVjdCk7XG5cbiAgICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6IEludmFsaWQgZmlsZSBmb3JtYXQhJyk7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRJbmZvTG9nZ2VyKCkuYWRkKCdJbnZhbGlkIGZpbGUgZm9ybWF0IScsICdFcnJvcicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVppcElucHV0KFxuICAgIGZpbGU6IEZpbGUsXG4gICAgY2FsbGJhY2s6IChhbGxGaWxlc1dpdGhEYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSA9PiB2b2lkXG4gICkge1xuICAgIGNvbnN0IGFsbEZpbGVzV2l0aERhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAvLyBVc2luZyBhIHRyeSBjYXRjaCBibG9jayB0byBjYXRjaCBhbnkgZXJyb3JzIGluIFByb21pc2VzXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHppcEFyY2hpdmUgPSBuZXcgSlNaaXAoKTtcbiAgICAgIGF3YWl0IHppcEFyY2hpdmUubG9hZEFzeW5jKGZpbGUpO1xuICAgICAgY29uc3QgYWxsRmlsZXMgPSBPYmplY3Qua2V5cyh6aXBBcmNoaXZlLmZpbGVzKTtcbiAgICAgIGZvciAoY29uc3Qgc2luZ2xlRmlsZSBvZiBhbGxGaWxlcykge1xuICAgICAgICBjb25zdCBmaWxlRGF0YSA9IGF3YWl0IHppcEFyY2hpdmUuZmlsZShzaW5nbGVGaWxlKS5hc3luYygnc3RyaW5nJyk7XG4gICAgICAgIGFsbEZpbGVzV2l0aERhdGFbc2luZ2xlRmlsZV0gPSBmaWxlRGF0YTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKGFsbEZpbGVzV2l0aERhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSByZWFkaW5nIHppcCcsIGVycm9yKTtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LmdldEluZm9Mb2dnZXIoKS5hZGQoJ0NvdWxkIG5vdCByZWFkIHppcCBmaWxlJywgJ0Vycm9yJyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRmlsZUlucHV0KFxuICAgIGZpbGU6IEZpbGUsXG4gICAgZXh0ZW5zaW9uOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IChyZXN1bHQ6IHN0cmluZywgZmlsZU5hbWU/OiBzdHJpbmcpID0+IHZvaWRcbiAgKSB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICBpZiAodGhpcy5pc0ZpbGVPZkV4dGVuc2lvbihmaWxlLCBleHRlbnNpb24pKSB7XG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBjYWxsYmFjayhyZWFkZXIucmVzdWx0LnRvU3RyaW5nKCksIGZpbGUubmFtZS5zcGxpdCgnLicpWzBdKTtcbiAgICAgIH07XG4gICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6IEludmFsaWQgZmlsZSBmb3JtYXQhJyk7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRJbmZvTG9nZ2VyKCkuYWRkKCdJbnZhbGlkIGZpbGUgZm9ybWF0IScsICdFcnJvcicpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGaWxlT2ZFeHRlbnNpb24oZmlsZTogRmlsZSwgZXh0ZW5zaW9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCkgPT09IGV4dGVuc2lvbjtcbiAgfVxuXG4gIHNhdmVTY2VuZSgpIHtcbiAgICB0aGlzLmV2ZW50RGlzcGxheS5leHBvcnRQaG9lbml4RGlzcGxheSgpO1xuICB9XG5cbiAgZXhwb3J0T0JKKCkge1xuICAgIHRoaXMuZXZlbnREaXNwbGF5LmV4cG9ydFRvT0JKKCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,31 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { MatDialog } from '@angular/material/dialog';
3
- import { EventDataFormat, } from '../../../services/extras/event-data-import';
4
- import { IOOptionsDialogComponent } from './io-options-dialog/io-options-dialog.component';
5
- export class IoOptionsComponent {
6
- constructor(dialog) {
7
- this.dialog = dialog;
8
- this.eventDataImportOptions = Object.values(EventDataFormat);
9
- }
10
- openIODialog() {
11
- const dialogRef = this.dialog.open(IOOptionsDialogComponent, {
12
- panelClass: 'dialog',
13
- });
14
- dialogRef.componentInstance.eventDataImportOptions =
15
- this.eventDataImportOptions;
16
- }
17
- }
18
- IoOptionsComponent.decorators = [
19
- { type: Component, args: [{
20
- selector: 'app-io-options',
21
- 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",
22
- styles: [""]
23
- },] }
24
- ];
25
- IoOptionsComponent.ctorParameters = () => [
26
- { type: MatDialog }
27
- ];
28
- IoOptionsComponent.propDecorators = {
29
- eventDataImportOptions: [{ type: Input }]
30
- };
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tb3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS1tZW51L2lvLW9wdGlvbnMvaW8tb3B0aW9ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFDTCxlQUFlLEdBRWhCLE1BQU0sNENBQTRDLENBQUM7QUFDcEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFPM0YsTUFBTSxPQUFPLGtCQUFrQjtJQUs3QixZQUFvQixNQUFpQjtRQUFqQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBSHJDLDJCQUFzQixHQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRU8sQ0FBQztJQUV6QyxZQUFZO1FBQ1YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDM0QsVUFBVSxFQUFFLFFBQVE7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQjtZQUNoRCxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDaEMsQ0FBQzs7O1lBbEJGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixxS0FBMEM7O2FBRTNDOzs7WUFYUSxTQUFTOzs7cUNBYWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge1xuICBFdmVudERhdGFGb3JtYXQsXG4gIEV2ZW50RGF0YUltcG9ydE9wdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXh0cmFzL2V2ZW50LWRhdGEtaW1wb3J0JztcbmltcG9ydCB7IElPT3B0aW9uc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vaW8tb3B0aW9ucy1kaWFsb2cvaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWlvLW9wdGlvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW8tb3B0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lvLW9wdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgSW9PcHRpb25zQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgZXZlbnREYXRhSW1wb3J0T3B0aW9uczogRXZlbnREYXRhSW1wb3J0T3B0aW9uW10gPVxuICAgIE9iamVjdC52YWx1ZXMoRXZlbnREYXRhRm9ybWF0KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nKSB7fVxuXG4gIG9wZW5JT0RpYWxvZygpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKElPT3B0aW9uc0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgcGFuZWxDbGFzczogJ2RpYWxvZycsXG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmV2ZW50RGF0YUltcG9ydE9wdGlvbnMgPVxuICAgICAgdGhpcy5ldmVudERhdGFJbXBvcnRPcHRpb25zO1xuICB9XG59XG4iXX0=
@@ -1,25 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { EventDisplayService } from '../../../services/event-display.service';
3
- export class MainViewToggleComponent {
4
- constructor(eventDisplay) {
5
- this.eventDisplay = eventDisplay;
6
- this.orthographicView = false;
7
- }
8
- switchMainView() {
9
- this.orthographicView = !this.orthographicView;
10
- this.eventDisplay
11
- .getUIManager()
12
- .toggleOrthographicView(this.orthographicView);
13
- }
14
- }
15
- MainViewToggleComponent.decorators = [
16
- { type: Component, args: [{
17
- selector: 'app-main-view-toggle',
18
- template: "<app-menu-toggle\n id=\"switch-view\"\n [icon]=\"orthographicView ? 'perspective' : 'orthographic'\"\n [matTooltip]=\"\n 'Switch to ' + (orthographicView ? 'perspective' : 'orthographic') + ' view'\n \"\n (click)=\"switchMainView()\"\n>\n</app-menu-toggle>\n",
19
- styles: [""]
20
- },] }
21
- ];
22
- MainViewToggleComponent.ctorParameters = () => [
23
- { type: EventDisplayService }
24
- ];
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi12aWV3LXRvZ2dsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS1tZW51L21haW4tdmlldy10b2dnbGUvbWFpbi12aWV3LXRvZ2dsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQU85RSxNQUFNLE9BQU8sdUJBQXVCO0lBR2xDLFlBQW9CLFlBQWlDO1FBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUZyRCxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7SUFFc0IsQ0FBQztJQUV6RCxjQUFjO1FBQ1osSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZO2FBQ2QsWUFBWSxFQUFFO2FBQ2Qsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkQsQ0FBQzs7O1lBZkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLHNSQUFnRDs7YUFFakQ7OztZQU5RLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnREaXNwbGF5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2V2ZW50LWRpc3BsYXkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tYWluLXZpZXctdG9nZ2xlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21haW4tdmlldy10b2dnbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYWluLXZpZXctdG9nZ2xlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE1haW5WaWV3VG9nZ2xlQ29tcG9uZW50IHtcbiAgb3J0aG9ncmFwaGljVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXZlbnREaXNwbGF5OiBFdmVudERpc3BsYXlTZXJ2aWNlKSB7fVxuXG4gIHN3aXRjaE1haW5WaWV3KCkge1xuICAgIHRoaXMub3J0aG9ncmFwaGljVmlldyA9ICF0aGlzLm9ydGhvZ3JhcGhpY1ZpZXc7XG4gICAgdGhpcy5ldmVudERpc3BsYXlcbiAgICAgIC5nZXRVSU1hbmFnZXIoKVxuICAgICAgLnRvZ2dsZU9ydGhvZ3JhcGhpY1ZpZXcodGhpcy5vcnRob2dyYXBoaWNWaWV3KTtcbiAgfVxufVxuIl19
@@ -1,20 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- export class MenuToggleComponent {
3
- constructor() {
4
- this.disabled = false;
5
- }
6
- }
7
- MenuToggleComponent.decorators = [
8
- { type: Component, args: [{
9
- selector: 'app-menu-toggle',
10
- template: "<div\n class=\"buttonWrapper\"\n [ngClass]=\"{ disabled: disabled }\"\n [matTooltip]=\"tooltip\"\n matTooltipPosition=\"above\"\n matTooltipTouchGestures=\"off\"\n>\n <svg class=\"optionsButton\" [ngClass]=\"{ activeIcon: active }\">\n <use attr.href=\"assets/icons/{{ icon }}.svg#{{ icon }}\"></use>\n </svg>\n</div>\n",
11
- styles: [":host{display:flex;margin:0 .6rem}:host .optionsButton{outline:none}:host .buttonWrapper{display:flex;height:2.5rem;width:2.5rem;min-height:2.5rem;min-width:2.5rem;padding:.65rem;cursor:pointer;align-self:center;transition:all .4s}:host .buttonWrapper:hover{background-color:var(--phoenix-options-icon-bg);border-radius:40%;transition:all .4s}:host .buttonWrapper.disabled{cursor:not-allowed;opacity:.4}"]
12
- },] }
13
- ];
14
- MenuToggleComponent.propDecorators = {
15
- icon: [{ type: Input }],
16
- active: [{ type: Input }],
17
- tooltip: [{ type: Input }],
18
- disabled: [{ type: Input }]
19
- };
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS10b2dnbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdWktbWVudS9tZW51LXRvZ2dsZS9tZW51LXRvZ2dsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPakQsTUFBTSxPQUFPLG1CQUFtQjtJQUxoQztRQVNXLGFBQVEsR0FBWSxLQUFLLENBQUM7SUFDckMsQ0FBQzs7O1lBVkEsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLHFWQUEyQzs7YUFFNUM7OzttQkFFRSxLQUFLO3FCQUNMLEtBQUs7c0JBQ0wsS0FBSzt1QkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWVudS10b2dnbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS10b2dnbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZW51LXRvZ2dsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51VG9nZ2xlQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaWNvbjogc3RyaW5nO1xuICBASW5wdXQoKSBhY3RpdmU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRvb2x0aXA6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbn1cbiJdfQ==
@@ -1,30 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { EventDisplayService } from '../../../services/event-display.service';
3
- export class ObjectClippingComponent {
4
- constructor(eventDisplay) {
5
- this.eventDisplay = eventDisplay;
6
- const stateManager = this.eventDisplay.getStateManager();
7
- stateManager.clippingEnabled.onUpdate((clippingValue) => (this.clippingEnabled = clippingValue));
8
- stateManager.clippingAngle.onUpdate((value) => (this.clippingAngle = value));
9
- }
10
- changeClippingAngle(change) {
11
- const angle = change.value;
12
- this.eventDisplay.getUIManager().rotateClipping(angle);
13
- }
14
- toggleClipping(change) {
15
- const value = change.checked;
16
- this.eventDisplay.getUIManager().setClipping(value);
17
- this.clippingEnabled = value;
18
- }
19
- }
20
- ObjectClippingComponent.decorators = [
21
- { type: Component, args: [{
22
- selector: 'app-object-clipping',
23
- template: "<mat-menu #menu>\n <mat-checkbox\n class=\"mat-menu-item\"\n [checked]=\"clippingEnabled\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleClipping($event)\"\n >Clipping\n </mat-checkbox>\n <mat-slider\n min=\"0\"\n max=\"180\"\n step=\"1\"\n thumbLabel\n [value]=\"clippingAngle\"\n (click)=\"$event.stopPropagation()\"\n (input)=\"changeClippingAngle($event)\"\n >\n </mat-slider>\n</mat-menu>\n\n<app-menu-toggle\n [matMenuTriggerFor]=\"menu\"\n tooltip=\"Geometry clipping\"\n icon=\"clipping\"\n [active]=\"clippingEnabled\"\n>\n</app-menu-toggle>\n",
24
- styles: ["mat-checkbox{display:block}mat-slider{margin-left:1rem;margin-right:1rem;margin-top:.5rem}"]
25
- },] }
26
- ];
27
- ObjectClippingComponent.ctorParameters = () => [
28
- { type: EventDisplayService }
29
- ];
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWNsaXBwaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3VpLW1lbnUvb2JqZWN0LWNsaXBwaW5nL29iamVjdC1jbGlwcGluZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQU85RSxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDLFlBQW9CLFlBQWlDO1FBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pELFlBQVksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUNuQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQyxDQUMxRCxDQUFDO1FBQ0YsWUFBWSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQ2pDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQ3hDLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBdUI7UUFDekMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQXlCO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQzs7O1lBNUJGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQiw2bUJBQStDOzthQUVoRDs7O1lBTlEsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRTbGlkZXJDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZXInO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBFdmVudERpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXZlbnQtZGlzcGxheS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW9iamVjdC1jbGlwcGluZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9vYmplY3QtY2xpcHBpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vYmplY3QtY2xpcHBpbmcuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgT2JqZWN0Q2xpcHBpbmdDb21wb25lbnQge1xuICBjbGlwcGluZ0VuYWJsZWQ6IGJvb2xlYW47XG4gIGNsaXBwaW5nQW5nbGU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV2ZW50RGlzcGxheTogRXZlbnREaXNwbGF5U2VydmljZSkge1xuICAgIGNvbnN0IHN0YXRlTWFuYWdlciA9IHRoaXMuZXZlbnREaXNwbGF5LmdldFN0YXRlTWFuYWdlcigpO1xuICAgIHN0YXRlTWFuYWdlci5jbGlwcGluZ0VuYWJsZWQub25VcGRhdGUoXG4gICAgICAoY2xpcHBpbmdWYWx1ZSkgPT4gKHRoaXMuY2xpcHBpbmdFbmFibGVkID0gY2xpcHBpbmdWYWx1ZSlcbiAgICApO1xuICAgIHN0YXRlTWFuYWdlci5jbGlwcGluZ0FuZ2xlLm9uVXBkYXRlKFxuICAgICAgKHZhbHVlKSA9PiAodGhpcy5jbGlwcGluZ0FuZ2xlID0gdmFsdWUpXG4gICAgKTtcbiAgfVxuXG4gIGNoYW5nZUNsaXBwaW5nQW5nbGUoY2hhbmdlOiBNYXRTbGlkZXJDaGFuZ2UpIHtcbiAgICBjb25zdCBhbmdsZSA9IGNoYW5nZS52YWx1ZTtcbiAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRVSU1hbmFnZXIoKS5yb3RhdGVDbGlwcGluZyhhbmdsZSk7XG4gIH1cblxuICB0b2dnbGVDbGlwcGluZyhjaGFuZ2U6IE1hdENoZWNrYm94Q2hhbmdlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBjaGFuZ2UuY2hlY2tlZDtcbiAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRVSU1hbmFnZXIoKS5zZXRDbGlwcGluZyh2YWx1ZSk7XG4gICAgdGhpcy5jbGlwcGluZ0VuYWJsZWQgPSB2YWx1ZTtcbiAgfVxufVxuIl19
@@ -1,25 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { EventDisplayService } from '../../../../services/event-display.service';
3
- export class ObjectSelectionOverlayComponent {
4
- constructor(eventDisplay) {
5
- this.eventDisplay = eventDisplay;
6
- this.selectedObject = { name: 'Object', attributes: [] };
7
- }
8
- ngOnInit() {
9
- this.eventDisplay.allowSelection(this.selectedObject);
10
- }
11
- }
12
- ObjectSelectionOverlayComponent.decorators = [
13
- { type: Component, args: [{
14
- selector: 'app-object-selection-overlay',
15
- template: "<app-overlay\n icon=\"cursor\"\n [overlayTitle]=\"selectedObject.name\"\n [active]=\"!hiddenSelectedInfo\"\n>\n <div\n id=\"selectedObjectPanelBody\"\n class=\"m-1\"\n *ngIf=\"selectedObject.attributes.length > 0\"\n >\n <div\n *ngFor=\"let attribute of selectedObject.attributes\"\n class=\"attributeField\"\n >\n <strong>{{ attribute.attributeName }}</strong>\n : {{ attribute.attributeValue | attributePipe }}\n </div>\n </div>\n</app-overlay>\n",
16
- styles: ["#selectedObjectPanelBody{padding:0 .8em;overflow:auto;max-width:300px;max-height:16rem;min-width:7rem}"]
17
- },] }
18
- ];
19
- ObjectSelectionOverlayComponent.ctorParameters = () => [
20
- { type: EventDisplayService }
21
- ];
22
- ObjectSelectionOverlayComponent.propDecorators = {
23
- hiddenSelectedInfo: [{ type: Input }]
24
- };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXNlbGVjdGlvbi1vdmVybGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3VpLW1lbnUvb2JqZWN0LXNlbGVjdGlvbi9vYmplY3Qtc2VsZWN0aW9uLW92ZXJsYXkvb2JqZWN0LXNlbGVjdGlvbi1vdmVybGF5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQU9qRixNQUFNLE9BQU8sK0JBQStCO0lBSzFDLFlBQW9CLFlBQWlDO1FBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUZyRCxtQkFBYyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFFSSxDQUFDO0lBRXpELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7O1lBZEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw4QkFBOEI7Z0JBQ3hDLHdmQUF3RDs7YUFFekQ7OztZQU5RLG1CQUFtQjs7O2lDQVN6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFdmVudERpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZXZlbnQtZGlzcGxheS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW9iamVjdC1zZWxlY3Rpb24tb3ZlcmxheScsXG4gIHRlbXBsYXRlVXJsOiAnLi9vYmplY3Qtc2VsZWN0aW9uLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vYmplY3Qtc2VsZWN0aW9uLW92ZXJsYXkuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgT2JqZWN0U2VsZWN0aW9uT3ZlcmxheUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIEF0dHJpYnV0ZXMgZm9yIGRpc3BsYXlpbmcgdGhlIGluZm9ybWF0aW9uIG9mIHNlbGVjdGVkIG9iamVjdHNcbiAgQElucHV0KCkgaGlkZGVuU2VsZWN0ZWRJbmZvOiBib29sZWFuO1xuICBzZWxlY3RlZE9iamVjdCA9IHsgbmFtZTogJ09iamVjdCcsIGF0dHJpYnV0ZXM6IFtdIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBldmVudERpc3BsYXk6IEV2ZW50RGlzcGxheVNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ldmVudERpc3BsYXkuYWxsb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE9iamVjdCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,39 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { Overlay } from '@angular/cdk/overlay';
3
- import { ComponentPortal } from '@angular/cdk/portal';
4
- import { ObjectSelectionOverlayComponent } from './object-selection-overlay/object-selection-overlay.component';
5
- import { EventDisplayService } from '../../../services/event-display.service';
6
- export class ObjectSelectionComponent {
7
- constructor(overlay, eventDisplay) {
8
- this.overlay = overlay;
9
- this.eventDisplay = eventDisplay;
10
- // Attributes for displaying the information of selected objects
11
- this.hiddenSelectedInfo = true;
12
- }
13
- ngOnInit() {
14
- const overlayRef = this.overlay.create();
15
- const overlayPortal = new ComponentPortal(ObjectSelectionOverlayComponent);
16
- this.overlayWindow = overlayRef.attach(overlayPortal);
17
- this.overlayWindow.instance.hiddenSelectedInfo = this.hiddenSelectedInfo;
18
- }
19
- ngOnDestroy() {
20
- this.overlayWindow.destroy();
21
- }
22
- toggleOverlay() {
23
- this.hiddenSelectedInfo = !this.hiddenSelectedInfo;
24
- this.overlayWindow.instance.hiddenSelectedInfo = this.hiddenSelectedInfo;
25
- this.eventDisplay.enableSelecting(!this.hiddenSelectedInfo);
26
- }
27
- }
28
- ObjectSelectionComponent.decorators = [
29
- { type: Component, args: [{
30
- selector: 'app-object-selection',
31
- template: "<app-menu-toggle\n tooltip=\"Object selection\"\n icon=\"cursor\"\n [active]=\"!hiddenSelectedInfo\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n",
32
- styles: [""]
33
- },] }
34
- ];
35
- ObjectSelectionComponent.ctorParameters = () => [
36
- { type: Overlay },
37
- { type: EventDisplayService }
38
- ];
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXNlbGVjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS1tZW51L29iamVjdC1zZWxlY3Rpb24vb2JqZWN0LXNlbGVjdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBbUMsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUNoSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQU85RSxNQUFNLE9BQU8sd0JBQXdCO0lBS25DLFlBQ1UsT0FBZ0IsRUFDaEIsWUFBaUM7UUFEakMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFOM0MsZ0VBQWdFO1FBQ2hFLHVCQUFrQixHQUFHLElBQUksQ0FBQztJQU12QixDQUFDO0lBRUosUUFBUTtRQUNOLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekMsTUFBTSxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQzNFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDekUsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM5RCxDQUFDOzs7WUE5QkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLDJLQUFnRDs7YUFFakQ7OztZQVRRLE9BQU87WUFHUCxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgQ29tcG9uZW50UmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IE9iamVjdFNlbGVjdGlvbk92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuL29iamVjdC1zZWxlY3Rpb24tb3ZlcmxheS9vYmplY3Qtc2VsZWN0aW9uLW92ZXJsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IEV2ZW50RGlzcGxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ldmVudC1kaXNwbGF5LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtb2JqZWN0LXNlbGVjdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9vYmplY3Qtc2VsZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb2JqZWN0LXNlbGVjdGlvbi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBPYmplY3RTZWxlY3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vIEF0dHJpYnV0ZXMgZm9yIGRpc3BsYXlpbmcgdGhlIGluZm9ybWF0aW9uIG9mIHNlbGVjdGVkIG9iamVjdHNcbiAgaGlkZGVuU2VsZWN0ZWRJbmZvID0gdHJ1ZTtcbiAgb3ZlcmxheVdpbmRvdzogQ29tcG9uZW50UmVmPE9iamVjdFNlbGVjdGlvbk92ZXJsYXlDb21wb25lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIGV2ZW50RGlzcGxheTogRXZlbnREaXNwbGF5U2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoKTtcbiAgICBjb25zdCBvdmVybGF5UG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChPYmplY3RTZWxlY3Rpb25PdmVybGF5Q29tcG9uZW50KTtcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3cgPSBvdmVybGF5UmVmLmF0dGFjaChvdmVybGF5UG9ydGFsKTtcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3cuaW5zdGFuY2UuaGlkZGVuU2VsZWN0ZWRJbmZvID0gdGhpcy5oaWRkZW5TZWxlY3RlZEluZm87XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3cuZGVzdHJveSgpO1xuICB9XG5cbiAgdG9nZ2xlT3ZlcmxheSgpIHtcbiAgICB0aGlzLmhpZGRlblNlbGVjdGVkSW5mbyA9ICF0aGlzLmhpZGRlblNlbGVjdGVkSW5mbztcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3cuaW5zdGFuY2UuaGlkZGVuU2VsZWN0ZWRJbmZvID0gdGhpcy5oaWRkZW5TZWxlY3RlZEluZm87XG4gICAgdGhpcy5ldmVudERpc3BsYXkuZW5hYmxlU2VsZWN0aW5nKCF0aGlzLmhpZGRlblNlbGVjdGVkSW5mbyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,90 +0,0 @@
1
- import { Component, Input, ViewChild, ViewEncapsulation, } from '@angular/core';
2
- import { ResizeSensor } from 'css-element-queries';
3
- /**
4
- * Component for overlay panel.
5
- */
6
- export class OverlayComponent {
7
- constructor() {
8
- /** If the overlay is open or not. */
9
- this.active = false;
10
- /** If the overlay is resizable. */
11
- this.resizable = false;
12
- /** If the overlay body is transparent or not. */
13
- this.transparentBody = false;
14
- /** If the overlay body is visible or not. */
15
- this.showBody = true;
16
- /** Minimum resizable width. */
17
- this.MIN_RES_WIDTH = 300;
18
- /** Minimum resizable height */
19
- this.MIN_RES_HEIGHT = 100;
20
- }
21
- /**
22
- * Move the resizable handle to the bottom right after the component is created.
23
- */
24
- ngAfterViewInit() {
25
- if (this.resizable) {
26
- const resizeHandleElement = this.resizeHandleCorner.nativeElement;
27
- resizeHandleElement.style.bottom = '0';
28
- resizeHandleElement.style.right = '0';
29
- new ResizeSensor(this.overlayCard.nativeElement, () => {
30
- this.resetHandlePosition();
31
- });
32
- window.addEventListener('resize', () => {
33
- this.resetHandlePosition();
34
- });
35
- }
36
- }
37
- /**
38
- * Resize the overlay card when the resize handle is dragged.
39
- */
40
- onResize() {
41
- const resizeHandleElement = this.resizeHandleCorner.nativeElement;
42
- const overlayCardElement = this.overlayCard.nativeElement;
43
- const dragRect = resizeHandleElement.getBoundingClientRect();
44
- const overlayRect = overlayCardElement.getBoundingClientRect();
45
- const width = dragRect.left - overlayRect.left + dragRect.width;
46
- const height = dragRect.top - overlayRect.top + dragRect.height;
47
- this.setHandleTransform(overlayRect, dragRect);
48
- if (width > this.MIN_RES_WIDTH && height > this.MIN_RES_HEIGHT) {
49
- overlayCardElement.style.width = width + 'px';
50
- overlayCardElement.style.height = height + 'px';
51
- }
52
- }
53
- /**
54
- * Reset resize handle position.
55
- */
56
- resetHandlePosition() {
57
- const resizeHandleElement = this.resizeHandleCorner.nativeElement;
58
- this.setHandleTransform(this.overlayCard.nativeElement.getBoundingClientRect(), resizeHandleElement.getBoundingClientRect());
59
- resizeHandleElement.style.bottom = null;
60
- resizeHandleElement.style.right = null;
61
- }
62
- /**
63
- * Set the position of the resize handle using transform3d.
64
- * @param overlayRect Bounding client rectangle of the overlay card.
65
- * @param dragRect Bounding client rectangle of the resize handle.
66
- */
67
- setHandleTransform(overlayRect, dragRect) {
68
- const translateX = overlayRect.width - dragRect.width;
69
- const translateY = overlayRect.height - dragRect.height;
70
- this.resizeHandleCorner.nativeElement.style.transform = `translate3d(${translateX}px, ${translateY}px, 0)`;
71
- }
72
- }
73
- OverlayComponent.decorators = [
74
- { type: Component, args: [{
75
- selector: 'app-overlay',
76
- template: "<div\n #overlayCard\n class=\"overlay-card card\"\n [hidden]=\"!active\"\n cdkDrag\n cdkDragBoundary=\"body\"\n>\n <div\n class=\"card-header d-flex justify-content-between\"\n [ngClass]=\"{ 'with-body': showBody }\"\n cdkDragHandle\n *ngIf=\"overlayTitle\"\n >\n <div class=\"align-self-center card-icon\" *ngIf=\"icon\">\n <svg>\n <use attr.href=\"assets/icons/{{ icon }}.svg#{{ icon }}\"></use>\n </svg>\n </div>\n <h5 class=\"align-self-center m-0 px-2\">{{ overlayTitle }}</h5>\n <div\n class=\"align-self-center card-icon expandCollapse\"\n matTooltip=\"Expand / Collapse\"\n matTooltipPosition=\"right\"\n [ngClass]=\"{ expand: showBody }\"\n (click)=\"showBody = !showBody\"\n >\n <svg>\n <use href=\"assets/icons/expand.svg#expand\"></use>\n </svg>\n </div>\n </div>\n <div\n class=\"overlay-card-content\"\n *ngIf=\"showBody\"\n [ngClass]=\"{ 'transparent-bg': transparentBody }\"\n >\n <ng-content></ng-content>\n </div>\n <!-- Making the overlay resizable -->\n <span\n #resizeHandleCorner\n class=\"resize-handle corner\"\n *ngIf=\"resizable\"\n [hidden]=\"!showBody\"\n cdkDrag\n (cdkDragMoved)=\"onResize()\"\n ></span>\n</div>\n",
77
- encapsulation: ViewEncapsulation.None,
78
- styles: [".overlay-card.card{color:var(--phoenix-text-color);background:none;max-width:100vw;font-size:12px;min-width:300px;height:100%;max-height:70vh;box-shadow:none;border:none;position:relative;z-index:200}.overlay-card.card .card-header{width:12rem;background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);padding:.4rem .8rem;border-radius:10px;border:none;cursor:move;text-align:center;transition:all .2s}.overlay-card.card .card-header.with-body{border-bottom-left-radius:0;border-bottom-right-radius:0}.overlay-card.card .card-header .card-icon{display:flex;height:.7rem;width:.7rem}.overlay-card.card .card-header h5{font-size:.9rem}.overlay-card.card .card-header .expandCollapse{cursor:pointer;transition:all .2s}.overlay-card.card .card-header .expandCollapse.expand{transform:scaleY(-1)}.overlay-card.card .overlay-card-content{background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);border-radius:10px;border-top-left-radius:0;overflow:auto;height:100%}.overlay-card.card .overlay-card-content.transparent-bg{background:none}.overlay-card.card .list-group{color:var(--phoenix-text-color-secondary);background:var(--phoenix-background-color-secondary);max-height:40vh;overflow:auto}.overlay-card.card .list-group .list-group-item{background-color:var(--phoenix-background-color-secondary);border-color:var(--phoenix-border)}.overlay-card.card .resize-handle{width:1rem;height:1rem;cursor:nwse-resize;position:absolute}.overlay-card.card .resize-handle.corner{border-right:.2rem solid var(--phoenix-text-color);border-bottom:.2rem solid var(--phoenix-text-color)}"]
79
- },] }
80
- ];
81
- OverlayComponent.propDecorators = {
82
- overlayTitle: [{ type: Input }],
83
- active: [{ type: Input }],
84
- icon: [{ type: Input }],
85
- resizable: [{ type: Input }],
86
- transparentBody: [{ type: Input }],
87
- overlayCard: [{ type: ViewChild, args: ['overlayCard',] }],
88
- resizeHandleCorner: [{ type: ViewChild, args: ['resizeHandleCorner',] }]
89
- };
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS1tZW51L292ZXJsYXkvb3ZlcmxheS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUVULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQ7O0dBRUc7QUFPSCxNQUFNLE9BQU8sZ0JBQWdCO0lBTjdCO1FBU0UscUNBQXFDO1FBQzVCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFHakMsbUNBQW1DO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDcEMsaURBQWlEO1FBQ3hDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQzFDLDZDQUE2QztRQUM3QyxhQUFRLEdBQVksSUFBSSxDQUFDO1FBVXpCLCtCQUErQjtRQUN2QixrQkFBYSxHQUFXLEdBQUcsQ0FBQztRQUNwQywrQkFBK0I7UUFDdkIsbUJBQWMsR0FBVyxHQUFHLENBQUM7SUFtRXZDLENBQUM7SUFqRUM7O09BRUc7SUFDSCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQztZQUNsRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUN2QyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUV0QyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDO1FBQ2xFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFFMUQsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3RCxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRS9ELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBRWhFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFL0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUM5RCxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDOUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ2pEO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CO1FBQ2pCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQztRQUVsRSxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLEVBQ3RELG1CQUFtQixDQUFDLHFCQUFxQixFQUFFLENBQzVDLENBQUM7UUFFRixtQkFBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUN4QyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGtCQUFrQixDQUFDLFdBQWdCLEVBQUUsUUFBYTtRQUN4RCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxlQUFlLFVBQVUsT0FBTyxVQUFVLFFBQVEsQ0FBQztJQUM3RyxDQUFDOzs7WUFqR0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxhQUFhO2dCQUN2Qix5d0NBQXVDO2dCQUV2QyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7YUFDdEM7OzsyQkFHRSxLQUFLO3FCQUVMLEtBQUs7bUJBRUwsS0FBSzt3QkFFTCxLQUFLOzhCQUVMLEtBQUs7MEJBU0wsU0FBUyxTQUFDLGFBQWE7aUNBRXZCLFNBQVMsU0FBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVzaXplU2Vuc29yIH0gZnJvbSAnY3NzLWVsZW1lbnQtcXVlcmllcyc7XG5cbi8qKlxuICogQ29tcG9uZW50IGZvciBvdmVybGF5IHBhbmVsLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtb3ZlcmxheScsXG4gIHRlbXBsYXRlVXJsOiAnLi9vdmVybGF5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb3ZlcmxheS5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBPdmVybGF5Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKiBUaXRsZSBvZiB0aGUgb3ZlcmxheS4gKi9cbiAgQElucHV0KCkgb3ZlcmxheVRpdGxlOiBzdHJpbmc7XG4gIC8qKiBJZiB0aGUgb3ZlcmxheSBpcyBvcGVuIG9yIG5vdC4gKi9cbiAgQElucHV0KCkgYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBJY29uIG9mIHRoZSBvdmVybGF5IGhlYWRlci4gKi9cbiAgQElucHV0KCkgaWNvbjogc3RyaW5nO1xuICAvKiogSWYgdGhlIG92ZXJsYXkgaXMgcmVzaXphYmxlLiAqL1xuICBASW5wdXQoKSByZXNpemFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIElmIHRoZSBvdmVybGF5IGJvZHkgaXMgdHJhbnNwYXJlbnQgb3Igbm90LiAqL1xuICBASW5wdXQoKSB0cmFuc3BhcmVudEJvZHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIElmIHRoZSBvdmVybGF5IGJvZHkgaXMgdmlzaWJsZSBvciBub3QuICovXG4gIHNob3dCb2R5OiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqIEJlbG93IGNvZGUgaXMgc3BlY2lmaWMgdG8gdGhlIG92ZXJsYXkgcmVzaXplIGZlYXR1cmUuIChMT09LIElOVE8gQ1NTIFJFU0laRSkgKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gIC8qKiBDb21wbGV0ZSBvdmVybGF5IGNhcmQgY29udGFpbmluZyBib3RoIGhlYWRlciBhbmQgYm9keS4gKi9cbiAgQFZpZXdDaGlsZCgnb3ZlcmxheUNhcmQnKSBvdmVybGF5Q2FyZDogRWxlbWVudFJlZjtcbiAgLyoqIEhhbmRsZSBmb3IgcmVzaXppbmcgdGhlIG92ZXJsYXkuICovXG4gIEBWaWV3Q2hpbGQoJ3Jlc2l6ZUhhbmRsZUNvcm5lcicpIHJlc2l6ZUhhbmRsZUNvcm5lcjogRWxlbWVudFJlZjtcbiAgLyoqIE1pbmltdW0gcmVzaXphYmxlIHdpZHRoLiAqL1xuICBwcml2YXRlIE1JTl9SRVNfV0lEVEg6IG51bWJlciA9IDMwMDtcbiAgLyoqIE1pbmltdW0gcmVzaXphYmxlIGhlaWdodCAqL1xuICBwcml2YXRlIE1JTl9SRVNfSEVJR0hUOiBudW1iZXIgPSAxMDA7XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIHJlc2l6YWJsZSBoYW5kbGUgdG8gdGhlIGJvdHRvbSByaWdodCBhZnRlciB0aGUgY29tcG9uZW50IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMucmVzaXphYmxlKSB7XG4gICAgICBjb25zdCByZXNpemVIYW5kbGVFbGVtZW50ID0gdGhpcy5yZXNpemVIYW5kbGVDb3JuZXIubmF0aXZlRWxlbWVudDtcbiAgICAgIHJlc2l6ZUhhbmRsZUVsZW1lbnQuc3R5bGUuYm90dG9tID0gJzAnO1xuICAgICAgcmVzaXplSGFuZGxlRWxlbWVudC5zdHlsZS5yaWdodCA9ICcwJztcblxuICAgICAgbmV3IFJlc2l6ZVNlbnNvcih0aGlzLm92ZXJsYXlDYXJkLm5hdGl2ZUVsZW1lbnQsICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldEhhbmRsZVBvc2l0aW9uKCk7XG4gICAgICB9KTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldEhhbmRsZVBvc2l0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzaXplIHRoZSBvdmVybGF5IGNhcmQgd2hlbiB0aGUgcmVzaXplIGhhbmRsZSBpcyBkcmFnZ2VkLlxuICAgKi9cbiAgb25SZXNpemUoKSB7XG4gICAgY29uc3QgcmVzaXplSGFuZGxlRWxlbWVudCA9IHRoaXMucmVzaXplSGFuZGxlQ29ybmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgb3ZlcmxheUNhcmRFbGVtZW50ID0gdGhpcy5vdmVybGF5Q2FyZC5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3QgZHJhZ1JlY3QgPSByZXNpemVIYW5kbGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG92ZXJsYXlSZWN0ID0gb3ZlcmxheUNhcmRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgY29uc3Qgd2lkdGggPSBkcmFnUmVjdC5sZWZ0IC0gb3ZlcmxheVJlY3QubGVmdCArIGRyYWdSZWN0LndpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IGRyYWdSZWN0LnRvcCAtIG92ZXJsYXlSZWN0LnRvcCArIGRyYWdSZWN0LmhlaWdodDtcblxuICAgIHRoaXMuc2V0SGFuZGxlVHJhbnNmb3JtKG92ZXJsYXlSZWN0LCBkcmFnUmVjdCk7XG5cbiAgICBpZiAod2lkdGggPiB0aGlzLk1JTl9SRVNfV0lEVEggJiYgaGVpZ2h0ID4gdGhpcy5NSU5fUkVTX0hFSUdIVCkge1xuICAgICAgb3ZlcmxheUNhcmRFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgb3ZlcmxheUNhcmRFbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHJlc2l6ZSBoYW5kbGUgcG9zaXRpb24uXG4gICAqL1xuICByZXNldEhhbmRsZVBvc2l0aW9uKCkge1xuICAgIGNvbnN0IHJlc2l6ZUhhbmRsZUVsZW1lbnQgPSB0aGlzLnJlc2l6ZUhhbmRsZUNvcm5lci5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy5zZXRIYW5kbGVUcmFuc2Zvcm0oXG4gICAgICB0aGlzLm92ZXJsYXlDYXJkLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICByZXNpemVIYW5kbGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgKTtcblxuICAgIHJlc2l6ZUhhbmRsZUVsZW1lbnQuc3R5bGUuYm90dG9tID0gbnVsbDtcbiAgICByZXNpemVIYW5kbGVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSByZXNpemUgaGFuZGxlIHVzaW5nIHRyYW5zZm9ybTNkLlxuICAgKiBAcGFyYW0gb3ZlcmxheVJlY3QgQm91bmRpbmcgY2xpZW50IHJlY3RhbmdsZSBvZiB0aGUgb3ZlcmxheSBjYXJkLlxuICAgKiBAcGFyYW0gZHJhZ1JlY3QgQm91bmRpbmcgY2xpZW50IHJlY3RhbmdsZSBvZiB0aGUgcmVzaXplIGhhbmRsZS5cbiAgICovXG4gIHByaXZhdGUgc2V0SGFuZGxlVHJhbnNmb3JtKG92ZXJsYXlSZWN0OiBhbnksIGRyYWdSZWN0OiBhbnkpIHtcbiAgICBjb25zdCB0cmFuc2xhdGVYID0gb3ZlcmxheVJlY3Qud2lkdGggLSBkcmFnUmVjdC53aWR0aDtcbiAgICBjb25zdCB0cmFuc2xhdGVZID0gb3ZlcmxheVJlY3QuaGVpZ2h0IC0gZHJhZ1JlY3QuaGVpZ2h0O1xuICAgIHRoaXMucmVzaXplSGFuZGxlQ29ybmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7dHJhbnNsYXRlWH1weCwgJHt0cmFuc2xhdGVZfXB4LCAwKWA7XG4gIH1cbn1cbiJdfQ==
@@ -1,52 +0,0 @@
1
- import { Component, ViewChild, Input } from '@angular/core';
2
- import { EventDisplayService } from '../../../../services/event-display.service';
3
- export class OverlayViewWindowComponent {
4
- constructor(eventDisplay) {
5
- this.eventDisplay = eventDisplay;
6
- this.showOverlay = true;
7
- this.transparentBody = false;
8
- this.orthographicView = false;
9
- this.overlayViewFixed = false;
10
- }
11
- ngAfterViewInit() {
12
- const canvas = this.initializeCanvas(this.overlayWindow.nativeElement);
13
- this.eventDisplay.setOverlayRenderer(canvas);
14
- }
15
- initializeCanvas(canvas) {
16
- const width = window.innerWidth / 2.5;
17
- const height = window.innerHeight / 2.5;
18
- canvas.width = width;
19
- canvas.height = height;
20
- canvas.style.width = width.toString() + ' px';
21
- canvas.style.height = height.toString() + ' px';
22
- return canvas;
23
- }
24
- switchOverlayView() {
25
- this.orthographicView = !this.orthographicView;
26
- this.eventDisplay
27
- .getUIManager()
28
- .toggleOrthographicView(this.orthographicView);
29
- }
30
- fixOverlayView() {
31
- this.overlayViewFixed = !this.overlayViewFixed;
32
- this.eventDisplay.fixOverlayView(this.overlayViewFixed);
33
- }
34
- toggleBgTransparency() {
35
- this.transparentBody = !this.transparentBody;
36
- }
37
- }
38
- OverlayViewWindowComponent.decorators = [
39
- { type: Component, args: [{
40
- selector: 'app-overlay-view-window',
41
- template: "<app-overlay\n overlayTitle=\"Overlay View\"\n icon=\"overlay\"\n [resizable]=\"true\"\n [transparentBody]=\"transparentBody\"\n [active]=\"showOverlay\"\n>\n <div class=\"overlay-view-wrapper\">\n <canvas #overlayWindow id=\"overlay-canvas\" [hidden]=\"!showOverlay\">\n </canvas>\n <div class=\"overlay-view-controls position-absolute d-flex flex-row\">\n <app-menu-toggle\n class=\"overlay-view-control\"\n icon=\"transparent\"\n matTooltip=\"Toggle background transparency\"\n (click)=\"toggleBgTransparency()\"\n >\n </app-menu-toggle>\n <app-menu-toggle\n class=\"overlay-view-control\"\n icon=\"move-lock\"\n [matTooltip]=\"(overlayViewFixed ? 'Restore' : 'Fix') + ' overlay view'\"\n [active]=\"overlayViewFixed\"\n (click)=\"fixOverlayView()\"\n >\n </app-menu-toggle>\n <app-menu-toggle\n class=\"overlay-view-control\"\n [icon]=\"orthographicView ? 'orthographic' : 'perspective'\"\n [matTooltip]=\"\n 'Switch to ' +\n (orthographicView ? 'orthographic' : 'perspective') +\n ' view'\n \"\n (click)=\"switchOverlayView()\"\n >\n </app-menu-toggle>\n </div>\n </div>\n</app-overlay>\n",
42
- styles: ["#overlay-canvas{background-color:rgba(0,0,0,.1);width:100%}.overlay-view-controls{bottom:1em;right:1em;opacity:0;transition:opacity .2s}.overlay-view-controls .overlay-view-control{background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);overflow:hidden;width:2.5rem;height:2.5rem;border-radius:50%;display:flex;justify-content:center;align-items:center}.overlay-view-wrapper:hover .overlay-view-controls{opacity:1;transition:opacity .2s}"]
43
- },] }
44
- ];
45
- OverlayViewWindowComponent.ctorParameters = () => [
46
- { type: EventDisplayService }
47
- ];
48
- OverlayViewWindowComponent.propDecorators = {
49
- showOverlay: [{ type: Input }],
50
- overlayWindow: [{ type: ViewChild, args: ['overlayWindow',] }]
51
- };
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS12aWV3LXdpbmRvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS1tZW51L292ZXJsYXktdmlldy9vdmVybGF5LXZpZXctd2luZG93L292ZXJsYXktdmlldy13aW5kb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFpQixLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFPakYsTUFBTSxPQUFPLDBCQUEwQjtJQU9yQyxZQUFvQixZQUFpQztRQUFqQyxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFONUMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDNUIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQUcrQixDQUFDO0lBRXpELGVBQWU7UUFDYixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUF5QjtRQUN4QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN4QyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNyQixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN2QixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDaEQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsWUFBWTthQUNkLFlBQVksRUFBRTthQUNkLHNCQUFzQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDL0MsQ0FBQzs7O1lBM0NGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUseUJBQXlCO2dCQUNuQyw4d0NBQW1EOzthQUVwRDs7O1lBTlEsbUJBQW1COzs7MEJBUXpCLEtBQUs7NEJBSUwsU0FBUyxTQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgQWZ0ZXJWaWV3SW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnREaXNwbGF5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2V2ZW50LWRpc3BsYXkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1vdmVybGF5LXZpZXctd2luZG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL292ZXJsYXktdmlldy13aW5kb3cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vdmVybGF5LXZpZXctd2luZG93LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE92ZXJsYXlWaWV3V2luZG93Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHNob3dPdmVybGF5ID0gdHJ1ZTtcbiAgdHJhbnNwYXJlbnRCb2R5ID0gZmFsc2U7XG4gIG9ydGhvZ3JhcGhpY1ZpZXcgPSBmYWxzZTtcbiAgb3ZlcmxheVZpZXdGaXhlZCA9IGZhbHNlO1xuICBAVmlld0NoaWxkKCdvdmVybGF5V2luZG93Jykgb3ZlcmxheVdpbmRvdzogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBldmVudERpc3BsYXk6IEV2ZW50RGlzcGxheVNlcnZpY2UpIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuaW5pdGlhbGl6ZUNhbnZhcyh0aGlzLm92ZXJsYXlXaW5kb3cubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5ldmVudERpc3BsYXkuc2V0T3ZlcmxheVJlbmRlcmVyKGNhbnZhcyk7XG4gIH1cblxuICBpbml0aWFsaXplQ2FudmFzKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpOiBIVE1MQ2FudmFzRWxlbWVudCB7XG4gICAgY29uc3Qgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCAvIDIuNTtcbiAgICBjb25zdCBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyLjU7XG4gICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICBjYW52YXMuc3R5bGUud2lkdGggPSB3aWR0aC50b1N0cmluZygpICsgJyBweCc7XG4gICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodC50b1N0cmluZygpICsgJyBweCc7XG4gICAgcmV0dXJuIGNhbnZhcztcbiAgfVxuXG4gIHN3aXRjaE92ZXJsYXlWaWV3KCkge1xuICAgIHRoaXMub3J0aG9ncmFwaGljVmlldyA9ICF0aGlzLm9ydGhvZ3JhcGhpY1ZpZXc7XG4gICAgdGhpcy5ldmVudERpc3BsYXlcbiAgICAgIC5nZXRVSU1hbmFnZXIoKVxuICAgICAgLnRvZ2dsZU9ydGhvZ3JhcGhpY1ZpZXcodGhpcy5vcnRob2dyYXBoaWNWaWV3KTtcbiAgfVxuXG4gIGZpeE92ZXJsYXlWaWV3KCkge1xuICAgIHRoaXMub3ZlcmxheVZpZXdGaXhlZCA9ICF0aGlzLm92ZXJsYXlWaWV3Rml4ZWQ7XG4gICAgdGhpcy5ldmVudERpc3BsYXkuZml4T3ZlcmxheVZpZXcodGhpcy5vdmVybGF5Vmlld0ZpeGVkKTtcbiAgfVxuXG4gIHRvZ2dsZUJnVHJhbnNwYXJlbmN5KCkge1xuICAgIHRoaXMudHJhbnNwYXJlbnRCb2R5ID0gIXRoaXMudHJhbnNwYXJlbnRCb2R5O1xuICB9XG59XG4iXX0=