@rocketshow/designer 1.32.0 → 1.33.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 (339) hide show
  1. package/esm2022/lib/array-sort-pipe.mjs +30 -0
  2. package/esm2022/lib/designer.component.mjs +605 -0
  3. package/esm2022/lib/designer.module.mjs +183 -0
  4. package/esm2022/lib/designer.service.mjs +14 -0
  5. package/esm2022/lib/effect/effect-curve/effect-curve.component.mjs +569 -0
  6. package/esm2022/lib/effect/effect-pan-tilt/effect-pan-tilt.component.mjs +36 -0
  7. package/esm2022/lib/effect/effect.component.mjs +174 -0
  8. package/esm2022/lib/error-dialog/error-dialog.component.mjs +75 -0
  9. package/esm2022/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.mjs +222 -0
  10. package/esm2022/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.mjs +147 -0
  11. package/esm2022/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.mjs +213 -0
  12. package/esm2022/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.mjs +78 -0
  13. package/esm2022/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.mjs +119 -0
  14. package/esm2022/lib/fixture/fixture-capability/fixture-capability.component.mjs +169 -0
  15. package/esm2022/lib/fixture/fixture-channel/fixture-channel.component.mjs +160 -0
  16. package/esm2022/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.mjs +365 -0
  17. package/esm2022/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.mjs +151 -0
  18. package/esm2022/lib/fixture/fixture-settings/fixture-settings.component.mjs +46 -0
  19. package/esm2022/lib/fixture/fixture.component.mjs +138 -0
  20. package/esm2022/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.mjs +145 -0
  21. package/esm2022/lib/fixture-pool/fixture-pool.component.mjs +589 -0
  22. package/esm2022/lib/intro/intro.component.mjs +95 -0
  23. package/esm2022/lib/master-dimmer/master-dimmer.component.mjs +66 -0
  24. package/esm2022/lib/models/cached-fixture-capability.mjs +9 -0
  25. package/esm2022/lib/models/cached-fixture-channel.mjs +7 -0
  26. package/esm2022/lib/models/cached-fixture.mjs +6 -0
  27. package/esm2022/lib/models/color.mjs +8 -0
  28. package/esm2022/lib/models/composition.mjs +46 -0
  29. package/esm2022/lib/models/effect-curve-profile-channel.mjs +15 -0
  30. package/esm2022/lib/models/effect-curve.mjs +69 -0
  31. package/esm2022/lib/models/effect-pan-tilt.mjs +19 -0
  32. package/esm2022/lib/models/effect.mjs +12 -0
  33. package/esm2022/lib/models/fixture-capability-value.mjs +15 -0
  34. package/esm2022/lib/models/fixture-capability.mjs +84 -0
  35. package/esm2022/lib/models/fixture-channel-value.mjs +11 -0
  36. package/esm2022/lib/models/fixture-channel.mjs +24 -0
  37. package/esm2022/lib/models/fixture-mode.mjs +14 -0
  38. package/esm2022/lib/models/fixture-profile.mjs +70 -0
  39. package/esm2022/lib/models/fixture-wheel-slot.mjs +26 -0
  40. package/esm2022/lib/models/fixture-wheel.mjs +15 -0
  41. package/esm2022/lib/models/fixture.mjs +40 -0
  42. package/esm2022/lib/models/preset-region-scene.mjs +8 -0
  43. package/esm2022/lib/models/preset.mjs +56 -0
  44. package/esm2022/lib/models/project.mjs +68 -0
  45. package/esm2022/lib/models/scene-playback-region.mjs +11 -0
  46. package/esm2022/lib/models/scene.mjs +27 -0
  47. package/esm2022/lib/models/universe.mjs +11 -0
  48. package/esm2022/lib/preset/preset-settings/preset-settings.component.mjs +194 -0
  49. package/esm2022/lib/preset/preset.component.mjs +131 -0
  50. package/esm2022/lib/preview/models/color-changer-3d.mjs +167 -0
  51. package/esm2022/lib/preview/models/fixture-3d.mjs +150 -0
  52. package/esm2022/lib/preview/models/moving-head-3d.mjs +243 -0
  53. package/esm2022/lib/preview/preview.component.mjs +212 -0
  54. package/esm2022/lib/project/project-browser/project-browser.component.mjs +143 -0
  55. package/esm2022/lib/project/project-import/project-import.component.mjs +107 -0
  56. package/esm2022/lib/project/project-save/project-save.component.mjs +178 -0
  57. package/esm2022/lib/project/project-share/project-share.component.mjs +71 -0
  58. package/esm2022/lib/scene/scene-settings/scene-settings.component.mjs +146 -0
  59. package/esm2022/lib/scene/scene.component.mjs +110 -0
  60. package/esm2022/lib/services/animation.service.mjs +16 -0
  61. package/esm2022/lib/services/config.service.mjs +27 -0
  62. package/esm2022/lib/services/effect.service.mjs +14 -0
  63. package/esm2022/lib/services/error-dialog.service.mjs +39 -0
  64. package/esm2022/lib/services/fixture-pool.service.mjs +30 -0
  65. package/esm2022/lib/services/fixture.service.mjs +431 -0
  66. package/esm2022/lib/services/hotkey-target-exclude.service.mjs +24 -0
  67. package/esm2022/lib/services/intro.service.mjs +140 -0
  68. package/esm2022/lib/services/preset.service.mjs +400 -0
  69. package/esm2022/lib/services/preview-mesh.service.mjs +57 -0
  70. package/esm2022/lib/services/preview.service.mjs +496 -0
  71. package/esm2022/lib/services/project-load.service.mjs +149 -0
  72. package/esm2022/lib/services/project.service.mjs +97 -0
  73. package/esm2022/lib/services/scene.service.mjs +164 -0
  74. package/esm2022/lib/services/timeline.service.mjs +726 -0
  75. package/esm2022/lib/services/universe.service.mjs +23 -0
  76. package/esm2022/lib/services/user-ensure-login.service.mjs +38 -0
  77. package/esm2022/lib/services/user.service.mjs +89 -0
  78. package/esm2022/lib/services/uuid.service.mjs +23 -0
  79. package/esm2022/lib/services/warning-dialog.service.mjs +38 -0
  80. package/esm2022/lib/timeline/composition-settings/composition-settings.component.mjs +334 -0
  81. package/esm2022/lib/timeline/timeline-grid/timeline-grid.component.mjs +216 -0
  82. package/esm2022/lib/timeline/timeline.component.mjs +418 -0
  83. package/esm2022/lib/user/user-login/user-login.component.mjs +144 -0
  84. package/esm2022/lib/user/user-register/user-register.component.mjs +220 -0
  85. package/esm2022/lib/wait-dialog/wait-dialog.component.mjs +26 -0
  86. package/esm2022/lib/warning-dialog/warning-dialog.component.mjs +68 -0
  87. package/esm2022/public_api.mjs +7 -0
  88. package/esm2022/rocketshow-designer.mjs +5 -0
  89. package/fesm2022/rocketshow-designer.mjs +10626 -0
  90. package/fesm2022/rocketshow-designer.mjs.map +1 -0
  91. package/index.d.ts +5 -0
  92. package/lib/array-sort-pipe.d.ts +3 -0
  93. package/lib/designer.component.d.ts +15 -12
  94. package/lib/designer.module.d.ts +54 -0
  95. package/lib/designer.service.d.ts +3 -0
  96. package/lib/effect/effect-curve/effect-curve.component.d.ts +4 -1
  97. package/lib/effect/effect-pan-tilt/effect-pan-tilt.component.d.ts +3 -0
  98. package/lib/effect/effect.component.d.ts +3 -0
  99. package/lib/error-dialog/error-dialog.component.d.ts +3 -0
  100. package/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.d.ts +4 -1
  101. package/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.d.ts +3 -0
  102. package/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.d.ts +5 -2
  103. package/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.d.ts +3 -0
  104. package/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.d.ts +3 -0
  105. package/lib/fixture/fixture-capability/fixture-capability.component.d.ts +3 -0
  106. package/lib/fixture/fixture-channel/fixture-channel.component.d.ts +3 -0
  107. package/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.d.ts +3 -0
  108. package/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.d.ts +3 -0
  109. package/lib/fixture/fixture-settings/fixture-settings.component.d.ts +3 -0
  110. package/lib/fixture/fixture.component.d.ts +3 -0
  111. package/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.d.ts +3 -0
  112. package/lib/fixture-pool/fixture-pool.component.d.ts +3 -0
  113. package/lib/intro/intro.component.d.ts +3 -0
  114. package/lib/master-dimmer/master-dimmer.component.d.ts +3 -0
  115. package/lib/preset/preset-settings/preset-settings.component.d.ts +3 -0
  116. package/lib/preset/preset.component.d.ts +3 -0
  117. package/lib/preview/preview.component.d.ts +4 -4
  118. package/lib/project/project-browser/project-browser.component.d.ts +3 -0
  119. package/lib/project/project-import/project-import.component.d.ts +3 -0
  120. package/lib/project/project-save/project-save.component.d.ts +3 -0
  121. package/lib/project/project-share/project-share.component.d.ts +3 -0
  122. package/lib/scene/scene-settings/scene-settings.component.d.ts +3 -0
  123. package/lib/scene/scene.component.d.ts +3 -0
  124. package/lib/services/animation.service.d.ts +3 -0
  125. package/lib/services/config.service.d.ts +3 -0
  126. package/lib/services/effect.service.d.ts +3 -0
  127. package/lib/services/error-dialog.service.d.ts +3 -0
  128. package/lib/services/fixture-pool.service.d.ts +3 -0
  129. package/lib/services/fixture.service.d.ts +3 -0
  130. package/lib/services/hotkey-target-exclude.service.d.ts +3 -0
  131. package/lib/services/intro.service.d.ts +3 -0
  132. package/lib/services/preset.service.d.ts +3 -0
  133. package/lib/services/preview-mesh.service.d.ts +3 -0
  134. package/lib/services/preview.service.d.ts +4 -0
  135. package/lib/services/project-load.service.d.ts +3 -0
  136. package/lib/services/project.service.d.ts +3 -0
  137. package/lib/services/scene.service.d.ts +3 -0
  138. package/lib/services/timeline.service.d.ts +4 -1
  139. package/lib/services/universe.service.d.ts +3 -0
  140. package/lib/services/user-ensure-login.service.d.ts +3 -0
  141. package/lib/services/user.service.d.ts +3 -0
  142. package/lib/services/uuid.service.d.ts +3 -0
  143. package/lib/services/warning-dialog.service.d.ts +3 -0
  144. package/lib/timeline/composition-settings/composition-settings.component.d.ts +3 -0
  145. package/lib/timeline/timeline-grid/timeline-grid.component.d.ts +3 -0
  146. package/lib/timeline/timeline.component.d.ts +3 -0
  147. package/lib/user/user-login/user-login.component.d.ts +3 -0
  148. package/lib/user/user-register/user-register.component.d.ts +3 -0
  149. package/lib/wait-dialog/wait-dialog.component.d.ts +3 -0
  150. package/lib/warning-dialog/warning-dialog.component.d.ts +3 -0
  151. package/package.json +20 -22
  152. package/rocketshow-designer-1.33.0.tgz +0 -0
  153. package/bundles/rocketshow-designer.umd.js +0 -9966
  154. package/bundles/rocketshow-designer.umd.js.map +0 -1
  155. package/bundles/rocketshow-designer.umd.min.js +0 -17
  156. package/bundles/rocketshow-designer.umd.min.js.map +0 -1
  157. package/esm2015/lib/array-sort-pipe.js +0 -28
  158. package/esm2015/lib/designer.component.js +0 -411
  159. package/esm2015/lib/designer.module.js +0 -117
  160. package/esm2015/lib/designer.service.js +0 -16
  161. package/esm2015/lib/effect/effect-curve/effect-curve.component.js +0 -325
  162. package/esm2015/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -30
  163. package/esm2015/lib/effect/effect.component.js +0 -73
  164. package/esm2015/lib/error-dialog/error-dialog.component.js +0 -42
  165. package/esm2015/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -141
  166. package/esm2015/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -128
  167. package/esm2015/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -163
  168. package/esm2015/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -60
  169. package/esm2015/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -87
  170. package/esm2015/lib/fixture/fixture-capability/fixture-capability.component.js +0 -97
  171. package/esm2015/lib/fixture/fixture-channel/fixture-channel.component.js +0 -66
  172. package/esm2015/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -200
  173. package/esm2015/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -31
  174. package/esm2015/lib/fixture/fixture-settings/fixture-settings.component.js +0 -35
  175. package/esm2015/lib/fixture/fixture.component.js +0 -70
  176. package/esm2015/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -128
  177. package/esm2015/lib/fixture-pool/fixture-pool.component.js +0 -331
  178. package/esm2015/lib/intro/intro.component.js +0 -25
  179. package/esm2015/lib/master-dimmer/master-dimmer.component.js +0 -41
  180. package/esm2015/lib/models/cached-fixture-capability.js +0 -9
  181. package/esm2015/lib/models/cached-fixture-channel.js +0 -7
  182. package/esm2015/lib/models/cached-fixture.js +0 -6
  183. package/esm2015/lib/models/color.js +0 -8
  184. package/esm2015/lib/models/composition.js +0 -46
  185. package/esm2015/lib/models/effect-curve-profile-channel.js +0 -15
  186. package/esm2015/lib/models/effect-curve.js +0 -69
  187. package/esm2015/lib/models/effect-pan-tilt.js +0 -19
  188. package/esm2015/lib/models/effect.js +0 -12
  189. package/esm2015/lib/models/fixture-capability-value.js +0 -15
  190. package/esm2015/lib/models/fixture-capability.js +0 -84
  191. package/esm2015/lib/models/fixture-channel-value.js +0 -11
  192. package/esm2015/lib/models/fixture-channel.js +0 -24
  193. package/esm2015/lib/models/fixture-mode.js +0 -14
  194. package/esm2015/lib/models/fixture-profile.js +0 -70
  195. package/esm2015/lib/models/fixture-wheel-slot.js +0 -26
  196. package/esm2015/lib/models/fixture-wheel.js +0 -15
  197. package/esm2015/lib/models/fixture.js +0 -40
  198. package/esm2015/lib/models/preset-region-scene.js +0 -8
  199. package/esm2015/lib/models/preset.js +0 -56
  200. package/esm2015/lib/models/project.js +0 -68
  201. package/esm2015/lib/models/scene-playback-region.js +0 -11
  202. package/esm2015/lib/models/scene.js +0 -27
  203. package/esm2015/lib/models/universe.js +0 -11
  204. package/esm2015/lib/preset/preset-settings/preset-settings.component.js +0 -66
  205. package/esm2015/lib/preset/preset.component.js +0 -85
  206. package/esm2015/lib/preview/models/color-changer-3d.js +0 -167
  207. package/esm2015/lib/preview/models/fixture-3d.js +0 -150
  208. package/esm2015/lib/preview/models/moving-head-3d.js +0 -233
  209. package/esm2015/lib/preview/preview.component.js +0 -242
  210. package/esm2015/lib/project/project-browser/project-browser.component.js +0 -73
  211. package/esm2015/lib/project/project-import/project-import.component.js +0 -89
  212. package/esm2015/lib/project/project-save/project-save.component.js +0 -105
  213. package/esm2015/lib/project/project-share/project-share.component.js +0 -43
  214. package/esm2015/lib/scene/scene-settings/scene-settings.component.js +0 -52
  215. package/esm2015/lib/scene/scene.component.js +0 -56
  216. package/esm2015/lib/services/animation.service.js +0 -17
  217. package/esm2015/lib/services/config.service.js +0 -28
  218. package/esm2015/lib/services/effect.service.js +0 -16
  219. package/esm2015/lib/services/error-dialog.service.js +0 -44
  220. package/esm2015/lib/services/fixture-pool.service.js +0 -34
  221. package/esm2015/lib/services/fixture.service.js +0 -443
  222. package/esm2015/lib/services/hotkey-target-exclude.service.js +0 -26
  223. package/esm2015/lib/services/intro.service.js +0 -144
  224. package/esm2015/lib/services/preset.service.js +0 -416
  225. package/esm2015/lib/services/preview-mesh.service.js +0 -58
  226. package/esm2015/lib/services/preview.service.js +0 -500
  227. package/esm2015/lib/services/project-load.service.js +0 -171
  228. package/esm2015/lib/services/project.service.js +0 -113
  229. package/esm2015/lib/services/scene.service.js +0 -174
  230. package/esm2015/lib/services/timeline.service.js +0 -738
  231. package/esm2015/lib/services/universe.service.js +0 -24
  232. package/esm2015/lib/services/user-ensure-login.service.js +0 -44
  233. package/esm2015/lib/services/user.service.js +0 -93
  234. package/esm2015/lib/services/uuid.service.js +0 -25
  235. package/esm2015/lib/services/warning-dialog.service.js +0 -43
  236. package/esm2015/lib/timeline/composition-settings/composition-settings.component.js +0 -197
  237. package/esm2015/lib/timeline/timeline-grid/timeline-grid.component.js +0 -55
  238. package/esm2015/lib/timeline/timeline.component.js +0 -239
  239. package/esm2015/lib/user/user-login/user-login.component.js +0 -64
  240. package/esm2015/lib/user/user-register/user-register.component.js +0 -89
  241. package/esm2015/lib/wait-dialog/wait-dialog.component.js +0 -16
  242. package/esm2015/lib/warning-dialog/warning-dialog.component.js +0 -42
  243. package/esm2015/public_api.js +0 -7
  244. package/esm2015/rocketshow-designer.js +0 -61
  245. package/esm5/lib/array-sort-pipe.js +0 -31
  246. package/esm5/lib/designer.component.js +0 -468
  247. package/esm5/lib/designer.module.js +0 -120
  248. package/esm5/lib/designer.service.js +0 -17
  249. package/esm5/lib/effect/effect-curve/effect-curve.component.js +0 -386
  250. package/esm5/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -31
  251. package/esm5/lib/effect/effect.component.js +0 -75
  252. package/esm5/lib/error-dialog/error-dialog.component.js +0 -43
  253. package/esm5/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -159
  254. package/esm5/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -130
  255. package/esm5/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -215
  256. package/esm5/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -61
  257. package/esm5/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -88
  258. package/esm5/lib/fixture/fixture-capability/fixture-capability.component.js +0 -130
  259. package/esm5/lib/fixture/fixture-channel/fixture-channel.component.js +0 -68
  260. package/esm5/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -306
  261. package/esm5/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -32
  262. package/esm5/lib/fixture/fixture-settings/fixture-settings.component.js +0 -36
  263. package/esm5/lib/fixture/fixture.component.js +0 -71
  264. package/esm5/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -127
  265. package/esm5/lib/fixture-pool/fixture-pool.component.js +0 -430
  266. package/esm5/lib/intro/intro.component.js +0 -26
  267. package/esm5/lib/master-dimmer/master-dimmer.component.js +0 -42
  268. package/esm5/lib/models/cached-fixture-capability.js +0 -11
  269. package/esm5/lib/models/cached-fixture-channel.js +0 -9
  270. package/esm5/lib/models/cached-fixture.js +0 -8
  271. package/esm5/lib/models/color.js +0 -10
  272. package/esm5/lib/models/composition.js +0 -60
  273. package/esm5/lib/models/effect-curve-profile-channel.js +0 -29
  274. package/esm5/lib/models/effect-curve.js +0 -95
  275. package/esm5/lib/models/effect-pan-tilt.js +0 -24
  276. package/esm5/lib/models/effect.js +0 -14
  277. package/esm5/lib/models/fixture-capability-value.js +0 -17
  278. package/esm5/lib/models/fixture-capability.js +0 -86
  279. package/esm5/lib/models/fixture-channel-value.js +0 -13
  280. package/esm5/lib/models/fixture-channel.js +0 -38
  281. package/esm5/lib/models/fixture-mode.js +0 -16
  282. package/esm5/lib/models/fixture-profile.js +0 -114
  283. package/esm5/lib/models/fixture-wheel-slot.js +0 -28
  284. package/esm5/lib/models/fixture-wheel.js +0 -29
  285. package/esm5/lib/models/fixture.js +0 -42
  286. package/esm5/lib/models/preset-region-scene.js +0 -10
  287. package/esm5/lib/models/preset.js +0 -90
  288. package/esm5/lib/models/project.js +0 -122
  289. package/esm5/lib/models/scene-playback-region.js +0 -13
  290. package/esm5/lib/models/scene.js +0 -29
  291. package/esm5/lib/models/universe.js +0 -13
  292. package/esm5/lib/preset/preset-settings/preset-settings.component.js +0 -67
  293. package/esm5/lib/preset/preset.component.js +0 -86
  294. package/esm5/lib/preview/models/color-changer-3d.js +0 -194
  295. package/esm5/lib/preview/models/fixture-3d.js +0 -196
  296. package/esm5/lib/preview/models/moving-head-3d.js +0 -250
  297. package/esm5/lib/preview/preview.component.js +0 -280
  298. package/esm5/lib/project/project-browser/project-browser.component.js +0 -77
  299. package/esm5/lib/project/project-import/project-import.component.js +0 -88
  300. package/esm5/lib/project/project-save/project-save.component.js +0 -120
  301. package/esm5/lib/project/project-share/project-share.component.js +0 -44
  302. package/esm5/lib/scene/scene-settings/scene-settings.component.js +0 -53
  303. package/esm5/lib/scene/scene.component.js +0 -57
  304. package/esm5/lib/services/animation.service.js +0 -18
  305. package/esm5/lib/services/config.service.js +0 -29
  306. package/esm5/lib/services/effect.service.js +0 -17
  307. package/esm5/lib/services/error-dialog.service.js +0 -46
  308. package/esm5/lib/services/fixture-pool.service.js +0 -36
  309. package/esm5/lib/services/fixture.service.js +0 -643
  310. package/esm5/lib/services/hotkey-target-exclude.service.js +0 -27
  311. package/esm5/lib/services/intro.service.js +0 -145
  312. package/esm5/lib/services/preset.service.js +0 -637
  313. package/esm5/lib/services/preview-mesh.service.js +0 -61
  314. package/esm5/lib/services/preview.service.js +0 -754
  315. package/esm5/lib/services/project-load.service.js +0 -185
  316. package/esm5/lib/services/project.service.js +0 -127
  317. package/esm5/lib/services/scene.service.js +0 -251
  318. package/esm5/lib/services/timeline.service.js +0 -845
  319. package/esm5/lib/services/universe.service.js +0 -36
  320. package/esm5/lib/services/user-ensure-login.service.js +0 -45
  321. package/esm5/lib/services/user.service.js +0 -95
  322. package/esm5/lib/services/uuid.service.js +0 -26
  323. package/esm5/lib/services/warning-dialog.service.js +0 -45
  324. package/esm5/lib/timeline/composition-settings/composition-settings.component.js +0 -206
  325. package/esm5/lib/timeline/timeline-grid/timeline-grid.component.js +0 -56
  326. package/esm5/lib/timeline/timeline.component.js +0 -243
  327. package/esm5/lib/user/user-login/user-login.component.js +0 -66
  328. package/esm5/lib/user/user-register/user-register.component.js +0 -91
  329. package/esm5/lib/wait-dialog/wait-dialog.component.js +0 -18
  330. package/esm5/lib/warning-dialog/warning-dialog.component.js +0 -43
  331. package/esm5/public_api.js +0 -7
  332. package/esm5/rocketshow-designer.js +0 -61
  333. package/fesm2015/rocketshow-designer.js +0 -7945
  334. package/fesm2015/rocketshow-designer.js.map +0 -1
  335. package/fesm5/rocketshow-designer.js +0 -9690
  336. package/fesm5/rocketshow-designer.js.map +0 -1
  337. package/rocketshow-designer-1.32.0.tgz +0 -0
  338. package/rocketshow-designer.d.ts +0 -60
  339. package/rocketshow-designer.metadata.json +0 -1
