@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
@@ -1,194 +0,0 @@
1
- import { __extends, __read, __values } from "tslib";
2
- import { forkJoin } from 'rxjs';
3
- import { map } from 'rxjs/operators';
4
- import * as THREE from 'three';
5
- import { Fixture3d } from './fixture-3d';
6
- var ColorChanger3d = /** @class */ (function (_super) {
7
- __extends(ColorChanger3d, _super);
8
- function ColorChanger3d(fixtureService, previewMeshService, fixture, scene) {
9
- var _this = _super.call(this, fixtureService, fixture, scene) || this;
10
- _this.pointLightMaxIntensity = 2;
11
- _this.spotLightMaxIntensity = 5;
12
- _this.objectGroup = new THREE.Object3D();
13
- _this.spotlightGroup = new THREE.Object3D();
14
- forkJoin([previewMeshService.getMesh('color-changer')])
15
- .pipe(map(function (_a) {
16
- var _b = __read(_a, 1), colorChanger = _b[0];
17
- _this.mesh = colorChanger;
18
- _this.createObjects();
19
- }))
20
- .subscribe();
21
- return _this;
22
- }
23
- ColorChanger3d.prototype.atmosphereMat = function () {
24
- var vertexShader = [
25
- 'varying vec3 vVertexWorldPosition;',
26
- 'varying vec3 vVertexNormal;',
27
- 'void main(){',
28
- ' vVertexNormal = normalize(normalMatrix * normal);',
29
- ' vVertexWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;',
30
- ' // set gl_Position',
31
- ' gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);',
32
- '}',
33
- ].join('\n');
34
- var fragmentShader = [
35
- 'uniform vec3 glowColor;',
36
- 'uniform float coeficient;',
37
- 'uniform float power;',
38
- 'uniform float opacity;',
39
- 'varying vec3 vVertexNormal;',
40
- 'varying vec3 vVertexWorldPosition;',
41
- 'void main(){',
42
- ' vec3 worldCameraToVertex= vVertexWorldPosition - cameraPosition;',
43
- ' vec3 viewCameraToVertex = (viewMatrix * vec4(worldCameraToVertex, 0.0)).xyz;',
44
- ' viewCameraToVertex = normalize(viewCameraToVertex);',
45
- ' float intensity = pow(coeficient + dot(vVertexNormal, viewCameraToVertex), power);',
46
- ' gl_FragColor = vec4(glowColor, intensity * opacity);',
47
- '}',
48
- ].join('\n');
49
- // create custom material from the shader code above
50
- // that is within specially labeled script tags
51
- var material = new THREE.ShaderMaterial({
52
- uniforms: {
53
- coeficient: {
54
- type: 'f',
55
- value: 0.3,
56
- },
57
- power: {
58
- type: 'f',
59
- value: 1.3,
60
- },
61
- opacity: {
62
- type: 'f',
63
- value: 1.0,
64
- },
65
- glowColor: {
66
- type: 'c',
67
- value: new THREE.Color('white'),
68
- },
69
- },
70
- vertexShader: vertexShader,
71
- fragmentShader: fragmentShader,
72
- // blending: THREE.AdditiveBlending,
73
- transparent: true,
74
- depthWrite: false,
75
- });
76
- return material;
77
- };
78
- ColorChanger3d.prototype.createSpotLightBeam = function () {
79
- if (this.spotLightBeam) {
80
- this.spotlightGroup.remove(this.spotLightBeam);
81
- }
82
- // TODO update the correct angle from the profile
83
- var beamAngleDegrees = 14;
84
- var geometry = new THREE.CylinderGeometry(0.8, beamAngleDegrees * 1.2, 100, 64, 20, false);
85
- geometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, -geometry.parameters.height / 2, 0));
86
- geometry.applyMatrix(new THREE.Matrix4().makeRotationX(-Math.PI / 2));
87
- this.atmosphereMaterial = this.atmosphereMat();
88
- this.spotLightBeam = new THREE.Mesh(geometry, this.atmosphereMaterial);
89
- this.spotLightBeam.position.set(0, -0.02, 0);
90
- this.spotlightGroup.add(this.spotLightBeam);
91
- this.spotLightBeam.rotation.x = Math.PI / 2;
92
- };
93
- ColorChanger3d.prototype.createObjects = function () {
94
- this.material = new THREE.MeshLambertMaterial({
95
- color: 0x0d0d0d,
96
- emissive: 0x0d0d0d,
97
- });
98
- this.mesh.material = this.material;
99
- // Add the spotlight
100
- this.spotLight = new THREE.SpotLight(0xffffff, 1);
101
- this.spotLight.angle = 0.244;
102
- this.spotLight.penumbra = 0.5;
103
- this.spotLight.decay = 2;
104
- this.spotLight.distance = 60000;
105
- this.spotLight.castShadow = false;
106
- this.spotLight.intensity = 10;
107
- this.spotLightHelper = new THREE.SpotLightHelper(this.spotLight);
108
- // scene.add(this.spotLightHelper);
109
- var spotLightTarget = new THREE.Object3D();
110
- this.spotLight.target = spotLightTarget;
111
- this.spotlightGroup.add(this.spotLight);
112
- this.spotlightGroup.add(spotLightTarget);
113
- this.spotLight.position.set(0, -1.4, 0);
114
- spotLightTarget.position.set(0, -10, 0);
115
- // Add the point light for the surrounding light
116
- this.pointLight = new THREE.PointLight(0xffffff, 2, 1000);
117
- this.spotlightGroup.add(this.pointLight);
118
- this.pointLight.position.set(0, -1.4, 0);
119
- // Add the light beam
120
- this.createSpotLightBeam();
121
- this.objectGroup.add(this.spotlightGroup);
122
- this.objectGroup.add(this.mesh);
123
- // A moving head has about 32 cm in width
124
- this.objectGroup.scale.multiplyScalar(9);
125
- this.scene.add(this.objectGroup);
126
- this.isLoaded = true;
127
- };
128
- ColorChanger3d.prototype.getObject = function () {
129
- return this.objectGroup;
130
- };
131
- ColorChanger3d.prototype.updatePreview = function (channelValues, masterDimmerValue) {
132
- var e_1, _a, e_2, _b;
133
- _super.prototype.updatePreview.call(this, channelValues, masterDimmerValue);
134
- if (!this.isLoaded) {
135
- return;
136
- }
137
- this.updatePosition(this.objectGroup);
138
- // Update the material
139
- if (this.lastSelected !== this.isSelected) {
140
- if (this.isSelected) {
141
- try {
142
- for (var _c = __values(this.mesh.children), _d = _c.next(); !_d.done; _d = _c.next()) {
143
- var child = _d.value;
144
- child.material = this.selectedMaterial;
145
- }
146
- }
147
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
148
- finally {
149
- try {
150
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
151
- }
152
- finally { if (e_1) throw e_1.error; }
153
- }
154
- }
155
- else {
156
- try {
157
- for (var _e = __values(this.mesh.children), _f = _e.next(); !_f.done; _f = _e.next()) {
158
- var child = _f.value;
159
- child.material = this.material;
160
- }
161
- }
162
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
163
- finally {
164
- try {
165
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
166
- }
167
- finally { if (e_2) throw e_2.error; }
168
- }
169
- }
170
- this.lastSelected = this.isSelected;
171
- }
172
- // Update the light helpers
173
- this.spotLightHelper.update();
174
- // Apply the colors
175
- var color = new THREE.Color('rgb(' + this.colorRed + ', ' + this.colorGreen + ', ' + this.colorBlue + ')');
176
- this.pointLight.color = color;
177
- this.spotLight.color = color;
178
- this.spotLightBeam.material.uniforms.glowColor.value = color;
179
- // Apply the dimmer value
180
- // Take the color into account for the beam (don't show a black beam)
181
- var intensityColor = Math.max(this.colorRed, this.colorGreen, this.colorBlue);
182
- this.spotLightBeam.material.uniforms.opacity.value = Math.min(intensityColor, this.dimmer) * 0.5;
183
- this.spotLight.intensity = this.spotLightMaxIntensity * this.dimmer;
184
- this.pointLight.intensity = this.pointLightMaxIntensity * this.dimmer;
185
- };
186
- ColorChanger3d.prototype.destroy = function () {
187
- this.scene.remove(this.objectGroup);
188
- this.material.dispose();
189
- this.atmosphereMaterial.dispose();
190
- };
191
- return ColorChanger3d;
192
- }(Fixture3d));
193
- export { ColorChanger3d };
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItY2hhbmdlci0zZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Byb2NrZXRzaG93L2Rlc2lnbmVyLyIsInNvdXJjZXMiOlsibGliL3ByZXZpZXcvbW9kZWxzL2NvbG9yLWNoYW5nZXItM2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBTS9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekM7SUFBb0Msa0NBQVM7SUFvSjNDLHdCQUFZLGNBQThCLEVBQUUsa0JBQXNDLEVBQUUsT0FBc0IsRUFBRSxLQUFVO1FBQXRILFlBQ0Usa0JBQU0sY0FBYyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsU0FXdEM7UUEvSmdCLDRCQUFzQixHQUFXLENBQUMsQ0FBQztRQUNuQywyQkFBcUIsR0FBVyxDQUFDLENBQUM7UUFJM0MsaUJBQVcsR0FBbUIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkQsb0JBQWMsR0FBbUIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFnSjVELFFBQVEsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO2FBQ3BELElBQUksQ0FDSCxHQUFHLENBQUMsVUFBQyxFQUFjO2dCQUFkLGtCQUFjLEVBQWIsb0JBQVk7WUFDaEIsS0FBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7WUFFekIsS0FBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7O0lBQ2pCLENBQUM7SUE3SU8sc0NBQWEsR0FBckI7UUFDRSxJQUFNLFlBQVksR0FBRztZQUNuQixvQ0FBb0M7WUFDcEMsNkJB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QU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUUxRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNwRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN4RSxDQUFDO0lBRUQsZ0NBQU8sR0FBUDtRQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQUFDLEFBdk5ELENBQW9DLFNBQVMsR0F1TjVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE1lc2ggfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlJztcbmltcG9ydCB7IEZpeHR1cmVDaGFubmVsVmFsdWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS1jaGFubmVsLXZhbHVlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXZpZXdNZXNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZXZpZXctbWVzaC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpeHR1cmUzZCB9IGZyb20gJy4vZml4dHVyZS0zZCc7XG5cbmV4cG9ydCBjbGFzcyBDb2xvckNoYW5nZXIzZCBleHRlbmRzIEZpeHR1cmUzZCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcG9pbnRMaWdodE1heEludGVuc2l0eTogbnVtYmVyID0gMjtcbiAgcHJpdmF0ZSByZWFkb25seSBzcG90TGlnaHRNYXhJbnRlbnNpdHk6IG51bWJlciA9IDU7XG5cbiAgcHJpdmF0ZSBtZXNoOiBUSFJFRS5NZXNoO1xuXG4gIHByaXZhdGUgb2JqZWN0R3JvdXA6IFRIUkVFLk9iamVjdDNEID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XG4gIHByaXZhdGUgc3BvdGxpZ2h0R3JvdXA6IFRIUkVFLk9iamVjdDNEID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XG4gIHByaXZhdGUgc3BvdExpZ2h0OiBUSFJFRS5TcG90TGlnaHQ7XG4gIHByaXZhdGUgc3BvdExpZ2h0SGVscGVyOiBUSFJFRS5TcG90TGlnaHRIZWxwZXI7XG4gIHByaXZhdGUgc3BvdExpZ2h0QmVhbTogVEhSRUUuTWVzaDtcblxuICBwcml2YXRlIHBvaW50TGlnaHQ6IFRIUkVFLlBvaW50TGlnaHQ7XG5cbiAgcHJpdmF0ZSBsYXN0U2VsZWN0ZWQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBtYXRlcmlhbDogVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWw7XG4gIHByaXZhdGUgYXRtb3NwaGVyZU1hdGVyaWFsOiBUSFJFRS5TaGFkZXJNYXRlcmlhbDtcblxuICBwcml2YXRlIGF0bW9zcGhlcmVNYXQoKSB7XG4gICAgY29uc3QgdmVydGV4U2hhZGVyID0gW1xuICAgICAgJ3ZhcnlpbmcgdmVjM1x0dlZlcnRleFdvcmxkUG9zaXRpb247JyxcbiAgICAgICd2YXJ5aW5nIHZlYzNcdHZWZXJ0ZXhOb3JtYWw7JyxcblxuICAgICAgJ3ZvaWQgbWFpbigpeycsXG4gICAgICAnXHR2VmVydGV4Tm9ybWFsID0gbm9ybWFsaXplKG5vcm1hbE1hdHJpeCAqIG5vcm1hbCk7JyxcblxuICAgICAgJ1x0dlZlcnRleFdvcmxkUG9zaXRpb24gPSAobW9kZWxNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7JyxcblxuICAgICAgJ1x0Ly8gc2V0IGdsX1Bvc2l0aW9uJyxcbiAgICAgICdcdGdsX1Bvc2l0aW9uXHQ9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApOycsXG4gICAgICAnfScsXG4gICAgXS5qb2luKCdcXG4nKTtcbiAgICBjb25zdCBmcmFnbWVudFNoYWRlciA9IFtcbiAgICAgICd1bmlmb3JtIHZlYzNcdGdsb3dDb2xvcjsnLFxuICAgICAgJ3VuaWZvcm0gZmxvYXRcdGNvZWZpY2llbnQ7JyxcbiAgICAgICd1bmlmb3JtIGZsb2F0XHRwb3dlcjsnLFxuICAgICAgJ3VuaWZvcm0gZmxvYXRcdG9wYWNpdHk7JyxcblxuICAgICAgJ3ZhcnlpbmcgdmVjM1x0dlZlcnRleE5vcm1hbDsnLFxuICAgICAgJ3ZhcnlpbmcgdmVjM1x0dlZlcnRleFdvcmxkUG9zaXRpb247JyxcblxuICAgICAgJ3ZvaWQgbWFpbigpeycsXG4gICAgICAnXHR2ZWMzIHdvcmxkQ2FtZXJhVG9WZXJ0ZXg9IHZWZXJ0ZXhXb3JsZFBvc2l0aW9uIC0gY2FtZXJhUG9zaXRpb247JyxcbiAgICAgICdcdHZlYzMgdmlld0NhbWVyYVRvVmVydGV4XHQ9ICh2aWV3TWF0cml4ICogdmVjNCh3b3JsZENhbWVyYVRvVmVydGV4LCAwLjApKS54eXo7JyxcbiAgICAgICdcdHZpZXdDYW1lcmFUb1ZlcnRleFx0PSBub3JtYWxpemUodmlld0NhbWVyYVRvVmVydGV4KTsnLFxuICAgICAgJ1x0ZmxvYXQgaW50ZW5zaXR5XHRcdD0gcG93KGNvZWZpY2llbnQgKyBkb3QodlZlcnRleE5vcm1hbCwgdmlld0NhbWVyYVRvVmVydGV4KSwgcG93ZXIpOycsXG4gICAgICAnXHRnbF9GcmFnQ29sb3JcdFx0PSB2ZWM0KGdsb3dDb2xvciwgaW50ZW5zaXR5ICogb3BhY2l0eSk7JyxcbiAgICAgICd9JyxcbiAgICBdLmpvaW4oJ1xcbicpO1xuXG4gICAgLy8gY3JlYXRlIGN1c3RvbSBtYXRlcmlhbCBmcm9tIHRoZSBzaGFkZXIgY29kZSBhYm92ZVxuICAgIC8vIHRoYXQgaXMgd2l0aGluIHNwZWNpYWxseSBsYWJlbGVkIHNjcmlwdCB0YWdzXG4gICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoe1xuICAgICAgdW5pZm9ybXM6IHtcbiAgICAgICAgY29lZmljaWVudDoge1xuICAgICAgICAgIHR5cGU6ICdmJyxcbiAgICAgICAgICB2YWx1ZTogMC4zLFxuICAgICAgICB9LFxuICAgICAgICBwb3dlcjoge1xuICAgICAgICAgIHR5cGU6ICdmJyxcbiAgICAgICAgICB2YWx1ZTogMS4zLFxuICAgICAgICB9LFxuICAgICAgICBvcGFjaXR5OiB7XG4gICAgICAgICAgdHlwZTogJ2YnLFxuICAgICAgICAgIHZhbHVlOiAxLjAsXG4gICAgICAgIH0sXG4gICAgICAgIGdsb3dDb2xvcjoge1xuICAgICAgICAgIHR5cGU6ICdjJyxcbiAgICAgICAgICB2YWx1ZTogbmV3IFRIUkVFLkNvbG9yKCd3aGl0ZScpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHZlcnRleFNoYWRlcixcbiAgICAgIGZyYWdtZW50U2hhZGVyLFxuICAgICAgLy8gYmxlbmRpbmc6IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcsXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hdGVyaWFsO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTcG90TGlnaHRCZWFtKCkge1xuICAgIGlmICh0aGlzLnNwb3RMaWdodEJlYW0pIHtcbiAgICAgIHRoaXMuc3BvdGxpZ2h0R3JvdXAucmVtb3ZlKHRoaXMuc3BvdExpZ2h0QmVhbSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB1cGRhdGUgdGhlIGNvcnJlY3QgYW5nbGUgZnJvbSB0aGUgcHJvZmlsZVxuICAgIGNvbnN0IGJlYW1BbmdsZURlZ3JlZXMgPSAxNDtcbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KDAuOCwgYmVhbUFuZ2xlRGVncmVlcyAqIDEuMiwgMTAwLCA2NCwgMjAsIGZhbHNlKTtcbiAgICBnZW9tZXRyeS5hcHBseU1hdHJpeChuZXcgVEhSRUUuTWF0cml4NCgpLm1ha2VUcmFuc2xhdGlvbigwLCAtZ2VvbWV0cnkucGFyYW1ldGVycy5oZWlnaHQgLyAyLCAwKSk7XG4gICAgZ2VvbWV0cnkuYXBwbHlNYXRyaXgobmV3IFRIUkVFLk1hdHJpeDQoKS5tYWtlUm90YXRpb25YKC1NYXRoLlBJIC8gMikpO1xuXG4gICAgdGhpcy5hdG1vc3BoZXJlTWF0ZXJpYWwgPSB0aGlzLmF0bW9zcGhlcmVNYXQoKTtcbiAgICB0aGlzLnNwb3RMaWdodEJlYW0gPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5hdG1vc3BoZXJlTWF0ZXJpYWwpO1xuICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5wb3NpdGlvbi5zZXQoMCwgLTAuMDIsIDApO1xuXG4gICAgdGhpcy5zcG90bGlnaHRHcm91cC5hZGQodGhpcy5zcG90TGlnaHRCZWFtKTtcbiAgICB0aGlzLnNwb3RMaWdodEJlYW0ucm90YXRpb24ueCA9IE1hdGguUEkgLyAyO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPYmplY3RzKCkge1xuICAgICh0aGlzLm1hdGVyaWFsIGFzIGFueSkgPSBuZXcgVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogMHgwZDBkMGQsXG4gICAgICBlbWlzc2l2ZTogMHgwZDBkMGQsXG4gICAgfSk7XG5cbiAgICB0aGlzLm1lc2gubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuXG4gICAgLy8gQWRkIHRoZSBzcG90bGlnaHRcbiAgICB0aGlzLnNwb3RMaWdodCA9IG5ldyBUSFJFRS5TcG90TGlnaHQoMHhmZmZmZmYsIDEpO1xuICAgIHRoaXMuc3BvdExpZ2h0LmFuZ2xlID0gMC4yNDQ7XG4gICAgdGhpcy5zcG90TGlnaHQucGVudW1icmEgPSAwLjU7XG4gICAgdGhpcy5zcG90TGlnaHQuZGVjYXkgPSAyO1xuICAgIHRoaXMuc3BvdExpZ2h0LmRpc3RhbmNlID0gNjAwMDA7XG4gICAgdGhpcy5zcG90TGlnaHQuY2FzdFNoYWRvdyA9IGZhbHNlO1xuICAgIHRoaXMuc3BvdExpZ2h0LmludGVuc2l0eSA9IDEwO1xuXG4gICAgdGhpcy5zcG90TGlnaHRIZWxwZXIgPSBuZXcgVEhSRUUuU3BvdExpZ2h0SGVscGVyKHRoaXMuc3BvdExpZ2h0KTtcbiAgICAvLyBzY2VuZS5hZGQodGhpcy5zcG90TGlnaHRIZWxwZXIpO1xuXG4gICAgY29uc3Qgc3BvdExpZ2h0VGFyZ2V0ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XG4gICAgdGhpcy5zcG90TGlnaHQudGFyZ2V0ID0gc3BvdExpZ2h0VGFyZ2V0O1xuXG4gICAgdGhpcy5zcG90bGlnaHRHcm91cC5hZGQodGhpcy5zcG90TGlnaHQpO1xuICAgIHRoaXMuc3BvdGxpZ2h0R3JvdXAuYWRkKHNwb3RMaWdodFRhcmdldCk7XG4gICAgdGhpcy5zcG90TGlnaHQucG9zaXRpb24uc2V0KDAsIC0xLjQsIDApO1xuICAgIHNwb3RMaWdodFRhcmdldC5wb3NpdGlvbi5zZXQoMCwgLTEwLCAwKTtcblxuICAgIC8vIEFkZCB0aGUgcG9pbnQgbGlnaHQgZm9yIHRoZSBzdXJyb3VuZGluZyBsaWdodFxuICAgIHRoaXMucG9pbnRMaWdodCA9IG5ldyBUSFJFRS5Qb2ludExpZ2h0KDB4ZmZmZmZmLCAyLCAxMDAwKTtcbiAgICB0aGlzLnNwb3RsaWdodEdyb3VwLmFkZCh0aGlzLnBvaW50TGlnaHQpO1xuICAgIHRoaXMucG9pbnRMaWdodC5wb3NpdGlvbi5zZXQoMCwgLTEuNCwgMCk7XG5cbiAgICAvLyBBZGQgdGhlIGxpZ2h0IGJlYW1cbiAgICB0aGlzLmNyZWF0ZVNwb3RMaWdodEJlYW0oKTtcblxuICAgIHRoaXMub2JqZWN0R3JvdXAuYWRkKHRoaXMuc3BvdGxpZ2h0R3JvdXApO1xuICAgIHRoaXMub2JqZWN0R3JvdXAuYWRkKHRoaXMubWVzaCk7XG5cbiAgICAvLyBBIG1vdmluZyBoZWFkIGhhcyBhYm91dCAzMiBjbSBpbiB3aWR0aFxuICAgIHRoaXMub2JqZWN0R3JvdXAuc2NhbGUubXVsdGlwbHlTY2FsYXIoOSk7XG5cbiAgICB0aGlzLnNjZW5lLmFkZCh0aGlzLm9iamVjdEdyb3VwKTtcblxuICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLCBwcmV2aWV3TWVzaFNlcnZpY2U6IFByZXZpZXdNZXNoU2VydmljZSwgZml4dHVyZTogQ2FjaGVkRml4dHVyZSwgc2NlbmU6IGFueSkge1xuICAgIHN1cGVyKGZpeHR1cmVTZXJ2aWNlLCBmaXh0dXJlLCBzY2VuZSk7XG5cbiAgICBmb3JrSm9pbihbcHJldmlld01lc2hTZXJ2aWNlLmdldE1lc2goJ2NvbG9yLWNoYW5nZXInKV0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChbY29sb3JDaGFuZ2VyXSkgPT4ge1xuICAgICAgICAgIHRoaXMubWVzaCA9IGNvbG9yQ2hhbmdlcjtcblxuICAgICAgICAgIHRoaXMuY3JlYXRlT2JqZWN0cygpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGdldE9iamVjdCgpOiBUSFJFRS5PYmplY3QzRCB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0R3JvdXA7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUHJldmlldyhjaGFubmVsVmFsdWVzOiBGaXh0dXJlQ2hhbm5lbFZhbHVlW10sIG1hc3RlckRpbW1lclZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBzdXBlci51cGRhdGVQcmV2aWV3KGNoYW5uZWxWYWx1ZXMsIG1hc3RlckRpbW1lclZhbHVlKTtcblxuICAgIGlmICghdGhpcy5pc0xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUG9zaXRpb24odGhpcy5vYmplY3RHcm91cCk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIG1hdGVyaWFsXG4gICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkICE9PSB0aGlzLmlzU2VsZWN0ZWQpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLm1lc2guY2hpbGRyZW4pIHtcbiAgICAgICAgICAoY2hpbGQgYXMgTWVzaCkubWF0ZXJpYWwgPSB0aGlzLnNlbGVjdGVkTWF0ZXJpYWw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5tZXNoLmNoaWxkcmVuKSB7XG4gICAgICAgICAgKGNoaWxkIGFzIE1lc2gpLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RTZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGxpZ2h0IGhlbHBlcnNcbiAgICB0aGlzLnNwb3RMaWdodEhlbHBlci51cGRhdGUoKTtcblxuICAgIC8vIEFwcGx5IHRoZSBjb2xvcnNcbiAgICBjb25zdCBjb2xvciA9IG5ldyBUSFJFRS5Db2xvcigncmdiKCcgKyB0aGlzLmNvbG9yUmVkICsgJywgJyArIHRoaXMuY29sb3JHcmVlbiArICcsICcgKyB0aGlzLmNvbG9yQmx1ZSArICcpJyk7XG5cbiAgICB0aGlzLnBvaW50TGlnaHQuY29sb3IgPSBjb2xvcjtcblxuICAgIHRoaXMuc3BvdExpZ2h0LmNvbG9yID0gY29sb3I7XG4gICAgKHRoaXMuc3BvdExpZ2h0QmVhbS5tYXRlcmlhbCBhcyBhbnkpLnVuaWZvcm1zLmdsb3dDb2xvci52YWx1ZSA9IGNvbG9yO1xuXG4gICAgLy8gQXBwbHkgdGhlIGRpbW1lciB2YWx1ZVxuICAgIC8vIFRha2UgdGhlIGNvbG9yIGludG8gYWNjb3VudCBmb3IgdGhlIGJlYW0gKGRvbid0IHNob3cgYSBibGFjayBiZWFtKVxuICAgIGNvbnN0IGludGVuc2l0eUNvbG9yID0gTWF0aC5tYXgodGhpcy5jb2xvclJlZCwgdGhpcy5jb2xvckdyZWVuLCB0aGlzLmNvbG9yQmx1ZSk7XG4gICAgKHRoaXMuc3BvdExpZ2h0QmVhbS5tYXRlcmlhbCBhcyBhbnkpLnVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSBNYXRoLm1pbihpbnRlbnNpdHlDb2xvciwgdGhpcy5kaW1tZXIpICogMC41O1xuXG4gICAgdGhpcy5zcG90TGlnaHQuaW50ZW5zaXR5ID0gdGhpcy5zcG90TGlnaHRNYXhJbnRlbnNpdHkgKiB0aGlzLmRpbW1lcjtcbiAgICB0aGlzLnBvaW50TGlnaHQuaW50ZW5zaXR5ID0gdGhpcy5wb2ludExpZ2h0TWF4SW50ZW5zaXR5ICogdGhpcy5kaW1tZXI7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuc2NlbmUucmVtb3ZlKHRoaXMub2JqZWN0R3JvdXApO1xuICAgIHRoaXMubWF0ZXJpYWwuZGlzcG9zZSgpO1xuICAgIHRoaXMuYXRtb3NwaGVyZU1hdGVyaWFsLmRpc3Bvc2UoKTtcbiAgfVxufVxuIl19
@@ -1,196 +0,0 @@
1
- import { __values } from "tslib";
2
- import * as THREE from 'three';
3
- import { Positioning } from '../../models/fixture';
4
- import { FixtureCapabilityColor, FixtureCapabilityType } from '../../models/fixture-capability';
5
- var Fixture3d = /** @class */ (function () {
6
- function Fixture3d(fixtureService, fixture, scene) {
7
- var e_1, _a, e_2, _b;
8
- this.fixtureService = fixtureService;
9
- this.fixtureHasDimmer = false;
10
- this.fixtureHasColorWheel = false;
11
- this.fixtureHasColor = false;
12
- this.dimmer = 0;
13
- this.isSelected = false;
14
- this.isLoaded = false;
15
- this.fixture = fixture;
16
- this.scene = scene;
17
- // TODO Don't create it for each fixture but pass it from the preview service
18
- this.selectedMaterial = new THREE.MeshLambertMaterial({
19
- color: 0xff00ff,
20
- emissive: 0xff00ff,
21
- });
22
- try {
23
- // evaluate, various capabilities of this fixture
24
- for (var _c = __values(this.fixture.channels), _d = _c.next(); !_d.done; _d = _c.next()) {
25
- var cachedChannel = _d.value;
26
- if (cachedChannel.channel) {
27
- try {
28
- for (var _e = (e_2 = void 0, __values(cachedChannel.capabilities)), _f = _e.next(); !_f.done; _f = _e.next()) {
29
- var capability = _f.value;
30
- switch (capability.capability.type) {
31
- case FixtureCapabilityType.Intensity:
32
- this.fixtureHasDimmer = true;
33
- break;
34
- case FixtureCapabilityType.ColorIntensity:
35
- this.fixtureHasColor = true;
36
- break;
37
- }
38
- }
39
- }
40
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
41
- finally {
42
- try {
43
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
44
- }
45
- finally { if (e_2) throw e_2.error; }
46
- }
47
- if (cachedChannel.colorWheel) {
48
- this.fixtureHasColorWheel = true;
49
- }
50
- }
51
- }
52
- }
53
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
54
- finally {
55
- try {
56
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
57
- }
58
- finally { if (e_1) throw e_1.error; }
59
- }
60
- }
61
- Fixture3d.prototype.getCapabilityInValue = function (channel, value) {
62
- var e_3, _a;
63
- try {
64
- for (var _b = __values(channel.capabilities), _c = _b.next(); !_c.done; _c = _b.next()) {
65
- var capability = _c.value;
66
- if (capability.capability.dmxRange.length === 0 ||
67
- (value >= capability.capability.dmxRange[0] && value <= capability.capability.dmxRange[1])) {
68
- return capability;
69
- }
70
- }
71
- }
72
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
73
- finally {
74
- try {
75
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
76
- }
77
- finally { if (e_3) throw e_3.error; }
78
- }
79
- return undefined;
80
- };
81
- // Apply the properties of the base fixture to the preview
82
- Fixture3d.prototype.updatePreview = function (channelValues, masterDimmerValue) {
83
- var e_4, _a;
84
- // Apply default settings
85
- if (this.fixtureHasDimmer) {
86
- this.dimmer = 0;
87
- }
88
- else {
89
- this.dimmer = 1;
90
- }
91
- this.colorRed = 255;
92
- this.colorGreen = 255;
93
- this.colorBlue = 255;
94
- if (!this.fixtureHasColorWheel && this.fixtureHasColor) {
95
- this.colorRed = 0;
96
- this.colorGreen = 0;
97
- this.colorBlue = 0;
98
- }
99
- try {
100
- for (var channelValues_1 = __values(channelValues), channelValues_1_1 = channelValues_1.next(); !channelValues_1_1.done; channelValues_1_1 = channelValues_1.next()) {
101
- var channelValue = channelValues_1_1.value;
102
- var channel = this.fixtureService.getChannelByName(this.fixture, channelValue.channelName);
103
- var capability = this.getCapabilityInValue(channel, channelValue.value);
104
- if (capability) {
105
- switch (capability.capability.type) {
106
- case FixtureCapabilityType.Intensity: {
107
- var valuePercentage = void 0;
108
- if (capability.capability.dmxRange.length > 0) {
109
- valuePercentage =
110
- (channelValue.value - capability.capability.dmxRange[0]) /
111
- (capability.capability.dmxRange[1] - capability.capability.dmxRange[0]);
112
- }
113
- else {
114
- valuePercentage = channelValue.value / channel.maxValue;
115
- }
116
- this.dimmer = valuePercentage * masterDimmerValue;
117
- break;
118
- }
119
- case FixtureCapabilityType.ColorIntensity: {
120
- var valuePercentage = (255 * channelValue.value) / channel.maxValue;
121
- switch (capability.capability.color) {
122
- case FixtureCapabilityColor.Red:
123
- // Round needed for threejs
124
- this.colorRed = Math.round(valuePercentage);
125
- break;
126
- case FixtureCapabilityColor.Green:
127
- // Round needed for threejs
128
- this.colorGreen = Math.round(valuePercentage);
129
- break;
130
- case FixtureCapabilityColor.Blue:
131
- // Round needed for threejs
132
- this.colorBlue = Math.round(valuePercentage);
133
- break;
134
- }
135
- break;
136
- }
137
- case FixtureCapabilityType.WheelSlot: {
138
- var mixedColor = this.fixtureService.getMixedWheelSlotColor(capability.wheel, capability.capability.slotNumber);
139
- if (mixedColor) {
140
- this.colorRed = Math.round(mixedColor.red);
141
- this.colorGreen = Math.round(mixedColor.green);
142
- this.colorBlue = Math.round(mixedColor.blue);
143
- }
144
- break;
145
- }
146
- }
147
- }
148
- }
149
- }
150
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
151
- finally {
152
- try {
153
- if (channelValues_1_1 && !channelValues_1_1.done && (_a = channelValues_1.return)) _a.call(channelValues_1);
154
- }
155
- finally { if (e_4) throw e_4.error; }
156
- }
157
- };
158
- Fixture3d.prototype.updatePosition = function (object) {
159
- // Update the position
160
- switch (this.fixture.fixture.positioning) {
161
- case Positioning.topFront: {
162
- object.rotation.x = THREE.Math.degToRad(0);
163
- object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY - 13, this.fixture.fixture.positionZ);
164
- break;
165
- }
166
- case Positioning.bottomFront: {
167
- object.rotation.x = THREE.Math.degToRad(180);
168
- object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY + 13, this.fixture.fixture.positionZ);
169
- break;
170
- }
171
- case Positioning.topBack: {
172
- object.rotation.x = THREE.Math.degToRad(0);
173
- object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY - 13, this.fixture.fixture.positionZ);
174
- break;
175
- }
176
- case Positioning.bottomBack: {
177
- object.rotation.x = THREE.Math.degToRad(180);
178
- object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY + 13, this.fixture.fixture.positionZ);
179
- break;
180
- }
181
- case Positioning.manual: {
182
- object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY, this.fixture.fixture.positionZ);
183
- object.rotation.x = THREE.Math.degToRad(this.fixture.fixture.rotationX);
184
- object.rotation.y = THREE.Math.degToRad(this.fixture.fixture.rotationY);
185
- object.rotation.z = THREE.Math.degToRad(this.fixture.fixture.rotationZ);
186
- break;
187
- }
188
- }
189
- };
190
- Fixture3d.prototype.destroy = function () {
191
- this.selectedMaterial.dispose();
192
- };
193
- return Fixture3d;
194
- }());
195
- export { Fixture3d };
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS0zZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Byb2NrZXRzaG93L2Rlc2lnbmVyLyIsInNvdXJjZXMiOlsibGliL3ByZXZpZXcvbW9kZWxzL2ZpeHR1cmUtM2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBSS9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUloRztJQW1CRSxtQkFBbUIsY0FBOEIsRUFBRSxPQUFzQixFQUFFLEtBQVU7O1FBQWxFLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWpCakQscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQVF4QixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRVgsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBS2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztZQUNwRCxLQUFLLEVBQUUsUUFBUTtZQUNmLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQzs7WUFFSCxpREFBaUQ7WUFDakQsS0FBNEIsSUFBQSxLQUFBLFNBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUEsZ0JBQUEsNEJBQUU7Z0JBQTlDLElBQU0sYUFBYSxXQUFBO2dCQUN0QixJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUU7O3dCQUN6QixLQUF5QixJQUFBLG9CQUFBLFNBQUEsYUFBYSxDQUFDLFlBQVksQ0FB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QVEsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3hFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4RSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDeEUsTUFBTTthQUNQO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsMkJBQU8sR0FBUDtRQUNFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBQ0gsZ0JBQUM7QUFBRCxDQUFDLEFBeEtELElBd0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZSB9IGZyb20gJy4uLy4uL21vZGVscy9jYWNoZWQtZml4dHVyZSc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB9IGZyb20gJy4uLy4uL21vZGVscy9jYWNoZWQtZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmVDaGFubmVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlLWNoYW5uZWwnO1xuaW1wb3J0IHsgUG9zaXRpb25pbmcgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLCBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IEZpeHR1cmVDaGFubmVsVmFsdWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS1jaGFubmVsLXZhbHVlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpeHR1cmUzZCB7XG4gIGZpeHR1cmU6IENhY2hlZEZpeHR1cmU7XG4gIGZpeHR1cmVIYXNEaW1tZXIgPSBmYWxzZTtcbiAgZml4dHVyZUhhc0NvbG9yV2hlZWwgPSBmYWxzZTtcbiAgZml4dHVyZUhhc0NvbG9yID0gZmFsc2U7XG5cbiAgc2NlbmU6IGFueTtcblxuICBjb2xvclJlZDogbnVtYmVyO1xuICBjb2xvckdyZWVuOiBudW1iZXI7XG4gIGNvbG9yQmx1ZTogbnVtYmVyO1xuXG4gIGRpbW1lciA9IDA7XG5cbiAgaXNTZWxlY3RlZCA9IGZhbHNlO1xuICBpc0xvYWRlZCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBzZWxlY3RlZE1hdGVyaWFsOiBUSFJFRS5NZXNoTGFtYmVydE1hdGVyaWFsO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsIGZpeHR1cmU6IENhY2hlZEZpeHR1cmUsIHNjZW5lOiBhbnkpIHtcbiAgICB0aGlzLmZpeHR1cmUgPSBmaXh0dXJlO1xuICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcblxuICAgIC8vIFRPRE8gRG9uJ3QgY3JlYXRlIGl0IGZvciBlYWNoIGZpeHR1cmUgYnV0IHBhc3MgaXQgZnJvbSB0aGUgcHJldmlldyBzZXJ2aWNlXG4gICAgdGhpcy5zZWxlY3RlZE1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwoe1xuICAgICAgY29sb3I6IDB4ZmYwMGZmLFxuICAgICAgZW1pc3NpdmU6IDB4ZmYwMGZmLFxuICAgIH0pO1xuXG4gICAgLy8gZXZhbHVhdGUsIHZhcmlvdXMgY2FwYWJpbGl0aWVzIG9mIHRoaXMgZml4dHVyZVxuICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiB0aGlzLmZpeHR1cmUuY2hhbm5lbHMpIHtcbiAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNoYW5uZWwpIHtcbiAgICAgICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIGNhY2hlZENoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgc3dpdGNoIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuSW50ZW5zaXR5OlxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVIYXNEaW1tZXIgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5OlxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVIYXNDb2xvciA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNvbG9yV2hlZWwpIHtcbiAgICAgICAgICB0aGlzLmZpeHR1cmVIYXNDb2xvcldoZWVsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDYXBhYmlsaXR5SW5WYWx1ZShjaGFubmVsOiBDYWNoZWRGaXh0dXJlQ2hhbm5lbCwgdmFsdWU6IG51bWJlcik6IENhY2hlZEZpeHR1cmVDYXBhYmlsaXR5IHtcbiAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHkgb2YgY2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAodmFsdWUgPj0gY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzBdICYmIHZhbHVlIDw9IGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVsxXSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gY2FwYWJpbGl0eTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gQXBwbHkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGJhc2UgZml4dHVyZSB0byB0aGUgcHJldmlld1xuICB1cGRhdGVQcmV2aWV3KGNoYW5uZWxWYWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSwgbWFzdGVyRGltbWVyVmFsdWU6IG51bWJlcikge1xuICAgIC8vIEFwcGx5IGRlZmF1bHQgc2V0dGluZ3NcbiAgICBpZiAodGhpcy5maXh0dXJlSGFzRGltbWVyKSB7XG4gICAgICB0aGlzLmRpbW1lciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGltbWVyID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUmVkID0gMjU1O1xuICAgIHRoaXMuY29sb3JHcmVlbiA9IDI1NTtcbiAgICB0aGlzLmNvbG9yQmx1ZSA9IDI1NTtcblxuICAgIGlmICghdGhpcy5maXh0dXJlSGFzQ29sb3JXaGVlbCAmJiB0aGlzLmZpeHR1cmVIYXNDb2xvcikge1xuICAgICAgdGhpcy5jb2xvclJlZCA9IDA7XG4gICAgICB0aGlzLmNvbG9yR3JlZW4gPSAwO1xuICAgICAgdGhpcy5jb2xvckJsdWUgPSAwO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hhbm5lbFZhbHVlIG9mIGNoYW5uZWxWYWx1ZXMpIHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENoYW5uZWxCeU5hbWUodGhpcy5maXh0dXJlLCBjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUpO1xuICAgICAgY29uc3QgY2FwYWJpbGl0eSA9IHRoaXMuZ2V0Q2FwYWJpbGl0eUluVmFsdWUoY2hhbm5lbCwgY2hhbm5lbFZhbHVlLnZhbHVlKTtcblxuICAgICAgaWYgKGNhcGFiaWxpdHkpIHtcbiAgICAgICAgc3dpdGNoIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSkge1xuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkludGVuc2l0eToge1xuICAgICAgICAgICAgbGV0IHZhbHVlUGVyY2VudGFnZTogbnVtYmVyO1xuICAgICAgICAgICAgaWYgKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHZhbHVlUGVyY2VudGFnZSA9XG4gICAgICAgICAgICAgICAgKGNoYW5uZWxWYWx1ZS52YWx1ZSAtIGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVswXSkgL1xuICAgICAgICAgICAgICAgIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMV0gLSBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWVQZXJjZW50YWdlID0gY2hhbm5lbFZhbHVlLnZhbHVlIC8gY2hhbm5lbC5tYXhWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGltbWVyID0gdmFsdWVQZXJjZW50YWdlICogbWFzdGVyRGltbWVyVmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHk6IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlUGVyY2VudGFnZSA9ICgyNTUgKiBjaGFubmVsVmFsdWUudmFsdWUpIC8gY2hhbm5lbC5tYXhWYWx1ZTtcbiAgICAgICAgICAgIHN3aXRjaCAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmNvbG9yKSB7XG4gICAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5SZWQ6XG4gICAgICAgICAgICAgICAgLy8gUm91bmQgbmVlZGVkIGZvciB0aHJlZWpzXG4gICAgICAgICAgICAgICAgdGhpcy5jb2xvclJlZCA9IE1hdGgucm91bmQodmFsdWVQZXJjZW50YWdlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLkdyZWVuOlxuICAgICAgICAgICAgICAgIC8vIFJvdW5kIG5lZWRlZCBmb3IgdGhyZWVqc1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JHcmVlbiA9IE1hdGgucm91bmQodmFsdWVQZXJjZW50YWdlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLkJsdWU6XG4gICAgICAgICAgICAgICAgLy8gUm91bmQgbmVlZGVkIGZvciB0aHJlZWpzXG4gICAgICAgICAgICAgICAgdGhpcy5jb2xvckJsdWUgPSBNYXRoLnJvdW5kKHZhbHVlUGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuV2hlZWxTbG90OiB7XG4gICAgICAgICAgICBjb25zdCBtaXhlZENvbG9yID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRNaXhlZFdoZWVsU2xvdENvbG9yKGNhcGFiaWxpdHkud2hlZWwsIGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5zbG90TnVtYmVyKTtcbiAgICAgICAgICAgIGlmIChtaXhlZENvbG9yKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29sb3JSZWQgPSBNYXRoLnJvdW5kKG1peGVkQ29sb3IucmVkKTtcbiAgICAgICAgICAgICAgdGhpcy5jb2xvckdyZWVuID0gTWF0aC5yb3VuZChtaXhlZENvbG9yLmdyZWVuKTtcbiAgICAgICAgICAgICAgdGhpcy5jb2xvckJsdWUgPSBNYXRoLnJvdW5kKG1peGVkQ29sb3IuYmx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVQb3NpdGlvbihvYmplY3Q6IFRIUkVFLk9iamVjdDNEKSB7XG4gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvblxuICAgIHN3aXRjaCAodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25pbmcpIHtcbiAgICAgIGNhc2UgUG9zaXRpb25pbmcudG9wRnJvbnQ6IHtcbiAgICAgICAgb2JqZWN0LnJvdGF0aW9uLnggPSBUSFJFRS5NYXRoLmRlZ1RvUmFkKDApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZIC0gMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy5ib3R0b21Gcm9udDoge1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGguZGVnVG9SYWQoMTgwKTtcbiAgICAgICAgb2JqZWN0LnBvc2l0aW9uLnNldCh0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblgsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWSArIDEzLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblopO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgUG9zaXRpb25pbmcudG9wQmFjazoge1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGguZGVnVG9SYWQoMCk7XG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25YLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblkgLSAxMywgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25aKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLmJvdHRvbUJhY2s6IHtcbiAgICAgICAgb2JqZWN0LnJvdGF0aW9uLnggPSBUSFJFRS5NYXRoLmRlZ1RvUmFkKDE4MCk7XG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25YLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblkgKyAxMywgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25aKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLm1hbnVhbDoge1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblopO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGguZGVnVG9SYWQodGhpcy5maXh0dXJlLmZpeHR1cmUucm90YXRpb25YKTtcbiAgICAgICAgb2JqZWN0LnJvdGF0aW9uLnkgPSBUSFJFRS5NYXRoLmRlZ1RvUmFkKHRoaXMuZml4dHVyZS5maXh0dXJlLnJvdGF0aW9uWSk7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi56ID0gVEhSRUUuTWF0aC5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblopO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRNYXRlcmlhbC5kaXNwb3NlKCk7XG4gIH1cbn1cbiJdfQ==