@rocketshow/designer 1.40.0 → 1.44.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 (191) hide show
  1. package/fesm2022/rocketshow-designer.mjs +1389 -1148
  2. package/fesm2022/rocketshow-designer.mjs.map +1 -1
  3. package/index.d.ts +1676 -5
  4. package/package.json +2 -4
  5. package/rocketshow-designer-1.44.0.tgz +0 -0
  6. package/esm2022/lib/array-sort-pipe.mjs +0 -30
  7. package/esm2022/lib/designer.component.mjs +0 -672
  8. package/esm2022/lib/designer.module.mjs +0 -186
  9. package/esm2022/lib/designer.service.mjs +0 -14
  10. package/esm2022/lib/dropzone/dropzone.component.mjs +0 -93
  11. package/esm2022/lib/effect/effect-curve/effect-curve.component.mjs +0 -577
  12. package/esm2022/lib/effect/effect-pan-tilt/effect-pan-tilt.component.mjs +0 -36
  13. package/esm2022/lib/effect/effect.component.mjs +0 -174
  14. package/esm2022/lib/error-dialog/error-dialog.component.mjs +0 -75
  15. package/esm2022/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.mjs +0 -370
  16. package/esm2022/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.mjs +0 -147
  17. package/esm2022/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.mjs +0 -213
  18. package/esm2022/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.mjs +0 -78
  19. package/esm2022/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.mjs +0 -119
  20. package/esm2022/lib/fixture/fixture-capability/fixture-capability.component.mjs +0 -191
  21. package/esm2022/lib/fixture/fixture-channel/fixture-channel.component.mjs +0 -162
  22. package/esm2022/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.mjs +0 -365
  23. package/esm2022/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.mjs +0 -151
  24. package/esm2022/lib/fixture/fixture-settings/fixture-settings.component.mjs +0 -46
  25. package/esm2022/lib/fixture/fixture.component.mjs +0 -148
  26. package/esm2022/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.mjs +0 -145
  27. package/esm2022/lib/fixture-pool/fixture-pool.component.mjs +0 -641
  28. package/esm2022/lib/intro/intro.component.mjs +0 -95
  29. package/esm2022/lib/master-dimmer/master-dimmer.component.mjs +0 -66
  30. package/esm2022/lib/models/cached-fixture-capability.mjs +0 -9
  31. package/esm2022/lib/models/cached-fixture-channel.mjs +0 -7
  32. package/esm2022/lib/models/cached-fixture.mjs +0 -6
  33. package/esm2022/lib/models/color.mjs +0 -8
  34. package/esm2022/lib/models/composition.mjs +0 -46
  35. package/esm2022/lib/models/effect-curve-profile-channel.mjs +0 -15
  36. package/esm2022/lib/models/effect-curve.mjs +0 -69
  37. package/esm2022/lib/models/effect-pan-tilt.mjs +0 -19
  38. package/esm2022/lib/models/effect.mjs +0 -12
  39. package/esm2022/lib/models/fixture-capability-value.mjs +0 -15
  40. package/esm2022/lib/models/fixture-capability.mjs +0 -127
  41. package/esm2022/lib/models/fixture-channel-value.mjs +0 -11
  42. package/esm2022/lib/models/fixture-channel.mjs +0 -24
  43. package/esm2022/lib/models/fixture-matrix-pixel-group-constraints.mjs +0 -27
  44. package/esm2022/lib/models/fixture-matrix-pixel-group.mjs +0 -12
  45. package/esm2022/lib/models/fixture-matrix.mjs +0 -25
  46. package/esm2022/lib/models/fixture-mode-channel.mjs +0 -26
  47. package/esm2022/lib/models/fixture-mode.mjs +0 -17
  48. package/esm2022/lib/models/fixture-physical.mjs +0 -14
  49. package/esm2022/lib/models/fixture-profile.mjs +0 -85
  50. package/esm2022/lib/models/fixture-wheel-slot.mjs +0 -26
  51. package/esm2022/lib/models/fixture-wheel.mjs +0 -15
  52. package/esm2022/lib/models/fixture.mjs +0 -40
  53. package/esm2022/lib/models/preset-fixture.mjs +0 -10
  54. package/esm2022/lib/models/preset-region-scene.mjs +0 -8
  55. package/esm2022/lib/models/preset.mjs +0 -65
  56. package/esm2022/lib/models/project.mjs +0 -78
  57. package/esm2022/lib/models/scene-playback-region.mjs +0 -11
  58. package/esm2022/lib/models/scene.mjs +0 -27
  59. package/esm2022/lib/preset/preset-settings/preset-settings.component.mjs +0 -194
  60. package/esm2022/lib/preset/preset.component.mjs +0 -131
  61. package/esm2022/lib/preview/models/color-changer-3d.mjs +0 -52
  62. package/esm2022/lib/preview/models/fixture-3d.mjs +0 -260
  63. package/esm2022/lib/preview/models/moving-head-3d.mjs +0 -115
  64. package/esm2022/lib/preview/preview.component.mjs +0 -216
  65. package/esm2022/lib/project/project-browser/project-browser.component.mjs +0 -143
  66. package/esm2022/lib/project/project-import/project-import.component.mjs +0 -107
  67. package/esm2022/lib/project/project-save/project-save.component.mjs +0 -178
  68. package/esm2022/lib/project/project-share/project-share.component.mjs +0 -71
  69. package/esm2022/lib/scene/scene-settings/scene-settings.component.mjs +0 -146
  70. package/esm2022/lib/scene/scene.component.mjs +0 -110
  71. package/esm2022/lib/services/animation.service.mjs +0 -16
  72. package/esm2022/lib/services/config.service.mjs +0 -28
  73. package/esm2022/lib/services/effect.service.mjs +0 -14
  74. package/esm2022/lib/services/error-dialog.service.mjs +0 -39
  75. package/esm2022/lib/services/fixture-pool.service.mjs +0 -30
  76. package/esm2022/lib/services/fixture.service.mjs +0 -699
  77. package/esm2022/lib/services/hotkey-target-exclude.service.mjs +0 -24
  78. package/esm2022/lib/services/intro.service.mjs +0 -140
  79. package/esm2022/lib/services/preset.service.mjs +0 -450
  80. package/esm2022/lib/services/preview-mesh.service.mjs +0 -57
  81. package/esm2022/lib/services/preview.service.mjs +0 -481
  82. package/esm2022/lib/services/project-load.service.mjs +0 -206
  83. package/esm2022/lib/services/project.service.mjs +0 -93
  84. package/esm2022/lib/services/scene.service.mjs +0 -164
  85. package/esm2022/lib/services/timeline.service.mjs +0 -726
  86. package/esm2022/lib/services/user-ensure-login.service.mjs +0 -38
  87. package/esm2022/lib/services/user.service.mjs +0 -89
  88. package/esm2022/lib/services/uuid.service.mjs +0 -23
  89. package/esm2022/lib/services/warning-dialog.service.mjs +0 -38
  90. package/esm2022/lib/timeline/composition-settings/composition-settings.component.mjs +0 -304
  91. package/esm2022/lib/timeline/timeline-grid/timeline-grid.component.mjs +0 -216
  92. package/esm2022/lib/timeline/timeline.component.mjs +0 -418
  93. package/esm2022/lib/user/user-login/user-login.component.mjs +0 -144
  94. package/esm2022/lib/user/user-register/user-register.component.mjs +0 -220
  95. package/esm2022/lib/wait-dialog/wait-dialog.component.mjs +0 -26
  96. package/esm2022/lib/warning-dialog/warning-dialog.component.mjs +0 -68
  97. package/esm2022/public_api.mjs +0 -7
  98. package/esm2022/rocketshow-designer.mjs +0 -5
  99. package/lib/array-sort-pipe.d.ts +0 -7
  100. package/lib/designer.component.d.ts +0 -73
  101. package/lib/designer.module.d.ts +0 -57
  102. package/lib/designer.service.d.ts +0 -6
  103. package/lib/dropzone/dropzone.component.d.ts +0 -24
  104. package/lib/effect/effect-curve/effect-curve.component.d.ts +0 -59
  105. package/lib/effect/effect-pan-tilt/effect-pan-tilt.component.d.ts +0 -15
  106. package/lib/effect/effect.component.d.ts +0 -22
  107. package/lib/error-dialog/error-dialog.component.d.ts +0 -17
  108. package/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.d.ts +0 -41
  109. package/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.d.ts +0 -26
  110. package/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.d.ts +0 -34
  111. package/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.d.ts +0 -15
  112. package/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.d.ts +0 -18
  113. package/lib/fixture/fixture-capability/fixture-capability.component.d.ts +0 -31
  114. package/lib/fixture/fixture-channel/fixture-channel.component.d.ts +0 -25
  115. package/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.d.ts +0 -32
  116. package/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.d.ts +0 -14
  117. package/lib/fixture/fixture-settings/fixture-settings.component.d.ts +0 -14
  118. package/lib/fixture/fixture.component.d.ts +0 -25
  119. package/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.d.ts +0 -28
  120. package/lib/fixture-pool/fixture-pool.component.d.ts +0 -62
  121. package/lib/intro/intro.component.d.ts +0 -11
  122. package/lib/master-dimmer/master-dimmer.component.d.ts +0 -15
  123. package/lib/models/cached-fixture-capability.d.ts +0 -11
  124. package/lib/models/cached-fixture-channel.d.ts +0 -11
  125. package/lib/models/cached-fixture.d.ts +0 -11
  126. package/lib/models/color.d.ts +0 -6
  127. package/lib/models/composition.d.ts +0 -19
  128. package/lib/models/effect-curve-profile-channel.d.ts +0 -5
  129. package/lib/models/effect-curve.d.ts +0 -15
  130. package/lib/models/effect-pan-tilt.d.ts +0 -6
  131. package/lib/models/effect.d.ts +0 -6
  132. package/lib/models/fixture-capability-value.d.ts +0 -10
  133. package/lib/models/fixture-capability.d.ts +0 -117
  134. package/lib/models/fixture-channel-value.d.ts +0 -6
  135. package/lib/models/fixture-channel.d.ts +0 -9
  136. package/lib/models/fixture-matrix-pixel-group-constraints.d.ts +0 -8
  137. package/lib/models/fixture-matrix-pixel-group.d.ts +0 -6
  138. package/lib/models/fixture-matrix.d.ts +0 -6
  139. package/lib/models/fixture-mode-channel.d.ts +0 -8
  140. package/lib/models/fixture-mode.d.ts +0 -8
  141. package/lib/models/fixture-physical.d.ts +0 -4
  142. package/lib/models/fixture-profile.d.ts +0 -39
  143. package/lib/models/fixture-wheel-slot.d.ts +0 -17
  144. package/lib/models/fixture-wheel.d.ts +0 -5
  145. package/lib/models/fixture.d.ts +0 -23
  146. package/lib/models/preset-fixture.d.ts +0 -5
  147. package/lib/models/preset-region-scene.d.ts +0 -9
  148. package/lib/models/preset.d.ts +0 -20
  149. package/lib/models/project.d.ts +0 -31
  150. package/lib/models/scene-playback-region.d.ts +0 -6
  151. package/lib/models/scene.d.ts +0 -11
  152. package/lib/preset/preset-settings/preset-settings.component.d.ts +0 -22
  153. package/lib/preset/preset.component.d.ts +0 -25
  154. package/lib/preview/models/color-changer-3d.d.ts +0 -16
  155. package/lib/preview/models/fixture-3d.d.ts +0 -38
  156. package/lib/preview/models/moving-head-3d.d.ts +0 -23
  157. package/lib/preview/preview.component.d.ts +0 -38
  158. package/lib/project/project-browser/project-browser.component.d.ts +0 -27
  159. package/lib/project/project-import/project-import.component.d.ts +0 -23
  160. package/lib/project/project-save/project-save.component.d.ts +0 -28
  161. package/lib/project/project-share/project-share.component.d.ts +0 -16
  162. package/lib/scene/scene-settings/scene-settings.component.d.ts +0 -20
  163. package/lib/scene/scene.component.d.ts +0 -22
  164. package/lib/services/animation.service.d.ts +0 -7
  165. package/lib/services/config.service.d.ts +0 -20
  166. package/lib/services/effect.service.d.ts +0 -8
  167. package/lib/services/error-dialog.service.d.ts +0 -12
  168. package/lib/services/fixture-pool.service.d.ts +0 -10
  169. package/lib/services/fixture.service.d.ts +0 -70
  170. package/lib/services/hotkey-target-exclude.service.d.ts +0 -7
  171. package/lib/services/intro.service.d.ts +0 -21
  172. package/lib/services/preset.service.d.ts +0 -64
  173. package/lib/services/preview-mesh.service.d.ts +0 -14
  174. package/lib/services/preview.service.d.ts +0 -42
  175. package/lib/services/project-load.service.d.ts +0 -36
  176. package/lib/services/project.service.d.ts +0 -26
  177. package/lib/services/scene.service.d.ts +0 -30
  178. package/lib/services/timeline.service.d.ts +0 -70
  179. package/lib/services/user-ensure-login.service.d.ts +0 -14
  180. package/lib/services/user.service.d.ts +0 -22
  181. package/lib/services/uuid.service.d.ts +0 -7
  182. package/lib/services/warning-dialog.service.d.ts +0 -12
  183. package/lib/timeline/composition-settings/composition-settings.component.d.ts +0 -48
  184. package/lib/timeline/timeline-grid/timeline-grid.component.d.ts +0 -22
  185. package/lib/timeline/timeline.component.d.ts +0 -50
  186. package/lib/user/user-login/user-login.component.d.ts +0 -21
  187. package/lib/user/user-register/user-register.component.d.ts +0 -26
  188. package/lib/wait-dialog/wait-dialog.component.d.ts +0 -8
  189. package/lib/warning-dialog/warning-dialog.component.d.ts +0 -16
  190. package/public_api.d.ts +0 -3
  191. package/rocketshow-designer-1.40.0.tgz +0 -0
