@rocketshow/designer 1.32.0 → 1.35.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 (362) hide show
  1. package/assets/i18n/de.json +2 -1
  2. package/assets/i18n/en.json +2 -1
  3. package/esm2022/lib/array-sort-pipe.mjs +30 -0
  4. package/esm2022/lib/designer.component.mjs +672 -0
  5. package/esm2022/lib/designer.module.mjs +186 -0
  6. package/esm2022/lib/designer.service.mjs +14 -0
  7. package/esm2022/lib/dropzone/dropzone.component.mjs +93 -0
  8. package/esm2022/lib/effect/effect-curve/effect-curve.component.mjs +577 -0
  9. package/esm2022/lib/effect/effect-pan-tilt/effect-pan-tilt.component.mjs +36 -0
  10. package/esm2022/lib/effect/effect.component.mjs +174 -0
  11. package/esm2022/lib/error-dialog/error-dialog.component.mjs +75 -0
  12. package/esm2022/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.mjs +222 -0
  13. package/esm2022/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.mjs +147 -0
  14. package/esm2022/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.mjs +213 -0
  15. package/esm2022/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.mjs +78 -0
  16. package/esm2022/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.mjs +119 -0
  17. package/esm2022/lib/fixture/fixture-capability/fixture-capability.component.mjs +169 -0
  18. package/esm2022/lib/fixture/fixture-channel/fixture-channel.component.mjs +162 -0
  19. package/esm2022/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.mjs +365 -0
  20. package/esm2022/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.mjs +151 -0
  21. package/esm2022/lib/fixture/fixture-settings/fixture-settings.component.mjs +46 -0
  22. package/esm2022/lib/fixture/fixture.component.mjs +148 -0
  23. package/esm2022/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.mjs +145 -0
  24. package/esm2022/lib/fixture-pool/fixture-pool.component.mjs +643 -0
  25. package/esm2022/lib/intro/intro.component.mjs +95 -0
  26. package/esm2022/lib/master-dimmer/master-dimmer.component.mjs +66 -0
  27. package/esm2022/lib/models/cached-fixture-capability.mjs +9 -0
  28. package/esm2022/lib/models/cached-fixture-channel.mjs +7 -0
  29. package/esm2022/lib/models/cached-fixture.mjs +6 -0
  30. package/esm2022/lib/models/color.mjs +8 -0
  31. package/esm2022/lib/models/composition.mjs +46 -0
  32. package/esm2022/lib/models/effect-curve-profile-channel.mjs +15 -0
  33. package/esm2022/lib/models/effect-curve.mjs +69 -0
  34. package/esm2022/lib/models/effect-pan-tilt.mjs +19 -0
  35. package/esm2022/lib/models/effect.mjs +12 -0
  36. package/esm2022/lib/models/fixture-capability-value.mjs +15 -0
  37. package/esm2022/lib/models/fixture-capability.mjs +84 -0
  38. package/esm2022/lib/models/fixture-channel-value.mjs +11 -0
  39. package/esm2022/lib/models/fixture-channel.mjs +24 -0
  40. package/esm2022/lib/models/fixture-matrix-pixel-group-constraints.mjs +27 -0
  41. package/esm2022/lib/models/fixture-matrix-pixel-group.mjs +12 -0
  42. package/esm2022/lib/models/fixture-matrix.mjs +25 -0
  43. package/esm2022/lib/models/fixture-mode-channel.mjs +26 -0
  44. package/esm2022/lib/models/fixture-mode.mjs +17 -0
  45. package/esm2022/lib/models/fixture-physical.mjs +14 -0
  46. package/esm2022/lib/models/fixture-profile.mjs +85 -0
  47. package/esm2022/lib/models/fixture-wheel-slot.mjs +26 -0
  48. package/esm2022/lib/models/fixture-wheel.mjs +15 -0
  49. package/esm2022/lib/models/fixture.mjs +40 -0
  50. package/esm2022/lib/models/preset-fixture.mjs +10 -0
  51. package/esm2022/lib/models/preset-region-scene.mjs +8 -0
  52. package/esm2022/lib/models/preset.mjs +65 -0
  53. package/esm2022/lib/models/project.mjs +78 -0
  54. package/esm2022/lib/models/scene-playback-region.mjs +11 -0
  55. package/esm2022/lib/models/scene.mjs +27 -0
  56. package/esm2022/lib/preset/preset-settings/preset-settings.component.mjs +194 -0
  57. package/esm2022/lib/preset/preset.component.mjs +131 -0
  58. package/esm2022/lib/preview/models/color-changer-3d.mjs +64 -0
  59. package/esm2022/lib/preview/models/fixture-3d.mjs +274 -0
  60. package/esm2022/lib/preview/models/moving-head-3d.mjs +124 -0
  61. package/esm2022/lib/preview/preview.component.mjs +219 -0
  62. package/esm2022/lib/project/project-browser/project-browser.component.mjs +143 -0
  63. package/esm2022/lib/project/project-import/project-import.component.mjs +107 -0
  64. package/esm2022/lib/project/project-save/project-save.component.mjs +178 -0
  65. package/esm2022/lib/project/project-share/project-share.component.mjs +71 -0
  66. package/esm2022/lib/scene/scene-settings/scene-settings.component.mjs +146 -0
  67. package/esm2022/lib/scene/scene.component.mjs +110 -0
  68. package/esm2022/lib/services/animation.service.mjs +16 -0
  69. package/esm2022/lib/services/config.service.mjs +28 -0
  70. package/esm2022/lib/services/effect.service.mjs +14 -0
  71. package/esm2022/lib/services/error-dialog.service.mjs +39 -0
  72. package/esm2022/lib/services/fixture-pool.service.mjs +30 -0
  73. package/esm2022/lib/services/fixture.service.mjs +639 -0
  74. package/esm2022/lib/services/hotkey-target-exclude.service.mjs +24 -0
  75. package/esm2022/lib/services/intro.service.mjs +140 -0
  76. package/esm2022/lib/services/preset.service.mjs +449 -0
  77. package/esm2022/lib/services/preview-mesh.service.mjs +57 -0
  78. package/esm2022/lib/services/preview.service.mjs +497 -0
  79. package/esm2022/lib/services/project-load.service.mjs +209 -0
  80. package/esm2022/lib/services/project.service.mjs +93 -0
  81. package/esm2022/lib/services/scene.service.mjs +164 -0
  82. package/esm2022/lib/services/timeline.service.mjs +726 -0
  83. package/esm2022/lib/services/user-ensure-login.service.mjs +38 -0
  84. package/esm2022/lib/services/user.service.mjs +89 -0
  85. package/esm2022/lib/services/uuid.service.mjs +23 -0
  86. package/esm2022/lib/services/warning-dialog.service.mjs +38 -0
  87. package/esm2022/lib/timeline/composition-settings/composition-settings.component.mjs +304 -0
  88. package/esm2022/lib/timeline/timeline-grid/timeline-grid.component.mjs +216 -0
  89. package/esm2022/lib/timeline/timeline.component.mjs +418 -0
  90. package/esm2022/lib/user/user-login/user-login.component.mjs +144 -0
  91. package/esm2022/lib/user/user-register/user-register.component.mjs +220 -0
  92. package/esm2022/lib/wait-dialog/wait-dialog.component.mjs +26 -0
  93. package/esm2022/lib/warning-dialog/warning-dialog.component.mjs +68 -0
  94. package/esm2022/public_api.mjs +7 -0
  95. package/esm2022/rocketshow-designer.mjs +5 -0
  96. package/fesm2022/rocketshow-designer.mjs +11171 -0
  97. package/fesm2022/rocketshow-designer.mjs.map +1 -0
  98. package/index.d.ts +5 -0
  99. package/lib/array-sort-pipe.d.ts +3 -0
  100. package/lib/designer.component.d.ts +19 -16
  101. package/lib/designer.module.d.ts +55 -0
  102. package/lib/designer.service.d.ts +3 -0
  103. package/lib/dropzone/dropzone.component.d.ts +24 -0
  104. package/lib/effect/effect-curve/effect-curve.component.d.ts +4 -1
  105. package/lib/effect/effect-pan-tilt/effect-pan-tilt.component.d.ts +3 -0
  106. package/lib/effect/effect.component.d.ts +3 -0
  107. package/lib/error-dialog/error-dialog.component.d.ts +3 -0
  108. package/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.d.ts +4 -1
  109. package/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.d.ts +3 -0
  110. package/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.d.ts +5 -2
  111. package/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.d.ts +3 -0
  112. package/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.d.ts +3 -0
  113. package/lib/fixture/fixture-capability/fixture-capability.component.d.ts +3 -0
  114. package/lib/fixture/fixture-channel/fixture-channel.component.d.ts +3 -0
  115. package/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.d.ts +3 -0
  116. package/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.d.ts +3 -0
  117. package/lib/fixture/fixture-settings/fixture-settings.component.d.ts +3 -0
  118. package/lib/fixture/fixture.component.d.ts +7 -3
  119. package/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.d.ts +3 -0
  120. package/lib/fixture-pool/fixture-pool.component.d.ts +3 -0
  121. package/lib/intro/intro.component.d.ts +3 -0
  122. package/lib/master-dimmer/master-dimmer.component.d.ts +3 -0
  123. package/lib/models/cached-fixture.d.ts +1 -0
  124. package/lib/models/fixture-matrix-pixel-group-constraints.d.ts +8 -0
  125. package/lib/models/fixture-matrix-pixel-group.d.ts +6 -0
  126. package/lib/models/fixture-matrix.d.ts +6 -0
  127. package/lib/models/fixture-mode-channel.d.ts +8 -0
  128. package/lib/models/fixture-mode.d.ts +3 -1
  129. package/lib/models/fixture-physical.d.ts +4 -0
  130. package/lib/models/fixture-profile.d.ts +5 -0
  131. package/lib/models/preset-fixture.d.ts +5 -0
  132. package/lib/models/preset.d.ts +2 -0
  133. package/lib/models/project.d.ts +3 -0
  134. package/lib/preset/preset-settings/preset-settings.component.d.ts +3 -0
  135. package/lib/preset/preset.component.d.ts +3 -0
  136. package/lib/preview/models/color-changer-3d.d.ts +1 -11
  137. package/lib/preview/models/fixture-3d.d.ts +11 -0
  138. package/lib/preview/models/moving-head-3d.d.ts +1 -11
  139. package/lib/preview/preview.component.d.ts +4 -4
  140. package/lib/project/project-browser/project-browser.component.d.ts +3 -0
  141. package/lib/project/project-import/project-import.component.d.ts +3 -0
  142. package/lib/project/project-save/project-save.component.d.ts +3 -0
  143. package/lib/project/project-share/project-share.component.d.ts +3 -0
  144. package/lib/scene/scene-settings/scene-settings.component.d.ts +3 -0
  145. package/lib/scene/scene.component.d.ts +3 -0
  146. package/lib/services/animation.service.d.ts +3 -0
  147. package/lib/services/config.service.d.ts +4 -0
  148. package/lib/services/effect.service.d.ts +3 -0
  149. package/lib/services/error-dialog.service.d.ts +3 -0
  150. package/lib/services/fixture-pool.service.d.ts +3 -0
  151. package/lib/services/fixture.service.d.ts +10 -2
  152. package/lib/services/hotkey-target-exclude.service.d.ts +3 -0
  153. package/lib/services/intro.service.d.ts +3 -0
  154. package/lib/services/preset.service.d.ts +7 -2
  155. package/lib/services/preview-mesh.service.d.ts +3 -0
  156. package/lib/services/preview.service.d.ts +6 -4
  157. package/lib/services/project-load.service.d.ts +8 -1
  158. package/lib/services/project.service.d.ts +5 -3
  159. package/lib/services/scene.service.d.ts +3 -0
  160. package/lib/services/timeline.service.d.ts +3 -0
  161. package/lib/services/user-ensure-login.service.d.ts +3 -0
  162. package/lib/services/user.service.d.ts +3 -0
  163. package/lib/services/uuid.service.d.ts +3 -0
  164. package/lib/services/warning-dialog.service.d.ts +3 -0
  165. package/lib/timeline/composition-settings/composition-settings.component.d.ts +5 -1
  166. package/lib/timeline/timeline-grid/timeline-grid.component.d.ts +3 -0
  167. package/lib/timeline/timeline.component.d.ts +3 -0
  168. package/lib/user/user-login/user-login.component.d.ts +3 -0
  169. package/lib/user/user-register/user-register.component.d.ts +3 -0
  170. package/lib/wait-dialog/wait-dialog.component.d.ts +3 -0
  171. package/lib/warning-dialog/warning-dialog.component.d.ts +3 -0
  172. package/package.json +20 -22
  173. package/rocketshow-designer-1.35.0.tgz +0 -0
  174. package/bundles/rocketshow-designer.umd.js +0 -9966
  175. package/bundles/rocketshow-designer.umd.js.map +0 -1
  176. package/bundles/rocketshow-designer.umd.min.js +0 -17
  177. package/bundles/rocketshow-designer.umd.min.js.map +0 -1
  178. package/esm2015/lib/array-sort-pipe.js +0 -28
  179. package/esm2015/lib/designer.component.js +0 -411
  180. package/esm2015/lib/designer.module.js +0 -117
  181. package/esm2015/lib/designer.service.js +0 -16
  182. package/esm2015/lib/effect/effect-curve/effect-curve.component.js +0 -325
  183. package/esm2015/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -30
  184. package/esm2015/lib/effect/effect.component.js +0 -73
  185. package/esm2015/lib/error-dialog/error-dialog.component.js +0 -42
  186. package/esm2015/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -141
  187. package/esm2015/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -128
  188. package/esm2015/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -163
  189. package/esm2015/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -60
  190. package/esm2015/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -87
  191. package/esm2015/lib/fixture/fixture-capability/fixture-capability.component.js +0 -97
  192. package/esm2015/lib/fixture/fixture-channel/fixture-channel.component.js +0 -66
  193. package/esm2015/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -200
  194. package/esm2015/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -31
  195. package/esm2015/lib/fixture/fixture-settings/fixture-settings.component.js +0 -35
  196. package/esm2015/lib/fixture/fixture.component.js +0 -70
  197. package/esm2015/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -128
  198. package/esm2015/lib/fixture-pool/fixture-pool.component.js +0 -331
  199. package/esm2015/lib/intro/intro.component.js +0 -25
  200. package/esm2015/lib/master-dimmer/master-dimmer.component.js +0 -41
  201. package/esm2015/lib/models/cached-fixture-capability.js +0 -9
  202. package/esm2015/lib/models/cached-fixture-channel.js +0 -7
  203. package/esm2015/lib/models/cached-fixture.js +0 -6
  204. package/esm2015/lib/models/color.js +0 -8
  205. package/esm2015/lib/models/composition.js +0 -46
  206. package/esm2015/lib/models/effect-curve-profile-channel.js +0 -15
  207. package/esm2015/lib/models/effect-curve.js +0 -69
  208. package/esm2015/lib/models/effect-pan-tilt.js +0 -19
  209. package/esm2015/lib/models/effect.js +0 -12
  210. package/esm2015/lib/models/fixture-capability-value.js +0 -15
  211. package/esm2015/lib/models/fixture-capability.js +0 -84
  212. package/esm2015/lib/models/fixture-channel-value.js +0 -11
  213. package/esm2015/lib/models/fixture-channel.js +0 -24
  214. package/esm2015/lib/models/fixture-mode.js +0 -14
  215. package/esm2015/lib/models/fixture-profile.js +0 -70
  216. package/esm2015/lib/models/fixture-wheel-slot.js +0 -26
  217. package/esm2015/lib/models/fixture-wheel.js +0 -15
  218. package/esm2015/lib/models/fixture.js +0 -40
  219. package/esm2015/lib/models/preset-region-scene.js +0 -8
  220. package/esm2015/lib/models/preset.js +0 -56
  221. package/esm2015/lib/models/project.js +0 -68
  222. package/esm2015/lib/models/scene-playback-region.js +0 -11
  223. package/esm2015/lib/models/scene.js +0 -27
  224. package/esm2015/lib/models/universe.js +0 -11
  225. package/esm2015/lib/preset/preset-settings/preset-settings.component.js +0 -66
  226. package/esm2015/lib/preset/preset.component.js +0 -85
  227. package/esm2015/lib/preview/models/color-changer-3d.js +0 -167
  228. package/esm2015/lib/preview/models/fixture-3d.js +0 -150
  229. package/esm2015/lib/preview/models/moving-head-3d.js +0 -233
  230. package/esm2015/lib/preview/preview.component.js +0 -242
  231. package/esm2015/lib/project/project-browser/project-browser.component.js +0 -73
  232. package/esm2015/lib/project/project-import/project-import.component.js +0 -89
  233. package/esm2015/lib/project/project-save/project-save.component.js +0 -105
  234. package/esm2015/lib/project/project-share/project-share.component.js +0 -43
  235. package/esm2015/lib/scene/scene-settings/scene-settings.component.js +0 -52
  236. package/esm2015/lib/scene/scene.component.js +0 -56
  237. package/esm2015/lib/services/animation.service.js +0 -17
  238. package/esm2015/lib/services/config.service.js +0 -28
  239. package/esm2015/lib/services/effect.service.js +0 -16
  240. package/esm2015/lib/services/error-dialog.service.js +0 -44
  241. package/esm2015/lib/services/fixture-pool.service.js +0 -34
  242. package/esm2015/lib/services/fixture.service.js +0 -443
  243. package/esm2015/lib/services/hotkey-target-exclude.service.js +0 -26
  244. package/esm2015/lib/services/intro.service.js +0 -144
  245. package/esm2015/lib/services/preset.service.js +0 -416
  246. package/esm2015/lib/services/preview-mesh.service.js +0 -58
  247. package/esm2015/lib/services/preview.service.js +0 -500
  248. package/esm2015/lib/services/project-load.service.js +0 -171
  249. package/esm2015/lib/services/project.service.js +0 -113
  250. package/esm2015/lib/services/scene.service.js +0 -174
  251. package/esm2015/lib/services/timeline.service.js +0 -738
  252. package/esm2015/lib/services/universe.service.js +0 -24
  253. package/esm2015/lib/services/user-ensure-login.service.js +0 -44
  254. package/esm2015/lib/services/user.service.js +0 -93
  255. package/esm2015/lib/services/uuid.service.js +0 -25
  256. package/esm2015/lib/services/warning-dialog.service.js +0 -43
  257. package/esm2015/lib/timeline/composition-settings/composition-settings.component.js +0 -197
  258. package/esm2015/lib/timeline/timeline-grid/timeline-grid.component.js +0 -55
  259. package/esm2015/lib/timeline/timeline.component.js +0 -239
  260. package/esm2015/lib/user/user-login/user-login.component.js +0 -64
  261. package/esm2015/lib/user/user-register/user-register.component.js +0 -89
  262. package/esm2015/lib/wait-dialog/wait-dialog.component.js +0 -16
  263. package/esm2015/lib/warning-dialog/warning-dialog.component.js +0 -42
  264. package/esm2015/public_api.js +0 -7
  265. package/esm2015/rocketshow-designer.js +0 -61
  266. package/esm5/lib/array-sort-pipe.js +0 -31
  267. package/esm5/lib/designer.component.js +0 -468
  268. package/esm5/lib/designer.module.js +0 -120
  269. package/esm5/lib/designer.service.js +0 -17
  270. package/esm5/lib/effect/effect-curve/effect-curve.component.js +0 -386
  271. package/esm5/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -31
  272. package/esm5/lib/effect/effect.component.js +0 -75
  273. package/esm5/lib/error-dialog/error-dialog.component.js +0 -43
  274. package/esm5/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -159
  275. package/esm5/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -130
  276. package/esm5/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -215
  277. package/esm5/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -61
  278. package/esm5/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -88
  279. package/esm5/lib/fixture/fixture-capability/fixture-capability.component.js +0 -130
  280. package/esm5/lib/fixture/fixture-channel/fixture-channel.component.js +0 -68
  281. package/esm5/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -306
  282. package/esm5/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -32
  283. package/esm5/lib/fixture/fixture-settings/fixture-settings.component.js +0 -36
  284. package/esm5/lib/fixture/fixture.component.js +0 -71
  285. package/esm5/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -127
  286. package/esm5/lib/fixture-pool/fixture-pool.component.js +0 -430
  287. package/esm5/lib/intro/intro.component.js +0 -26
  288. package/esm5/lib/master-dimmer/master-dimmer.component.js +0 -42
  289. package/esm5/lib/models/cached-fixture-capability.js +0 -11
  290. package/esm5/lib/models/cached-fixture-channel.js +0 -9
  291. package/esm5/lib/models/cached-fixture.js +0 -8
  292. package/esm5/lib/models/color.js +0 -10
  293. package/esm5/lib/models/composition.js +0 -60
  294. package/esm5/lib/models/effect-curve-profile-channel.js +0 -29
  295. package/esm5/lib/models/effect-curve.js +0 -95
  296. package/esm5/lib/models/effect-pan-tilt.js +0 -24
  297. package/esm5/lib/models/effect.js +0 -14
  298. package/esm5/lib/models/fixture-capability-value.js +0 -17
  299. package/esm5/lib/models/fixture-capability.js +0 -86
  300. package/esm5/lib/models/fixture-channel-value.js +0 -13
  301. package/esm5/lib/models/fixture-channel.js +0 -38
  302. package/esm5/lib/models/fixture-mode.js +0 -16
  303. package/esm5/lib/models/fixture-profile.js +0 -114
  304. package/esm5/lib/models/fixture-wheel-slot.js +0 -28
  305. package/esm5/lib/models/fixture-wheel.js +0 -29
  306. package/esm5/lib/models/fixture.js +0 -42
  307. package/esm5/lib/models/preset-region-scene.js +0 -10
  308. package/esm5/lib/models/preset.js +0 -90
  309. package/esm5/lib/models/project.js +0 -122
  310. package/esm5/lib/models/scene-playback-region.js +0 -13
  311. package/esm5/lib/models/scene.js +0 -29
  312. package/esm5/lib/models/universe.js +0 -13
  313. package/esm5/lib/preset/preset-settings/preset-settings.component.js +0 -67
  314. package/esm5/lib/preset/preset.component.js +0 -86
  315. package/esm5/lib/preview/models/color-changer-3d.js +0 -194
  316. package/esm5/lib/preview/models/fixture-3d.js +0 -196
  317. package/esm5/lib/preview/models/moving-head-3d.js +0 -250
  318. package/esm5/lib/preview/preview.component.js +0 -280
  319. package/esm5/lib/project/project-browser/project-browser.component.js +0 -77
  320. package/esm5/lib/project/project-import/project-import.component.js +0 -88
  321. package/esm5/lib/project/project-save/project-save.component.js +0 -120
  322. package/esm5/lib/project/project-share/project-share.component.js +0 -44
  323. package/esm5/lib/scene/scene-settings/scene-settings.component.js +0 -53
  324. package/esm5/lib/scene/scene.component.js +0 -57
  325. package/esm5/lib/services/animation.service.js +0 -18
  326. package/esm5/lib/services/config.service.js +0 -29
  327. package/esm5/lib/services/effect.service.js +0 -17
  328. package/esm5/lib/services/error-dialog.service.js +0 -46
  329. package/esm5/lib/services/fixture-pool.service.js +0 -36
  330. package/esm5/lib/services/fixture.service.js +0 -643
  331. package/esm5/lib/services/hotkey-target-exclude.service.js +0 -27
  332. package/esm5/lib/services/intro.service.js +0 -145
  333. package/esm5/lib/services/preset.service.js +0 -637
  334. package/esm5/lib/services/preview-mesh.service.js +0 -61
  335. package/esm5/lib/services/preview.service.js +0 -754
  336. package/esm5/lib/services/project-load.service.js +0 -185
  337. package/esm5/lib/services/project.service.js +0 -127
  338. package/esm5/lib/services/scene.service.js +0 -251
  339. package/esm5/lib/services/timeline.service.js +0 -845
  340. package/esm5/lib/services/universe.service.js +0 -36
  341. package/esm5/lib/services/user-ensure-login.service.js +0 -45
  342. package/esm5/lib/services/user.service.js +0 -95
  343. package/esm5/lib/services/uuid.service.js +0 -26
  344. package/esm5/lib/services/warning-dialog.service.js +0 -45
  345. package/esm5/lib/timeline/composition-settings/composition-settings.component.js +0 -206
  346. package/esm5/lib/timeline/timeline-grid/timeline-grid.component.js +0 -56
  347. package/esm5/lib/timeline/timeline.component.js +0 -243
  348. package/esm5/lib/user/user-login/user-login.component.js +0 -66
  349. package/esm5/lib/user/user-register/user-register.component.js +0 -91
  350. package/esm5/lib/wait-dialog/wait-dialog.component.js +0 -18
  351. package/esm5/lib/warning-dialog/warning-dialog.component.js +0 -43
  352. package/esm5/public_api.js +0 -7
  353. package/esm5/rocketshow-designer.js +0 -61
  354. package/fesm2015/rocketshow-designer.js +0 -7945
  355. package/fesm2015/rocketshow-designer.js.map +0 -1
  356. package/fesm5/rocketshow-designer.js +0 -9690
  357. package/fesm5/rocketshow-designer.js.map +0 -1
  358. package/lib/models/universe.d.ts +0 -8
  359. package/lib/services/universe.service.d.ts +0 -6
  360. package/rocketshow-designer-1.32.0.tgz +0 -0
  361. package/rocketshow-designer.d.ts +0 -60
  362. package/rocketshow-designer.metadata.json +0 -1