@@ -0,0 +1,36 @@
1
+ import { Component, ElementRef, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ const _c0 = ["panTiltGrid"];
4
+ export class EffectPanTiltComponent {
5
+ constructor() {
6
+ this.points = [
7
+ [0, 500],
8
+ [500, 0],
9
+ [1000, 500],
10
+ [500, 1000],
11
+ ];
12
+ this.dragged = null;
13
+ this.selected = this.points[0];
14
+ }
15
+ redraw() { }
16
+ ngOnInit() { }
17
+ static { this.ɵfac = function EffectPanTiltComponent_Factory(t) { return new (t || EffectPanTiltComponent)(); }; }
18
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EffectPanTiltComponent, selectors: [["lib-app-effect-pan-tilt"]], viewQuery: function EffectPanTiltComponent_Query(rf, ctx) { if (rf & 1) {
19
+ i0.ɵɵviewQuery(_c0, 5);
20
+ } if (rf & 2) {
21
+ let _t;
22
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.panTiltGrid = _t.first);
23
+ } }, decls: 2, vars: 0, consts: [["panTiltGrid", ""], ["width", "150", "height", "150", "viewBox", "-100 -100 1200 1200", 1, "pan-tilt-grid", 2, "border", "1px solid white"]], template: function EffectPanTiltComponent_Template(rf, ctx) { if (rf & 1) {
24
+ i0.ɵɵnamespaceSVG();
25
+ i0.ɵɵelement(0, "svg", 1, 0);
26
+ } } }); }
27
+ }
28
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EffectPanTiltComponent, [{
29
+ type: Component,
30
+ args: [{ selector: 'lib-app-effect-pan-tilt', template: "<svg #panTiltGrid class=\"pan-tilt-grid\" width=\"150\" height=\"150\" viewBox=\"-100 -100 1200 1200\" style=\"border: 1px solid white\"></svg>\n" }]
31
+ }], () => [], { panTiltGrid: [{
32
+ type: ViewChild,
33
+ args: ['panTiltGrid']
34
+ }] }); })();
35
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EffectPanTiltComponent, { className: "EffectPanTiltComponent" }); })();
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LXBhbi10aWx0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvZWZmZWN0L2VmZmVjdC1wYW4tdGlsdC9lZmZlY3QtcGFuLXRpbHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9lZmZlY3QvZWZmZWN0LXBhbi10aWx0L2VmZmVjdC1wYW4tdGlsdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU96RSxNQUFNLE9BQU8sc0JBQXNCO0lBaUJqQztRQVZRLFdBQU0sR0FBRztZQUNmLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztZQUNSLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNSLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztZQUNYLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztTQUNaLENBQUM7UUFFTSxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsYUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbkIsQ0FBQztJQUVSLE1BQU0sS0FBSSxDQUFDO0lBRW5CLFFBQVEsS0FBSSxDQUFDO3VGQXJCRixzQkFBc0I7b0VBQXRCLHNCQUFzQjs7Ozs7OztZQ1BuQyw0QkFBcUk7OztpRkRPeEgsc0JBQXNCO2NBTGxDLFNBQVM7MkJBQ0UseUJBQXlCO29CQUtULFdBQVc7a0JBQXBDLFNBQVM7bUJBQUMsYUFBYTs7a0ZBRGIsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYXBwLWVmZmVjdC1wYW4tdGlsdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZmZlY3QtcGFuLXRpbHQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZmZlY3QtcGFuLXRpbHQuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBFZmZlY3RQYW5UaWx0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZCgncGFuVGlsdEdyaWQnKSBwYW5UaWx0R3JpZDogRWxlbWVudFJlZjtcblxuICAvLyBwcml2YXRlIGxpbmUgPSBkMy5saW5lKCk7XG4gIHByaXZhdGUgc3ZnO1xuICBwcml2YXRlIHBhdGg7XG5cbiAgcHJpdmF0ZSBwb2ludHMgPSBbXG4gICAgWzAsIDUwMF0sXG4gICAgWzUwMCwgMF0sXG4gICAgWzEwMDAsIDUwMF0sXG4gICAgWzUwMCwgMTAwMF0sXG4gIF07XG5cbiAgcHJpdmF0ZSBkcmFnZ2VkID0gbnVsbDtcbiAgcHJpdmF0ZSBzZWxlY3RlZCA9IHRoaXMucG9pbnRzWzBdO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwcml2YXRlIHJlZHJhdygpIHt9XG5cbiAgbmdPbkluaXQoKSB7fVxufVxuIiwiPHN2ZyAjcGFuVGlsdEdyaWQgY2xhc3M9XCJwYW4tdGlsdC1ncmlkXCIgd2lkdGg9XCIxNTBcIiBoZWlnaHQ9XCIxNTBcIiB2aWV3Qm94PVwiLTEwMCAtMTAwIDEyMDAgMTIwMFwiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgd2hpdGVcIj48L3N2Zz5cbiJdfQ==
@@ -0,0 +1,174 @@
1
+ import { Component } from '@angular/core';
2
+ import { map } from 'rxjs/operators';
3
+ import { EffectCurve } from '../models/effect-curve';
4
+ import { EffectPanTilt } from '../models/effect-pan-tilt';
5
+ import { EffectService } from '../services/effect.service';
6
+ import { PresetService } from '../services/preset.service';
7
+ import { UuidService } from '../services/uuid.service';
8
+ import { WarningDialogService } from '../services/warning-dialog.service';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../services/uuid.service";
11
+ import * as i2 from "../services/preset.service";
12
+ import * as i3 from "../services/effect.service";
13
+ import * as i4 from "../services/warning-dialog.service";
14
+ import * as i5 from "@angular/common";
15
+ import * as i6 from "ngx-bootstrap/accordion";
16
+ import * as i7 from "./effect-curve/effect-curve.component";
17
+ import * as i8 from "./effect-pan-tilt/effect-pan-tilt.component";
18
+ import * as i9 from "@ngx-translate/core";
19
+ function EffectComponent_div_1_accordion_group_3_i_3_Template(rf, ctx) { if (rf & 1) {
20
+ i0.ɵɵelement(0, "i", 27);
21
+ } }
22
+ function EffectComponent_div_1_accordion_group_3_i_4_Template(rf, ctx) { if (rf & 1) {
23
+ i0.ɵɵelement(0, "i", 28);
24
+ } }
25
+ function EffectComponent_div_1_accordion_group_3_i_13_Template(rf, ctx) { if (rf & 1) {
26
+ i0.ɵɵelement(0, "i", 29);
27
+ } }
28
+ function EffectComponent_div_1_accordion_group_3_i_14_Template(rf, ctx) { if (rf & 1) {
29
+ i0.ɵɵelement(0, "i", 30);
30
+ } }
31
+ function EffectComponent_div_1_accordion_group_3_div_15_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelementStart(0, "div", 31);
33
+ i0.ɵɵelement(1, "lib-app-effect-curve", 32);
34
+ i0.ɵɵelementEnd();
35
+ } if (rf & 2) {
36
+ const item_r3 = i0.ɵɵnextContext().$implicit;
37
+ const ctx_r3 = i0.ɵɵnextContext(2);
38
+ i0.ɵɵadvance();
39
+ i0.ɵɵproperty("curve", item_r3)("isSelected", item_r3 == ctx_r3.effectService.selectedEffect);
40
+ } }
41
+ function EffectComponent_div_1_accordion_group_3_div_16_Template(rf, ctx) { if (rf & 1) {
42
+ i0.ɵɵelementStart(0, "div", 33);
43
+ i0.ɵɵelement(1, "lib-app-effect-pan-tilt");
44
+ i0.ɵɵelementEnd();
45
+ } }
46
+ function EffectComponent_div_1_accordion_group_3_Template(rf, ctx) { if (rf & 1) {
47
+ const _r2 = i0.ɵɵgetCurrentView();
48
+ i0.ɵɵelementStart(0, "accordion-group", 13);
49
+ i0.ɵɵlistener("isOpenChange", function EffectComponent_div_1_accordion_group_3_Template_accordion_group_isOpenChange_0_listener($event) { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r3.openEffect(item_r3, $event)); });
50
+ i0.ɵɵelementStart(1, "button", 14)(2, "div", 15);
51
+ i0.ɵɵtemplate(3, EffectComponent_div_1_accordion_group_3_i_3_Template, 1, 0, "i", 16)(4, EffectComponent_div_1_accordion_group_3_i_4_Template, 1, 0, "i", 17);
52
+ i0.ɵɵelementStart(5, "span", 18);
53
+ i0.ɵɵtext(6);
54
+ i0.ɵɵpipe(7, "translate");
55
+ i0.ɵɵelementEnd();
56
+ i0.ɵɵelementStart(8, "div", 19)(9, "i", 20);
57
+ i0.ɵɵlistener("click", function EffectComponent_div_1_accordion_group_3_Template_i_click_9_listener($event) { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(2); item_r3.visible = !item_r3.visible; ctx_r3.presetService.previewLive(); return i0.ɵɵresetView($event.stopPropagation()); });
58
+ i0.ɵɵelementEnd()();
59
+ i0.ɵɵelementStart(10, "div", 21)(11, "i", 22);
60
+ i0.ɵɵlistener("click", function EffectComponent_div_1_accordion_group_3_Template_i_click_11_listener($event) { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(2); ctx_r3.deleteEffect(item_r3); return i0.ɵɵresetView($event.stopPropagation()); });
61
+ i0.ɵɵelementEnd()();
62
+ i0.ɵɵelementStart(12, "div", 21);
63
+ i0.ɵɵtemplate(13, EffectComponent_div_1_accordion_group_3_i_13_Template, 1, 0, "i", 23)(14, EffectComponent_div_1_accordion_group_3_i_14_Template, 1, 0, "i", 24);
64
+ i0.ɵɵelementEnd()()();
65
+ i0.ɵɵtemplate(15, EffectComponent_div_1_accordion_group_3_div_15_Template, 2, 2, "div", 25)(16, EffectComponent_div_1_accordion_group_3_div_16_Template, 2, 0, "div", 26);
66
+ i0.ɵɵelementEnd();
67
+ } if (rf & 2) {
68
+ const item_r3 = ctx.$implicit;
69
+ const ctx_r3 = i0.ɵɵnextContext(2);
70
+ i0.ɵɵproperty("isOpen", ctx_r3.effectService.selectedEffect == item_r3);
71
+ i0.ɵɵadvance(3);
72
+ i0.ɵɵproperty("ngIf", item_r3.type == "curve");
73
+ i0.ɵɵadvance();
74
+ i0.ɵɵproperty("ngIf", item_r3.type == "pan-tilt");
75
+ i0.ɵɵadvance(2);
76
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(7, 10, "designer.effect.type-" + item_r3.type));
77
+ i0.ɵɵadvance(3);
78
+ i0.ɵɵclassProp("text-primary", item_r3.visible);
79
+ i0.ɵɵadvance(4);
80
+ i0.ɵɵproperty("ngIf", item_r3 == ctx_r3.effectService.selectedEffect);
81
+ i0.ɵɵadvance();
82
+ i0.ɵɵproperty("ngIf", item_r3 != ctx_r3.effectService.selectedEffect);
83
+ i0.ɵɵadvance();
84
+ i0.ɵɵproperty("ngIf", item_r3.type == "curve");
85
+ i0.ɵɵadvance();
86
+ i0.ɵɵproperty("ngIf", item_r3.type == "pan-tilt");
87
+ } }
88
+ function EffectComponent_div_1_Template(rf, ctx) { if (rf & 1) {
89
+ const _r1 = i0.ɵɵgetCurrentView();
90
+ i0.ɵɵelementStart(0, "div", 2)(1, "div", 3)(2, "accordion", 4);
91
+ i0.ɵɵtemplate(3, EffectComponent_div_1_accordion_group_3_Template, 17, 12, "accordion-group", 5);
92
+ i0.ɵɵelementEnd();
93
+ i0.ɵɵelementStart(4, "div", 6)(5, "div", 7)(6, "a", 8);
94
+ i0.ɵɵelement(7, "i", 9);
95
+ i0.ɵɵtext(8);
96
+ i0.ɵɵpipe(9, "translate");
97
+ i0.ɵɵelementEnd();
98
+ i0.ɵɵelementStart(10, "div", 10)(11, "a", 11);
99
+ i0.ɵɵlistener("click", function EffectComponent_div_1_Template_a_click_11_listener() { i0.ɵɵrestoreView(_r1); const ctx_r3 = i0.ɵɵnextContext(); ctx_r3.addCurveEffect(); return i0.ɵɵresetView(false); });
100
+ i0.ɵɵelement(12, "i", 12);
101
+ i0.ɵɵtext(13);
102
+ i0.ɵɵpipe(14, "translate");
103
+ i0.ɵɵelementEnd()()()()()();
104
+ } if (rf & 2) {
105
+ const ctx_r3 = i0.ɵɵnextContext();
106
+ i0.ɵɵadvance(2);
107
+ i0.ɵɵproperty("closeOthers", true);
108
+ i0.ɵɵadvance();
109
+ i0.ɵɵproperty("ngForOf", ctx_r3.presetService.selectedPreset.effects);
110
+ i0.ɵɵadvance(5);
111
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 4, "designer.effect.add-new"), " ");
112
+ i0.ɵɵadvance(5);
113
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(14, 6, "designer.effect.curve"), "");
114
+ } }
115
+ export class EffectComponent {
116
+ constructor(uuidService, presetService, effectService, warningDialogService) {
117
+ this.uuidService = uuidService;
118
+ this.presetService = presetService;
119
+ this.effectService = effectService;
120
+ this.warningDialogService = warningDialogService;
121
+ }
122
+ ngOnInit() { }
123
+ addEffect(effect) {
124
+ this.effectService.selectedEffect = effect;
125
+ if (this.presetService.selectedPreset) {
126
+ this.presetService.selectedPreset.effects.push(effect);
127
+ }
128
+ }
129
+ addCurveEffect() {
130
+ const effect = new EffectCurve();
131
+ effect.uuid = this.uuidService.getUuid();
132
+ this.addEffect(effect);
133
+ this.presetService.previewLive();
134
+ }
135
+ addPanTiltEffect() {
136
+ this.addEffect(new EffectPanTilt());
137
+ }
138
+ openEffect(effect, event) {
139
+ if (event) {
140
+ this.effectService.selectedEffect = effect;
141
+ }
142
+ else {
143
+ if (this.effectService.selectedEffect === effect) {
144
+ this.effectService.selectedEffect = undefined;
145
+ }
146
+ }
147
+ }
148
+ deleteEffect(effect) {
149
+ this.warningDialogService
150
+ .show('designer.effect.delete-warning')
151
+ .pipe(map((result) => {
152
+ if (result) {
153
+ this.presetService.selectedPreset.effects.splice(this.presetService.selectedPreset.effects.indexOf(effect), 1);
154
+ this.presetService.previewLive();
155
+ }
156
+ }))
157
+ .subscribe();
158
+ }
159
+ static { this.ɵfac = function EffectComponent_Factory(t) { return new (t || EffectComponent)(i0.ɵɵdirectiveInject(i1.UuidService), i0.ɵɵdirectiveInject(i2.PresetService), i0.ɵɵdirectiveInject(i3.EffectService), i0.ɵɵdirectiveInject(i4.WarningDialogService)); }; }
160
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EffectComponent, selectors: [["lib-app-effect"]], decls: 2, vars: 1, consts: [[1, "card", "border-secondary", "panel", "h-100"], ["class", "card-body capability-container", 4, "ngIf"], [1, "card-body", "capability-container"], [1, "m-3"], [3, "closeOthers"], ["style", "margin-top: 1px", 3, "isOpen", "isOpenChange", 4, "ngFor", "ngForOf"], [1, "d-flex", "mx-auto", "mt-3"], [1, "dropdown", "d-flex"], ["href", "#", "role", "button", "id", "dropdownMenuLink", "data-toggle", "dropdown", "aria-haspopup", "true", "aria-expanded", "false", 1, "btn", "btn-secondary", "dropdown-toggle"], ["aria-hidden", "true", 1, "fa", "fa-plus"], ["aria-labelledby", "dropdownMenuLink", 1, "dropdown-menu"], ["href", "#", 1, "dropdown-item", 3, "click"], ["aria-hidden", "true", 1, "fa", "fa-area-chart", "fa-fw"], [2, "margin-top", "1px", 3, "isOpenChange", "isOpen"], ["accordion-heading", "", 1, "btn", "btn-link", "btn-block", "clearfix"], [1, "pull-left", "float-left", "d-flex", "w-100"], ["class", "fa fa-area-chart fa-fw my-auto", "aria-hidden", "true", 4, "ngIf"], ["class", "fa fa-arrows-alt fa-fw my-auto", "aria-hidden", "true", 4, "ngIf"], [1, "ml-2"], [1, "ml-auto", "mr-2"], ["aria-hidden", "true", 1, "fa", "fa-eye", "fa-fw", 3, "click"], [1, "mr-2"], ["aria-hidden", "true", 1, "fa", "fa-trash", "fa-fw", 3, "click"], ["class", "fa fa-caret-down fa-fw", "aria-hidden", "true", 4, "ngIf"], ["class", "fa fa-caret-right fa-fw", "aria-hidden", "true", 4, "ngIf"], ["style", "min-width: 670px", 4, "ngIf"], ["style", "min-width: 500px", 4, "ngIf"], ["aria-hidden", "true", 1, "fa", "fa-area-chart", "fa-fw", "my-auto"], ["aria-hidden", "true", 1, "fa", "fa-arrows-alt", "fa-fw", "my-auto"], ["aria-hidden", "true", 1, "fa", "fa-caret-down", "fa-fw"], ["aria-hidden", "true", 1, "fa", "fa-caret-right", "fa-fw"], [2, "min-width", "670px"], [3, "curve", "isSelected"], [2, "min-width", "500px"]], template: function EffectComponent_Template(rf, ctx) { if (rf & 1) {
161
+ i0.ɵɵelementStart(0, "div", 0);
162
+ i0.ɵɵtemplate(1, EffectComponent_div_1_Template, 15, 8, "div", 1);
163
+ i0.ɵɵelementEnd();
164
+ } if (rf & 2) {
165
+ i0.ɵɵadvance();
166
+ i0.ɵɵproperty("ngIf", ctx.presetService.selectedPreset);
167
+ } }, dependencies: [i5.NgForOf, i5.NgIf, i6.AccordionComponent, i6.AccordionPanelComponent, i7.EffectCurveComponent, i8.EffectPanTiltComponent, i9.TranslatePipe] }); }
168
+ }
169
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EffectComponent, [{
170
+ type: Component,
171
+ args: [{ selector: 'lib-app-effect', template: "<div class=\"card border-secondary panel h-100\">\n <div class=\"card-body capability-container\" *ngIf=\"presetService.selectedPreset\">\n <div class=\"m-3\">\n <accordion [closeOthers]=\"true\">\n <accordion-group\n *ngFor=\"let item of presetService.selectedPreset.effects; let i = index\"\n [isOpen]=\"effectService.selectedEffect == item\"\n (isOpenChange)=\"openEffect(item, $event)\"\n style=\"margin-top: 1px\"\n >\n <button class=\"btn btn-link btn-block clearfix\" accordion-heading>\n <div class=\"pull-left float-left d-flex w-100\">\n <i *ngIf=\"item.type == 'curve'\" class=\"fa fa-area-chart fa-fw my-auto\" aria-hidden=\"true\"></i>\n <i *ngIf=\"item.type == 'pan-tilt'\" class=\"fa fa-arrows-alt fa-fw my-auto\" aria-hidden=\"true\"></i>\n <span class=\"ml-2\">{{ 'designer.effect.type-' + item.type | translate }}</span>\n <div class=\"ml-auto mr-2\">\n <i\n (click)=\"item.visible = !item.visible; presetService.previewLive(); $event.stopPropagation()\"\n class=\"fa fa-eye fa-fw\"\n [class.text-primary]=\"item.visible\"\n aria-hidden=\"true\"\n ></i>\n </div>\n <div class=\"mr-2\">\n <i (click)=\"this.deleteEffect(item); $event.stopPropagation()\" class=\"fa fa-trash fa-fw\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"mr-2\">\n <i *ngIf=\"item == effectService.selectedEffect\" class=\"fa fa-caret-down fa-fw\" aria-hidden=\"true\"></i>\n <i *ngIf=\"item != effectService.selectedEffect\" class=\"fa fa-caret-right fa-fw\" aria-hidden=\"true\"></i>\n </div>\n </div>\n </button>\n\n <div *ngIf=\"item.type == 'curve'\" style=\"min-width: 670px\">\n <lib-app-effect-curve [curve]=\"item\" [isSelected]=\"item == effectService.selectedEffect\"></lib-app-effect-curve>\n </div>\n\n <div *ngIf=\"item.type == 'pan-tilt'\" style=\"min-width: 500px\">\n <lib-app-effect-pan-tilt></lib-app-effect-pan-tilt>\n </div>\n </accordion-group>\n </accordion>\n\n <div class=\"d-flex mx-auto mt-3\">\n <div class=\"dropdown d-flex\">\n <a\n class=\"btn btn-secondary dropdown-toggle\"\n href=\"#\"\n role=\"button\"\n id=\"dropdownMenuLink\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i> {{ 'designer.effect.add-new' | translate }}\n </a>\n\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuLink\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"addCurveEffect(); (false)\">\n <i class=\"fa fa-area-chart fa-fw\" aria-hidden=\"true\"></i> {{ 'designer.effect.curve' | translate }}</a\n >\n <!-- <a class=\"dropdown-item\" href=\"#\" (click)=\"addPanTiltEffect()\">\n <i class=\"fa fa-arrows-alt fa-fw\" aria-hidden=\"true\"></i> Pan/Tilt</a> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
172
+ }], () => [{ type: i1.UuidService }, { type: i2.PresetService }, { type: i3.EffectService }, { type: i4.WarningDialogService }], null); })();
173
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EffectComponent, { className: "EffectComponent" }); })();
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvZWZmZWN0L2VmZmVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2VmZmVjdC9lZmZlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7Ozs7O0lDSTVELHdCQUE4Rjs7O0lBQzlGLHdCQUFpRzs7O0lBYy9GLHdCQUFzRzs7O0lBQ3RHLHdCQUF1Rzs7O0lBSzdHLCtCQUEyRDtJQUN6RCwyQ0FBZ0g7SUFDbEgsaUJBQU07Ozs7SUFEa0IsY0FBYztJQUFDLEFBQWYsK0JBQWMsOERBQW9EOzs7SUFHMUYsK0JBQThEO0lBQzVELDBDQUFtRDtJQUNyRCxpQkFBTTs7OztJQW5DUiwyQ0FLQztJQUZDLHFQQUFnQixrQ0FBd0IsS0FBQztJQUl2QyxBQURGLGtDQUFrRSxjQUNqQjtJQUU3QyxBQURBLHFGQUEwRix3RUFDRztJQUM3RixnQ0FBbUI7SUFBQSxZQUFxRDs7SUFBQSxpQkFBTztJQUU3RSxBQURGLCtC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SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWM7UUFDekIsSUFBSSxDQUFDLG9CQUFvQjthQUN0QixJQUFJLENBQUMsZ0NBQWdDLENBQUM7YUFDdEMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9HLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztnRkFuRFUsZUFBZTtvRUFBZixlQUFlO1lDZjVCLDhCQUErQztZQUM3QyxpRUFBaUY7WUFtRW5GLGlCQUFNOztZQW5FeUMsY0FBa0M7WUFBbEMsdURBQWtDOzs7aUZEY3BFLGVBQWU7Y0FMM0IsU0FBUzsyQkFDRSxnQkFBZ0I7O2tGQUlmLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnLi4vbW9kZWxzL2VmZmVjdCc7XG5pbXBvcnQgeyBFZmZlY3RDdXJ2ZSB9IGZyb20gJy4uL21vZGVscy9lZmZlY3QtY3VydmUnO1xuaW1wb3J0IHsgRWZmZWN0UGFuVGlsdCB9IGZyb20gJy4uL21vZGVscy9lZmZlY3QtcGFuLXRpbHQnO1xuaW1wb3J0IHsgRWZmZWN0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2VmZmVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXNldFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcmVzZXQuc2VydmljZSc7XG5pbXBvcnQgeyBVdWlkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3V1aWQuc2VydmljZSc7XG5pbXBvcnQgeyBXYXJuaW5nRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3dhcm5pbmctZGlhbG9nLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYXBwLWVmZmVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZmZlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZmZlY3QuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBFZmZlY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHV1aWRTZXJ2aWNlOiBVdWlkU2VydmljZSxcbiAgICBwdWJsaWMgcHJlc2V0U2VydmljZTogUHJlc2V0U2VydmljZSxcbiAgICBwdWJsaWMgZWZmZWN0U2VydmljZTogRWZmZWN0U2VydmljZSxcbiAgICBwcml2YXRlIHdhcm5pbmdEaWFsb2dTZXJ2aWNlOiBXYXJuaW5nRGlhbG9nU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7fVxuXG4gIHByaXZhdGUgYWRkRWZmZWN0KGVmZmVjdDogRWZmZWN0KSB7XG4gICAgdGhpcy5lZmZlY3RTZXJ2aWNlLnNlbGVjdGVkRWZmZWN0ID0gZWZmZWN0O1xuXG4gICAgaWYgKHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCkge1xuICAgICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0LmVmZmVjdHMucHVzaChlZmZlY3QpO1xuICAgIH1cbiAgfVxuXG4gIGFkZEN1cnZlRWZmZWN0KCkge1xuICAgIGNvbnN0IGVmZmVjdCA9IG5ldyBFZmZlY3RDdXJ2ZSgpO1xuICAgIGVmZmVjdC51dWlkID0gdGhpcy51dWlkU2VydmljZS5nZXRVdWlkKCk7XG4gICAgdGhpcy5hZGRFZmZlY3QoZWZmZWN0KTtcbiAgICB0aGlzLnByZXNldFNlcnZpY2UucHJldmlld0xpdmUoKTtcbiAgfVxuXG4gIGFkZFBhblRpbHRFZmZlY3QoKSB7XG4gICAgdGhpcy5hZGRFZmZlY3QobmV3IEVmZmVjdFBhblRpbHQoKSk7XG4gIH1cblxuICBvcGVuRWZmZWN0KGVmZmVjdDogRWZmZWN0LCBldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmVmZmVjdFNlcnZpY2Uuc2VsZWN0ZWRFZmZlY3QgPSBlZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmVmZmVjdFNlcnZpY2Uuc2VsZWN0ZWRFZmZlY3QgPT09IGVmZmVjdCkge1xuICAgICAgICB0aGlzLmVmZmVjdFNlcnZpY2Uuc2VsZWN0ZWRFZmZlY3QgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlRWZmZWN0KGVmZmVjdDogRWZmZWN0KSB7XG4gICAgdGhpcy53YXJuaW5nRGlhbG9nU2VydmljZVxuICAgICAgLnNob3coJ2Rlc2lnbmVyLmVmZmVjdC5kZWxldGUtd2FybmluZycpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQuZWZmZWN0cy5zcGxpY2UodGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0LmVmZmVjdHMuaW5kZXhPZihlZmZlY3QpLCAxKTtcbiAgICAgICAgICAgIHRoaXMucHJlc2V0U2VydmljZS5wcmV2aWV3TGl2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyLXNlY29uZGFyeSBwYW5lbCBoLTEwMFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGNhcGFiaWxpdHktY29udGFpbmVyXCIgKm5nSWY9XCJwcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0XCI+XG4gICAgPGRpdiBjbGFzcz1cIm0tM1wiPlxuICAgICAgPGFjY29yZGlvbiBbY2xvc2VPdGhlcnNdPVwidHJ1ZVwiPlxuICAgICAgICA8YWNjb3JkaW9uLWdyb3VwXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldC5lZmZlY3RzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBbaXNPcGVuXT1cImVmZmVjdFNlcnZpY2Uuc2VsZWN0ZWRFZmZlY3QgPT0gaXRlbVwiXG4gICAgICAgICAgKGlzT3BlbkNoYW5nZSk9XCJvcGVuRWZmZWN0KGl0ZW0sICRldmVudClcIlxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDogMXB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLWJsb2NrIGNsZWFyZml4XCIgYWNjb3JkaW9uLWhlYWRpbmc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0IGZsb2F0LWxlZnQgZC1mbGV4IHctMTAwXCI+XG4gICAgICAgICAgICAgIDxpICpuZ0lmPVwiaXRlbS50eXBlID09ICdjdXJ2ZSdcIiBjbGFzcz1cImZhIGZhLWFyZWEtY2hhcnQgZmEtZncgbXktYXV0b1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPGkgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ3Bhbi10aWx0J1wiIGNsYXNzPVwiZmEgZmEtYXJyb3dzLWFsdCBmYS1mdyBteS1hdXRvXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj57eyAnZGVzaWduZXIuZWZmZWN0LnR5cGUtJyArIGl0ZW0udHlwZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG8gbXItMlwiPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXRlbS52aXNpYmxlID0gIWl0ZW0udmlzaWJsZTsgcHJlc2V0U2VydmljZS5wcmV2aWV3TGl2ZSgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1leWUgZmEtZndcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtcHJpbWFyeV09XCJpdGVtLnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLTJcIj5cbiAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwidGhpcy5kZWxldGVFZmZlY3QoaXRlbSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIGNsYXNzPVwiZmEgZmEtdHJhc2ggZmEtZndcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItMlwiPlxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaXRlbSA9PSBlZmZlY3RTZXJ2aWNlLnNlbGVjdGVkRWZmZWN0XCIgY2xhc3M9XCJmYSBmYS1jYXJldC1kb3duIGZhLWZ3XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaXRlbSAhPSBlZmZlY3RTZXJ2aWNlLnNlbGVjdGVkRWZmZWN0XCIgY2xhc3M9XCJmYSBmYS1jYXJldC1yaWdodCBmYS1md1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ2N1cnZlJ1wiIHN0eWxlPVwibWluLXdpZHRoOiA2NzBweFwiPlxuICAgICAgICAgICAgPGxpYi1hcHAtZWZmZWN0LWN1cnZlIFtjdXJ2ZV09XCJpdGVtXCIgW2lzU2VsZWN0ZWRdPVwiaXRlbSA9PSBlZmZlY3RTZXJ2aWNlLnNlbGVjdGVkRWZmZWN0XCI+PC9saWItYXBwLWVmZmVjdC1jdXJ2ZT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ3Bhbi10aWx0J1wiIHN0eWxlPVwibWluLXdpZHRoOiA1MDBweFwiPlxuICAgICAgICAgICAgPGxpYi1hcHAtZWZmZWN0LXBhbi10aWx0PjwvbGliLWFwcC1lZmZlY3QtcGFuLXRpbHQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYWNjb3JkaW9uLWdyb3VwPlxuICAgICAgPC9hY2NvcmRpb24+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXgtYXV0byBtdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93biBkLWZsZXhcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBpZD1cImRyb3Bkb3duTWVudUxpbmtcIlxuICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2Rlc2lnbmVyLmVmZmVjdC5hZGQtbmV3JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYT5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25NZW51TGlua1wiPlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIiAoY2xpY2spPVwiYWRkQ3VydmVFZmZlY3QoKTsgKGZhbHNlKVwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFyZWEtY2hhcnQgZmEtZndcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdkZXNpZ25lci5lZmZlY3QuY3VydmUnIHwgdHJhbnNsYXRlIH19PC9hXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgKGNsaWNrKT1cImFkZFBhblRpbHRFZmZlY3QoKVwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93cy1hbHQgZmEtZndcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IFBhbi9UaWx0PC9hPiAtLT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,75 @@
1
+ import { Component, HostListener } from '@angular/core';
2
+ import { BsModalRef } from 'ngx-bootstrap/modal';
3
+ import { Subject } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "ngx-bootstrap/modal";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@ngx-translate/core";
8
+ function ErrorDialogComponent_p_13_Template(rf, ctx) { if (rf & 1) {
9
+ i0.ɵɵelementStart(0, "p", 13);
10
+ i0.ɵɵtext(1);
11
+ i0.ɵɵelementEnd();
12
+ } if (rf & 2) {
13
+ const ctx_r0 = i0.ɵɵnextContext();
14
+ i0.ɵɵadvance();
15
+ i0.ɵɵtextInterpolate1("(", ctx_r0.details, ")");
16
+ } }
17
+ export class ErrorDialogComponent {
18
+ constructor(bsModalRef) {
19
+ this.bsModalRef = bsModalRef;
20
+ }
21
+ ngOnInit() {
22
+ this.onClose = new Subject();
23
+ }
24
+ ok() {
25
+ this.onClose.next(1);
26
+ this.bsModalRef.hide();
27
+ }
28
+ cancel() {
29
+ this.onClose.next(2);
30
+ this.bsModalRef.hide();
31
+ }
32
+ handleKeyboardEvent(event) {
33
+ this.ok();
34
+ }
35
+ static { this.ɵfac = function ErrorDialogComponent_Factory(t) { return new (t || ErrorDialogComponent)(i0.ɵɵdirectiveInject(i1.BsModalRef)); }; }
36
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ErrorDialogComponent, selectors: [["lib-error-dialog"]], hostBindings: function ErrorDialogComponent_HostBindings(rf, ctx) { if (rf & 1) {
37
+ i0.ɵɵlistener("keydown.enter", function ErrorDialogComponent_keydown_enter_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument);
38
+ } }, decls: 19, vars: 8, consts: [[1, "card-modal"], [1, "card"], [1, "card-header"], [1, "card-body"], [1, "row"], [1, "col-auto"], [1, "mb-0"], ["aria-hidden", "true", 1, "fa", "fa-exclamation-circle", "text-danger"], [1, "col", "pl-0"], ["class", "mt-1 mb-0", 4, "ngIf"], [1, "card-footer"], [1, "d-flex", "float-right"], ["type", "button", 1, "btn", "btn-primary", 3, "click"], [1, "mt-1", "mb-0"]], template: function ErrorDialogComponent_Template(rf, ctx) { if (rf & 1) {
39
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
40
+ i0.ɵɵtext(3);
41
+ i0.ɵɵpipe(4, "translate");
42
+ i0.ɵɵelementEnd();
43
+ i0.ɵɵelementStart(5, "div", 3)(6, "div", 4)(7, "div", 5)(8, "h2", 6);
44
+ i0.ɵɵelement(9, "i", 7);
45
+ i0.ɵɵelementEnd()();
46
+ i0.ɵɵelementStart(10, "div", 8)(11, "p", 6);
47
+ i0.ɵɵtext(12);
48
+ i0.ɵɵelementEnd();
49
+ i0.ɵɵtemplate(13, ErrorDialogComponent_p_13_Template, 2, 1, "p", 9);
50
+ i0.ɵɵelementEnd()()();
51
+ i0.ɵɵelementStart(14, "div", 10)(15, "div", 11)(16, "button", 12);
52
+ i0.ɵɵlistener("click", function ErrorDialogComponent_Template_button_click_16_listener() { ctx.ok(); return false; });
53
+ i0.ɵɵtext(17);
54
+ i0.ɵɵpipe(18, "translate");
55
+ i0.ɵɵelementEnd()()()()();
56
+ } if (rf & 2) {
57
+ i0.ɵɵadvance(3);
58
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 4, "designer.misc.error"), " ");
59
+ i0.ɵɵadvance(9);
60
+ i0.ɵɵtextInterpolate(ctx.message);
61
+ i0.ɵɵadvance();
62
+ i0.ɵɵproperty("ngIf", ctx.details);
63
+ i0.ɵɵadvance(4);
64
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(18, 6, "designer.misc.ok"), " ");
65
+ } }, dependencies: [i2.NgIf, i3.TranslatePipe] }); }
66
+ }
67
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ErrorDialogComponent, [{
68
+ type: Component,
69
+ args: [{ selector: 'lib-error-dialog', template: "<div class=\"card-modal\">\n <div class=\"card\">\n <div class=\"card-header\">\n {{ 'designer.misc.error' | translate }}\n </div>\n\n <div class=\"card-body\">\n <div class=\"row\">\n <div class=\"col-auto\">\n <h2 class=\"mb-0\">\n <i class=\"fa fa-exclamation-circle text-danger\" aria-hidden=\"true\"></i>\n </h2>\n </div>\n <div class=\"col pl-0\">\n <p class=\"mb-0\">{{ message }}</p>\n <p *ngIf=\"details\" class=\"mt-1 mb-0\">({{ details }})</p>\n </div>\n </div>\n </div>\n\n <div class=\"card-footer\">\n <div class=\"d-flex float-right\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok(); (false)\">\n {{ 'designer.misc.ok' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n" }]
70
+ }], () => [{ type: i1.BsModalRef }], { handleKeyboardEvent: [{
71
+ type: HostListener,
72
+ args: ['document:keydown.enter', ['$event']]
73
+ }] }); })();
74
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ErrorDialogComponent, { className: "ErrorDialogComponent" }); })();
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvZXJyb3ItZGlhbG9nL2Vycm9yLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2Vycm9yLWRpYWxvZy9lcnJvci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztJQ2FyQiw2QkFBcUM7SUFBQSxZQUFlO0lBQUEsaUJBQUk7OztJQUFuQixjQUFlO0lBQWYsK0NBQWU7O0FETjlELE1BQU0sT0FBTyxvQkFBb0I7SUFNL0IsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUFHLENBQUM7SUFFOUMsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU0sRUFBRTtRQUNQLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFHRCxtQkFBbUIsQ0FBQyxLQUFVO1FBQzVCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7cUZBekJVLG9CQUFvQjtvRUFBcEIsb0JBQW9CO1lBQXBCLCtHQUFBLCtCQUEyQixpQ0FBUDs7WUNQN0IsQUFERixBQURGLDhCQUF3QixhQUNKLGFBQ1M7WUFDdkIsWUFDRjs7WUFBQSxpQkFBTTtZQUtBLEFBREYsQUFERixBQURGLDhCQUF1QixhQUNKLGFBQ08sWUFDSDtZQUNmLHVCQUF1RTtZQUUzRSxBQURFLGlCQUFLLEVBQ0Q7WUFFSixBQURGLCtCQUFzQixZQUNKO1lBQUEsYUFBYTtZQUFBLGlCQUFJO1lBQ2pDLG1FQUFxQztZQUczQyxBQURFLEFBREUsaUJBQU0sRUFDRixFQUNGO1lBSUYsQUFERixBQURGLGdDQUF5QixlQUNTLGtCQUN3QztZQUF4QiwyRkFBUyxRQUFJLFNBQUcsS0FBSyxJQUFFO1lBQ25FLGFBQ0Y7O1lBSVIsQUFERSxBQURFLEFBREUsQUFERSxpQkFBUyxFQUNMLEVBQ0YsRUFDRixFQUNGOztZQXpCQSxlQUNGO1lBREUsNEVBQ0Y7WUFVc0IsZUFBYTtZQUFiLGlDQUFhO1lBQ3pCLGNBQWE7WUFBYixrQ0FBYTtZQVFqQixlQUNGO1lBREUsMEVBQ0Y7OztpRkRmSyxvQkFBb0I7Y0FMaEMsU0FBUzsyQkFDRSxrQkFBa0I7MkNBMkI1QixtQkFBbUI7a0JBRGxCLFlBQVk7bUJBQUMsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7O2tGQXRCdkMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZXJyb3ItZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Vycm9yLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Vycm9yLWRpYWxvZy5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEVycm9yRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgb25DbG9zZTogU3ViamVjdDxudW1iZXI+O1xuXG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZGV0YWlsczogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnNNb2RhbFJlZjogQnNNb2RhbFJlZikge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm9uQ2xvc2UgPSBuZXcgU3ViamVjdCgpO1xuICB9XG5cbiAgcHVibGljIG9rKCk6IHZvaWQge1xuICAgIHRoaXMub25DbG9zZS5uZXh0KDEpO1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMub25DbG9zZS5uZXh0KDIpO1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVudGVyJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogYW55KSB7XG4gICAgdGhpcy5vaygpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZC1tb2RhbFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgICAge3sgJ2Rlc2lnbmVyLm1pc2MuZXJyb3InIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxuICAgICAgICAgIDxoMiBjbGFzcz1cIm1iLTBcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlIHRleHQtZGFuZ2VyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDwvaDI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHBsLTBcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cIm1iLTBcIj57eyBtZXNzYWdlIH19PC9wPlxuICAgICAgICAgIDxwICpuZ0lmPVwiZGV0YWlsc1wiIGNsYXNzPVwibXQtMSBtYi0wXCI+KHt7IGRldGFpbHMgfX0pPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsb2F0LXJpZ2h0XCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm9rKCk7IChmYWxzZSlcIj5cbiAgICAgICAgICB7eyAnZGVzaWduZXIubWlzYy5vaycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,222 @@
1
+ import { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild } from '@angular/core';
2
+ import { CachedFixtureChannel } from '../../../models/cached-fixture-channel';
3
+ import { FixtureProfile } from '../../../models/fixture-profile';
4
+ import { PresetService } from '../../../services/preset.service';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../../services/preset.service";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "@angular/forms";
9
+ import * as i4 from "ngx-bootstrap-slider";
10
+ import * as i5 from "@ngx-translate/core";
11
+ const _c0 = ["sliderValue"];
12
+ function FixtureCapabilityChannelComponent_div_9_div_1_span_6_Template(rf, ctx) { if (rf & 1) {
13
+ i0.ɵɵelementStart(0, "span");
14
+ i0.ɵɵtext(1, " - ");
15
+ i0.ɵɵelementEnd();
16
+ } }
17
+ function FixtureCapabilityChannelComponent_div_9_div_1_Template(rf, ctx) { if (rf & 1) {
18
+ const _r1 = i0.ɵɵgetCurrentView();
19
+ i0.ɵɵelementStart(0, "div", 5)(1, "input", 14);
20
+ i0.ɵɵtwoWayListener("ngModelChange", function FixtureCapabilityChannelComponent_div_9_div_1_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedCapability, $event) || (ctx_r1.selectedCapability = $event); return i0.ɵɵresetView($event); });
21
+ i0.ɵɵlistener("change", function FixtureCapabilityChannelComponent_div_9_div_1_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.capabilitySelected()); });
22
+ i0.ɵɵelementEnd();
23
+ i0.ɵɵelementStart(2, "label", 15);
24
+ i0.ɵɵtext(3);
25
+ i0.ɵɵpipe(4, "translate");
26
+ i0.ɵɵelementStart(5, "small");
27
+ i0.ɵɵtemplate(6, FixtureCapabilityChannelComponent_div_9_div_1_span_6_Template, 2, 0, "span", 16);
28
+ i0.ɵɵtext(7);
29
+ i0.ɵɵelementEnd()()();
30
+ } if (rf & 2) {
31
+ const capability_r3 = ctx.$implicit;
32
+ const i_r4 = ctx.index;
33
+ const ctx_r1 = i0.ɵɵnextContext(2);
34
+ i0.ɵɵadvance();
35
+ i0.ɵɵpropertyInterpolate1("name", "capabilityGeneric", ctx_r1.capabilityIndex, "Option");
36
+ i0.ɵɵpropertyInterpolate2("id", "capabilityGeneric", ctx_r1.capabilityIndex, "Option", i_r4, "");
37
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.selectedCapability);
38
+ i0.ɵɵproperty("value", capability_r3);
39
+ i0.ɵɵadvance();
40
+ i0.ɵɵpropertyInterpolate2("for", "capabilityGeneric", ctx_r1.capabilityIndex, "Option", i_r4, "");
41
+ i0.ɵɵadvance();
42
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 13, "designer.fixtureCapabilityType." + capability_r3.capability.type), "");
43
+ i0.ɵɵadvance(3);
44
+ i0.ɵɵproperty("ngIf", capability_r3.capability.comment);
45
+ i0.ɵɵadvance();
46
+ i0.ɵɵtextInterpolate1(" ", capability_r3.capability.comment, "");
47
+ } }
48
+ function FixtureCapabilityChannelComponent_div_9_Template(rf, ctx) { if (rf & 1) {
49
+ i0.ɵɵelementStart(0, "div", 12);
50
+ i0.ɵɵtemplate(1, FixtureCapabilityChannelComponent_div_9_div_1_Template, 8, 15, "div", 13);
51
+ i0.ɵɵelementEnd();
52
+ } if (rf & 2) {
53
+ const ctx_r1 = i0.ɵɵnextContext();
54
+ i0.ɵɵadvance();
55
+ i0.ɵɵproperty("ngForOf", ctx_r1._channel.capabilities);
56
+ } }
57
+ function FixtureCapabilityChannelComponent_div_10_Template(rf, ctx) { if (rf & 1) {
58
+ const _r5 = i0.ɵɵgetCurrentView();
59
+ i0.ɵɵelementStart(0, "div", 17)(1, "div", 18)(2, "input", 19, 0);
60
+ i0.ɵɵlistener("ngModelChange", function FixtureCapabilityChannelComponent_div_10_Template_input_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setValue($event)); });
61
+ i0.ɵɵelementEnd()();
62
+ i0.ɵɵelementStart(4, "div", 20)(5, "mv-slider", 21, 1);
63
+ i0.ɵɵlistener("change", function FixtureCapabilityChannelComponent_div_10_Template_mv_slider_change_5_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setValue($event.newValue)); });
64
+ i0.ɵɵelementEnd()()();
65
+ } if (rf & 2) {
66
+ const ctx_r1 = i0.ɵɵnextContext();
67
+ i0.ɵɵclassProp("pl-0", (ctx_r1._channel.capabilities == null ? null : ctx_r1._channel.capabilities.length) > 1);
68
+ i0.ɵɵadvance(2);
69
+ i0.ɵɵproperty("ngModel", ctx_r1.templateValue);
70
+ i0.ɵɵadvance(3);
71
+ i0.ɵɵproperty("value", ctx_r1.templateValue)("orientation", "vertical")("reversed", true)("tooltip", "hide")("min", ctx_r1.rangeMin)("max", ctx_r1.rangeMax)("step", 1);
72
+ } }
73
+ export class FixtureCapabilityChannelComponent {
74
+ set channel(value) {
75
+ this._channel = value;
76
+ this.updateChannel();
77
+ }
78
+ constructor(presetService) {
79
+ this.presetService = presetService;
80
+ this.rangeMin = 0;
81
+ this.rangeMax = 0;
82
+ this.defaultValue = 0;
83
+ this.value = 0;
84
+ this.templateValue = 0;
85
+ }
86
+ updateChannel() {
87
+ this.selectedCapability = this._channel.capabilities[0];
88
+ this.value = this.presetService.getChannelValue(this._channel.name, this.profile.uuid);
89
+ this.calculateTemplateValue();
90
+ if (this.value >= 0) {
91
+ for (const capability of this._channel.capabilities) {
92
+ if (capability.capability.dmxRange.length > 0 && capability.centerValue === this.value) {
93
+ this.selectedCapability = capability;
94
+ break;
95
+ }
96
+ }
97
+ }
98
+ this.rangeMin = this.getRangeMin();
99
+ this.rangeMax = this.getRangeMax();
100
+ this.defaultValue = this.getDefaultValue();
101
+ }
102
+ capabilityHasRange() {
103
+ if (this._channel.capabilities && this._channel.capabilities.length === 1) {
104
+ return true;
105
+ }
106
+ if (this.selectedCapability && this.selectedCapability.capability.angleStart) {
107
+ return true;
108
+ }
109
+ return false;
110
+ }
111
+ getRangeMin() {
112
+ if (this.selectedCapability.capability.dmxRange.length > 0) {
113
+ return this.selectedCapability.capability.dmxRange[0];
114
+ }
115
+ return 0;
116
+ }
117
+ getRangeMax() {
118
+ if (this.selectedCapability.capability.dmxRange.length > 0) {
119
+ return this.selectedCapability.capability.dmxRange[1];
120
+ }
121
+ return this._channel.maxValue;
122
+ }
123
+ ngOnInit() { }
124
+ setValue(value, ignoreCapabilityRange = false) {
125
+ if (isNaN(value)) {
126
+ return;
127
+ }
128
+ if (!ignoreCapabilityRange && (value < this.getRangeMin() || value > this.getRangeMax())) {
129
+ return;
130
+ }
131
+ this.value = value;
132
+ this.calculateTemplateValue();
133
+ this.presetService.setChannelValue(this._channel.name, this.profile.uuid, value);
134
+ if (this.sliderValue) {
135
+ // update the value without change detector for performance reasons and only in a specific
136
+ // interval. each value set will trigger a layout/reflow event and slow down the performance
137
+ // TODO use the same technique in the dimmer/pan/tilt/color sliders
138
+ if (!this.valueSetTimer) {
139
+ this.valueSetTimer = setTimeout(() => {
140
+ this.sliderValue.nativeElement.value = this.value;
141
+ this.valueSetTimer = undefined;
142
+ }, 30);
143
+ }
144
+ }
145
+ this.presetService.previewLive();
146
+ }
147
+ calculateTemplateValue() {
148
+ this.templateValue = this.value ? this.value : this.getDefaultValue();
149
+ }
150
+ getDefaultValue() {
151
+ if (this._channel.defaultValue) {
152
+ return this._channel.defaultValue;
153
+ }
154
+ return 0;
155
+ }
156
+ changeActive(active) {
157
+ if (active) {
158
+ this.setValue(this.getDefaultValue(), true);
159
+ }
160
+ else {
161
+ this.presetService.deleteChannelValue(this._channel.name, this.profile.uuid);
162
+ this.selectedCapability = this._channel.capabilities[0];
163
+ this.value = undefined;
164
+ this.calculateTemplateValue();
165
+ }
166
+ this.presetService.previewLive();
167
+ }
168
+ capabilitySelected() {
169
+ // select the center value of the selected capability
170
+ if (this.capabilityHasRange) {
171
+ this.setValue(this.selectedCapability.capability.dmxRange[0], true);
172
+ }
173
+ else {
174
+ this.setValue(this.selectedCapability.centerValue, true);
175
+ }
176
+ }
177
+ static { this.ɵfac = function FixtureCapabilityChannelComponent_Factory(t) { return new (t || FixtureCapabilityChannelComponent)(i0.ɵɵdirectiveInject(i1.PresetService)); }; }
178
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixtureCapabilityChannelComponent, selectors: [["lib-app-fixture-capability-channel"]], viewQuery: function FixtureCapabilityChannelComponent_Query(rf, ctx) { if (rf & 1) {
179
+ i0.ɵɵviewQuery(_c0, 5);
180
+ } if (rf & 2) {
181
+ let _t;
182
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.sliderValue = _t.first);
183
+ } }, inputs: { profile: "profile", channel: "channel", capabilityIndex: "capabilityIndex" }, decls: 11, vars: 10, consts: [["sliderValue", ""], ["slider", ""], [1, "card", "border-secondary", "h-100", 2, "min-height", "200px"], [1, "card-header"], [1, "my-auto"], [1, "form-check"], ["type", "checkbox", 1, "form-check-input", 3, "ngModelChange", "id", "ngModel"], [1, "form-check-label", 3, "for"], [1, "card-body", "h-100", "d-flex", 2, "flex-direction", "column", "overflow", "hidden"], [1, "row", "h-100"], ["class", "col mr-3", "style", "overflow-y: auto", 4, "ngIf"], ["class", "col col-auto d-flex mx-auto", "style", "flex-direction: column", 3, "pl-0", 4, "ngIf"], [1, "col", "mr-3", 2, "overflow-y", "auto"], ["class", "form-check", 4, "ngFor", "ngForOf"], ["type", "radio", 1, "form-check-input", 3, "ngModelChange", "change", "ngModel", "name", "id", "value"], [1, "form-check-label", 2, "max-width", "200px", 3, "for"], [4, "ngIf"], [1, "col", "col-auto", "d-flex", "mx-auto", 2, "flex-direction", "column"], [1, "mb-4", "w-100", "d-flex"], ["type", "text", 1, "mx-auto", 2, "width", "45px", "height", "20px", "text-align", "center", "font-size", "12px", "font-family", "monospace", 3, "ngModelChange", "ngModel"], [1, "h-100", "w-100", "d-flex"], [1, "mx-auto", 2, "height", "100%", 3, "change", "value", "orientation", "reversed", "tooltip", "min", "max", "step"]], template: function FixtureCapabilityChannelComponent_Template(rf, ctx) { if (rf & 1) {
184
+ i0.ɵɵelementStart(0, "div", 2)(1, "div", 3)(2, "div", 4)(3, "div", 5)(4, "input", 6);
185
+ i0.ɵɵlistener("ngModelChange", function FixtureCapabilityChannelComponent_Template_input_ngModelChange_4_listener($event) { return ctx.changeActive($event); });
186
+ i0.ɵɵelementEnd();
187
+ i0.ɵɵelementStart(5, "label", 7);
188
+ i0.ɵɵtext(6);
189
+ i0.ɵɵelementEnd()()()();
190
+ i0.ɵɵelementStart(7, "div", 8)(8, "div", 9);
191
+ i0.ɵɵtemplate(9, FixtureCapabilityChannelComponent_div_9_Template, 2, 1, "div", 10)(10, FixtureCapabilityChannelComponent_div_10_Template, 7, 10, "div", 11);
192
+ i0.ɵɵelementEnd()()();
193
+ } if (rf & 2) {
194
+ i0.ɵɵclassProp("capability-deactivated", ctx.value == undefined);
195
+ i0.ɵɵadvance(4);
196
+ i0.ɵɵpropertyInterpolate1("id", "capabilityGeneric", ctx.capabilityIndex, "Active");
197
+ i0.ɵɵproperty("ngModel", ctx.value != undefined);
198
+ i0.ɵɵadvance();
199
+ i0.ɵɵpropertyInterpolate1("for", "capabilityGeneric", ctx.capabilityIndex, "Active");
200
+ i0.ɵɵadvance();
201
+ i0.ɵɵtextInterpolate1(" ", ctx._channel == null ? null : ctx._channel.name, " ");
202
+ i0.ɵɵadvance(3);
203
+ i0.ɵɵproperty("ngIf", (ctx._channel.capabilities == null ? null : ctx._channel.capabilities.length) > 1);
204
+ i0.ɵɵadvance();
205
+ i0.ɵɵproperty("ngIf", ctx.capabilityHasRange());
206
+ } }, dependencies: [i2.NgForOf, i2.NgIf, i3.DefaultValueAccessor, i3.CheckboxControlValueAccessor, i3.RadioControlValueAccessor, i3.NgControlStatus, i3.NgModel, i4.SliderComponent, i5.TranslatePipe], changeDetection: 0 }); }
207
+ }
208
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FixtureCapabilityChannelComponent, [{
209
+ type: Component,
210
+ args: [{ selector: 'lib-app-fixture-capability-channel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"value == undefined\" style=\"min-height: 200px\">\n <div class=\"card-header\">\n <div class=\"my-auto\">\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityGeneric{{ capabilityIndex }}Active\"\n [ngModel]=\"value != undefined\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityGeneric{{ capabilityIndex }}Active\">\n {{ _channel?.name }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"card-body h-100 d-flex\" style=\"flex-direction: column; overflow: hidden\">\n <div class=\"row h-100\">\n <!-- display all options, if there is more than one -->\n <div *ngIf=\"_channel.capabilities?.length > 1\" class=\"col mr-3\" style=\"overflow-y: auto\">\n <div *ngFor=\"let capability of _channel.capabilities; let i = index\" class=\"form-check\">\n <input\n [(ngModel)]=\"selectedCapability\"\n (change)=\"capabilitySelected()\"\n class=\"form-check-input\"\n type=\"radio\"\n name=\"capabilityGeneric{{ capabilityIndex }}Option\"\n id=\"capabilityGeneric{{ capabilityIndex }}Option{{ i }}\"\n [value]=\"capability\"\n />\n <label style=\"max-width: 200px\" class=\"form-check-label\" for=\"capabilityGeneric{{ capabilityIndex }}Option{{ i }}\">\n {{ 'designer.fixtureCapabilityType.' + capability.capability.type | translate\n }}<small><span *ngIf=\"capability.capability.comment\"> - </span> {{ capability.capability.comment }}</small>\n </label>\n </div>\n </div>\n\n <!-- display a slider to select the value for the currently selected capability, if it has a range -->\n <div\n *ngIf=\"capabilityHasRange()\"\n class=\"col col-auto d-flex mx-auto\"\n [class.pl-0]=\"_channel.capabilities?.length > 1\"\n style=\"flex-direction: column\"\n >\n <div class=\"mb-4 w-100 d-flex\">\n <input\n #sliderValue\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"templateValue\"\n (ngModelChange)=\"setValue($event)\"\n style=\"width: 45px; height: 20px; text-align: center; font-size: 12px; font-family: monospace\"\n />\n </div>\n\n <div class=\"h-100 w-100 d-flex\">\n <mv-slider\n #slider\n class=\"mx-auto\"\n [value]=\"templateValue\"\n (change)=\"setValue($event.newValue)\"\n [orientation]=\"'vertical'\"\n [reversed]=\"true\"\n style=\"height: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"rangeMin\"\n [max]=\"rangeMax\"\n [step]=\"1\"\n ></mv-slider>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
211
+ }], () => [{ type: i1.PresetService }], { sliderValue: [{
212
+ type: ViewChild,
213
+ args: ['sliderValue', { static: false }]
214
+ }], profile: [{
215
+ type: Input
216
+ }], channel: [{
217
+ type: Input
218
+ }], capabilityIndex: [{
219
+ type: Input
220
+ }] }); })();
221
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FixtureCapabilityChannelComponent, { className: "FixtureCapabilityChannelComponent" }); })();
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1jYXBhYmlsaXR5LWNoYW5uZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9maXh0dXJlL2ZpeHR1cmUtY2FwYWJpbGl0eS9maXh0dXJlLWNhcGFiaWxpdHktY2hhbm5lbC9maXh0dXJlLWNhcGFiaWxpdHktY2hhbm5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2ZpeHR1cmUvZml4dHVyZS1jYXBhYmlsaXR5L2ZpeHR1cmUtY2FwYWJpbGl0eS1jaGFubmVsL2ZpeHR1cmUtY2FwYWJpbGl0eS1jaGFubmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7OztJQzhCNUMsNEJBQTRDO0lBQUMsbUJBQUU7SUFBQSxpQkFBTzs7OztJQVhqRSxBQURGLDhCQUF3RixnQkFTcEY7SUFQQSw0VUFBZ0M7SUFDaEMscU1BQVUsMkJBQW9CLEtBQUM7SUFGakMsaUJBUUU7SUFDRixpQ0FBbUg7SUFDakgsWUFDRTs7SUFBQSw2QkFBTztJQUFBLGlHQUE0QztJQUFXLFlBQW1DO0lBRXZHLEFBREUsQUFEcUcsaUJBQVEsRUFDckcsRUFDSjs7Ozs7SUFSRixjQUFtRDtJQUFuRCx3RkFBbUQ7SUFDbkQsZ0dBQXdEO0lBTHhELHlEQUFnQztJQU1oQyxxQ0FBb0I7SUFFbUMs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QUFPO2tCQUROLEtBQUs7WUFJRixPQUFPO2tCQURWLEtBQUs7WUFPTixlQUFlO2tCQURkLEtBQUs7O2tGQXZCSyxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jYWNoZWQtZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmVDaGFubmVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlLWNoYW5uZWwnO1xuaW1wb3J0IHsgRml4dHVyZVByb2ZpbGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZml4dHVyZS1wcm9maWxlJztcbmltcG9ydCB7IFByZXNldFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVzZXQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hcHAtZml4dHVyZS1jYXBhYmlsaXR5LWNoYW5uZWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZml4dHVyZS1jYXBhYmlsaXR5LWNoYW5uZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maXh0dXJlLWNhcGFiaWxpdHktY2hhbm5lbC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBGaXh0dXJlQ2FwYWJpbGl0eUNoYW5uZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAVmlld0NoaWxkKCdzbGlkZXJWYWx1ZScsIHsgc3RhdGljOiBmYWxzZSB9KSBzbGlkZXJWYWx1ZTogRWxlbWVudFJlZjtcblxuICBzZWxlY3RlZENhcGFiaWxpdHk6IENhY2hlZEZpeHR1cmVDYXBhYmlsaXR5O1xuICBfY2hhbm5lbDogQ2FjaGVkRml4dHVyZUNoYW5uZWw7XG5cbiAgcmFuZ2VNaW4gPSAwO1xuICByYW5nZU1heCA9IDA7XG4gIGRlZmF1bHRWYWx1ZSA9IDA7XG4gIHZhbHVlID0gMDtcbiAgdGVtcGxhdGVWYWx1ZSA9IDA7XG5cbiAgdmFsdWVTZXRUaW1lcjogYW55O1xuXG4gIEBJbnB1dCgpXG4gIHByb2ZpbGU6IEZpeHR1cmVQcm9maWxlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjaGFubmVsKHZhbHVlOiBDYWNoZWRGaXh0dXJlQ2hhbm5lbCkge1xuICAgIHRoaXMuX2NoYW5uZWwgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUNoYW5uZWwoKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGNhcGFiaWxpdHlJbmRleDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJlc2V0U2VydmljZTogUHJlc2V0U2VydmljZSkge31cblxuICBwcml2YXRlIHVwZGF0ZUNoYW5uZWwoKSB7XG4gICAgdGhpcy5zZWxlY3RlZENhcGFiaWxpdHkgPSB0aGlzLl9jaGFubmVsLmNhcGFiaWxpdGllc1swXTtcblxuICAgIHRoaXMudmFsdWUgPSB0aGlzLnByZXNldFNlcnZpY2UuZ2V0Q2hhbm5lbFZhbHVlKHRoaXMuX2NoYW5uZWwubmFtZSwgdGhpcy5wcm9maWxlLnV1aWQpO1xuICAgIHRoaXMuY2FsY3VsYXRlVGVtcGxhdGVWYWx1ZSgpO1xuXG4gICAgaWYgKHRoaXMudmFsdWUgPj0gMCkge1xuICAgICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIHRoaXMuX2NoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgIGlmIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2UubGVuZ3RoID4gMCAmJiBjYXBhYmlsaXR5LmNlbnRlclZhbHVlID09PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENhcGFiaWxpdHkgPSBjYXBhYmlsaXR5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yYW5nZU1pbiA9IHRoaXMuZ2V0UmFuZ2VNaW4oKTtcbiAgICB0aGlzLnJhbmdlTWF4ID0gdGhpcy5nZXRSYW5nZU1heCgpO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoKTtcbiAgfVxuXG4gIGNhcGFiaWxpdHlIYXNSYW5nZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbC5jYXBhYmlsaXRpZXMgJiYgdGhpcy5fY2hhbm5lbC5jYXBhYmlsaXRpZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZENhcGFiaWxpdHkgJiYgdGhpcy5zZWxlY3RlZENhcGFiaWxpdHkuY2FwYWJpbGl0eS5hbmdsZVN0YXJ0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldFJhbmdlTWluKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2UubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBwcml2YXRlIGdldFJhbmdlTWF4KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2UubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWwubWF4VmFsdWU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgc2V0VmFsdWUodmFsdWU6IGFueSwgaWdub3JlQ2FwYWJpbGl0eVJhbmdlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFpZ25vcmVDYXBhYmlsaXR5UmFuZ2UgJiYgKHZhbHVlIDwgdGhpcy5nZXRSYW5nZU1pbigpIHx8IHZhbHVlID4gdGhpcy5nZXRSYW5nZU1heCgpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNhbGN1bGF0ZVRlbXBsYXRlVmFsdWUoKTtcblxuICAgIHRoaXMucHJlc2V0U2VydmljZS5zZXRDaGFubmVsVmFsdWUodGhpcy5fY2hhbm5lbC5uYW1lLCB0aGlzLnByb2ZpbGUudXVpZCwgdmFsdWUpO1xuICAgIGlmICh0aGlzLnNsaWRlclZhbHVlKSB7XG4gICAgICAvLyB1cGRhdGUgdGhlIHZhbHVlIHdpdGhvdXQgY2hhbmdlIGRldGVjdG9yIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIGFuZCBvbmx5IGluIGEgc3BlY2lmaWNcbiAgICAgIC8vIGludGVydmFsLiBlYWNoIHZhbHVlIHNldCB3aWxsIHRyaWdnZXIgYSBsYXlvdXQvcmVmbG93IGV2ZW50IGFuZCBzbG93IGRvd24gdGhlIHBlcmZvcm1hbmNlXG4gICAgICAvLyBUT0RPIHVzZSB0aGUgc2FtZSB0ZWNobmlxdWUgaW4gdGhlIGRpbW1lci9wYW4vdGlsdC9jb2xvciBzbGlkZXJzXG4gICAgICBpZiAoIXRoaXMudmFsdWVTZXRUaW1lcikge1xuICAgICAgICB0aGlzLnZhbHVlU2V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNsaWRlclZhbHVlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgIHRoaXMudmFsdWVTZXRUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSwgMzApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByZXNldFNlcnZpY2UucHJldmlld0xpdmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlVGVtcGxhdGVWYWx1ZSgpIHtcbiAgICB0aGlzLnRlbXBsYXRlVmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRWYWx1ZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLl9jaGFubmVsLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NoYW5uZWwuZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY2hhbmdlQWN0aXZlKGFjdGl2ZTogYm9vbGVhbikge1xuICAgIGlmIChhY3RpdmUpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5nZXREZWZhdWx0VmFsdWUoKSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJlc2V0U2VydmljZS5kZWxldGVDaGFubmVsVmFsdWUodGhpcy5fY2hhbm5lbC5uYW1lLCB0aGlzLnByb2ZpbGUudXVpZCk7XG4gICAgICB0aGlzLnNlbGVjdGVkQ2FwYWJpbGl0eSA9IHRoaXMuX2NoYW5uZWwuY2FwYWJpbGl0aWVzWzBdO1xuICAgICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY2FsY3VsYXRlVGVtcGxhdGVWYWx1ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByZXNldFNlcnZpY2UucHJldmlld0xpdmUoKTtcbiAgfVxuXG4gIGNhcGFiaWxpdHlTZWxlY3RlZCgpIHtcbiAgICAvLyBzZWxlY3QgdGhlIGNlbnRlciB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgY2FwYWJpbGl0eVxuICAgIGlmICh0aGlzLmNhcGFiaWxpdHlIYXNSYW5nZSkge1xuICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzBdLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkQ2FwYWJpbGl0eS5jZW50ZXJWYWx1ZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZCBib3JkZXItc2Vjb25kYXJ5IGgtMTAwXCIgW2NsYXNzLmNhcGFiaWxpdHktZGVhY3RpdmF0ZWRdPVwidmFsdWUgPT0gdW5kZWZpbmVkXCIgc3R5bGU9XCJtaW4taGVpZ2h0OiAyMDBweFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgIGlkPVwiY2FwYWJpbGl0eUdlbmVyaWN7eyBjYXBhYmlsaXR5SW5kZXggfX1BY3RpdmVcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInZhbHVlICE9IHVuZGVmaW5lZFwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQWN0aXZlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY2FwYWJpbGl0eUdlbmVyaWN7eyBjYXBhYmlsaXR5SW5kZXggfX1BY3RpdmVcIj5cbiAgICAgICAgICB7eyBfY2hhbm5lbD8ubmFtZSB9fVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgaC0xMDAgZC1mbGV4XCIgc3R5bGU9XCJmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBvdmVyZmxvdzogaGlkZGVuXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBoLTEwMFwiPlxuICAgICAgPCEtLSBkaXNwbGF5IGFsbCBvcHRpb25zLCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cIl9jaGFubmVsLmNhcGFiaWxpdGllcz8ubGVuZ3RoID4gMVwiIGNsYXNzPVwiY29sIG1yLTNcIiBzdHlsZT1cIm92ZXJmbG93LXk6IGF1dG9cIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2FwYWJpbGl0eSBvZiBfY2hhbm5lbC5jYXBhYmlsaXRpZXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDYXBhYmlsaXR5XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiY2FwYWJpbGl0eVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBuYW1lPVwiY2FwYWJpbGl0eUdlbmVyaWN7eyBjYXBhYmlsaXR5SW5kZXggfX1PcHRpb25cIlxuICAgICAgICAgICAgaWQ9XCJjYXBhYmlsaXR5R2VuZXJpY3t7IGNhcGFiaWxpdHlJbmRleCB9fU9wdGlvbnt7IGkgfX1cIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImNhcGFiaWxpdHlcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGxhYmVsIHN0eWxlPVwibWF4LXdpZHRoOiAyMDBweFwiIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImNhcGFiaWxpdHlHZW5lcmlje3sgY2FwYWJpbGl0eUluZGV4IH19T3B0aW9ue3sgaSB9fVwiPlxuICAgICAgICAgICAge3sgJ2Rlc2lnbmVyLmZpeHR1cmVDYXBhYmlsaXR5VHlwZS4nICsgY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnR5cGUgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19PHNtYWxsPjxzcGFuICpuZ0lmPVwiY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmNvbW1lbnRcIj4gLSA8L3NwYW4+IHt7IGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb21tZW50IH19PC9zbWFsbD5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIGRpc3BsYXkgYSBzbGlkZXIgdG8gc2VsZWN0IHRoZSB2YWx1ZSBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjYXBhYmlsaXR5LCBpZiBpdCBoYXMgYSByYW5nZSAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJjYXBhYmlsaXR5SGFzUmFuZ2UoKVwiXG4gICAgICAgIGNsYXNzPVwiY29sIGNvbC1hdXRvIGQtZmxleCBteC1hdXRvXCJcbiAgICAgICAgW2NsYXNzLnBsLTBdPVwiX2NoYW5uZWwuY2FwYWJpbGl0aWVzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgc3R5bGU9XCJmbGV4LWRpcmVjdGlvbjogY29sdW1uXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgdy0xMDAgZC1mbGV4XCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjc2xpZGVyVmFsdWVcbiAgICAgICAgICAgIGNsYXNzPVwibXgtYXV0b1wiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJ0ZW1wbGF0ZVZhbHVlXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNDVweDsgaGVpZ2h0OiAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwIHctMTAwIGQtZmxleFwiPlxuICAgICAgICAgIDxtdi1zbGlkZXJcbiAgICAgICAgICAgICNzbGlkZXJcbiAgICAgICAgICAgIGNsYXNzPVwibXgtYXV0b1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwidGVtcGxhdGVWYWx1ZVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlKCRldmVudC5uZXdWYWx1ZSlcIlxuICAgICAgICAgICAgW29yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIlxuICAgICAgICAgICAgW3JldmVyc2VkXT1cInRydWVcIlxuICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIlxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ2hpZGUnXCJcbiAgICAgICAgICAgIFttaW5dPVwicmFuZ2VNaW5cIlxuICAgICAgICAgICAgW21heF09XCJyYW5nZU1heFwiXG4gICAgICAgICAgICBbc3RlcF09XCIxXCJcbiAgICAgICAgICA+PC9tdi1zbGlkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=