@@ -1,216 +0,0 @@
1
- import { Component, ElementRef, HostListener, ViewChild } from '@angular/core';
2
- import * as THREE from 'three';
3
- import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
4
- import { FixtureCategory } from '../models/fixture-profile';
5
- import { FixtureService } from '../services/fixture.service';
6
- import { PreviewMeshService } from '../services/preview-mesh.service';
7
- import { PreviewService } from '../services/preview.service';
8
- import { ProjectService } from '../services/project.service';
9
- import { TimelineService } from '../services/timeline.service';
10
- import { Positioning } from './../models/fixture';
11
- import { AnimationService } from './../services/animation.service';
12
- import { ColorChanger3d } from './models/color-changer-3d';
13
- import { MovingHead3d } from './models/moving-head-3d';
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "../services/fixture.service";
16
- import * as i2 from "../services/preview-mesh.service";
17
- import * as i3 from "./../services/animation.service";
18
- import * as i4 from "../services/preview.service";
19
- import * as i5 from "../services/timeline.service";
20
- import * as i6 from "../services/project.service";
21
- const _c0 = ["canvas"];
22
- export class PreviewComponent {
23
- constructor(fixtureService, previewMeshService, animationService, previewService, timelineService, projectService) {
24
- this.fixtureService = fixtureService;
25
- this.previewMeshService = previewMeshService;
26
- this.animationService = animationService;
27
- this.previewService = previewService;
28
- this.timelineService = timelineService;
29
- this.projectService = projectService;
30
- this.scene = new THREE.Scene();
31
- this.fixtures3d = [];
32
- this.previewService.doUpdateFixtureSetup.subscribe(() => {
33
- this.syncFixtures();
34
- });
35
- this.syncFixtures();
36
- }
37
- // synchronize the 3d-fixtures to the project fixtures
38
- syncFixtures() {
39
- if (!this.previewService.scene) {
40
- return;
41
- }
42
- // remove all fixtures
43
- for (const fixture3d of this.fixtures3d) {
44
- fixture3d.destroy();
45
- }
46
- this.fixtures3d = [];
47
- // add all fixtures from the project
48
- for (const fixture of this.fixtureService.cachedFixtures) {
49
- switch (fixture.profile.categories[0]) {
50
- case FixtureCategory['Moving Head']:
51
- this.fixtures3d.push(new MovingHead3d(this.fixtureService, this.previewService, this.previewMeshService, fixture, this.scene));
52
- break;
53
- case FixtureCategory['Color Changer']:
54
- this.fixtures3d.push(new ColorChanger3d(this.fixtureService, this.previewService, this.previewMeshService, fixture, this.scene));
55
- break;
56
- case FixtureCategory['Blinder']:
57
- this.fixtures3d.push(new ColorChanger3d(this.fixtureService, this.previewService, this.previewMeshService, fixture, this.scene));
58
- break;
59
- }
60
- }
61
- }
62
- get canvas() {
63
- return this.canvasRef.nativeElement;
64
- }
65
- render() {
66
- this.renderer.render(this.scene, this.camera);
67
- }
68
- updateStagePosition(positioning, xMin, xMax, yMin, yMax, zMin, zMax) {
69
- let positionCount = 0; // Number of fixtures in the same position
70
- let positionIndex = 1;
71
- this.projectService.project.presetFixtures.forEach((element, index) => {
72
- const fixture = this.fixtureService.getFixtureByUuid(element.fixtureUuid);
73
- if (fixture.positioning === positioning) {
74
- positionCount++;
75
- }
76
- });
77
- this.projectService.project.presetFixtures.forEach((element, index) => {
78
- const fixture = this.fixtureService.getFixtureByUuid(element.fixtureUuid);
79
- if (fixture.positioning === positioning) {
80
- fixture.positionX = xMin + ((xMax - xMin) / (positionCount + 1)) * positionIndex;
81
- fixture.positionY = yMin + ((yMax - yMin) / (positionCount + 1)) * positionIndex;
82
- fixture.positionZ = zMin + ((zMax - zMin) / (positionCount + 1)) * positionIndex;
83
- positionIndex++;
84
- }
85
- });
86
- }
87
- animate(timeMillis) {
88
- if (this.timelineService.playState === 'playing') {
89
- // Overwrite the current time with the playing time, if we're in playback mode
90
- timeMillis = this.timelineService.waveSurfer.getCurrentTime() * 1000;
91
- }
92
- this.animationService.timeMillis = timeMillis;
93
- // Update the controls
94
- if (this.controls) {
95
- this.controls.update();
96
- }
97
- // Update the positions
98
- this.updateStagePosition(Positioning.topFront, -this.projectService.project.stageWidthCm / 2, this.projectService.project.stageWidthCm / 2, this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm, this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm, this.projectService.project.stageDepthCm / 2 - 70, this.projectService.project.stageDepthCm / 2 - 70);
99
- this.updateStagePosition(Positioning.bottomFront, -this.projectService.project.stageWidthCm / 2, this.projectService.project.stageWidthCm / 2, this.projectService.project.stageFloorHeightCm, this.projectService.project.stageFloorHeightCm, this.projectService.project.stageDepthCm / 2 - 70, this.projectService.project.stageDepthCm / 2 - 70);
100
- this.updateStagePosition(Positioning.topBack, -this.projectService.project.stageWidthCm / 2, this.projectService.project.stageWidthCm / 2, this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm, this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm, -this.projectService.project.stageDepthCm / 2 + 70, -this.projectService.project.stageDepthCm / 2 + 70);
101
- this.updateStagePosition(Positioning.bottomBack, -this.projectService.project.stageWidthCm / 2, this.projectService.project.stageWidthCm / 2, this.projectService.project.stageFloorHeightCm, this.projectService.project.stageFloorHeightCm, -this.projectService.project.stageDepthCm / 2 + 70, -this.projectService.project.stageDepthCm / 2 + 70);
102
- // Update all fixtures and apply the preview properties, if available
103
- // TODO Update the fixtures only e.g. 40 times per second according to the "real" refresh rate of the DMX interface?
104
- const presets = this.previewService.getPresets(timeMillis);
105
- const calculatedFixtures = this.previewService.getChannelValues(timeMillis, presets);
106
- for (const fixture3d of this.fixtures3d) {
107
- // Update the fixture properties
108
- fixture3d.updatePreview(calculatedFixtures.get(fixture3d.fixture) || [], this.projectService.project.masterDimmerValue);
109
- // Select the fixture, if required
110
- if (this.fixtureService.settingsSelection) {
111
- fixture3d.isSelected = this.fixtureService.settingsFixtureIsSelected(fixture3d.fixture.fixture);
112
- }
113
- else {
114
- fixture3d.isSelected = this.previewService.fixtureIsSelected(fixture3d.fixture.fixture.uuid, fixture3d.fixture.pixelKey, presets);
115
- }
116
- }
117
- // Render the scene
118
- this.render();
119
- requestAnimationFrame(this.animate.bind(this));
120
- }
121
- getAspectRatio() {
122
- const height = this.canvas.clientHeight;
123
- if (height === 0) {
124
- return 0;
125
- }
126
- return this.canvas.clientWidth / this.canvas.clientHeight;
127
- }
128
- onResize() {
129
- this.camera.aspect = this.getAspectRatio();
130
- this.camera.updateProjectionMatrix();
131
- this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);
132
- }
133
- setupRenderer() {
134
- this.renderer = new THREE.WebGLRenderer({ antialias: true });
135
- this.canvas.appendChild(this.renderer.domElement);
136
- this.renderer.setPixelRatio(devicePixelRatio);
137
- this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);
138
- // this.renderer.shadowMap.enabled = true;
139
- // this.renderer.gammaInput = true;
140
- // this.renderer.gammaOutput = true;
141
- }
142
- setupCamera() {
143
- this.camera = new THREE.PerspectiveCamera(35, window.innerWidth / window.innerHeight, 1, 10000);
144
- this.camera.position.set(-600, 80, 700);
145
- }
146
- setupControls() {
147
- this.controls = new OrbitControls(this.camera, this.renderer.domElement);
148
- this.controls.enableKeys = false;
149
- this.controls.rotateSpeed = 0.05;
150
- this.controls.zoomSpeed = 1.2;
151
- this.controls.enableDamping = true;
152
- this.controls.dampingFactor = 0.25;
153
- this.controls.screenSpacePanning = false;
154
- this.controls.minDistance = 700;
155
- // this.controls.zoom = 1000;
156
- this.controls.maxDistance = 2000;
157
- this.controls.maxPolarAngle = Math.PI / 2;
158
- this.controls.target = new THREE.Vector3(0, 200, 0);
159
- // this.controls.rotation = 100;
160
- }
161
- setupScene() {
162
- // this.scene.background = new THREE.Color(0x080808);
163
- // this.scene.fog = new THREE.FogExp2( 0x000000, 0.1 );
164
- this.previewService.scene = this.scene;
165
- // Add a little bit of ambient light
166
- const ambient = new THREE.AmbientLight(0xffffff, 1.8);
167
- this.scene.add(ambient);
168
- // Create the stage dimensions
169
- this.previewService.updateStage();
170
- const lights = [];
171
- lights[0] = new THREE.PointLight(0xffffff, 2, 0, 0.1);
172
- lights[1] = new THREE.PointLight(0xffffff, 2, 0, 0.1);
173
- lights[2] = new THREE.PointLight(0xffffff, 2, 0, 0.1);
174
- lights[0].position.set(0, 2000, 0);
175
- lights[1].position.set(1000, 2000, 1000);
176
- lights[2].position.set(-1000, -2000, -1000);
177
- lights[0].castShadow = true;
178
- lights[1].castShadow = true;
179
- lights[2].castShadow = true;
180
- this.scene.add(lights[0]);
181
- this.scene.add(lights[1]);
182
- this.scene.add(lights[2]);
183
- this.previewService.updateFixtureSetup();
184
- }
185
- ngAfterViewInit() {
186
- this.setupRenderer();
187
- this.setupCamera();
188
- this.setupControls();
189
- this.setupScene();
190
- this.onResize();
191
- this.animate(null);
192
- }
193
- static { this.ɵfac = function PreviewComponent_Factory(t) { return new (t || PreviewComponent)(i0.ɵɵdirectiveInject(i1.FixtureService), i0.ɵɵdirectiveInject(i2.PreviewMeshService), i0.ɵɵdirectiveInject(i3.AnimationService), i0.ɵɵdirectiveInject(i4.PreviewService), i0.ɵɵdirectiveInject(i5.TimelineService), i0.ɵɵdirectiveInject(i6.ProjectService)); }; }
194
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PreviewComponent, selectors: [["lib-app-preview"]], viewQuery: function PreviewComponent_Query(rf, ctx) { if (rf & 1) {
195
- i0.ɵɵviewQuery(_c0, 5);
196
- } if (rf & 2) {
197
- let _t;
198
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.canvasRef = _t.first);
199
- } }, hostBindings: function PreviewComponent_HostBindings(rf, ctx) { if (rf & 1) {
200
- i0.ɵɵlistener("resize", function PreviewComponent_resize_HostBindingHandler() { return ctx.onResize(); }, false, i0.ɵɵresolveWindow);
201
- } }, decls: 2, vars: 0, consts: [["canvas", ""], [1, "h-100", 2, "overflow", "hidden"]], template: function PreviewComponent_Template(rf, ctx) { if (rf & 1) {
202
- i0.ɵɵelement(0, "div", 1, 0);
203
- } } }); }
204
- }
205
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PreviewComponent, [{
206
- type: Component,
207
- args: [{ selector: 'lib-app-preview', template: "<div class=\"h-100\" #canvas style=\"overflow: hidden\"></div>\n" }]
208
- }], () => [{ type: i1.FixtureService }, { type: i2.PreviewMeshService }, { type: i3.AnimationService }, { type: i4.PreviewService }, { type: i5.TimelineService }, { type: i6.ProjectService }], { canvasRef: [{
209
- type: ViewChild,
210
- args: ['canvas']
211
- }], onResize: [{
212
- type: HostListener,
213
- args: ['window:resize']
214
- }] }); })();
215
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PreviewComponent, { className: "PreviewComponent" }); })();
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3ByZXZpZXcvcHJldmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3ByZXZpZXcvcHJldmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7O0FBT3ZELE1BQU0sT0FBTyxnQkFBZ0I7SUFXM0IsWUFDVSxjQUE4QixFQUM5QixrQkFBc0MsRUFDdEMsZ0JBQWtDLEVB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QUFJLENBQUM7UUFDNUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDNUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JCLENBQUM7aUZBaFFVLGdCQUFnQjtvRUFBaEIsZ0JBQWdCOzs7Ozs7WUFBaEIsdUZBQUEsY0FBVSwrQkFBTTs7WUNwQjdCLDRCQUEwRDs7O2lGRG9CN0MsZ0JBQWdCO2NBTDVCLFNBQVM7MkJBQ0UsaUJBQWlCO3VNQWFuQixTQUFTO2tCQURoQixTQUFTO21CQUFDLFFBQVE7WUEwS1osUUFBUTtrQkFEZCxZQUFZO21CQUFDLGVBQWU7O2tGQWpMbEIsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgT3JiaXRDb250cm9scyB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9jb250cm9scy9PcmJpdENvbnRyb2xzJztcbmltcG9ydCB7IEZpeHR1cmVDYXRlZ29yeSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLXByb2ZpbGUnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJldmlld01lc2hTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJldmlldy1tZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJldmlld1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcmV2aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvamVjdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9qZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGltZWxpbmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGltZWxpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBQb3NpdGlvbmluZyB9IGZyb20gJy4vLi4vbW9kZWxzL2ZpeHR1cmUnO1xuaW1wb3J0IHsgQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4vLi4vc2VydmljZXMvYW5pbWF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29sb3JDaGFuZ2VyM2QgfSBmcm9tICcuL21vZGVscy9jb2xvci1jaGFuZ2VyLTNkJztcbmltcG9ydCB7IEZpeHR1cmUzZCB9IGZyb20gJy4vbW9kZWxzL2ZpeHR1cmUtM2QnO1xuaW1wb3J0IHsgTW92aW5nSGVhZDNkIH0gZnJvbSAnLi9tb2RlbHMvbW92aW5nLWhlYWQtM2QnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYXBwLXByZXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJldmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ByZXZpZXcuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgcmVuZGVyZXI6IFRIUkVFLldlYkdMUmVuZGVyZXI7XG4gIHByaXZhdGUgc2NlbmU6IFRIUkVFLlNjZW5lID0gbmV3IFRIUkVFLlNjZW5lKCk7XG4gIHByaXZhdGUgY2FtZXJhOiBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYTtcbiAgcHVibGljIGNvbnRyb2xzOiBPcmJpdENvbnRyb2xzO1xuXG4gIHByaXZhdGUgZml4dHVyZXMzZDogRml4dHVyZTNkW10gPSBbXTtcblxuICBAVmlld0NoaWxkKCdjYW52YXMnKVxuICBwcml2YXRlIGNhbnZhc1JlZjogRWxlbWVudFJlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZpeHR1cmVTZXJ2aWNlOiBGaXh0dXJlU2VydmljZSxcbiAgICBwcml2YXRlIHByZXZpZXdNZXNoU2VydmljZTogUHJldmlld01lc2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgYW5pbWF0aW9uU2VydmljZTogQW5pbWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHByZXZpZXdTZXJ2aWNlOiBQcmV2aWV3U2VydmljZSxcbiAgICBwcml2YXRlIHRpbWVsaW5lU2VydmljZTogVGltZWxpbmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucHJldmlld1NlcnZpY2UuZG9VcGRhdGVGaXh0dXJlU2V0dXAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc3luY0ZpeHR1cmVzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5zeW5jRml4dHVyZXMoKTtcbiAgfVxuXG4gIC8vIHN5bmNocm9uaXplIHRoZSAzZC1maXh0dXJlcyB0byB0aGUgcHJvamVjdCBmaXh0dXJlc1xuICBwcml2YXRlIHN5bmNGaXh0dXJlcygpIHtcbiAgICBpZiAoIXRoaXMucHJldmlld1NlcnZpY2Uuc2NlbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgYWxsIGZpeHR1cmVzXG4gICAgZm9yIChjb25zdCBmaXh0dXJlM2Qgb2YgdGhpcy5maXh0dXJlczNkKSB7XG4gICAgICBmaXh0dXJlM2QuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLmZpeHR1cmVzM2QgPSBbXTtcblxuICAgIC8vIGFkZCBhbGwgZml4dHVyZXMgZnJvbSB0aGUgcHJvamVjdFxuICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhY2hlZEZpeHR1cmVzKSB7XG4gICAgICBzd2l0Y2ggKGZpeHR1cmUucHJvZmlsZS5jYXRlZ29yaWVzWzBdKSB7XG4gICAgICAgIGNhc2UgRml4dHVyZUNhdGVnb3J5WydNb3ZpbmcgSGVhZCddOlxuICAgICAgICAgIHRoaXMuZml4dHVyZXMzZC5wdXNoKG5ldyBNb3ZpbmdIZWFkM2QodGhpcy5maXh0dXJlU2VydmljZSwgdGhpcy5wcmV2aWV3U2VydmljZSwgdGhpcy5wcmV2aWV3TWVzaFNlcnZpY2UsIGZpeHR1cmUsIHRoaXMuc2NlbmUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGaXh0dXJlQ2F0ZWdvcnlbJ0NvbG9yIENoYW5nZXInXTpcbiAgICAgICAgICB0aGlzLmZpeHR1cmVzM2QucHVzaChuZXcgQ29sb3JDaGFuZ2VyM2QodGhpcy5maXh0dXJlU2VydmljZSwgdGhpcy5wcmV2aWV3U2VydmljZSwgdGhpcy5wcmV2aWV3TWVzaFNlcnZpY2UsIGZpeHR1cmUsIHRoaXMuc2NlbmUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGaXh0dXJlQ2F0ZWdvcnlbJ0JsaW5kZXInXTpcbiAgICAgICAgICB0aGlzLmZpeHR1cmVzM2QucHVzaChuZXcgQ29sb3JDaGFuZ2VyM2QodGhpcy5maXh0dXJlU2VydmljZSwgdGhpcy5wcmV2aWV3U2VydmljZSwgdGhpcy5wcmV2aWV3TWVzaFNlcnZpY2UsIGZpeHR1cmUsIHRoaXMuc2NlbmUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBjYW52YXMoKTogSFRNTENhbnZhc0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmNhbnZhc1JlZi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXIoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgdGhpcy5jYW1lcmEpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGFnZVBvc2l0aW9uKFxuICAgIHBvc2l0aW9uaW5nOiBQb3NpdGlvbmluZyxcbiAgICB4TWluOiBudW1iZXIsXG4gICAgeE1heDogbnVtYmVyLFxuICAgIHlNaW46IG51bWJlcixcbiAgICB5TWF4OiBudW1iZXIsXG4gICAgek1pbjogbnVtYmVyLFxuICAgIHpNYXg6IG51bWJlclxuICApIHtcbiAgICBsZXQgcG9zaXRpb25Db3VudCA9IDA7IC8vIE51bWJlciBvZiBmaXh0dXJlcyBpbiB0aGUgc2FtZSBwb3NpdGlvblxuICAgIGxldCBwb3NpdGlvbkluZGV4ID0gMTtcblxuICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRGaXh0dXJlcy5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZChlbGVtZW50LmZpeHR1cmVVdWlkKTtcbiAgICAgIGlmIChmaXh0dXJlLnBvc2l0aW9uaW5nID09PSBwb3NpdGlvbmluZykge1xuICAgICAgICBwb3NpdGlvbkNvdW50Kys7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0Rml4dHVyZXMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQoZWxlbWVudC5maXh0dXJlVXVpZCk7XG4gICAgICBpZiAoZml4dHVyZS5wb3NpdGlvbmluZyA9PT0gcG9zaXRpb25pbmcpIHtcbiAgICAgICAgZml4dHVyZS5wb3NpdGlvblggPSB4TWluICsgKCh4TWF4IC0geE1pbikgLyAocG9zaXRpb25Db3VudCArIDEpKSAqIHBvc2l0aW9uSW5kZXg7XG4gICAgICAgIGZpeHR1cmUucG9zaXRpb25ZID0geU1pbiArICgoeU1heCAtIHlNaW4pIC8gKHBvc2l0aW9uQ291bnQgKyAxKSkgKiBwb3NpdGlvbkluZGV4O1xuICAgICAgICBmaXh0dXJlLnBvc2l0aW9uWiA9IHpNaW4gKyAoKHpNYXggLSB6TWluKSAvIChwb3NpdGlvbkNvdW50ICsgMSkpICogcG9zaXRpb25JbmRleDtcblxuICAgICAgICBwb3NpdGlvbkluZGV4Kys7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFuaW1hdGUodGltZU1pbGxpczogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMudGltZWxpbmVTZXJ2aWNlLnBsYXlTdGF0ZSA9PT0gJ3BsYXlpbmcnKSB7XG4gICAgICAvLyBPdmVyd3JpdGUgdGhlIGN1cnJlbnQgdGltZSB3aXRoIHRoZSBwbGF5aW5nIHRpbWUsIGlmIHdlJ3JlIGluIHBsYXliYWNrIG1vZGVcbiAgICAgIHRpbWVNaWxsaXMgPSB0aGlzLnRpbWVsaW5lU2VydmljZS53YXZlU3VyZmVyLmdldEN1cnJlbnRUaW1lKCkgKiAxMDAwO1xuICAgIH1cblxuICAgIHRoaXMuYW5pbWF0aW9uU2VydmljZS50aW1lTWlsbGlzID0gdGltZU1pbGxpcztcblxuICAgIC8vIFVwZGF0ZSB0aGUgY29udHJvbHNcbiAgICBpZiAodGhpcy5jb250cm9scykge1xuICAgICAgdGhpcy5jb250cm9scy51cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uc1xuICAgIHRoaXMudXBkYXRlU3RhZ2VQb3NpdGlvbihcbiAgICAgIFBvc2l0aW9uaW5nLnRvcEZyb250LFxuICAgICAgLXRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSAvIDIsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiAtIDcwLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSAvIDIgLSA3MFxuICAgICk7XG4gICAgdGhpcy51cGRhdGVTdGFnZVBvc2l0aW9uKFxuICAgICAgUG9zaXRpb25pbmcuYm90dG9tRnJvbnQsXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSAvIDIsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSAvIDIgLSA3MCxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ20gLyAyIC0gNzBcbiAgICApO1xuICAgIHRoaXMudXBkYXRlU3RhZ2VQb3NpdGlvbihcbiAgICAgIFBvc2l0aW9uaW5nLnRvcEJhY2ssXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSAvIDIsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiArIDcwLFxuICAgICAgLXRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ20gLyAyICsgNzBcbiAgICApO1xuICAgIHRoaXMudXBkYXRlU3RhZ2VQb3NpdGlvbihcbiAgICAgIFBvc2l0aW9uaW5nLmJvdHRvbUJhY2ssXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSAvIDIsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgLXRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ20gLyAyICsgNzAsXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSAvIDIgKyA3MFxuICAgICk7XG5cbiAgICAvLyBVcGRhdGUgYWxsIGZpeHR1cmVzIGFuZCBhcHBseSB0aGUgcHJldmlldyBwcm9wZXJ0aWVzLCBpZiBhdmFpbGFibGVcbiAgICAvLyBUT0RPIFVwZGF0ZSB0aGUgZml4dHVyZXMgb25seSBlLmcuIDQwIHRpbWVzIHBlciBzZWNvbmQgYWNjb3JkaW5nIHRvIHRoZSBcInJlYWxcIiByZWZyZXNoIHJhdGUgb2YgdGhlIERNWCBpbnRlcmZhY2U/XG4gICAgY29uc3QgcHJlc2V0cyA9IHRoaXMucHJldmlld1NlcnZpY2UuZ2V0UHJlc2V0cyh0aW1lTWlsbGlzKTtcblxuICAgIGNvbnN0IGNhbGN1bGF0ZWRGaXh0dXJlcyA9IHRoaXMucHJldmlld1NlcnZpY2UuZ2V0Q2hhbm5lbFZhbHVlcyh0aW1lTWlsbGlzLCBwcmVzZXRzKTtcblxuICAgIGZvciAoY29uc3QgZml4dHVyZTNkIG9mIHRoaXMuZml4dHVyZXMzZCkge1xuICAgICAgLy8gVXBkYXRlIHRoZSBmaXh0dXJlIHByb3BlcnRpZXNcbiAgICAgIGZpeHR1cmUzZC51cGRhdGVQcmV2aWV3KGNhbGN1bGF0ZWRGaXh0dXJlcy5nZXQoZml4dHVyZTNkLmZpeHR1cmUpIHx8IFtdLCB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QubWFzdGVyRGltbWVyVmFsdWUpO1xuXG4gICAgICAvLyBTZWxlY3QgdGhlIGZpeHR1cmUsIGlmIHJlcXVpcmVkXG4gICAgICBpZiAodGhpcy5maXh0dXJlU2VydmljZS5zZXR0aW5nc1NlbGVjdGlvbikge1xuICAgICAgICBmaXh0dXJlM2QuaXNTZWxlY3RlZCA9IHRoaXMuZml4dHVyZVNlcnZpY2Uuc2V0dGluZ3NGaXh0dXJlSXNTZWxlY3RlZChmaXh0dXJlM2QuZml4dHVyZS5maXh0dXJlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpeHR1cmUzZC5pc1NlbGVjdGVkID0gdGhpcy5wcmV2aWV3U2VydmljZS5maXh0dXJlSXNTZWxlY3RlZChmaXh0dXJlM2QuZml4dHVyZS5maXh0dXJlLnV1aWQsIGZpeHR1cmUzZC5maXh0dXJlLnBpeGVsS2V5LCBwcmVzZXRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgdGhlIHNjZW5lXG4gICAgdGhpcy5yZW5kZXIoKTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1hdGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFzcGVjdFJhdGlvKCk6IG51bWJlciB7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0O1xuXG4gICAgaWYgKGhlaWdodCA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2FudmFzLmNsaWVudFdpZHRoIC8gdGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIHB1YmxpYyBvblJlc2l6ZSgpIHtcbiAgICB0aGlzLmNhbWVyYS5hc3BlY3QgPSB0aGlzLmdldEFzcGVjdFJhdGlvKCk7XG4gICAgdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U2l6ZSh0aGlzLmNhbnZhcy5jbGllbnRXaWR0aCwgdGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBSZW5kZXJlcigpIHtcbiAgICB0aGlzLnJlbmRlcmVyID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyZXIoeyBhbnRpYWxpYXM6IHRydWUgfSk7XG4gICAgdGhpcy5jYW52YXMuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJlci5kb21FbGVtZW50KTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8oZGV2aWNlUGl4ZWxSYXRpbyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTaXplKHRoaXMuY2FudmFzLmNsaWVudFdpZHRoLCB0aGlzLmNhbnZhcy5jbGllbnRIZWlnaHQpO1xuICAgIC8vIHRoaXMucmVuZGVyZXIuc2hhZG93TWFwLmVuYWJsZWQgPSB0cnVlO1xuICAgIC8vIHRoaXMucmVuZGVyZXIuZ2FtbWFJbnB1dCA9IHRydWU7XG4gICAgLy8gdGhpcy5yZW5kZXJlci5nYW1tYU91dHB1dCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQ2FtZXJhKCkge1xuICAgIHRoaXMuY2FtZXJhID0gbmV3IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhKDM1LCB3aW5kb3cuaW5uZXJXaWR0aCAvIHdpbmRvdy5pbm5lckhlaWdodCwgMSwgMTAwMDApO1xuICAgIHRoaXMuY2FtZXJhLnBvc2l0aW9uLnNldCgtNjAwLCA4MCwgNzAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBDb250cm9scygpIHtcbiAgICB0aGlzLmNvbnRyb2xzID0gbmV3IE9yYml0Q29udHJvbHModGhpcy5jYW1lcmEsIHRoaXMucmVuZGVyZXIuZG9tRWxlbWVudCk7XG4gICAgdGhpcy5jb250cm9scy5lbmFibGVLZXlzID0gZmFsc2U7XG4gICAgdGhpcy5jb250cm9scy5yb3RhdGVTcGVlZCA9IDAuMDU7XG4gICAgdGhpcy5jb250cm9scy56b29tU3BlZWQgPSAxLjI7XG4gICAgdGhpcy5jb250cm9scy5lbmFibGVEYW1waW5nID0gdHJ1ZTtcbiAgICB0aGlzLmNvbnRyb2xzLmRhbXBpbmdGYWN0b3IgPSAwLjI1O1xuICAgIHRoaXMuY29udHJvbHMuc2NyZWVuU3BhY2VQYW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jb250cm9scy5taW5EaXN0YW5jZSA9IDcwMDtcbiAgICAvLyB0aGlzLmNvbnRyb2xzLnpvb20gPSAxMDAwO1xuICAgIHRoaXMuY29udHJvbHMubWF4RGlzdGFuY2UgPSAyMDAwO1xuICAgIHRoaXMuY29udHJvbHMubWF4UG9sYXJBbmdsZSA9IE1hdGguUEkgLyAyO1xuICAgIHRoaXMuY29udHJvbHMudGFyZ2V0ID0gbmV3IFRIUkVFLlZlY3RvcjMoMCwgMjAwLCAwKTtcbiAgICAvLyB0aGlzLmNvbnRyb2xzLnJvdGF0aW9uID0gMTAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFNjZW5lKCkge1xuICAgIC8vIHRoaXMuc2NlbmUuYmFja2dyb3VuZCA9IG5ldyBUSFJFRS5Db2xvcigweDA4MDgwOCk7XG4gICAgLy8gdGhpcy5zY2VuZS5mb2dcdD0gbmV3IFRIUkVFLkZvZ0V4cDIoIDB4MDAwMDAwLCAwLjEgKTtcblxuICAgIHRoaXMucHJldmlld1NlcnZpY2Uuc2NlbmUgPSB0aGlzLnNjZW5lO1xuXG4gICAgLy8gQWRkIGEgbGl0dGxlIGJpdCBvZiBhbWJpZW50IGxpZ2h0XG4gICAgY29uc3QgYW1iaWVudCA9IG5ldyBUSFJFRS5BbWJpZW50TGlnaHQoMHhmZmZmZmYsIDEuOCk7XG4gICAgdGhpcy5zY2VuZS5hZGQoYW1iaWVudCk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIHN0YWdlIGRpbWVuc2lvbnNcbiAgICB0aGlzLnByZXZpZXdTZXJ2aWNlLnVwZGF0ZVN0YWdlKCk7XG5cbiAgICBjb25zdCBsaWdodHMgPSBbXTtcbiAgICBsaWdodHNbMF0gPSBuZXcgVEhSRUUuUG9pbnRMaWdodCgweGZmZmZmZiwgMiwgMCwgMC4xKTtcbiAgICBsaWdodHNbMV0gPSBuZXcgVEhSRUUuUG9pbnRMaWdodCgweGZmZmZmZiwgMiwgMCwgMC4xKTtcbiAgICBsaWdodHNbMl0gPSBuZXcgVEhSRUUuUG9pbnRMaWdodCgweGZmZmZmZiwgMiwgMCwgMC4xKTtcblxuICAgIGxpZ2h0c1swXS5wb3NpdGlvbi5zZXQoMCwgMjAwMCwgMCk7XG4gICAgbGlnaHRzWzFdLnBvc2l0aW9uLnNldCgxMDAwLCAyMDAwLCAxMDAwKTtcbiAgICBsaWdodHNbMl0ucG9zaXRpb24uc2V0KC0xMDAwLCAtMjAwMCwgLTEwMDApO1xuXG4gICAgbGlnaHRzWzBdLmNhc3RTaGFkb3cgPSB0cnVlO1xuICAgIGxpZ2h0c1sxXS5jYXN0U2hhZG93ID0gdHJ1ZTtcbiAgICBsaWdodHNbMl0uY2FzdFNoYWRvdyA9IHRydWU7XG5cbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodHNbMF0pO1xuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0c1sxXSk7XG4gICAgdGhpcy5zY2VuZS5hZGQobGlnaHRzWzJdKTtcblxuICAgIHRoaXMucHJldmlld1NlcnZpY2UudXBkYXRlRml4dHVyZVNldHVwKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXR1cFJlbmRlcmVyKCk7XG4gICAgdGhpcy5zZXR1cENhbWVyYSgpO1xuICAgIHRoaXMuc2V0dXBDb250cm9scygpO1xuICAgIHRoaXMuc2V0dXBTY2VuZSgpO1xuXG4gICAgdGhpcy5vblJlc2l6ZSgpO1xuICAgIHRoaXMuYW5pbWF0ZShudWxsKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImgtMTAwXCIgI2NhbnZhcyBzdHlsZT1cIm92ZXJmbG93OiBoaWRkZW5cIj48L2Rpdj5cbiJdfQ==
@@ -1,143 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { BsModalRef } from 'ngx-bootstrap/modal';
3
- import { map } from 'rxjs/operators';
4
- import { ConfigService } from '../../services/config.service';
5
- import { ProjectLoadService } from '../../services/project-load.service';
6
- import { ProjectService } from '../../services/project.service';
7
- import { UserService } from '../../services/user.service';
8
- import { WarningDialogService } from '../../services/warning-dialog.service';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "ngx-bootstrap/modal";
11
- import * as i2 from "../../services/project.service";
12
- import * as i3 from "../../services/project-load.service";
13
- import * as i4 from "../../services/user.service";
14
- import * as i5 from "../../services/warning-dialog.service";
15
- import * as i6 from "../../services/config.service";
16
- import * as i7 from "@angular/common";
17
- import * as i8 from "@ngx-translate/core";
18
- import * as i9 from "../../array-sort-pipe";
19
- function ProjectBrowserComponent_div_8_Template(rf, ctx) { if (rf & 1) {
20
- i0.ɵɵelementStart(0, "div", 10)(1, "p", 11);
21
- i0.ɵɵelement(2, "i", 12);
22
- i0.ɵɵelementEnd()();
23
- } }
24
- function ProjectBrowserComponent_div_9_Template(rf, ctx) { if (rf & 1) {
25
- i0.ɵɵelementStart(0, "div", 10)(1, "p", 11);
26
- i0.ɵɵtext(2);
27
- i0.ɵɵpipe(3, "translate");
28
- i0.ɵɵelementEnd()();
29
- } if (rf & 2) {
30
- i0.ɵɵadvance(2);
31
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 1, "designer.project.browser-empty"), " ");
32
- } }
33
- function ProjectBrowserComponent_div_10_div_1_Template(rf, ctx) { if (rf & 1) {
34
- const _r1 = i0.ɵɵgetCurrentView();
35
- i0.ɵɵelementStart(0, "div", 15)(1, "div", 16)(2, "div", 17)(3, "a", 18);
36
- i0.ɵɵlistener("click", function ProjectBrowserComponent_div_10_div_1_Template_a_click_3_listener() { const project_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.openProject(project_r2); return i0.ɵɵresetView(false); });
37
- i0.ɵɵelementStart(4, "p", 19);
38
- i0.ɵɵtext(5);
39
- i0.ɵɵelementEnd()()();
40
- i0.ɵɵelementStart(6, "div", 20)(7, "div", 21);
41
- i0.ɵɵlistener("click", function ProjectBrowserComponent_div_10_div_1_Template_div_click_7_listener() { const project_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.deleteProject(project_r2); return i0.ɵɵresetView(false); });
42
- i0.ɵɵelement(8, "i", 22);
43
- i0.ɵɵelementEnd()()()();
44
- } if (rf & 2) {
45
- const project_r2 = ctx.$implicit;
46
- i0.ɵɵadvance(5);
47
- i0.ɵɵtextInterpolate(project_r2.name);
48
- } }
49
- function ProjectBrowserComponent_div_10_Template(rf, ctx) { if (rf & 1) {
50
- i0.ɵɵelementStart(0, "div", 13);
51
- i0.ɵɵtemplate(1, ProjectBrowserComponent_div_10_div_1_Template, 9, 1, "div", 14);
52
- i0.ɵɵpipe(2, "sort");
53
- i0.ɵɵelementEnd();
54
- } if (rf & 2) {
55
- const ctx_r2 = i0.ɵɵnextContext();
56
- i0.ɵɵadvance();
57
- i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(2, 1, ctx_r2.projects, "name"));
58
- } }
59
- export class ProjectBrowserComponent {
60
- constructor(bsModalRef, projectService, projectLoadService, userService, warningDialogService, configService) {
61
- this.bsModalRef = bsModalRef;
62
- this.projectService = projectService;
63
- this.projectLoadService = projectLoadService;
64
- this.userService = userService;
65
- this.warningDialogService = warningDialogService;
66
- this.configService = configService;
67
- this.projects = [];
68
- this.loading = true;
69
- this.loadProjects();
70
- }
71
- loadProjects() {
72
- this.projectService.getAllProjects().subscribe((projects) => {
73
- this.projects = projects;
74
- this.loading = false;
75
- });
76
- }
77
- ngOnInit() { }
78
- cancel() {
79
- this.bsModalRef.hide();
80
- }
81
- openProject(project) {
82
- this.bsModalRef.hide();
83
- this.projectLoadService.load(project.id, project.name).subscribe(() => {
84
- this.userService.setAutoLoadProject(project);
85
- });
86
- }
87
- deleteProject(project) {
88
- this.warningDialogService
89
- .show('designer.project.delete-warning')
90
- .pipe(map((result) => {
91
- if (result) {
92
- this.projectService.deleteProject(project).subscribe((projects) => {
93
- this.loadProjects();
94
- });
95
- }
96
- }))
97
- .subscribe();
98
- }
99
- static { this.ɵfac = function ProjectBrowserComponent_Factory(t) { return new (t || ProjectBrowserComponent)(i0.ɵɵdirectiveInject(i1.BsModalRef), i0.ɵɵdirectiveInject(i2.ProjectService), i0.ɵɵdirectiveInject(i3.ProjectLoadService), i0.ɵɵdirectiveInject(i4.UserService), i0.ɵɵdirectiveInject(i5.WarningDialogService), i0.ɵɵdirectiveInject(i6.ConfigService)); }; }
100
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ProjectBrowserComponent, selectors: [["lib-project-browser"]], decls: 18, vars: 12, consts: [[1, "modal-header"], [1, "modal-title", "pull-left"], ["type", "button", "aria-label", "Close", 1, "close", "pull-right", 3, "click"], ["aria-hidden", "true"], [1, "modal-body", "p-0"], ["class", "m-2 d-flex w-100", 4, "ngIf"], ["class", "list-group list-group-flush", "style", "max-height: 500px; overflow-y: scroll", 4, "ngIf"], [1, "modal-footer"], ["href", "#", "role", "button", 1, "mr-3", "my-auto", 3, "click"], ["type", "button", 1, "btn", "btn-primary", 3, "click"], [1, "m-2", "d-flex", "w-100"], [1, "w-100", 2, "text-align", "center"], [1, "fa", "fa-spinner", "fa-pulse", "fa-fw"], [1, "list-group", "list-group-flush", 2, "max-height", "500px", "overflow-y", "scroll"], ["class", "list-group-item", 4, "ngFor", "ngForOf"], [1, "list-group-item"], [1, "row"], [1, "col-auto", "my-auto", "flex-grow"], ["href", "#", 3, "click"], [1, "mb-0", "w-100"], [1, "my-auto"], [1, "col-auto", "my-auto", "pl-0", "text-danger", "float-right", 2, "cursor", "pointer", 3, "click"], ["aria-hidden", "true", 1, "fa", "fa-trash-o"]], template: function ProjectBrowserComponent_Template(rf, ctx) { if (rf & 1) {
101
- i0.ɵɵelementStart(0, "div", 0)(1, "h4", 1);
102
- i0.ɵɵtext(2);
103
- i0.ɵɵpipe(3, "translate");
104
- i0.ɵɵelementEnd();
105
- i0.ɵɵelementStart(4, "button", 2);
106
- i0.ɵɵlistener("click", function ProjectBrowserComponent_Template_button_click_4_listener() { ctx.cancel(); return false; });
107
- i0.ɵɵelementStart(5, "span", 3);
108
- i0.ɵɵtext(6, "\u00D7");
109
- i0.ɵɵelementEnd()()();
110
- i0.ɵɵelementStart(7, "div", 4);
111
- i0.ɵɵtemplate(8, ProjectBrowserComponent_div_8_Template, 3, 0, "div", 5)(9, ProjectBrowserComponent_div_9_Template, 4, 3, "div", 5)(10, ProjectBrowserComponent_div_10_Template, 3, 4, "div", 6);
112
- i0.ɵɵelementEnd();
113
- i0.ɵɵelementStart(11, "div", 7)(12, "a", 8);
114
- i0.ɵɵlistener("click", function ProjectBrowserComponent_Template_a_click_12_listener() { ctx.cancel(); return false; });
115
- i0.ɵɵtext(13);
116
- i0.ɵɵpipe(14, "translate");
117
- i0.ɵɵelementEnd();
118
- i0.ɵɵelementStart(15, "button", 9);
119
- i0.ɵɵlistener("click", function ProjectBrowserComponent_Template_button_click_15_listener() { ctx.cancel(); return false; });
120
- i0.ɵɵtext(16);
121
- i0.ɵɵpipe(17, "translate");
122
- i0.ɵɵelementEnd()();
123
- } if (rf & 2) {
124
- i0.ɵɵadvance(2);
125
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 6, "designer.project.browser-title"));
126
- i0.ɵɵadvance(6);
127
- i0.ɵɵproperty("ngIf", ctx.loading);
128
- i0.ɵɵadvance();
129
- i0.ɵɵproperty("ngIf", ctx.projects.length == 0 && !ctx.loading);
130
- i0.ɵɵadvance();
131
- i0.ɵɵproperty("ngIf", !ctx.loading);
132
- i0.ɵɵadvance(3);
133
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(14, 8, "designer.misc.cancel"), " ");
134
- i0.ɵɵadvance(3);
135
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(17, 10, "designer.misc.ok"));
136
- } }, dependencies: [i7.NgForOf, i7.NgIf, i8.TranslatePipe, i9.ArraySortPipe] }); }
137
- }
138
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ProjectBrowserComponent, [{
139
- type: Component,
140
- args: [{ selector: 'lib-project-browser', template: "<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.project.browser-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel(); (false)\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body p-0\">\n <div *ngIf=\"loading\" class=\"m-2 d-flex w-100\">\n <p class=\"w-100\" style=\"text-align: center\"><i class=\"fa fa-spinner fa-pulse fa-fw\"></i></p>\n </div>\n <div *ngIf=\"projects.length == 0 && !loading\" class=\"m-2 d-flex w-100\">\n <p class=\"w-100\" style=\"text-align: center\">\n {{ 'designer.project.browser-empty' | translate }}\n </p>\n </div>\n <div *ngIf=\"!loading\" class=\"list-group list-group-flush\" style=\"max-height: 500px; overflow-y: scroll\">\n <div class=\"list-group-item\" *ngFor=\"let project of projects | sort: 'name'\">\n <div class=\"row\">\n <div class=\"col-auto my-auto flex-grow\">\n <a href=\"#\" (click)=\"openProject(project); (false)\">\n <p class=\"mb-0 w-100\">{{ project.name }}</p>\n </a>\n </div>\n <div class=\"my-auto\">\n <div class=\"col-auto my-auto pl-0 text-danger float-right\" style=\"cursor: pointer\" (click)=\"deleteProject(project); (false)\">\n <i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button (click)=\"cancel(); (false)\" type=\"button\" class=\"btn btn-primary\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n" }]
141
- }], () => [{ type: i1.BsModalRef }, { type: i2.ProjectService }, { type: i3.ProjectLoadService }, { type: i4.UserService }, { type: i5.WarningDialogService }, { type: i6.ConfigService }], null); })();
142
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ProjectBrowserComponent, { className: "ProjectBrowserComponent" }); })();
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC1icm93c2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvcHJvamVjdC9wcm9qZWN0LWJyb3dzZXIvcHJvamVjdC1icm93c2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvcHJvamVjdC9wcm9qZWN0LWJyb3dzZXIvcHJvamVjdC1icm93c2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7Ozs7O0lDQXpFLEFBREYsK0JBQThDLFlBQ0E7SUFBQSx3QkFBNEM7SUFDMUYsQUFEMEYsaUJBQUksRUFDeEY7OztJQUVKLEFBREYsK0JBQXVFLFlBQ3pCO0lBQzFDLFlBQ0Y7O0lBQ0YsQUFERSxpQkFBSSxFQUNBOztJQUZGLGVBQ0Y7SUFERSx1RkFDRjs7OztJQU1NLEFBREYsQUFERixBQURGLCtCQUE2RSxjQUMxRCxjQUN5QixZQUNjO0lBQXhDLDZMQUFTLDhCQUFvQix3QkFBRyxLQUFLLEtBQUU7SUFDakQsNkJBQXNCO0lBQUEsWUFB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LDhGQUFTLFlBQVEsU0FBRyxLQUFLLElBQUU7WUFBdUMsYUFBb0M7O1lBQ2hILEFBRGdILGlCQUFTLEVBQ25IOztZQXBDOEIsZUFBa0Q7WUFBbEQsNEVBQWtEO1lBTTlFLGVBQWE7WUFBYixrQ0FBYTtZQUdiLGNBQXNDO1lBQXRDLCtEQUFzQztZQUt0QyxjQUFjO1lBQWQsbUNBQWM7WUFtQmxCLGVBQ0Y7WUFERSw4RUFDRjtZQUMwRSxlQUFvQztZQUFwQyxnRUFBb0M7OztpRkRyQm5HLHVCQUF1QjtjQUxuQyxTQUFTOzJCQUNFLHFCQUFxQjs7a0ZBSXBCLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Byb2plY3QnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RMb2FkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2plY3QtbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFdhcm5pbmdEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd2FybmluZy1kaWFsb2cuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1wcm9qZWN0LWJyb3dzZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvamVjdC1icm93c2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJvamVjdC1icm93c2VyLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvamVjdEJyb3dzZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcm9qZWN0czogUHJvamVjdFtdID0gW107XG4gIGxvYWRpbmcgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYnNNb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIHByb2plY3RTZXJ2aWNlOiBQcm9qZWN0U2VydmljZSxcbiAgICBwcml2YXRlIHByb2plY3RMb2FkU2VydmljZTogUHJvamVjdExvYWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgd2FybmluZ0RpYWxvZ1NlcnZpY2U6IFdhcm5pbmdEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZVxuICApIHtcbiAgICB0aGlzLmxvYWRQcm9qZWN0cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUHJvamVjdHMoKSB7XG4gICAgdGhpcy5wcm9qZWN0U2VydmljZS5nZXRBbGxQcm9qZWN0cygpLnN1YnNjcmliZSgocHJvamVjdHMpID0+IHtcbiAgICAgIHRoaXMucHJvamVjdHMgPSBwcm9qZWN0cztcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7fVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICB9XG5cbiAgb3BlblByb2plY3QocHJvamVjdDogUHJvamVjdCkge1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gICAgdGhpcy5wcm9qZWN0TG9hZFNlcnZpY2UubG9hZChwcm9qZWN0LmlkLCBwcm9qZWN0Lm5hbWUpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLnNldEF1dG9Mb2FkUHJvamVjdChwcm9qZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZVByb2plY3QocHJvamVjdDogUHJvamVjdCkge1xuICAgIHRoaXMud2FybmluZ0RpYWxvZ1NlcnZpY2VcbiAgICAgIC5zaG93KCdkZXNpZ25lci5wcm9qZWN0LmRlbGV0ZS13YXJuaW5nJylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UuZGVsZXRlUHJvamVjdChwcm9qZWN0KS5zdWJzY3JpYmUoKHByb2plY3RzKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZFByb2plY3RzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0XCI+e3sgJ2Rlc2lnbmVyLnByb2plY3QuYnJvd3Nlci10aXRsZScgfCB0cmFuc2xhdGUgfX08L2g0PlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlIHB1bGwtcmlnaHRcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwiY2FuY2VsKCk7IChmYWxzZSlcIj5cbiAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgcC0wXCI+XG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJtLTIgZC1mbGV4IHctMTAwXCI+XG4gICAgPHAgY2xhc3M9XCJ3LTEwMFwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+PGkgY2xhc3M9XCJmYSBmYS1zcGlubmVyIGZhLXB1bHNlIGZhLWZ3XCI+PC9pPjwvcD5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJwcm9qZWN0cy5sZW5ndGggPT0gMCAmJiAhbG9hZGluZ1wiIGNsYXNzPVwibS0yIGQtZmxleCB3LTEwMFwiPlxuICAgIDxwIGNsYXNzPVwidy0xMDBcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlclwiPlxuICAgICAge3sgJ2Rlc2lnbmVyLnByb2plY3QuYnJvd3Nlci1lbXB0eScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmdcIiBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiIHN0eWxlPVwibWF4LWhlaWdodDogNTAwcHg7IG92ZXJmbG93LXk6IHNjcm9sbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIiAqbmdGb3I9XCJsZXQgcHJvamVjdCBvZiBwcm9qZWN0cyB8IHNvcnQ6ICduYW1lJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gbXktYXV0byBmbGV4LWdyb3dcIj5cbiAgICAgICAgICA8YSBocmVmPVwiI1wiIChjbGljayk9XCJvcGVuUHJvamVjdChwcm9qZWN0KTsgKGZhbHNlKVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIHctMTAwXCI+e3sgcHJvamVjdC5uYW1lIH19PC9wPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIG15LWF1dG8gcGwtMCB0ZXh0LWRhbmdlciBmbG9hdC1yaWdodFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCIgKGNsaWNrKT1cImRlbGV0ZVByb2plY3QocHJvamVjdCk7IChmYWxzZSlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgPGEgY2xhc3M9XCJtci0zIG15LWF1dG9cIiBocmVmPVwiI1wiIHJvbGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsKCk7IChmYWxzZSlcIj5cbiAgICB7eyAnZGVzaWduZXIubWlzYy5jYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gIDwvYT5cbiAgPGJ1dHRvbiAoY2xpY2spPVwiY2FuY2VsKCk7IChmYWxzZSlcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj57eyAnZGVzaWduZXIubWlzYy5vaycgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbjwvZGl2PlxuIl19
@@ -1,107 +0,0 @@
1
- import { Component, HostListener } from '@angular/core';
2
- import { TranslateService } from '@ngx-translate/core';
3
- import { BsModalRef } from 'ngx-bootstrap/modal';
4
- import { ToastrService } from 'ngx-toastr';
5
- import { map } from 'rxjs/operators';
6
- import { ProjectLoadService } from '../../services/project-load.service';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "ngx-bootstrap/modal";
9
- import * as i2 from "@ngx-translate/core";
10
- import * as i3 from "ngx-toastr";
11
- import * as i4 from "../../services/project-load.service";
12
- import * as i5 from "ngx-dropzone-wrapper";
13
- export class ProjectImportComponent {
14
- constructor(bsModalRef, translateService, toastrService, projectLoadService) {
15
- this.bsModalRef = bsModalRef;
16
- this.translateService = translateService;
17
- this.toastrService = toastrService;
18
- this.projectLoadService = projectLoadService;
19
- }
20
- ngOnInit() {
21
- this.dropzoneConfig = {
22
- url: 'dummy',
23
- addRemoveLinks: false,
24
- maxFilesize: 10 /* 10 MB */,
25
- acceptedFiles: '.rsd',
26
- timeout: 0,
27
- accept: (file, done) => {
28
- const reader = new FileReader();
29
- reader.addEventListener('loadend', (event) => {
30
- this.projectLoadService.import(event.target.result);
31
- done('noerr');
32
- this.bsModalRef.hide();
33
- });
34
- reader.readAsText(file);
35
- },
36
- previewTemplate: `
37
- <div style="display: none;">
38
- <!-- No preview -->
39
- </div>
40
- `,
41
- };
42
- this.translateService
43
- .get('designer.misc.dropzone-message')
44
- .pipe(map((result) => {
45
- this.uploadMessage = '<h3 class="mb-0"><i class="fa fa-cloud-upload"></i></h3>' + result;
46
- }))
47
- .subscribe();
48
- }
49
- onUploadError(args) {
50
- if (args[1] === 'noerr') {
51
- // this error is set in the accept event listener -> everything OK
52
- return;
53
- }
54
- const msg = 'designer.misc.toast-upload-error';
55
- const title = 'designer.misc.toast-upload-error-title';
56
- this.translateService.get([msg, title]).subscribe((result) => {
57
- this.toastrService.error(result[msg] + args[1], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });
58
- });
59
- }
60
- ok() {
61
- this.bsModalRef.hide();
62
- }
63
- cancel() {
64
- this.bsModalRef.hide();
65
- }
66
- handleKeyboardEvent(event) {
67
- this.ok();
68
- }
69
- static { this.ɵfac = function ProjectImportComponent_Factory(t) { return new (t || ProjectImportComponent)(i0.ɵɵdirectiveInject(i1.BsModalRef), i0.ɵɵdirectiveInject(i2.TranslateService), i0.ɵɵdirectiveInject(i3.ToastrService), i0.ɵɵdirectiveInject(i4.ProjectLoadService)); }; }
70
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ProjectImportComponent, selectors: [["lib-project-import"]], hostBindings: function ProjectImportComponent_HostBindings(rf, ctx) { if (rf & 1) {
71
- i0.ɵɵlistener("keydown.enter", function ProjectImportComponent_keydown_enter_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument);
72
- } }, decls: 13, vars: 9, consts: [[1, "modal-header"], [1, "modal-title", "pull-left"], ["type", "button", "aria-label", "Close", 1, "close", "pull-right", 3, "click"], ["aria-hidden", "true"], [1, "modal-body"], [3, "error", "config", "useDropzoneClass", "message"], [1, "modal-footer"], ["type", "button", 1, "btn", "btn-primary", 3, "click"]], template: function ProjectImportComponent_Template(rf, ctx) { if (rf & 1) {
73
- i0.ɵɵelementStart(0, "div", 0)(1, "h4", 1);
74
- i0.ɵɵtext(2);
75
- i0.ɵɵpipe(3, "translate");
76
- i0.ɵɵelementEnd();
77
- i0.ɵɵelementStart(4, "button", 2);
78
- i0.ɵɵlistener("click", function ProjectImportComponent_Template_button_click_4_listener() { return ctx.bsModalRef.hide(); });
79
- i0.ɵɵelementStart(5, "span", 3);
80
- i0.ɵɵtext(6, "\u00D7");
81
- i0.ɵɵelementEnd()()();
82
- i0.ɵɵelementStart(7, "div", 4)(8, "dropzone", 5);
83
- i0.ɵɵlistener("error", function ProjectImportComponent_Template_dropzone_error_8_listener($event) { return ctx.onUploadError($event); });
84
- i0.ɵɵelementEnd()();
85
- i0.ɵɵelementStart(9, "div", 6)(10, "button", 7);
86
- i0.ɵɵlistener("click", function ProjectImportComponent_Template_button_click_10_listener() { return ctx.ok(); });
87
- i0.ɵɵtext(11);
88
- i0.ɵɵpipe(12, "translate");
89
- i0.ɵɵelementEnd()();
90
- } if (rf & 2) {
91
- i0.ɵɵadvance(2);
92
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 5, "designer.project.import-title"));
93
- i0.ɵɵadvance(6);
94
- i0.ɵɵproperty("config", ctx.dropzoneConfig)("useDropzoneClass", "false")("message", ctx.uploadMessage);
95
- i0.ɵɵadvance(3);
96
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(12, 7, "designer.misc.ok"));
97
- } }, dependencies: [i5.DropzoneComponent, i2.TranslatePipe] }); }
98
- }
99
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ProjectImportComponent, [{
100
- type: Component,
101
- args: [{ selector: 'lib-project-import', template: "<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.project.import-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <!-- Dropzone -->\n <dropzone [config]=\"dropzoneConfig\" [useDropzoneClass]=\"'false'\" [message]=\"uploadMessage\" (error)=\"onUploadError($event)\"></dropzone>\n</div>\n<div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n" }]
102
- }], () => [{ type: i1.BsModalRef }, { type: i2.TranslateService }, { type: i3.ToastrService }, { type: i4.ProjectLoadService }], { handleKeyboardEvent: [{
103
- type: HostListener,
104
- args: ['document:keydown.enter', ['$event']]
105
- }] }); })();
106
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ProjectImportComponent, { className: "ProjectImportComponent" }); })();
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC1pbXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9wcm9qZWN0L3Byb2plY3QtaW1wb3J0L3Byb2plY3QtaW1wb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvcHJvamVjdC9wcm9qZWN0LWltcG9ydC9wcm9qZWN0LWltcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7QUFPekUsTUFBTSxPQUFPLHNCQUFzQjtJQUlqQyxZQUNTLFVBQXNCLEVBQ3JCLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixrQkFBc0M7UUFIdkMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7SUFDN0MsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ3BCLEdBQUcsRUFBRSxPQUFPO1lBQ1osY0FBYyxFQUFFLEtBQUs7WUFDckIsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXO1lBQzNCLGFBQWEsRUFBRSxN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O2tCQURsQixZQUFZO21CQUFDLHdCQUF3QixFQUFFLENBQUMsUUFBUSxDQUFDOztrRkFqRXZDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IERyb3B6b25lQ29uZmlnSW50ZXJmYWNlIH0gZnJvbSAnbmd4LWRyb3B6b25lLXdyYXBwZXInO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUHJvamVjdExvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvamVjdC1sb2FkLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItcHJvamVjdC1pbXBvcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvamVjdC1pbXBvcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9qZWN0LWltcG9ydC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFByb2plY3RJbXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgZHJvcHpvbmVDb25maWc6IERyb3B6b25lQ29uZmlnSW50ZXJmYWNlO1xuICBwdWJsaWMgdXBsb2FkTWVzc2FnZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBic01vZGFsUmVmOiBCc01vZGFsUmVmLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm9qZWN0TG9hZFNlcnZpY2U6IFByb2plY3RMb2FkU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kcm9wem9uZUNvbmZpZyA9IHtcbiAgICAgIHVybDogJ2R1bW15JyxcbiAgICAgIGFkZFJlbW92ZUxpbmtzOiBmYWxzZSxcbiAgICAgIG1heEZpbGVzaXplOiAxMCAvKiAxMCBNQiAqLyxcbiAgICAgIGFjY2VwdGVkRmlsZXM6ICcucnNkJyxcbiAgICAgIHRpbWVvdXQ6IDAsXG4gICAgICBhY2NlcHQ6IChmaWxlOiBhbnksIGRvbmU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9qZWN0TG9hZFNlcnZpY2UuaW1wb3J0KGV2ZW50LnRhcmdldC5yZXN1bHQpO1xuICAgICAgICAgIGRvbmUoJ25vZXJyJyk7XG4gICAgICAgICAgdGhpcy5ic01vZGFsUmVmLmhpZGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xuICAgICAgfSxcbiAgICAgIHByZXZpZXdUZW1wbGF0ZTogYFxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XG4gICAgICAgIDwhLS0gTm8gcHJldmlldyAtLT5cbiAgICAgIDwvZGl2PlxuICAgICAgYCxcbiAgICB9O1xuXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAuZ2V0KCdkZXNpZ25lci5taXNjLmRyb3B6b25lLW1lc3NhZ2UnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgdGhpcy51cGxvYWRNZXNzYWdlID0gJzxoMyBjbGFzcz1cIm1iLTBcIj48aSBjbGFzcz1cImZhIGZhLWNsb3VkLXVwbG9hZFwiPjwvaT48L2gzPicgKyByZXN1bHQ7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgb25VcGxvYWRFcnJvcihhcmdzOiBhbnkpIHtcbiAgICBpZiAoYXJnc1sxXSA9PT0gJ25vZXJyJykge1xuICAgICAgLy8gdGhpcyBlcnJvciBpcyBzZXQgaW4gdGhlIGFjY2VwdCBldmVudCBsaXN0ZW5lciAtPiBldmVyeXRoaW5nIE9LXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbXNnID0gJ2Rlc2lnbmVyLm1pc2MudG9hc3QtdXBsb2FkLWVycm9yJztcbiAgICBjb25zdCB0aXRsZSA9ICdkZXNpZ25lci5taXNjLnRvYXN0LXVwbG9hZC1lcnJvci10aXRsZSc7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChbbXNnLCB0aXRsZV0pLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICB0aGlzLnRvYXN0clNlcnZpY2UuZXJyb3IocmVzdWx0W21zZ10gKyBhcmdzWzFdLCByZXN1bHRbdGl0bGVdLCB7IHRpbWVPdXQ6IDAsIGV4dGVuZGVkVGltZU91dDogMCwgZW5hYmxlSHRtbDogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG9rKCkge1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5ic01vZGFsUmVmLmhpZGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9rKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0XCI+e3sgJ2Rlc2lnbmVyLnByb2plY3QuaW1wb3J0LXRpdGxlJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2UgcHVsbC1yaWdodFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJic01vZGFsUmVmLmhpZGUoKVwiPlxuICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICA8IS0tIERyb3B6b25lIC0tPlxuICA8ZHJvcHpvbmUgW2NvbmZpZ109XCJkcm9wem9uZUNvbmZpZ1wiIFt1c2VEcm9wem9uZUNsYXNzXT1cIidmYWxzZSdcIiBbbWVzc2FnZV09XCJ1cGxvYWRNZXNzYWdlXCIgKGVycm9yKT1cIm9uVXBsb2FkRXJyb3IoJGV2ZW50KVwiPjwvZHJvcHpvbmU+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwib2soKVwiPnt7ICdkZXNpZ25lci5taXNjLm9rJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=