@@ -0,0 +1,151 @@
1
+ import { ChangeDetectorRef, Component } from '@angular/core';
2
+ import { PreviewService } from '../../../services/preview.service';
3
+ import { ProjectService } from '../../../services/project.service';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../../services/project.service";
6
+ import * as i2 from "../../../services/preview.service";
7
+ import * as i3 from "@angular/forms";
8
+ import * as i4 from "ngx-bootstrap-slider";
9
+ import * as i5 from "@ngx-translate/core";
10
+ export class FixtureSettingsStageComponent {
11
+ constructor(projectService, previewService, changeDetectorRef) {
12
+ this.projectService = projectService;
13
+ this.previewService = previewService;
14
+ this.changeDetectorRef = changeDetectorRef;
15
+ }
16
+ ngOnInit() { }
17
+ update() {
18
+ this.previewService.updateStage();
19
+ this.changeDetectorRef.detectChanges();
20
+ }
21
+ static { this.ɵfac = function FixtureSettingsStageComponent_Factory(t) { return new (t || FixtureSettingsStageComponent)(i0.ɵɵdirectiveInject(i1.ProjectService), i0.ɵɵdirectiveInject(i2.PreviewService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
22
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixtureSettingsStageComponent, selectors: [["lib-app-fixture-settings-stage"]], decls: 65, vars: 57, consts: [[1, "card", "border-secondary", "h-100"], [1, "card-header"], [1, "card-body", "h-100"], [1, "d-flex"], [1, "my-auto", 2, "width", "120px", "float", "left"], [1, "my-auto", 2, "float", "left"], [2, "width", "140px", 3, "change", "tooltip", "value", "min", "max", "step"], [1, "my-auto"], ["type", "text", "readonly", "", 1, "slider-input-readonly", 3, "ngModelChange", "ngModel"], [1, "my-auto", "ml-1", 2, "color", "darkgray"]], template: function FixtureSettingsStageComponent_Template(rf, ctx) { if (rf & 1) {
23
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
24
+ i0.ɵɵtext(2);
25
+ i0.ɵɵpipe(3, "translate");
26
+ i0.ɵɵelementEnd();
27
+ i0.ɵɵelementStart(4, "div", 2)(5, "div", 3)(6, "div", 4);
28
+ i0.ɵɵtext(7);
29
+ i0.ɵɵpipe(8, "translate");
30
+ i0.ɵɵelementEnd();
31
+ i0.ɵɵelementStart(9, "div", 5)(10, "mv-slider", 6);
32
+ i0.ɵɵlistener("change", function FixtureSettingsStageComponent_Template_mv_slider_change_10_listener($event) { ctx.projectService.project.stageWidthCm = $event.newValue; return ctx.update(); });
33
+ i0.ɵɵelementEnd()();
34
+ i0.ɵɵelementStart(11, "div", 7)(12, "input", 8);
35
+ i0.ɵɵlistener("ngModelChange", function FixtureSettingsStageComponent_Template_input_ngModelChange_12_listener($event) { ctx.projectService.project.stageWidthCm = $event; return ctx.update(); });
36
+ i0.ɵɵelementEnd()();
37
+ i0.ɵɵelementStart(13, "div", 9);
38
+ i0.ɵɵtext(14, "cm");
39
+ i0.ɵɵelementEnd()();
40
+ i0.ɵɵelementStart(15, "div", 3)(16, "div", 4);
41
+ i0.ɵɵtext(17);
42
+ i0.ɵɵpipe(18, "translate");
43
+ i0.ɵɵelementEnd();
44
+ i0.ɵɵelementStart(19, "div", 5)(20, "mv-slider", 6);
45
+ i0.ɵɵlistener("change", function FixtureSettingsStageComponent_Template_mv_slider_change_20_listener($event) { ctx.projectService.project.stageHeightCm = $event.newValue; return ctx.update(); });
46
+ i0.ɵɵelementEnd()();
47
+ i0.ɵɵelementStart(21, "div", 7)(22, "input", 8);
48
+ i0.ɵɵlistener("ngModelChange", function FixtureSettingsStageComponent_Template_input_ngModelChange_22_listener($event) { ctx.projectService.project.stageHeightCm = $event; return ctx.update(); });
49
+ i0.ɵɵelementEnd()();
50
+ i0.ɵɵelementStart(23, "div", 9);
51
+ i0.ɵɵtext(24, "cm");
52
+ i0.ɵɵelementEnd()();
53
+ i0.ɵɵelementStart(25, "div", 3)(26, "div", 4);
54
+ i0.ɵɵtext(27);
55
+ i0.ɵɵpipe(28, "translate");
56
+ i0.ɵɵelementEnd();
57
+ i0.ɵɵelementStart(29, "div", 5)(30, "mv-slider", 6);
58
+ i0.ɵɵlistener("change", function FixtureSettingsStageComponent_Template_mv_slider_change_30_listener($event) { ctx.projectService.project.stageDepthCm = $event.newValue; return ctx.update(); });
59
+ i0.ɵɵelementEnd()();
60
+ i0.ɵɵelementStart(31, "div", 7)(32, "input", 8);
61
+ i0.ɵɵlistener("ngModelChange", function FixtureSettingsStageComponent_Template_input_ngModelChange_32_listener($event) { ctx.projectService.project.stageDepthCm = $event; return ctx.update(); });
62
+ i0.ɵɵelementEnd()();
63
+ i0.ɵɵelementStart(33, "div", 9);
64
+ i0.ɵɵtext(34, "cm");
65
+ i0.ɵɵelementEnd()();
66
+ i0.ɵɵelementStart(35, "div", 3)(36, "div", 4);
67
+ i0.ɵɵtext(37);
68
+ i0.ɵɵpipe(38, "translate");
69
+ i0.ɵɵelementEnd();
70
+ i0.ɵɵelementStart(39, "div", 5)(40, "mv-slider", 6);
71
+ i0.ɵɵlistener("change", function FixtureSettingsStageComponent_Template_mv_slider_change_40_listener($event) { ctx.projectService.project.stageFloorHeightCm = $event.newValue; return ctx.update(); });
72
+ i0.ɵɵelementEnd()();
73
+ i0.ɵɵelementStart(41, "div", 7)(42, "input", 8);
74
+ i0.ɵɵlistener("ngModelChange", function FixtureSettingsStageComponent_Template_input_ngModelChange_42_listener($event) { ctx.projectService.project.stageFloorHeightCm = $event; return ctx.update(); });
75
+ i0.ɵɵelementEnd()();
76
+ i0.ɵɵelementStart(43, "div", 9);
77
+ i0.ɵɵtext(44, "cm");
78
+ i0.ɵɵelementEnd()();
79
+ i0.ɵɵelementStart(45, "div", 3)(46, "div", 4);
80
+ i0.ɵɵtext(47);
81
+ i0.ɵɵpipe(48, "translate");
82
+ i0.ɵɵelementEnd();
83
+ i0.ɵɵelementStart(49, "div", 5)(50, "mv-slider", 6);
84
+ i0.ɵɵlistener("change", function FixtureSettingsStageComponent_Template_mv_slider_change_50_listener($event) { ctx.projectService.project.stageCeilingHeightCm = $event.newValue; return ctx.update(); });
85
+ i0.ɵɵelementEnd()();
86
+ i0.ɵɵelementStart(51, "div", 7)(52, "input", 8);
87
+ i0.ɵɵlistener("ngModelChange", function FixtureSettingsStageComponent_Template_input_ngModelChange_52_listener($event) { ctx.projectService.project.stageCeilingHeightCm = $event; return ctx.update(); });
88
+ i0.ɵɵelementEnd()();
89
+ i0.ɵɵelementStart(53, "div", 9);
90
+ i0.ɵɵtext(54, "cm");
91
+ i0.ɵɵelementEnd()();
92
+ i0.ɵɵelementStart(55, "div", 3)(56, "div", 4);
93
+ i0.ɵɵtext(57);
94
+ i0.ɵɵpipe(58, "translate");
95
+ i0.ɵɵelementEnd();
96
+ i0.ɵɵelementStart(59, "div", 5)(60, "mv-slider", 6);
97
+ i0.ɵɵlistener("change", function FixtureSettingsStageComponent_Template_mv_slider_change_60_listener($event) { ctx.projectService.project.stagePillarWidthCm = $event.newValue; return ctx.update(); });
98
+ i0.ɵɵelementEnd()();
99
+ i0.ɵɵelementStart(61, "div", 7)(62, "input", 8);
100
+ i0.ɵɵlistener("ngModelChange", function FixtureSettingsStageComponent_Template_input_ngModelChange_62_listener($event) { ctx.projectService.project.stagePillarWidthCm = $event; return ctx.update(); });
101
+ i0.ɵɵelementEnd()();
102
+ i0.ɵɵelementStart(63, "div", 9);
103
+ i0.ɵɵtext(64, "cm");
104
+ i0.ɵɵelementEnd()()()();
105
+ } if (rf & 2) {
106
+ i0.ɵɵadvance(2);
107
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 43, "designer.fixture.setting-stage"), " ");
108
+ i0.ɵɵadvance(5);
109
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 45, "designer.fixture.setting-stage-width"), " ");
110
+ i0.ɵɵadvance(3);
111
+ i0.ɵɵproperty("tooltip", "hide")("value", ctx.projectService.project.stageWidthCm)("min", 100)("max", 2000)("step", 5);
112
+ i0.ɵɵadvance(2);
113
+ i0.ɵɵproperty("ngModel", ctx.projectService.project.stageWidthCm);
114
+ i0.ɵɵadvance(5);
115
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(18, 47, "designer.fixture.setting-stage-height"), " ");
116
+ i0.ɵɵadvance(3);
117
+ i0.ɵɵproperty("tooltip", "hide")("value", ctx.projectService.project.stageHeightCm)("min", 100)("max", 2000)("step", 5);
118
+ i0.ɵɵadvance(2);
119
+ i0.ɵɵproperty("ngModel", ctx.projectService.project.stageHeightCm);
120
+ i0.ɵɵadvance(5);
121
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(28, 49, "designer.fixture.setting-stage-depth"), " ");
122
+ i0.ɵɵadvance(3);
123
+ i0.ɵɵproperty("tooltip", "hide")("value", ctx.projectService.project.stageDepthCm)("min", 100)("max", 2000)("step", 5);
124
+ i0.ɵɵadvance(2);
125
+ i0.ɵɵproperty("ngModel", ctx.projectService.project.stageDepthCm);
126
+ i0.ɵɵadvance(5);
127
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(38, 51, "designer.fixture.setting-stage-floor-height"), " ");
128
+ i0.ɵɵadvance(3);
129
+ i0.ɵɵproperty("tooltip", "hide")("value", ctx.projectService.project.stageFloorHeightCm)("min", 1)("max", 1000)("step", 5);
130
+ i0.ɵɵadvance(2);
131
+ i0.ɵɵproperty("ngModel", ctx.projectService.project.stageFloorHeightCm);
132
+ i0.ɵɵadvance(5);
133
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(48, 53, "designer.fixture.setting-stage-ceiling-height"), " ");
134
+ i0.ɵɵadvance(3);
135
+ i0.ɵɵproperty("tooltip", "hide")("value", ctx.projectService.project.stageCeilingHeightCm)("min", 1)("max", 1000)("step", 5);
136
+ i0.ɵɵadvance(2);
137
+ i0.ɵɵproperty("ngModel", ctx.projectService.project.stageCeilingHeightCm);
138
+ i0.ɵɵadvance(5);
139
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(58, 55, "designer.fixture.setting-stage-pillar-width"), " ");
140
+ i0.ɵɵadvance(3);
141
+ i0.ɵɵproperty("tooltip", "hide")("value", ctx.projectService.project.stagePillarWidthCm)("min", 1)("max", 200)("step", 5);
142
+ i0.ɵɵadvance(2);
143
+ i0.ɵɵproperty("ngModel", ctx.projectService.project.stagePillarWidthCm);
144
+ } }, dependencies: [i3.DefaultValueAccessor, i3.NgControlStatus, i3.NgModel, i4.SliderComponent, i5.TranslatePipe] }); }
145
+ }
146
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FixtureSettingsStageComponent, [{
147
+ type: Component,
148
+ args: [{ selector: 'lib-app-fixture-settings-stage', template: "<div class=\"card border-secondary h-100\">\n <div class=\"card-header\">\n {{ 'designer.fixture.setting-stage' | translate }}\n </div>\n\n <div class=\"card-body h-100\">\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-width' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageWidthCm\"\n [min]=\"100\"\n [max]=\"2000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageWidthCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageWidthCm\"\n (ngModelChange)=\"projectService.project.stageWidthCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-height' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageHeightCm\"\n [min]=\"100\"\n [max]=\"2000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageHeightCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageHeightCm\"\n (ngModelChange)=\"projectService.project.stageHeightCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-depth' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageDepthCm\"\n [min]=\"100\"\n [max]=\"2000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageDepthCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageDepthCm\"\n (ngModelChange)=\"projectService.project.stageDepthCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-floor-height' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageFloorHeightCm\"\n [min]=\"1\"\n [max]=\"1000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageFloorHeightCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageFloorHeightCm\"\n (ngModelChange)=\"projectService.project.stageFloorHeightCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-ceiling-height' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageCeilingHeightCm\"\n [min]=\"1\"\n [max]=\"1000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageCeilingHeightCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageCeilingHeightCm\"\n (ngModelChange)=\"projectService.project.stageCeilingHeightCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-pillar-width' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stagePillarWidthCm\"\n [min]=\"1\"\n [max]=\"200\"\n [step]=\"5\"\n (change)=\"projectService.project.stagePillarWidthCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stagePillarWidthCm\"\n (ngModelChange)=\"projectService.project.stagePillarWidthCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n </div>\n</div>\n" }]
149
+ }], () => [{ type: i1.ProjectService }, { type: i2.PreviewService }, { type: i0.ChangeDetectorRef }], null); })();
150
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FixtureSettingsStageComponent, { className: "FixtureSettingsStageComponent" }); })();
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1zZXR0aW5ncy1zdGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2ZpeHR1cmUvZml4dHVyZS1zZXR0aW5ncy9maXh0dXJlLXNldHRpbmdzLXN0YWdlL2ZpeHR1cmUtc2V0dGluZ3Mtc3RhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9maXh0dXJlL2ZpeHR1cmUtc2V0dGluZ3MvZml4dHVyZS1zZXR0aW5ncy1zdGFnZS9maXh0dXJlLXNldHRpbmdzLXN0YWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7OztBQU9uRSxNQUFNLE9BQU8sNkJBQTZCO0lBQ3hDLFlBQW1CLGNBQThCLEVBQVMsY0FBOEIsRUFBVSxpQkFBb0M7UUFBbkgsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtJQUFHLENBQUM7SUFFMUksUUFBUSxLQUFJLENBQUM7SUFFYixNQUFNO1FBQ0osSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekMsQ0FBQzs4RkFSVSw2QkFBNkI7b0VBQTdCLDZCQUE2QjtZQ1J4QyxBQURGLDhCQUF5QyxhQUNkO1lBQ3ZCLFlBQ0Y7O1lBQUEsaUJBQU07WUFJRixBQURGLEFBREYsOEJBQTZC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REEsZ0NBQWtCLHdEQUNpQyxVQUMxQyxhQUNHLFdBQ0Y7WUFRVixlQUFxRDtZQUFyRCx1RUFBcUQ7WUFXdkQsZUFDRjtZQURFLHdHQUNGO1lBSUksZUFBa0I7WUFJbEIsQUFEQSxBQURBLEFBREEsQUFEQSxnQ0FBa0IsMERBQ21DLFVBQzVDLGFBQ0csV0FDRjtZQVFWLGVBQXVEO1lBQXZELHlFQUF1RDtZQVd6RCxlQUNGO1lBREUsc0dBQ0Y7WUFJSSxlQUFrQjtZQUlsQixBQURBLEFBREEsQUFEQSxBQURBLGdDQUFrQix3REFDaUMsVUFDMUMsWUFDRSxXQUNEO1lBUVYsZUFBcUQ7WUFBckQsdUVBQXFEOzs7aUZENUpsRCw2QkFBNkI7Y0FMekMsU0FBUzsyQkFDRSxnQ0FBZ0M7O2tGQUkvQiw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByZXZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJldmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJvamVjdC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWFwcC1maXh0dXJlLXNldHRpbmdzLXN0YWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpeHR1cmUtc2V0dGluZ3Mtc3RhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maXh0dXJlLXNldHRpbmdzLXN0YWdlLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRml4dHVyZVNldHRpbmdzU3RhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlLCBwdWJsaWMgcHJldmlld1NlcnZpY2U6IFByZXZpZXdTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgdXBkYXRlKCkge1xuICAgIHRoaXMucHJldmlld1NlcnZpY2UudXBkYXRlU3RhZ2UoKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyLXNlY29uZGFyeSBoLTEwMFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICB7eyAnZGVzaWduZXIuZml4dHVyZS5zZXR0aW5nLXN0YWdlJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGgtMTAwXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIiBzdHlsZT1cIndpZHRoOiAxMjBweDsgZmxvYXQ6IGxlZnRcIj5cbiAgICAgICAge3sgJ2Rlc2lnbmVyLmZpeHR1cmUuc2V0dGluZy1zdGFnZS13aWR0aCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIiBzdHlsZT1cImZsb2F0OiBsZWZ0XCI+XG4gICAgICAgIDxtdi1zbGlkZXJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNDBweFwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ2hpZGUnXCJcbiAgICAgICAgICBbdmFsdWVdPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ21cIlxuICAgICAgICAgIFttaW5dPVwiMTAwXCJcbiAgICAgICAgICBbbWF4XT1cIjIwMDBcIlxuICAgICAgICAgIFtzdGVwXT1cIjVcIlxuICAgICAgICAgIChjaGFuZ2UpPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20gPSAkZXZlbnQubmV3VmFsdWU7IHVwZGF0ZSgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L212LXNsaWRlcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSA9ICRldmVudDsgdXBkYXRlKClcIlxuICAgICAgICAgIGNsYXNzPVwic2xpZGVyLWlucHV0LXJlYWRvbmx5XCJcbiAgICAgICAgICByZWFkb25seVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0byBtbC0xXCIgc3R5bGU9XCJjb2xvcjogZGFya2dyYXlcIj5jbTwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIiBzdHlsZT1cIndpZHRoOiAxMjBweDsgZmxvYXQ6IGxlZnRcIj5cbiAgICAgICAge3sgJ2Rlc2lnbmVyLmZpeHR1cmUuc2V0dGluZy1zdGFnZS1oZWlnaHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvXCIgc3R5bGU9XCJmbG9hdDogbGVmdFwiPlxuICAgICAgICA8bXYtc2xpZGVyXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTQwcHhcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidoaWRlJ1wiXG4gICAgICAgICAgW3ZhbHVlXT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbVwiXG4gICAgICAgICAgW21pbl09XCIxMDBcIlxuICAgICAgICAgIFttYXhdPVwiMjAwMFwiXG4gICAgICAgICAgW3N0ZXBdPVwiNVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gPSAkZXZlbnQubmV3VmFsdWU7IHVwZGF0ZSgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L212LXNsaWRlcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtID0gJGV2ZW50OyB1cGRhdGUoKVwiXG4gICAgICAgICAgY2xhc3M9XCJzbGlkZXItaW5wdXQtcmVhZG9ubHlcIlxuICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvIG1sLTFcIiBzdHlsZT1cImNvbG9yOiBkYXJrZ3JheVwiPmNtPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiIHN0eWxlPVwid2lkdGg6IDEyMHB4OyBmbG9hdDogbGVmdFwiPlxuICAgICAgICB7eyAnZGVzaWduZXIuZml4dHVyZS5zZXR0aW5nLXN0YWdlLWRlcHRoJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiIHN0eWxlPVwiZmxvYXQ6IGxlZnRcIj5cbiAgICAgICAgPG12LXNsaWRlclxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE0MHB4XCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInaGlkZSdcIlxuICAgICAgICAgIFt2YWx1ZV09XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbVwiXG4gICAgICAgICAgW21pbl09XCIxMDBcIlxuICAgICAgICAgIFttYXhdPVwiMjAwMFwiXG4gICAgICAgICAgW3N0ZXBdPVwiNVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSA9ICRldmVudC5uZXdWYWx1ZTsgdXBkYXRlKClcIlxuICAgICAgICA+XG4gICAgICAgIDwvbXYtc2xpZGVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgW25nTW9kZWxdPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ21cIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtID0gJGV2ZW50OyB1cGRhdGUoKVwiXG4gICAgICAgICAgY2xhc3M9XCJzbGlkZXItaW5wdXQtcmVhZG9ubHlcIlxuICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvIG1sLTFcIiBzdHlsZT1cImNvbG9yOiBkYXJrZ3JheVwiPmNtPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiIHN0eWxlPVwid2lkdGg6IDEyMHB4OyBmbG9hdDogbGVmdFwiPlxuICAgICAgICB7eyAnZGVzaWduZXIuZml4dHVyZS5zZXR0aW5nLXN0YWdlLWZsb29yLWhlaWdodCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIiBzdHlsZT1cImZsb2F0OiBsZWZ0XCI+XG4gICAgICAgIDxtdi1zbGlkZXJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNDBweFwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ2hpZGUnXCJcbiAgICAgICAgICBbdmFsdWVdPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q21cIlxuICAgICAgICAgIFttaW5dPVwiMVwiXG4gICAgICAgICAgW21heF09XCIxMDAwXCJcbiAgICAgICAgICBbc3RlcF09XCI1XCJcbiAgICAgICAgICAoY2hhbmdlKT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtID0gJGV2ZW50Lm5ld1ZhbHVlOyB1cGRhdGUoKVwiXG4gICAgICAgID5cbiAgICAgICAgPC9tdi1zbGlkZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20gPSAkZXZlbnQ7IHVwZGF0ZSgpXCJcbiAgICAgICAgICBjbGFzcz1cInNsaWRlci1pbnB1dC1yZWFkb25seVwiXG4gICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG8gbWwtMVwiIHN0eWxlPVwiY29sb3I6IGRhcmtncmF5XCI+Y208L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvXCIgc3R5bGU9XCJ3aWR0aDogMTIwcHg7IGZsb2F0OiBsZWZ0XCI+XG4gICAgICAgIHt7ICdkZXNpZ25lci5maXh0dXJlLnNldHRpbmctc3RhZ2UtY2VpbGluZy1oZWlnaHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvXCIgc3R5bGU9XCJmbG9hdDogbGVmdFwiPlxuICAgICAgICA8bXYtc2xpZGVyXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTQwcHhcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidoaWRlJ1wiXG4gICAgICAgICAgW3ZhbHVlXT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VDZWlsaW5nSGVpZ2h0Q21cIlxuICAgICAgICAgIFttaW5dPVwiMVwiXG4gICAgICAgICAgW21heF09XCIxMDAwXCJcbiAgICAgICAgICBbc3RlcF09XCI1XCJcbiAgICAgICAgICAoY2hhbmdlKT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VDZWlsaW5nSGVpZ2h0Q20gPSAkZXZlbnQubmV3VmFsdWU7IHVwZGF0ZSgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L212LXNsaWRlcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VDZWlsaW5nSGVpZ2h0Q21cIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VDZWlsaW5nSGVpZ2h0Q20gPSAkZXZlbnQ7IHVwZGF0ZSgpXCJcbiAgICAgICAgICBjbGFzcz1cInNsaWRlci1pbnB1dC1yZWFkb25seVwiXG4gICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG8gbWwtMVwiIHN0eWxlPVwiY29sb3I6IGRhcmtncmF5XCI+Y208L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvXCIgc3R5bGU9XCJ3aWR0aDogMTIwcHg7IGZsb2F0OiBsZWZ0XCI+XG4gICAgICAgIHt7ICdkZXNpZ25lci5maXh0dXJlLnNldHRpbmctc3RhZ2UtcGlsbGFyLXdpZHRoJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiIHN0eWxlPVwiZmxvYXQ6IGxlZnRcIj5cbiAgICAgICAgPG12LXNsaWRlclxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE0MHB4XCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInaGlkZSdcIlxuICAgICAgICAgIFt2YWx1ZV09XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbVwiXG4gICAgICAgICAgW21pbl09XCIxXCJcbiAgICAgICAgICBbbWF4XT1cIjIwMFwiXG4gICAgICAgICAgW3N0ZXBdPVwiNVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSA9ICRldmVudC5uZXdWYWx1ZTsgdXBkYXRlKClcIlxuICAgICAgICA+XG4gICAgICAgIDwvbXYtc2xpZGVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgW25nTW9kZWxdPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtID0gJGV2ZW50OyB1cGRhdGUoKVwiXG4gICAgICAgICAgY2xhc3M9XCJzbGlkZXItaW5wdXQtcmVhZG9ubHlcIlxuICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvIG1sLTFcIiBzdHlsZT1cImNvbG9yOiBkYXJrZ3JheVwiPmNtPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,46 @@
1
+ import { Component } from '@angular/core';
2
+ import { FixtureService } from '../../services/fixture.service';
3
+ import { PresetService } from '../../services/preset.service';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../services/fixture.service";
6
+ import * as i2 from "../../services/preset.service";
7
+ import * as i3 from "./fixture-settings-position/fixture-settings-position.component";
8
+ import * as i4 from "./fixture-settings-stage/fixture-settings-stage.component";
9
+ export class FixtureSettingsComponent {
10
+ constructor(fixtureService, presetService) {
11
+ this.fixtureService = fixtureService;
12
+ this.presetService = presetService;
13
+ this.dmxChannels = [];
14
+ for (let i = 0; i < 512; i++) {
15
+ this.dmxChannels.push(0);
16
+ }
17
+ }
18
+ ngOnInit() { }
19
+ isChrome() {
20
+ if (navigator.appVersion.indexOf('Chrome/') !== -1) {
21
+ return true;
22
+ }
23
+ return false;
24
+ }
25
+ static { this.ɵfac = function FixtureSettingsComponent_Factory(t) { return new (t || FixtureSettingsComponent)(i0.ɵɵdirectiveInject(i1.FixtureService), i0.ɵɵdirectiveInject(i2.PresetService)); }; }
26
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixtureSettingsComponent, selectors: [["lib-app-fixture-settings"]], decls: 9, vars: 2, consts: [[1, "card", "border-secondary", "panel", "h-100"], [1, "card-body", "capability-container", "d-flex", "h-100", 2, "overflow-y", "hidden"], [1, "row", "m-0", "pl-3"], [1, "col", "col-auto", "p-0", "my-3", "mr-3"]], template: function FixtureSettingsComponent_Template(rf, ctx) { if (rf & 1) {
27
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3);
28
+ i0.ɵɵelement(4, "lib-app-fixture-settings-position");
29
+ i0.ɵɵelementEnd();
30
+ i0.ɵɵelementStart(5, "div", 3);
31
+ i0.ɵɵelement(6, "lib-app-fixture-settings-stage");
32
+ i0.ɵɵelementEnd();
33
+ i0.ɵɵelementStart(7, "div", 3);
34
+ i0.ɵɵtext(8, "\u00A0");
35
+ i0.ɵɵelementEnd()()()();
36
+ } if (rf & 2) {
37
+ i0.ɵɵadvance(2);
38
+ i0.ɵɵclassProp("h-100", ctx.isChrome());
39
+ } }, dependencies: [i3.FixtureSettingsPositionComponent, i4.FixtureSettingsStageComponent], styles: [".dmx-channel[_ngcontent-%COMP%]{display:flex;float:left;width:28px;border:1px solid white;margin-left:-1px;margin-bottom:-1px}.dmx-channel-occupied[_ngcontent-%COMP%]{background-color:#fd7e14;border-left:none;border-right:none;cursor:move}.dmx-channel-occupied-start[_ngcontent-%COMP%]{border-left:1px solid white}.dmx-channel-occupied-end[_ngcontent-%COMP%]{border-right:1px solid white}"] }); }
40
+ }
41
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FixtureSettingsComponent, [{
42
+ type: Component,
43
+ args: [{ selector: 'lib-app-fixture-settings', template: "<div class=\"card border-secondary panel h-100\">\n <div class=\"card-body capability-container d-flex h-100\" style=\"overflow-y: hidden\">\n <!-- h-100 needs to be applied in chrome to avoid performance issues with many layouts (reflows)\n during sliding. But the class must not be applied e.g. in Safari, because the bottom margin is not correct\n anymore afterwards. -->\n <div class=\"row m-0 pl-3\" [class.h-100]=\"isChrome()\">\n <!-- Position -->\n <div class=\"col col-auto p-0 my-3 mr-3\">\n <lib-app-fixture-settings-position></lib-app-fixture-settings-position>\n </div>\n\n <!-- Stage -->\n <div class=\"col col-auto p-0 my-3 mr-3\">\n <lib-app-fixture-settings-stage></lib-app-fixture-settings-stage>\n </div>\n\n <!-- Fix spacing at the end -->\n <div class=\"col col-auto p-0 my-3 mr-3\">&nbsp;</div>\n </div>\n </div>\n</div>\n", styles: [".dmx-channel{display:flex;float:left;width:28px;border:1px solid white;margin-left:-1px;margin-bottom:-1px}.dmx-channel-occupied{background-color:#fd7e14;border-left:none;border-right:none;cursor:move}.dmx-channel-occupied-start{border-left:1px solid white}.dmx-channel-occupied-end{border-right:1px solid white}\n"] }]
44
+ }], () => [{ type: i1.FixtureService }, { type: i2.PresetService }], null); })();
45
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FixtureSettingsComponent, { className: "FixtureSettingsComponent" }); })();
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1zZXR0aW5ncy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2ZpeHR1cmUvZml4dHVyZS1zZXR0aW5ncy9maXh0dXJlLXNldHRpbmdzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvZml4dHVyZS9maXh0dXJlLXNldHRpbmdzL2ZpeHR1cmUtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7QUFPOUQsTUFBTSxPQUFPLHdCQUF3QjtJQUduQyxZQUFvQixjQUE4QixFQUFTLGFBQTRCO1FBQW5FLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFTLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBRnZGLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBR3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVEsS0FBSSxDQUFDO0lBRWIsUUFBUTtRQUNOLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7eUZBaEJVLHdCQUF3QjtvRUFBeEIsd0JBQXdCO1lDRi9CLEFBRkYsQUFKRixBQURGLDhCQUErQyxhQUN1QyxhQUk3QixhQUVYO1lBQ3RDLG9EQUF1RTtZQUN6RSxpQkFBTTtZQUdOLDhCQUF3QztZQUN0QyxpREFBaUU7WUFDbkUsaUJBQU07WUFHTiw4QkFBd0M7WUFBQSxzQkFBTTtZQUdwRCxBQURFLEFBREUsQUFEZ0QsaUJBQU0sRUFDaEQsRUFDRixFQUNGOztZQWZ3QixlQUEwQjtZQUExQix1Q0FBMEI7OztpRkRJM0Msd0JBQXdCO2NBTHBDLFNBQVM7MkJBQ0UsMEJBQTBCOztrRkFJekIsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXNldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVzZXQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hcHAtZml4dHVyZS1zZXR0aW5ncycsXG4gIHRlbXBsYXRlVXJsOiAnLi9maXh0dXJlLXNldHRpbmdzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZml4dHVyZS1zZXR0aW5ncy5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZpeHR1cmVTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRteENoYW5uZWxzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLCBwdWJsaWMgcHJlc2V0U2VydmljZTogUHJlc2V0U2VydmljZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTEyOyBpKyspIHtcbiAgICAgIHRoaXMuZG14Q2hhbm5lbHMucHVzaCgwKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgaXNDaHJvbWUoKTogYm9vbGVhbiB7XG4gICAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoJ0Nocm9tZS8nKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlci1zZWNvbmRhcnkgcGFuZWwgaC0xMDBcIj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBjYXBhYmlsaXR5LWNvbnRhaW5lciBkLWZsZXggaC0xMDBcIiBzdHlsZT1cIm92ZXJmbG93LXk6IGhpZGRlblwiPlxuICAgIDwhLS0gaC0xMDAgbmVlZHMgdG8gYmUgYXBwbGllZCBpbiBjaHJvbWUgdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzIHdpdGggbWFueSBsYXlvdXRzIChyZWZsb3dzKVxuICAgICAgZHVyaW5nIHNsaWRpbmcuIEJ1dCB0aGUgY2xhc3MgbXVzdCBub3QgYmUgYXBwbGllZCBlLmcuIGluIFNhZmFyaSwgYmVjYXVzZSB0aGUgYm90dG9tIG1hcmdpbiBpcyBub3QgY29ycmVjdFxuICAgICAgYW55bW9yZSBhZnRlcndhcmRzLiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwicm93IG0tMCBwbC0zXCIgW2NsYXNzLmgtMTAwXT1cImlzQ2hyb21lKClcIj5cbiAgICAgIDwhLS0gUG9zaXRpb24gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC1hdXRvIHAtMCBteS0zIG1yLTNcIj5cbiAgICAgICAgPGxpYi1hcHAtZml4dHVyZS1zZXR0aW5ncy1wb3NpdGlvbj48L2xpYi1hcHAtZml4dHVyZS1zZXR0aW5ncy1wb3NpdGlvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFN0YWdlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtYXV0byBwLTAgbXktMyBtci0zXCI+XG4gICAgICAgIDxsaWItYXBwLWZpeHR1cmUtc2V0dGluZ3Mtc3RhZ2U+PC9saWItYXBwLWZpeHR1cmUtc2V0dGluZ3Mtc3RhZ2U+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGaXggc3BhY2luZyBhdCB0aGUgZW5kIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtYXV0byBwLTAgbXktMyBtci0zXCI+Jm5ic3A7PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,148 @@
1
+ import { Component } from '@angular/core';
2
+ import { FixturePoolService } from '../services/fixture-pool.service';
3
+ import { FixtureService } from '../services/fixture.service';
4
+ import { IntroService } from '../services/intro.service';
5
+ import { PresetService } from '../services/preset.service';
6
+ import { ProjectService } from '../services/project.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../services/project.service";
9
+ import * as i2 from "../services/preset.service";
10
+ import * as i3 from "../services/fixture-pool.service";
11
+ import * as i4 from "../services/fixture.service";
12
+ import * as i5 from "../services/intro.service";
13
+ import * as i6 from "@angular/common";
14
+ import * as i7 from "@angular/forms";
15
+ import * as i8 from "ngx-sortablejs-plus";
16
+ import * as i9 from "@ngx-translate/core";
17
+ function FixtureComponent_div_12_div_1_Template(rf, ctx) { if (rf & 1) {
18
+ const _r1 = i0.ɵɵgetCurrentView();
19
+ i0.ɵɵelementStart(0, "div", 12)(1, "div", 13);
20
+ i0.ɵɵlistener("click", function FixtureComponent_div_12_div_1_Template_div_click_1_listener($event) { const presetFixture_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.selectFixture($event, presetFixture_r2)); });
21
+ i0.ɵɵelementStart(2, "div", 14);
22
+ i0.ɵɵelement(3, "i", 15);
23
+ i0.ɵɵelementEnd();
24
+ i0.ɵɵelementStart(4, "div", 16);
25
+ i0.ɵɵelement(5, "input", 17);
26
+ i0.ɵɵelementEnd();
27
+ i0.ɵɵelementStart(6, "div");
28
+ i0.ɵɵelement(7, "span");
29
+ i0.ɵɵtext(8);
30
+ i0.ɵɵelementEnd()()();
31
+ } if (rf & 2) {
32
+ const presetFixture_r2 = ctx.$implicit;
33
+ const ctx_r2 = i0.ɵɵnextContext(2);
34
+ i0.ɵɵclassProp("inactive-list-item", !ctx_r2.fixtureIsSelected(presetFixture_r2));
35
+ i0.ɵɵadvance(5);
36
+ i0.ɵɵproperty("ngModel", ctx_r2.fixtureIsSelected(presetFixture_r2));
37
+ i0.ɵɵadvance(2);
38
+ i0.ɵɵclassMapInterpolate1("icon-", ctx_r2.fixtureService.getFixtureIconClass(ctx_r2.fixtureService.getProfileByUuid(ctx_r2.fixtureService.getFixtureByUuid(presetFixture_r2.fixtureUuid).profileUuid)), " mr-1");
39
+ i0.ɵɵadvance();
40
+ i0.ɵɵtextInterpolate1(" ", ctx_r2.fixtureName(presetFixture_r2), " ");
41
+ } }
42
+ function FixtureComponent_div_12_Template(rf, ctx) { if (rf & 1) {
43
+ i0.ɵɵelementStart(0, "div", 10);
44
+ i0.ɵɵtemplate(1, FixtureComponent_div_12_div_1_Template, 9, 7, "div", 11);
45
+ i0.ɵɵelementEnd();
46
+ } if (rf & 2) {
47
+ const ctx_r2 = i0.ɵɵnextContext();
48
+ i0.ɵɵproperty("sortablejs", ctx_r2.projectService.project.presetFixtures);
49
+ i0.ɵɵadvance();
50
+ i0.ɵɵproperty("ngForOf", ctx_r2.projectService.project.presetFixtures);
51
+ } }
52
+ function FixtureComponent_div_13_Template(rf, ctx) { if (rf & 1) {
53
+ const _r4 = i0.ɵɵgetCurrentView();
54
+ i0.ɵɵelementStart(0, "div", 18)(1, "a", 19);
55
+ i0.ɵɵlistener("click", function FixtureComponent_div_13_Template_a_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); ctx_r2.openFixturePool(); return i0.ɵɵresetView(false); });
56
+ i0.ɵɵelement(2, "i", 20);
57
+ i0.ɵɵtext(3);
58
+ i0.ɵɵpipe(4, "translate");
59
+ i0.ɵɵelementEnd()();
60
+ } if (rf & 2) {
61
+ i0.ɵɵadvance(3);
62
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 1, "designer.fixture.no-fixtures"), "");
63
+ } }
64
+ export class FixtureComponent {
65
+ constructor(projectService, presetService, fixturePoolService, fixtureService, introService) {
66
+ this.projectService = projectService;
67
+ this.presetService = presetService;
68
+ this.fixturePoolService = fixturePoolService;
69
+ this.fixtureService = fixtureService;
70
+ this.introService = introService;
71
+ }
72
+ ngOnInit() { }
73
+ fixtureName(presetFixture) {
74
+ let name;
75
+ name = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid).name;
76
+ if (presetFixture.pixelKey) {
77
+ name += ' - ' + presetFixture.pixelKey;
78
+ }
79
+ return name;
80
+ }
81
+ fixtureIsSelected(presetFixture) {
82
+ const fixture = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid);
83
+ if (this.fixtureService.settingsSelection) {
84
+ return this.fixtureService.settingsFixtureIsSelected(fixture);
85
+ }
86
+ else {
87
+ return this.presetService.fixtureIsSelected(fixture, presetFixture.pixelKey);
88
+ }
89
+ }
90
+ selectFixture(event, presetFixture) {
91
+ const fixture = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid);
92
+ if (this.fixtureService.settingsSelection) {
93
+ // select fixtures for the settings
94
+ this.fixtureService.switchSettingsFixtureSelection(fixture);
95
+ this.presetService.fixtureSelectionSettingsChanged.next();
96
+ }
97
+ else {
98
+ // select fixtures for the current preset
99
+ this.presetService.switchFixtureSelection(fixture, presetFixture.pixelKey);
100
+ this.presetService.fixtureSelectionChanged.next();
101
+ this.presetService.previewLive();
102
+ }
103
+ }
104
+ selectAll() {
105
+ this.presetService.selectAllFixtures();
106
+ this.presetService.fixtureSelectionChanged.next();
107
+ }
108
+ selectNone() {
109
+ this.presetService.selectNoFixtures();
110
+ this.presetService.fixtureSelectionChanged.next();
111
+ }
112
+ openFixturePool() {
113
+ this.fixturePoolService.open();
114
+ }
115
+ static { this.ɵfac = function FixtureComponent_Factory(t) { return new (t || FixtureComponent)(i0.ɵɵdirectiveInject(i1.ProjectService), i0.ɵɵdirectiveInject(i2.PresetService), i0.ɵɵdirectiveInject(i3.FixturePoolService), i0.ɵɵdirectiveInject(i4.FixtureService), i0.ɵɵdirectiveInject(i5.IntroService)); }; }
116
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixtureComponent, selectors: [["lib-app-fixture"]], decls: 14, vars: 4, consts: [[1, "card", "border-secondary", "h-100", "panel"], [1, "card-header", "d-flex"], [1, "ml-auto"], ["href", "#", 1, "btn", "btn-secondary", "m-0,", "p-0", 3, "click"], ["aria-hidden", "true", 1, "fa", "fa-square-o", "fa-fw"], ["aria-hidden", "true", 1, "fa", "fa-check-square-o", "fa-fw"], ["aria-hidden", "true", 1, "fa", "fa-cog", "fa-fw"], [1, "card-body", "h-100", "p-0"], ["class", "list-group", 3, "sortablejs", 4, "ngIf"], ["class", "w-100 h-100 d-flex p-3 text-center", 4, "ngIf"], [1, "list-group", 3, "sortablejs"], ["class", "list-group-item", 3, "inactive-list-item", 4, "ngFor", "ngForOf"], [1, "list-group-item"], [1, "row", "d-flex", 2, "cursor", "pointer", 3, "click"], [1, "col-auto", "list-sort-handle", "my-auto", 2, "cursor", "move", "cursor", "-webkit-grabbing"], ["aria-hidden", "true", 1, "fa", "fa-bars"], [1, "form-check"], ["type", "checkbox", "id", "active", 1, "form-check-input", 3, "ngModel"], [1, "w-100", "h-100", "d-flex", "p-3", "text-center"], ["href", "#", 1, "m-auto", 3, "click"], ["aria-hidden", "true", 1, "fa", "fa-plus-circle", "fa-fw"]], template: function FixtureComponent_Template(rf, ctx) { if (rf & 1) {
117
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div");
118
+ i0.ɵɵtext(3, "Fixtures");
119
+ i0.ɵɵelementEnd();
120
+ i0.ɵɵelementStart(4, "div", 2)(5, "a", 3);
121
+ i0.ɵɵlistener("click", function FixtureComponent_Template_a_click_5_listener() { ctx.selectNone(); return false; });
122
+ i0.ɵɵelement(6, "i", 4);
123
+ i0.ɵɵelementEnd();
124
+ i0.ɵɵelementStart(7, "a", 3);
125
+ i0.ɵɵlistener("click", function FixtureComponent_Template_a_click_7_listener() { ctx.selectAll(); return false; });
126
+ i0.ɵɵelement(8, "i", 5);
127
+ i0.ɵɵelementEnd();
128
+ i0.ɵɵelementStart(9, "a", 3);
129
+ i0.ɵɵlistener("click", function FixtureComponent_Template_a_click_9_listener() { ctx.openFixturePool(); return false; });
130
+ i0.ɵɵelement(10, "i", 6);
131
+ i0.ɵɵelementEnd()()();
132
+ i0.ɵɵelementStart(11, "div", 7);
133
+ i0.ɵɵtemplate(12, FixtureComponent_div_12_Template, 2, 2, "div", 8)(13, FixtureComponent_div_13_Template, 5, 3, "div", 9);
134
+ i0.ɵɵelementEnd()();
135
+ } if (rf & 2) {
136
+ i0.ɵɵclassProp("card-intro-active", ctx.introService.showStep("fixtures"));
137
+ i0.ɵɵadvance(12);
138
+ i0.ɵɵproperty("ngIf", ctx.presetService.selectedPreset);
139
+ i0.ɵɵadvance();
140
+ i0.ɵɵproperty("ngIf", ctx.projectService.project.presetFixtures.length == 0);
141
+ } }, dependencies: [i6.NgForOf, i6.NgIf, i7.CheckboxControlValueAccessor, i7.NgControlStatus, i7.NgModel, i8.SortablejsDirective, i9.TranslatePipe] }); }
142
+ }
143
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FixtureComponent, [{
144
+ type: Component,
145
+ args: [{ selector: 'lib-app-fixture', template: "<div class=\"card border-secondary h-100 panel\" [class.card-intro-active]=\"introService.showStep('fixtures')\">\n <div class=\"card-header d-flex\">\n <div>Fixtures</div>\n <div class=\"ml-auto\">\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"selectNone(); (false)\"\n ><i class=\"fa fa-square-o fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"selectAll(); (false)\"\n ><i class=\"fa fa-check-square-o fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"openFixturePool(); (false)\"\n ><i class=\"fa fa-cog fa-fw\" aria-hidden=\"true\"></i\n ></a>\n </div>\n </div>\n\n <div class=\"card-body h-100 p-0\">\n <!-- List of fixtures -->\n <div *ngIf=\"presetService.selectedPreset\" class=\"list-group\" [sortablejs]=\"projectService.project.presetFixtures\">\n <div\n class=\"list-group-item\"\n *ngFor=\"let presetFixture of projectService.project.presetFixtures\"\n [class.inactive-list-item]=\"!fixtureIsSelected(presetFixture)\"\n >\n <div class=\"row d-flex\" (click)=\"selectFixture($event, presetFixture)\" style=\"cursor: pointer\">\n <div class=\"col-auto list-sort-handle my-auto\" style=\"cursor: move; cursor: -webkit-grabbing\">\n <i class=\"fa fa-bars\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"form-check\">\n <input type=\"checkbox\" class=\"form-check-input\" id=\"active\" [ngModel]=\"fixtureIsSelected(presetFixture)\" />\n </div>\n <div>\n <span\n class=\"icon-{{\n fixtureService.getFixtureIconClass(\n fixtureService.getProfileByUuid(fixtureService.getFixtureByUuid(presetFixture.fixtureUuid).profileUuid)\n )\n }} mr-1\"\n ></span>\n {{ fixtureName(presetFixture) }}\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"projectService.project.presetFixtures.length == 0\" class=\"w-100 h-100 d-flex p-3 text-center\">\n <a href=\"#\" class=\"m-auto\" (click)=\"openFixturePool(); (false)\"\n ><i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i> {{ 'designer.fixture.no-fixtures' | translate }}</a\n >\n </div>\n </div>\n</div>\n" }]
146
+ }], () => [{ type: i1.ProjectService }, { type: i2.PresetService }, { type: i3.FixturePoolService }, { type: i4.FixtureService }, { type: i5.IntroService }], null); })();
147
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FixtureComponent, { className: "FixtureComponent" }); })();
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2ZpeHR1cmUvZml4dHVyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2ZpeHR1cmUvZml4dHVyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ2tCckQsQUFMRiwrQkFJQyxjQUNnRztJQUF2RSwwTkFBUyw4Q0FBb0MsS0FBQztJQUNwRSwrQkFBOEY7SUFDNUYsd0JBQTZDO0lBQy9DLGlCQUFNO0lBQ04sK0JBQXdCO0lBQ3RCLDRCQUEyRztJQUM3RyxpQkFBTTtJQUNOLDJCQUFLO0lBQ0gsdUJBTVE7SUFDUixZQUNGO0lBRUosQUFERSxBQURFLGlCQUFNLEVBQ0YsRUFDRjs7OztJQXBCSixpRkFBOEQ7SUFPRSxlQUE0QztJQUE1QyxvRUFBNEM7SUFJdEcsZUFJUTtJQUpSLGdOQUlRO0lBRVYsY0FDRjtJQURFLHFFQUNGOzs7SUF0Qk4sK0JBQWtIO0lBQ2hILHlFQUlDO0lBb0JILGlCQUFNOzs7SUF6QnVELHlFQUFvRDtJQUduRixjQUF3QztJQUF4QyxzRUFBd0M7Ozs7SUF5QnBFLEFBREYsK0JBQTBHLFlBRXJHO0lBRHdCLGtKQUFTLHdC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WUFBQSxpQkFBTTtZQUVqQixBQURGLDhCQUFxQixXQUVoQjtZQUQ0QyxpRkFBUyxnQkFBWSxTQUFHLEtBQUssSUFBRTtZQUMzRSx1QkFDRjtZQUFBLGlCQUFJO1lBQ0wsNEJBQ0c7WUFENEMsaUZBQVMsZUFBVyxTQUFHLEtBQUssSUFBRTtZQUMxRSx1QkFDRjtZQUFBLGlCQUFJO1lBQ0wsNEJBQ0c7WUFENEMsaUZBQVMscUJBQWlCLFNBQUcsS0FBSyxJQUFFO1lBQ2hGLHdCQUNGO1lBRUwsQUFERSxBQURHLGlCQUFJLEVBQ0QsRUFDRjtZQUVOLCtCQUFpQztZQTZCL0IsQUEzQkEsbUVBQWtILHNEQTJCUjtZQU05RyxBQURFLGlCQUFNLEVBQ0Y7O1lBbkR5QywwRUFBNkQ7WUFrQmxHLGdCQUFrQztZQUFsQyx1REFBa0M7WUEyQmxDLGNBQXVEO1lBQXZELDRFQUF1RDs7O2lGRC9CcEQsZ0JBQWdCO2NBTDVCLFNBQVM7MkJBQ0UsaUJBQWlCOztrRkFJaEIsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpeHR1cmUgfSBmcm9tICcuLi9tb2RlbHMvZml4dHVyZSc7XG5pbXBvcnQgeyBGaXh0dXJlUG9vbFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maXh0dXJlLXBvb2wuc2VydmljZSc7XG5pbXBvcnQgeyBGaXh0dXJlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZpeHR1cmUuc2VydmljZSc7XG5pbXBvcnQgeyBJbnRyb1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pbnRyby5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXNldFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcmVzZXQuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9qZWN0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2plY3Quc2VydmljZSc7XG5pbXBvcnQgeyBQcmVzZXRGaXh0dXJlIH0gZnJvbSAnLi4vbW9kZWxzL3ByZXNldC1maXh0dXJlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWFwcC1maXh0dXJlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpeHR1cmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maXh0dXJlLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRml4dHVyZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBwcm9qZWN0U2VydmljZTogUHJvamVjdFNlcnZpY2UsXG4gICAgcHVibGljIHByZXNldFNlcnZpY2U6IFByZXNldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlUG9vbFNlcnZpY2U6IEZpeHR1cmVQb29sU2VydmljZSxcbiAgICBwdWJsaWMgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLFxuICAgIHB1YmxpYyBpbnRyb1NlcnZpY2U6IEludHJvU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7fVxuXG4gIGZpeHR1cmVOYW1lKHByZXNldEZpeHR1cmU6IFByZXNldEZpeHR1cmUpIHtcbiAgICBsZXQgbmFtZTogc3RyaW5nO1xuICAgIG5hbWUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQocHJlc2V0Rml4dHVyZS5maXh0dXJlVXVpZCkubmFtZTtcbiAgICBpZiAocHJlc2V0Rml4dHVyZS5waXhlbEtleSkge1xuICAgICAgbmFtZSArPSAnIC0gJyArIHByZXNldEZpeHR1cmUucGl4ZWxLZXk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgZml4dHVyZUlzU2VsZWN0ZWQocHJlc2V0Rml4dHVyZTogUHJlc2V0Rml4dHVyZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQocHJlc2V0Rml4dHVyZS5maXh0dXJlVXVpZCk7XG4gICAgaWYgKHRoaXMuZml4dHVyZVNlcnZpY2Uuc2V0dGluZ3NTZWxlY3Rpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmZpeHR1cmVTZXJ2aWNlLnNldHRpbmdzRml4dHVyZUlzU2VsZWN0ZWQoZml4dHVyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXNldFNlcnZpY2UuZml4dHVyZUlzU2VsZWN0ZWQoZml4dHVyZSwgcHJlc2V0Rml4dHVyZS5waXhlbEtleSk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Rml4dHVyZShldmVudDogYW55LCBwcmVzZXRGaXh0dXJlOiBQcmVzZXRGaXh0dXJlKSB7XG4gICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZChwcmVzZXRGaXh0dXJlLmZpeHR1cmVVdWlkKTtcbiAgICBpZiAodGhpcy5maXh0dXJlU2VydmljZS5zZXR0aW5nc1NlbGVjdGlvbikge1xuICAgICAgLy8gc2VsZWN0IGZpeHR1cmVzIGZvciB0aGUgc2V0dGluZ3NcbiAgICAgIHRoaXMuZml4dHVyZVNlcnZpY2Uuc3dpdGNoU2V0dGluZ3NGaXh0dXJlU2VsZWN0aW9uKGZpeHR1cmUpO1xuICAgICAgdGhpcy5wcmVzZXRTZXJ2aWNlLmZpeHR1cmVTZWxlY3Rpb25TZXR0aW5nc0NoYW5nZWQubmV4dCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzZWxlY3QgZml4dHVyZXMgZm9yIHRoZSBjdXJyZW50IHByZXNldFxuICAgICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnN3aXRjaEZpeHR1cmVTZWxlY3Rpb24oZml4dHVyZSwgcHJlc2V0Rml4dHVyZS5waXhlbEtleSk7XG4gICAgICB0aGlzLnByZXNldFNlcnZpY2UuZml4dHVyZVNlbGVjdGlvbkNoYW5nZWQubmV4dCgpO1xuICAgICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnByZXZpZXdMaXZlKCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0QWxsKCkge1xuICAgIHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RBbGxGaXh0dXJlcygpO1xuICAgIHRoaXMucHJlc2V0U2VydmljZS5maXh0dXJlU2VsZWN0aW9uQ2hhbmdlZC5uZXh0KCk7XG4gIH1cblxuICBzZWxlY3ROb25lKCkge1xuICAgIHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3ROb0ZpeHR1cmVzKCk7XG4gICAgdGhpcy5wcmVzZXRTZXJ2aWNlLmZpeHR1cmVTZWxlY3Rpb25DaGFuZ2VkLm5leHQoKTtcbiAgfVxuXG4gIG9wZW5GaXh0dXJlUG9vbCgpIHtcbiAgICB0aGlzLmZpeHR1cmVQb29sU2VydmljZS5vcGVuKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlci1zZWNvbmRhcnkgaC0xMDAgcGFuZWxcIiBbY2xhc3MuY2FyZC1pbnRyby1hY3RpdmVdPVwiaW50cm9TZXJ2aWNlLnNob3dTdGVwKCdmaXh0dXJlcycpXCI+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBkLWZsZXhcIj5cbiAgICA8ZGl2PkZpeHR1cmVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1sLWF1dG9cIj5cbiAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBtLTAsIHAtMFwiIChjbGljayk9XCJzZWxlY3ROb25lKCk7IChmYWxzZSlcIlxuICAgICAgICA+PGkgY2xhc3M9XCJmYSBmYS1zcXVhcmUtbyBmYS1md1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaVxuICAgICAgPjwvYT5cbiAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBtLTAsIHAtMFwiIChjbGljayk9XCJzZWxlY3RBbGwoKTsgKGZhbHNlKVwiXG4gICAgICAgID48aSBjbGFzcz1cImZhIGZhLWNoZWNrLXNxdWFyZS1vIGZhLWZ3XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pXG4gICAgICA+PC9hPlxuICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IG0tMCwgcC0wXCIgKGNsaWNrKT1cIm9wZW5GaXh0dXJlUG9vbCgpOyAoZmFsc2UpXCJcbiAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtY29nIGZhLWZ3XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pXG4gICAgICA+PC9hPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGgtMTAwIHAtMFwiPlxuICAgIDwhLS0gTGlzdCBvZiBmaXh0dXJlcyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwicHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldFwiIGNsYXNzPVwibGlzdC1ncm91cFwiIFtzb3J0YWJsZWpzXT1cInByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0Rml4dHVyZXNcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIlxuICAgICAgICAqbmdGb3I9XCJsZXQgcHJlc2V0Rml4dHVyZSBvZiBwcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldEZpeHR1cmVzXCJcbiAgICAgICAgW2NsYXNzLmluYWN0aXZlLWxpc3QtaXRlbV09XCIhZml4dHVyZUlzU2VsZWN0ZWQocHJlc2V0Rml4dHVyZSlcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleFwiIChjbGljayk9XCJzZWxlY3RGaXh0dXJlKCRldmVudCwgcHJlc2V0Rml4dHVyZSlcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBsaXN0LXNvcnQtaGFuZGxlIG15LWF1dG9cIiBzdHlsZT1cImN1cnNvcjogbW92ZTsgY3Vyc29yOiAtd2Via2l0LWdyYWJiaW5nXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJhcnNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBpZD1cImFjdGl2ZVwiIFtuZ01vZGVsXT1cImZpeHR1cmVJc1NlbGVjdGVkKHByZXNldEZpeHR1cmUpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLXt7XG4gICAgICAgICAgICAgICAgZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUljb25DbGFzcyhcbiAgICAgICAgICAgICAgICAgIGZpeHR1cmVTZXJ2aWNlLmdldFByb2ZpbGVCeVV1aWQoZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZChwcmVzZXRGaXh0dXJlLmZpeHR1cmVVdWlkKS5wcm9maWxlVXVpZClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH19IG1yLTFcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIHt7IGZpeHR1cmVOYW1lKHByZXNldEZpeHR1cmUpIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRGaXh0dXJlcy5sZW5ndGggPT0gMFwiIGNsYXNzPVwidy0xMDAgaC0xMDAgZC1mbGV4IHAtMyB0ZXh0LWNlbnRlclwiPlxuICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cIm0tYXV0b1wiIChjbGljayk9XCJvcGVuRml4dHVyZVBvb2woKTsgKGZhbHNlKVwiXG4gICAgICAgID48aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlIGZhLWZ3XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnZGVzaWduZXIuZml4dHVyZS5uby1maXh0dXJlcycgfCB0cmFuc2xhdGUgfX08L2FcbiAgICAgID5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,145 @@
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 { Subject } from 'rxjs';
6
+ import { map } from 'rxjs/operators';
7
+ import { FixtureProfile } from '../../models/fixture-profile';
8
+ import { FixtureService } from '../../services/fixture.service';
9
+ import { ProjectService } from '../../services/project.service';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "ngx-bootstrap/modal";
12
+ import * as i2 from "@ngx-translate/core";
13
+ import * as i3 from "ngx-toastr";
14
+ import * as i4 from "../../services/fixture.service";
15
+ import * as i5 from "../../services/project.service";
16
+ import * as i6 from "ngx-dropzone-wrapper";
17
+ export class FixturePoolCreateFromFileComponent {
18
+ constructor(bsModalRef, translateService, toastrService, fixtureService, projectService) {
19
+ this.bsModalRef = bsModalRef;
20
+ this.translateService = translateService;
21
+ this.toastrService = toastrService;
22
+ this.fixtureService = fixtureService;
23
+ this.projectService = projectService;
24
+ this.onClose = new Subject();
25
+ }
26
+ ngOnInit() {
27
+ this.dropzoneConfig = {
28
+ url: 'dummy',
29
+ addRemoveLinks: false,
30
+ maxFilesize: 10 /* 10 MB */,
31
+ acceptedFiles: '.json',
32
+ timeout: 0,
33
+ accept: (file, done) => {
34
+ const reader = new FileReader();
35
+ reader.addEventListener('loadend', (event) => {
36
+ // validate the file
37
+ const text = event.target.result;
38
+ const json = JSON.parse(text);
39
+ if (json['$schema'].match('https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/schema-(.*)/schemas/fixture.json')) {
40
+ // create the metadata from the file. we don't have the corresponding
41
+ // manufacturer-file, therefore we just assume the attributes from the
42
+ // fixture-file.
43
+ const manufacturerShortName = json['manufacturerKey'];
44
+ const manufacturerName = manufacturerShortName;
45
+ const uuid = manufacturerShortName + '/' + json['fixtureKey'];
46
+ const profile = new FixtureProfile(json);
47
+ profile.manufacturerShortName = manufacturerShortName;
48
+ profile.manufacturerName = manufacturerName;
49
+ profile.uuid = uuid;
50
+ profile.createdFromFile = true;
51
+ // add the profile to the project, if not already added
52
+ const loadedProfile = this.fixtureService.getProfileByUuid(uuid);
53
+ if (!loadedProfile) {
54
+ this.projectService.project.fixtureProfiles.push(profile);
55
+ }
56
+ // add a new fixture from this profile
57
+ this.onClose.next(profile);
58
+ this.bsModalRef.hide();
59
+ }
60
+ else {
61
+ // show an error toast
62
+ const msg = 'designer.fixture-pool.invalid-fixture-profile-file';
63
+ const title = 'designer.misc.toast-upload-error-title';
64
+ this.translateService.get([msg, title]).subscribe((result) => {
65
+ this.toastrService.error(result[msg], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });
66
+ });
67
+ }
68
+ done('noerr');
69
+ });
70
+ reader.readAsText(file);
71
+ },
72
+ previewTemplate: `
73
+ <div style="display: none;">
74
+ <!-- No preview -->
75
+ </div>
76
+ `,
77
+ };
78
+ this.translateService
79
+ .get('designer.misc.dropzone-message')
80
+ .pipe(map((result) => {
81
+ this.uploadMessage = '<h3 class="mb-0"><i class="fa fa-cloud-upload"></i></h3>' + result;
82
+ }))
83
+ .subscribe();
84
+ }
85
+ onUploadError(args) {
86
+ if (args[1] === 'noerr') {
87
+ // this error is set in the accept event listener -> everything OK
88
+ return;
89
+ }
90
+ const msg = 'designer.misc.toast-upload-error';
91
+ const title = 'designer.misc.toast-upload-error-title';
92
+ this.translateService.get([msg, title]).subscribe((result) => {
93
+ this.toastrService.error(result[msg] + args[1], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });
94
+ });
95
+ }
96
+ ok() {
97
+ this.onClose.next(undefined);
98
+ this.bsModalRef.hide();
99
+ }
100
+ cancel() {
101
+ this.onClose.next(undefined);
102
+ this.bsModalRef.hide();
103
+ }
104
+ handleKeyboardEvent(event) {
105
+ this.ok();
106
+ }
107
+ static { this.ɵfac = function FixturePoolCreateFromFileComponent_Factory(t) { return new (t || FixturePoolCreateFromFileComponent)(i0.ɵɵdirectiveInject(i1.BsModalRef), i0.ɵɵdirectiveInject(i2.TranslateService), i0.ɵɵdirectiveInject(i3.ToastrService), i0.ɵɵdirectiveInject(i4.FixtureService), i0.ɵɵdirectiveInject(i5.ProjectService)); }; }
108
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixturePoolCreateFromFileComponent, selectors: [["lib-fixture-pool-create-from-file"]], hostBindings: function FixturePoolCreateFromFileComponent_HostBindings(rf, ctx) { if (rf & 1) {
109
+ i0.ɵɵlistener("keydown.enter", function FixturePoolCreateFromFileComponent_keydown_enter_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument);
110
+ } }, 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 FixturePoolCreateFromFileComponent_Template(rf, ctx) { if (rf & 1) {
111
+ i0.ɵɵelementStart(0, "div", 0)(1, "h4", 1);
112
+ i0.ɵɵtext(2);
113
+ i0.ɵɵpipe(3, "translate");
114
+ i0.ɵɵelementEnd();
115
+ i0.ɵɵelementStart(4, "button", 2);
116
+ i0.ɵɵlistener("click", function FixturePoolCreateFromFileComponent_Template_button_click_4_listener() { return ctx.bsModalRef.hide(); });
117
+ i0.ɵɵelementStart(5, "span", 3);
118
+ i0.ɵɵtext(6, "\u00D7");
119
+ i0.ɵɵelementEnd()()();
120
+ i0.ɵɵelementStart(7, "div", 4)(8, "dropzone", 5);
121
+ i0.ɵɵlistener("error", function FixturePoolCreateFromFileComponent_Template_dropzone_error_8_listener($event) { return ctx.onUploadError($event); });
122
+ i0.ɵɵelementEnd();
123
+ i0.ɵɵelementStart(9, "div", 6)(10, "button", 7);
124
+ i0.ɵɵlistener("click", function FixturePoolCreateFromFileComponent_Template_button_click_10_listener() { return ctx.ok(); });
125
+ i0.ɵɵtext(11);
126
+ i0.ɵɵpipe(12, "translate");
127
+ i0.ɵɵelementEnd()()();
128
+ } if (rf & 2) {
129
+ i0.ɵɵadvance(2);
130
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 5, "designer.fixture-pool.create-fixture-from-profile-file-dialog-title"));
131
+ i0.ɵɵadvance(6);
132
+ i0.ɵɵproperty("config", ctx.dropzoneConfig)("useDropzoneClass", "false")("message", ctx.uploadMessage);
133
+ i0.ɵɵadvance(3);
134
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(12, 7, "designer.misc.ok"));
135
+ } }, dependencies: [i6.DropzoneComponent, i2.TranslatePipe] }); }
136
+ }
137
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FixturePoolCreateFromFileComponent, [{
138
+ type: Component,
139
+ args: [{ selector: 'lib-fixture-pool-create-from-file', template: "<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.fixture-pool.create-fixture-from-profile-file-dialog-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 class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n </div>\n</div>\n" }]
140
+ }], () => [{ type: i1.BsModalRef }, { type: i2.TranslateService }, { type: i3.ToastrService }, { type: i4.FixtureService }, { type: i5.ProjectService }], { handleKeyboardEvent: [{
141
+ type: HostListener,
142
+ args: ['document:keydown.enter', ['$event']]
143
+ }] }); })();
144
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FixturePoolCreateFromFileComponent, { className: "FixturePoolCreateFromFileComponent" }); })();
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1wb29sLWNyZWF0ZS1mcm9tLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9maXh0dXJlLXBvb2wvZml4dHVyZS1wb29sLWNyZWF0ZS1mcm9tLWZpbGUvZml4dHVyZS1wb29sLWNyZWF0ZS1mcm9tLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9maXh0dXJlLXBvb2wvZml4dHVyZS1wb29sLWNyZWF0ZS1mcm9tLWZpbGUvZml4dHVyZS1wb29sLWNyZWF0ZS1mcm9tLWZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7O0FBT2hFLE1BQU0sT0FBTyxrQ0FBa0M7SUFLN0MsWUFDUyxVQUFzQixFQUNyQixnQkFBa0MsRUFDbEMsYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsY0FBOEI7UUFKL0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNy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RUQsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUdELG1CQUFtQixDQUFDLEtBQVU7UUFDNUIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQzttR0E3R1Usa0NBQWtDO29FQUFsQyxrQ0FBa0M7WUFBbEMsNkhBQUEsK0JBQTJCLGlDQUFPOztZQ2Y3QyxBQURGLDhCQUEwQixZQUNVO1lBQUEsWUFBdUY7O1lBQUEsaUJBQUs7WUFDOUgsaUNBQThGO1lBQTVCLCtHQUFTLHFCQUFpQixJQUFDO1lBQzNGLCtCQUF5QjtZQUFBLHNCQUFPO1lBRXBDLEFBREUsQUFEa0MsaUJBQU8sRUFDaEMsRUFDTDtZQUdKLEFBRkYsOEJBQXdCLGtCQUVxRztZQUFoQyx1SEFBUyx5QkFBcUIsSUFBQztZQUFDLGlCQUFXO1lBRXBJLEFBREYsOEJBQTBCLGlCQUNxQztZQUFmLGdIQUFTLFFBQUksSUFBQztZQUFDLGFBQW9DOztZQUVyRyxBQURFLEFBRG1HLGlCQUFTLEVBQ3RHLEVBQ0Y7O1lBWDhCLGVBQXVGO1lBQXZGLGlIQUF1RjtZQU8vRyxlQUF5QjtZQUE4QixBQUE3QixBQUExQiwyQ0FBeUIsNkJBQTZCLDhCQUEwQjtZQUUzQixlQUFvQztZQUFwQywrREFBb0M7OztpRkRNeEYsa0NBQWtDO2NBTDlDLFNBQVM7MkJBQ0UsbUNBQW1DO2dLQStHN0MsbUJBQW1CO2tCQURsQixZQUFZO21CQUFDLHdCQUF3QixFQUFFLENBQUMsUUFBUSxDQUFDOztrRkExR3ZDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IERyb3B6b25lQ29uZmlnSW50ZXJmYWNlIH0gZnJvbSAnbmd4LWRyb3B6b25lLXdyYXBwZXInO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRml4dHVyZVByb2ZpbGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS1wcm9maWxlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvamVjdC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWZpeHR1cmUtcG9vbC1jcmVhdGUtZnJvbS1maWxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpeHR1cmUtcG9vbC1jcmVhdGUtZnJvbS1maWxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZml4dHVyZS1wb29sLWNyZWF0ZS1mcm9tLWZpbGUuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGaXh0dXJlUG9vbENyZWF0ZUZyb21GaWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIGRyb3B6b25lQ29uZmlnOiBEcm9wem9uZUNvbmZpZ0ludGVyZmFjZTtcbiAgcHVibGljIHVwbG9hZE1lc3NhZ2U6IHN0cmluZztcbiAgcHVibGljIG9uQ2xvc2U6IFN1YmplY3Q8Rml4dHVyZVByb2ZpbGU+ID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYnNNb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRyb3B6b25lQ29uZmlnID0ge1xuICAgICAgdXJsOiAnZHVtbXknLFxuICAgICAgYWRkUmVtb3ZlTGlua3M6IGZhbHNlLFxuICAgICAgbWF4RmlsZXNpemU6IDEwIC8qIDEwIE1CICovLFxuICAgICAgYWNjZXB0ZWRGaWxlczogJy5qc29uJyxcbiAgICAgIHRpbWVvdXQ6IDAsXG4gICAgICBhY2NlcHQ6IChmaWxlOiBhbnksIGRvbmU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgLy8gdmFsaWRhdGUgdGhlIGZpbGVcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBqc29uWyckc2NoZW1hJ10ubWF0Y2goXG4gICAgICAgICAgICAgICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vT3BlbkxpZ2h0aW5nUHJvamVjdC9vcGVuLWZpeHR1cmUtbGlicmFyeS9zY2hlbWEtKC4qKS9zY2hlbWFzL2ZpeHR1cmUuanNvbidcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgbWV0YWRhdGEgZnJvbSB0aGUgZmlsZS4gd2UgZG9uJ3QgaGF2ZSB0aGUgY29ycmVzcG9uZGluZ1xuICAgICAgICAgICAgLy8gbWFudWZhY3R1cmVyLWZpbGUsIHRoZXJlZm9yZSB3ZSBqdXN0IGFzc3VtZSB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZVxuICAgICAgICAgICAgLy8gZml4dHVyZS1maWxlLlxuICAgICAgICAgICAgY29uc3QgbWFudWZhY3R1cmVyU2hvcnROYW1lID0ganNvblsnbWFudWZhY3R1cmVyS2V5J107XG4gICAgICAgICAgICBjb25zdCBtYW51ZmFjdHVyZXJOYW1lID0gbWFudWZhY3R1cmVyU2hvcnROYW1lO1xuICAgICAgICAgICAgY29uc3QgdXVpZCA9IG1hbnVmYWN0dXJlclNob3J0TmFtZSArICcvJyArIGpzb25bJ2ZpeHR1cmVLZXknXTtcbiAgICAgICAgICAgIGNvbnN0IHByb2ZpbGUgPSBuZXcgRml4dHVyZVByb2ZpbGUoanNvbik7XG5cbiAgICAgICAgICAgIHByb2ZpbGUubWFudWZhY3R1cmVyU2hvcnROYW1lID0gbWFudWZhY3R1cmVyU2hvcnROYW1lO1xuICAgICAgICAgICAgcHJvZmlsZS5tYW51ZmFjdHVyZXJOYW1lID0gbWFudWZhY3R1cmVyTmFtZTtcbiAgICAgICAgICAgIHByb2ZpbGUudXVpZCA9IHV1aWQ7XG4gICAgICAgICAgICBwcm9maWxlLmNyZWF0ZWRGcm9tRmlsZSA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIGFkZCB0aGUgcHJvZmlsZSB0byB0aGUgcHJvamVjdCwgaWYgbm90IGFscmVhZHkgYWRkZWRcbiAgICAgICAgICAgIGNvbnN0IGxvYWRlZFByb2ZpbGUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldFByb2ZpbGVCeVV1aWQodXVpZCk7XG4gICAgICAgICAgICBpZiAoIWxvYWRlZFByb2ZpbGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LmZpeHR1cmVQcm9maWxlcy5wdXNoKHByb2ZpbGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZGQgYSBuZXcgZml4dHVyZSBmcm9tIHRoaXMgcHJvZmlsZVxuICAgICAgICAgICAgdGhpcy5vbkNsb3NlLm5leHQocHJvZmlsZSk7XG4gICAgICAgICAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzaG93IGFuIGVycm9yIHRvYXN0XG4gICAgICAgICAgICBjb25zdCBtc2cgPSAnZGVzaWduZXIuZml4dHVyZS1wb29sLmludmFsaWQtZml4dHVyZS1wcm9maWxlLWZpbGUnO1xuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSAnZGVzaWduZXIubWlzYy50b2FzdC11cGxvYWQtZXJyb3ItdGl0bGUnO1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChbbXNnLCB0aXRsZV0pLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5lcnJvcihyZXN1bHRbbXNnXSwgcmVzdWx0W3RpdGxlXSwgeyB0aW1lT3V0OiAwLCBleHRlbmRlZFRpbWVPdXQ6IDAsIGVuYWJsZUh0bWw6IHRydWUgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lKCdub2VycicpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gICAgICB9LFxuICAgICAgcHJldmlld1RlbXBsYXRlOiBgXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cbiAgICAgICAgPCEtLSBObyBwcmV2aWV3IC0tPlxuICAgICAgPC9kaXY+XG4gICAgICBgLFxuICAgIH07XG5cbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAgIC5nZXQoJ2Rlc2lnbmVyLm1pc2MuZHJvcHpvbmUtbWVzc2FnZScpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgICB0aGlzLnVwbG9hZE1lc3NhZ2UgPSAnPGgzIGNsYXNzPVwibWItMFwiPjxpIGNsYXNzPVwiZmEgZmEtY2xvdWQtdXBsb2FkXCI+PC9pPjwvaDM+JyArIHJlc3VsdDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblVwbG9hZEVycm9yKGFyZ3M6IGFueSkge1xuICAgIGlmIChhcmdzWzFdID09PSAnbm9lcnInKSB7XG4gICAgICAvLyB0aGlzIGVycm9yIGlzIHNldCBpbiB0aGUgYWNjZXB0IGV2ZW50IGxpc3RlbmVyIC0+IGV2ZXJ5dGhpbmcgT0tcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtc2cgPSAnZGVzaWduZXIubWlzYy50b2FzdC11cGxvYWQtZXJyb3InO1xuICAgIGNvbnN0IHRpdGxlID0gJ2Rlc2lnbmVyLm1pc2MudG9hc3QtdXBsb2FkLWVycm9yLXRpdGxlJztcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KFttc2csIHRpdGxlXSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIHRoaXMudG9hc3RyU2VydmljZS5lcnJvcihyZXN1bHRbbXNnXSArIGFyZ3NbMV0sIHJlc3VsdFt0aXRsZV0sIHsgdGltZU91dDogMCwgZXh0ZW5kZWRUaW1lT3V0OiAwLCBlbmFibGVIdG1sOiB0cnVlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgb2soKSB7XG4gICAgdGhpcy5vbkNsb3NlLm5leHQodW5kZWZpbmVkKTtcbiAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMub25DbG9zZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5ic01vZGFsUmVmLmhpZGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9rKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0XCI+e3sgJ2Rlc2lnbmVyLmZpeHR1cmUtcG9vbC5jcmVhdGUtZml4dHVyZS1mcm9tLXByb2ZpbGUtZmlsZS1kaWFsb2ctdGl0bGUnIHwgdHJhbnNsYXRlIH19PC9oND5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZSBwdWxsLXJpZ2h0XCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cImJzTW9kYWxSZWYuaGlkZSgpXCI+XG4gICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gIDwhLS0gRHJvcHpvbmUgLS0+XG4gIDxkcm9wem9uZSBbY29uZmlnXT1cImRyb3B6b25lQ29uZmlnXCIgW3VzZURyb3B6b25lQ2xhc3NdPVwiJ2ZhbHNlJ1wiIFttZXNzYWdlXT1cInVwbG9hZE1lc3NhZ2VcIiAoZXJyb3IpPVwib25VcGxvYWRFcnJvcigkZXZlbnQpXCI+PC9kcm9wem9uZT5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm9rKClcIj57eyAnZGVzaWduZXIubWlzYy5vaycgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==