@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,147 @@
1
+ import { ChangeDetectorRef, Component } from '@angular/core';
2
+ import { FixtureCapabilityColor, FixtureCapabilityType } from '../../../models/fixture-capability';
3
+ import { FixtureService } from '../../../services/fixture.service';
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 "../../../services/fixture.service";
8
+ import * as i3 from "@angular/forms";
9
+ import * as i4 from "@ngx-translate/core";
10
+ export class FixtureCapabilityColorComponent {
11
+ constructor(presetService, fixtureService, changeDetectorRef) {
12
+ this.presetService = presetService;
13
+ this.fixtureService = fixtureService;
14
+ this.changeDetectorRef = changeDetectorRef;
15
+ this.color = '#ffffff';
16
+ this.active = false;
17
+ this.colorPickerMounted = false;
18
+ // avoid internal updating events
19
+ this.updatingColor = false;
20
+ this.updateSubscription = this.presetService.previewSelectionChanged.subscribe(() => {
21
+ this.update();
22
+ this.changeDetectorRef.detectChanges();
23
+ });
24
+ this.update();
25
+ }
26
+ update() {
27
+ let red;
28
+ let green;
29
+ let blue;
30
+ let capabilityValue;
31
+ capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Red);
32
+ if (capabilityValue) {
33
+ red = 255 * capabilityValue.valuePercentage;
34
+ }
35
+ capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Green);
36
+ if (capabilityValue) {
37
+ green = 255 * capabilityValue.valuePercentage;
38
+ }
39
+ capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Blue);
40
+ if (capabilityValue) {
41
+ blue = 255 * capabilityValue.valuePercentage;
42
+ }
43
+ if (red !== undefined && green !== undefined && blue !== undefined) {
44
+ this.active = true;
45
+ }
46
+ else {
47
+ this.active = false;
48
+ red = 255;
49
+ green = 255;
50
+ blue = 255;
51
+ }
52
+ this.color = this.fixtureService.rgbToHex(red, green, blue);
53
+ this.setPickerColor(red, green, blue);
54
+ }
55
+ setPickerColor(red, green, blue) {
56
+ this.updatingColor = true;
57
+ if (this.colorPicker) {
58
+ this.colorPicker.color.rgb = { r: red, g: green, b: blue };
59
+ }
60
+ this.updatingColor = false;
61
+ }
62
+ ngOnDestroy() {
63
+ this.updateSubscription.unsubscribe();
64
+ }
65
+ ngOnInit() {
66
+ this.colorPicker = new iro.ColorPicker('#color-picker-container', {
67
+ width: 180,
68
+ color: this.color,
69
+ borderWidth: 1,
70
+ borderColor: '#ffffff',
71
+ sliderMargin: 20,
72
+ });
73
+ this.colorPicker.on('color:change', this.changeColor.bind(this));
74
+ // mounted may be called, before this callback has been added. use input:start therefore
75
+ this.colorPicker.on('input:start', this.mount.bind(this));
76
+ }
77
+ mount() {
78
+ this.colorPickerMounted = true;
79
+ }
80
+ updateFixtureColor(color) {
81
+ if (this.presetService.selectedPreset) {
82
+ if (color) {
83
+ this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.ColorIntensity, color.rgb.r / 255, undefined, FixtureCapabilityColor.Red);
84
+ this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.ColorIntensity, color.rgb.g / 255, undefined, FixtureCapabilityColor.Green);
85
+ this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.ColorIntensity, color.rgb.b / 255, undefined, FixtureCapabilityColor.Blue);
86
+ }
87
+ else {
88
+ this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Red);
89
+ this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Green);
90
+ this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Blue);
91
+ }
92
+ this.changeDetectorRef.detectChanges();
93
+ this.presetService.fixtureColorChanged.next();
94
+ this.presetService.previewLive();
95
+ }
96
+ }
97
+ changeActive(active) {
98
+ this.active = active;
99
+ if (active) {
100
+ this.updateFixtureColor(this.colorPicker.color);
101
+ }
102
+ else {
103
+ this.updateFixtureColor(undefined);
104
+ this.setPickerColor(255, 255, 255);
105
+ this.color = '#ffffff';
106
+ }
107
+ this.presetService.previewLive();
108
+ }
109
+ changeColor(color) {
110
+ if (!this.colorPickerMounted || this.updatingColor) {
111
+ return;
112
+ }
113
+ this.active = true;
114
+ this.color = color.hexString;
115
+ this.updateFixtureColor(color);
116
+ }
117
+ static { this.ɵfac = function FixtureCapabilityColorComponent_Factory(t) { return new (t || FixtureCapabilityColorComponent)(i0.ɵɵdirectiveInject(i1.PresetService), i0.ɵɵdirectiveInject(i2.FixtureService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
118
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixtureCapabilityColorComponent, selectors: [["lib-app-fixture-capability-color"]], decls: 12, vars: 7, consts: [[1, "card", "border-secondary", "h-100"], [1, "card-header"], [1, "my-auto", 2, "float", "left"], [1, "form-check"], ["type", "checkbox", "id", "capabilityColorActive", 1, "form-check-input", 3, "ngModelChange", "ngModel"], ["for", "capabilityColorActive", 1, "form-check-label"], [1, "pull-right"], ["type", "text", 2, "width", "58px", "text-align", "center", "font-size", "12px", "font-family", "monospace", 3, "ngModelChange", "ngModel"], [1, "card-body", "h-100"], ["id", "color-picker-container"]], template: function FixtureCapabilityColorComponent_Template(rf, ctx) { if (rf & 1) {
119
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "input", 4);
120
+ i0.ɵɵlistener("ngModelChange", function FixtureCapabilityColorComponent_Template_input_ngModelChange_4_listener($event) { return ctx.changeActive($event); });
121
+ i0.ɵɵelementEnd();
122
+ i0.ɵɵelementStart(5, "label", 5);
123
+ i0.ɵɵtext(6);
124
+ i0.ɵɵpipe(7, "translate");
125
+ i0.ɵɵelementEnd()()();
126
+ i0.ɵɵelementStart(8, "div", 6)(9, "input", 7);
127
+ i0.ɵɵtwoWayListener("ngModelChange", function FixtureCapabilityColorComponent_Template_input_ngModelChange_9_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.color, $event) || (ctx.color = $event); return $event; });
128
+ i0.ɵɵelementEnd()()();
129
+ i0.ɵɵelementStart(10, "div", 8);
130
+ i0.ɵɵelement(11, "div", 9);
131
+ i0.ɵɵelementEnd()();
132
+ } if (rf & 2) {
133
+ i0.ɵɵclassProp("capability-deactivated", !ctx.active);
134
+ i0.ɵɵadvance(4);
135
+ i0.ɵɵproperty("ngModel", ctx.active);
136
+ i0.ɵɵadvance(2);
137
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(7, 5, "designer.fixture.capability-color"));
138
+ i0.ɵɵadvance(3);
139
+ i0.ɵɵtwoWayProperty("ngModel", ctx.color);
140
+ } }, dependencies: [i3.DefaultValueAccessor, i3.CheckboxControlValueAccessor, i3.NgControlStatus, i3.NgModel, i4.TranslatePipe] }); }
141
+ }
142
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FixtureCapabilityColorComponent, [{
143
+ type: Component,
144
+ args: [{ selector: 'lib-app-fixture-capability-color', template: "<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"!active\">\n <div class=\"card-header\">\n <div class=\"my-auto\" style=\"float: left\">\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityColorActive\"\n [ngModel]=\"active\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityColorActive\">{{ 'designer.fixture.capability-color' | translate }}</label>\n </div>\n </div>\n <div class=\"pull-right\">\n <input type=\"text\" [(ngModel)]=\"color\" style=\"width: 58px; text-align: center; font-size: 12px; font-family: monospace\" />\n </div>\n </div>\n\n <div class=\"card-body h-100\">\n <div id=\"color-picker-container\"></div>\n </div>\n</div>\n" }]
145
+ }], () => [{ type: i1.PresetService }, { type: i2.FixtureService }, { type: i0.ChangeDetectorRef }], null); })();
146
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FixtureCapabilityColorComponent, { className: "FixtureCapabilityColorComponent" }); })();
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1jYXBhYmlsaXR5LWNvbG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvZml4dHVyZS9maXh0dXJlLWNhcGFiaWxpdHkvZml4dHVyZS1jYXBhYmlsaXR5LWNvbG9yL2ZpeHR1cmUtY2FwYWJpbGl0eS1jb2xvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2ZpeHR1cmUvZml4dHVyZS1jYXBhYmlsaXR5L2ZpeHR1cmUtY2FwYWJpbGl0eS1jb2xvci9maXh0dXJlLWNhcGFiaWxpdHktY29sb3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbkcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7O0FBU2pFLE1BQU0sT0FBTywrQkFBK0I7SUFXMUMsWUFBb0IsYUFBNEIsRUFBVSxjQUE4QixFQUFVLGlCQUFvQztRQUFsSCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFWdEksVUFBSyxHQUFHLFNBQVMsQ0FBQztRQUVsQixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ1AsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLGlDQUFpQztRQUN6QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUs1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU8sTUFBTTtRQUNaLElBQUksR0FBVyxDQUFDO1FBQ2hCLElBQUksS0FBYSxDQUFDO1FBQ2xCLElBQUksSUFBWSxDQUFDO1FBQ2pCLElBQUksZUFBdUMsQ0FBQztRQUM1QyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQ2pDLHFCQUFxQixDQUFDLGNBQWMsRUFDcEMsc0JBQXNCLENBQUMsR0FBRyxDQUMzQixDQUFDO1FBQ0YsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixHQUFHLEdBQUcsR0FBRyxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUM7UUFDOUMsQ0FBQztRQUNELGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFDakMscUJBQXFCLENBQUMsY0FBYyxFQUNwQyxzQkFBc0IsQ0FBQyxLQUFLLENBQzdCLENBQUM7UUFDRixJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLEtBQUssR0FBRyxHQUFHLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQ3JELElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUNqQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQ3BDLHNCQUFzQixDQUFDLElBQUksQ0FDNUIsQ0FBQztRQUNGLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsSUFBSSxHQUFHLEdBQUcsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDO1FBQy9DLENBQUM7UUFDRCxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ1YsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUNaLElBQUksR0FBRyxHQUFHLENBQUM7UUFDYixDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sY0FBYyxDQUFDLEdBQVcsRUFBRSxLQUFhLEVBQUUsSUFBWTtRQUM3RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzdELENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLHlCQUF5QixFQUFFO1lBQ2hFLEtBQUssRUFBRSxHQUFHO1lBQ1YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFdBQVcsRUFBRSxDQUFDO1lBQ2QsV0FBVyxFQUFFLFNBQVM7WUFDdEIsWUFBWSxFQUFFLEVBQUU7U0FDakIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFakUsd0ZBQXdGO1FBQ3hGLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsS0FBVTtRQUNuQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFDakMscUJBQXFCLENBQUMsY0FBYyxFQUNwQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQ2pCLFNBQVMsRUFDVCxzQkFBc0IsQ0FBQyxHQUFHLENBQzNCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQ2pDLHFCQUFxQixDQUFDLGNBQWMsRUFDcEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUNqQixTQUFTLEVBQ1Qsc0JBQXNCLENBQUMsS0FBSyxDQUM3QixDQUFDO2dCQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUNqQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQ3BDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFDakIsU0FBUyxFQUNULHNCQUFzQixDQUFDLElBQUksQ0FDNUIsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFDakMscUJBQXFCLENBQUMsY0FBYyxFQUNwQyxzQkFBc0IsQ0FBQyxHQUFHLENBQzNCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQ2pDLHFCQUFxQixDQUFDLGNBQWMsRUFDcEMsc0JBQXNCLENBQUMsS0FBSyxDQUM3QixDQUFDO2dCQUNGLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUNqQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQ3BDLHNCQUFzQixDQUFDLElBQUksQ0FDNUIsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWU7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Z0dBL0pVLCtCQUErQjtvRUFBL0IsK0JBQStCO1lDVnBDLEFBREYsQUFERixBQURGLEFBREYsOEJBQWtGLGFBQ3ZELGFBQ2tCLGFBQ2YsZUFPcEI7WUFEQSxpSUFBaUIsd0JBQW9CLElBQUM7WUFMeEMsaUJBTUU7WUFDRixnQ0FBNEQ7WUFBQSxZQUFxRDs7WUFFckgsQUFERSxBQURtSCxpQkFBUSxFQUNySCxFQUNGO1lBRUosQUFERiw4QkFBd0IsZUFDb0c7WUFBdkcsbU5BQW1CO1lBRTFDLEFBREUsQUFERSxpQkFBMEgsRUFDdEgsRUFDRjtZQUVOLCtCQUE2QjtZQUMzQiwwQkFBdUM7WUFFM0MsQUFERSxpQkFBTSxFQUNGOztZQXRCbUMscURBQXdDO1lBUXZFLGVBQWtCO1lBQWxCLG9DQUFrQjtZQUd3QyxlQUFxRDtZQUFyRCwrRUFBcUQ7WUFJaEcsZUFBbUI7WUFBbkIseUNBQW1COzs7aUZERC9CLCtCQUErQjtjQUwzQyxTQUFTOzJCQUNFLGtDQUFrQzs7a0ZBSWpDLCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlWYWx1ZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHktdmFsdWUnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlc2V0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ByZXNldC5zZXJ2aWNlJztcblxuZGVjbGFyZSB2YXIgaXJvOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hcHAtZml4dHVyZS1jYXBhYmlsaXR5LWNvbG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpeHR1cmUtY2FwYWJpbGl0eS1jb2xvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpeHR1cmUtY2FwYWJpbGl0eS1jb2xvci5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGNvbG9yID0gJyNmZmZmZmYnO1xuICBjb2xvclBpY2tlcjogYW55O1xuICBhY3RpdmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjb2xvclBpY2tlck1vdW50ZWQgPSBmYWxzZTtcblxuICAvLyBhdm9pZCBpbnRlcm5hbCB1cGRhdGluZyBldmVudHNcbiAgcHJpdmF0ZSB1cGRhdGluZ0NvbG9yID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHByZXNldFNlcnZpY2U6IFByZXNldFNlcnZpY2UsIHByaXZhdGUgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMudXBkYXRlU3Vic2NyaXB0aW9uID0gdGhpcy5wcmVzZXRTZXJ2aWNlLnByZXZpZXdTZWxlY3Rpb25DaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlKCkge1xuICAgIGxldCByZWQ6IG51bWJlcjtcbiAgICBsZXQgZ3JlZW46IG51bWJlcjtcbiAgICBsZXQgYmx1ZTogbnVtYmVyO1xuICAgIGxldCBjYXBhYmlsaXR5VmFsdWU6IEZpeHR1cmVDYXBhYmlsaXR5VmFsdWU7XG4gICAgY2FwYWJpbGl0eVZhbHVlID0gdGhpcy5wcmVzZXRTZXJ2aWNlLmdldENhcGFiaWxpdHlWYWx1ZShcbiAgICAgIHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCxcbiAgICAgIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSxcbiAgICAgIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuUmVkXG4gICAgKTtcbiAgICBpZiAoY2FwYWJpbGl0eVZhbHVlKSB7XG4gICAgICByZWQgPSAyNTUgKiBjYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlO1xuICAgIH1cbiAgICBjYXBhYmlsaXR5VmFsdWUgPSB0aGlzLnByZXNldFNlcnZpY2UuZ2V0Q2FwYWJpbGl0eVZhbHVlKFxuICAgICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0LFxuICAgICAgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5LFxuICAgICAgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5HcmVlblxuICAgICk7XG4gICAgaWYgKGNhcGFiaWxpdHlWYWx1ZSkge1xuICAgICAgZ3JlZW4gPSAyNTUgKiBjYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlO1xuICAgIH1cbiAgICBjYXBhYmlsaXR5VmFsdWUgPSB0aGlzLnByZXNldFNlcnZpY2UuZ2V0Q2FwYWJpbGl0eVZhbHVlKFxuICAgICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0LFxuICAgICAgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5LFxuICAgICAgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5CbHVlXG4gICAgKTtcbiAgICBpZiAoY2FwYWJpbGl0eVZhbHVlKSB7XG4gICAgICBibHVlID0gMjU1ICogY2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICB9XG4gICAgaWYgKHJlZCAhPT0gdW5kZWZpbmVkICYmIGdyZWVuICE9PSB1bmRlZmluZWQgJiYgYmx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICByZWQgPSAyNTU7XG4gICAgICBncmVlbiA9IDI1NTtcbiAgICAgIGJsdWUgPSAyNTU7XG4gICAgfVxuICAgIHRoaXMuY29sb3IgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLnJnYlRvSGV4KHJlZCwgZ3JlZW4sIGJsdWUpO1xuICAgIHRoaXMuc2V0UGlja2VyQ29sb3IocmVkLCBncmVlbiwgYmx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldFBpY2tlckNvbG9yKHJlZDogbnVtYmVyLCBncmVlbjogbnVtYmVyLCBibHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnVwZGF0aW5nQ29sb3IgPSB0cnVlO1xuICAgIGlmICh0aGlzLmNvbG9yUGlja2VyKSB7XG4gICAgICB0aGlzLmNvbG9yUGlja2VyLmNvbG9yLnJnYiA9IHsgcjogcmVkLCBnOiBncmVlbiwgYjogYmx1ZSB9O1xuICAgIH1cbiAgICB0aGlzLnVwZGF0aW5nQ29sb3IgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudXBkYXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbG9yUGlja2VyID0gbmV3IGlyby5Db2xvclBpY2tlcignI2NvbG9yLXBpY2tlci1jb250YWluZXInLCB7XG4gICAgICB3aWR0aDogMTgwLFxuICAgICAgY29sb3I6IHRoaXMuY29sb3IsXG4gICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICBzbGlkZXJNYXJnaW46IDIwLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlci5vbignY29sb3I6Y2hhbmdlJywgdGhpcy5jaGFuZ2VDb2xvci5iaW5kKHRoaXMpKTtcblxuICAgIC8vIG1vdW50ZWQgbWF5IGJlIGNhbGxlZCwgYmVmb3JlIHRoaXMgY2FsbGJhY2sgaGFzIGJlZW4gYWRkZWQuIHVzZSBpbnB1dDpzdGFydCB0aGVyZWZvcmVcbiAgICB0aGlzLmNvbG9yUGlja2VyLm9uKCdpbnB1dDpzdGFydCcsIHRoaXMubW91bnQuYmluZCh0aGlzKSk7XG4gIH1cblxuICBtb3VudCgpIHtcbiAgICB0aGlzLmNvbG9yUGlja2VyTW91bnRlZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpeHR1cmVDb2xvcihjb2xvcjogYW55KSB7XG4gICAgaWYgKHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCkge1xuICAgICAgaWYgKGNvbG9yKSB7XG4gICAgICAgIHRoaXMucHJlc2V0U2VydmljZS5zZXRDYXBhYmlsaXR5VmFsdWUoXG4gICAgICAgICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0LFxuICAgICAgICAgIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSxcbiAgICAgICAgICBjb2xvci5yZ2IuciAvIDI1NSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5SZWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnNldENhcGFiaWxpdHlWYWx1ZShcbiAgICAgICAgICB0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQsXG4gICAgICAgICAgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5LFxuICAgICAgICAgIGNvbG9yLnJnYi5nIC8gMjU1LFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLkdyZWVuXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucHJlc2V0U2VydmljZS5zZXRDYXBhYmlsaXR5VmFsdWUoXG4gICAgICAgICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0LFxuICAgICAgICAgIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSxcbiAgICAgICAgICBjb2xvci5yZ2IuYiAvIDI1NSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5CbHVlXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByZXNldFNlcnZpY2UuZGVsZXRlQ2FwYWJpbGl0eVZhbHVlKFxuICAgICAgICAgIHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCxcbiAgICAgICAgICBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHksXG4gICAgICAgICAgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5SZWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wcmVzZXRTZXJ2aWNlLmRlbGV0ZUNhcGFiaWxpdHlWYWx1ZShcbiAgICAgICAgICB0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQsXG4gICAgICAgICAgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5LFxuICAgICAgICAgIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuR3JlZW5cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wcmVzZXRTZXJ2aWNlLmRlbGV0ZUNhcGFiaWxpdHlWYWx1ZShcbiAgICAgICAgICB0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQsXG4gICAgICAgICAgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5LFxuICAgICAgICAgIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuQmx1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLnByZXNldFNlcnZpY2UuZml4dHVyZUNvbG9yQ2hhbmdlZC5uZXh0KCk7XG4gICAgICB0aGlzLnByZXNldFNlcnZpY2UucHJldmlld0xpdmUoKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VBY3RpdmUoYWN0aXZlOiBib29sZWFuKSB7XG4gICAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7XG5cbiAgICBpZiAoYWN0aXZlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZpeHR1cmVDb2xvcih0aGlzLmNvbG9yUGlja2VyLmNvbG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVGaXh0dXJlQ29sb3IodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuc2V0UGlja2VyQ29sb3IoMjU1LCAyNTUsIDI1NSk7XG4gICAgICB0aGlzLmNvbG9yID0gJyNmZmZmZmYnO1xuICAgIH1cbiAgICB0aGlzLnByZXNldFNlcnZpY2UucHJldmlld0xpdmUoKTtcbiAgfVxuXG4gIGNoYW5nZUNvbG9yKGNvbG9yOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuY29sb3JQaWNrZXJNb3VudGVkIHx8IHRoaXMudXBkYXRpbmdDb2xvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLmNvbG9yID0gY29sb3IuaGV4U3RyaW5nO1xuICAgIHRoaXMudXBkYXRlRml4dHVyZUNvbG9yKGNvbG9yKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyLXNlY29uZGFyeSBoLTEwMFwiIFtjbGFzcy5jYXBhYmlsaXR5LWRlYWN0aXZhdGVkXT1cIiFhY3RpdmVcIj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIiBzdHlsZT1cImZsb2F0OiBsZWZ0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgaWQ9XCJjYXBhYmlsaXR5Q29sb3JBY3RpdmVcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cImFjdGl2ZVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQWN0aXZlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY2FwYWJpbGl0eUNvbG9yQWN0aXZlXCI+e3sgJ2Rlc2lnbmVyLmZpeHR1cmUuY2FwYWJpbGl0eS1jb2xvcicgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiY29sb3JcIiBzdHlsZT1cIndpZHRoOiA1OHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZVwiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgaC0xMDBcIj5cbiAgICA8ZGl2IGlkPVwiY29sb3ItcGlja2VyLWNvbnRhaW5lclwiPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,213 @@
1
+ import { ChangeDetectorRef, Component, Input } from '@angular/core';
2
+ import { CachedFixtureChannel } from '../../../models/cached-fixture-channel';
3
+ import { FixtureCapabilityType } from '../../../models/fixture-capability';
4
+ import { FixtureProfile } from '../../../models/fixture-profile';
5
+ import { FixtureService } from '../../../services/fixture.service';
6
+ import { PresetService } from '../../../services/preset.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../../services/preset.service";
9
+ import * as i2 from "../../../services/fixture.service";
10
+ import * as i3 from "@angular/common";
11
+ import * as i4 from "@angular/forms";
12
+ import * as i5 from "@ngx-translate/core";
13
+ function FixtureCapabilityColorWheelComponent_div_9_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelementStart(0, "div");
15
+ i0.ɵɵtext(1);
16
+ i0.ɵɵelementEnd();
17
+ } if (rf & 2) {
18
+ const ctx_r0 = i0.ɵɵnextContext();
19
+ i0.ɵɵadvance();
20
+ i0.ɵɵtextInterpolate2("", ctx_r0._fixtureProfile.name, " - ", ctx_r0._channel.name, "");
21
+ } }
22
+ function FixtureCapabilityColorWheelComponent_div_10_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
23
+ const _r4 = i0.ɵɵgetCurrentView();
24
+ i0.ɵɵelementStart(0, "div", 13);
25
+ i0.ɵɵlistener("click", function FixtureCapabilityColorWheelComponent_div_10_div_1_div_1_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r4); const slot_r3 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.selectSlotNumber(slot_r3.capability.slotNumber)); });
26
+ i0.ɵɵelementEnd();
27
+ } }
28
+ function FixtureCapabilityColorWheelComponent_div_10_div_1_Template(rf, ctx) { if (rf & 1) {
29
+ const _r2 = i0.ɵɵgetCurrentView();
30
+ i0.ɵɵelementStart(0, "div", 11);
31
+ i0.ɵɵlistener("click", function FixtureCapabilityColorWheelComponent_div_10_div_1_Template_div_click_0_listener() { const slot_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.selectSlotNumber(slot_r3.capability.slotNumber)); });
32
+ i0.ɵɵtemplate(1, FixtureCapabilityColorWheelComponent_div_10_div_1_div_1_Template, 1, 0, "div", 12);
33
+ i0.ɵɵelementEnd();
34
+ } if (rf & 2) {
35
+ const slot_r3 = ctx.$implicit;
36
+ const ctx_r0 = i0.ɵɵnextContext(2);
37
+ i0.ɵɵclassProp("color-selected", ctx_r0.slotCapabilityIsSelected(slot_r3.capability.slotNumber));
38
+ i0.ɵɵproperty("ngStyle", ctx_r0.getCapabilityColorStyle(slot_r3));
39
+ i0.ɵɵadvance();
40
+ i0.ɵɵproperty("ngIf", ctx_r0.slotCapabilityIsSelected(slot_r3.capability.slotNumber));
41
+ } }
42
+ function FixtureCapabilityColorWheelComponent_div_10_Template(rf, ctx) { if (rf & 1) {
43
+ i0.ɵɵelementStart(0, "div", 9);
44
+ i0.ɵɵtemplate(1, FixtureCapabilityColorWheelComponent_div_10_div_1_Template, 2, 4, "div", 10);
45
+ i0.ɵɵelementEnd();
46
+ } if (rf & 2) {
47
+ const ctx_r0 = i0.ɵɵnextContext();
48
+ i0.ɵɵadvance();
49
+ i0.ɵɵproperty("ngForOf", ctx_r0.slotCapabilities);
50
+ } }
51
+ export class FixtureCapabilityColorWheelComponent {
52
+ set profile(value) {
53
+ this._fixtureProfile = value;
54
+ this.update();
55
+ }
56
+ set channel(value) {
57
+ this._channel = value;
58
+ this.update();
59
+ }
60
+ constructor(presetService, changeDetectorRef, fixtureService) {
61
+ this.presetService = presetService;
62
+ this.changeDetectorRef = changeDetectorRef;
63
+ this.fixtureService = fixtureService;
64
+ this.showContainer = false;
65
+ }
66
+ ngOnInit() {
67
+ this.colorChangeSubscription = this.presetService.fixtureColorChanged.subscribe(() => {
68
+ this.changeDetectorRef.detectChanges();
69
+ });
70
+ }
71
+ ngOnDestroy() {
72
+ this.colorChangeSubscription.unsubscribe();
73
+ }
74
+ update() {
75
+ if (this._fixtureProfile && this._channel) {
76
+ this.wheelName = undefined;
77
+ this.slotCapabilities = [];
78
+ // get the wheel name
79
+ for (const capability of this._channel.capabilities) {
80
+ if (capability.wheel) {
81
+ this.wheelName = capability.wheelName;
82
+ break;
83
+ }
84
+ }
85
+ if (!this.wheelName) {
86
+ this.wheelName = this._channel.name;
87
+ }
88
+ this.wheel = this.fixtureService.getWheelByName(this._fixtureProfile, this.wheelName);
89
+ // calculate all available slots
90
+ for (const capability of this._channel.capabilities) {
91
+ if (capability.capability.type === FixtureCapabilityType.WheelSlot) {
92
+ this.slotCapabilities.push(capability);
93
+ }
94
+ }
95
+ }
96
+ this.changeDetectorRef.detectChanges();
97
+ }
98
+ getCapabilityColorStyle(capability) {
99
+ let property = 'background-color';
100
+ let value = 'black';
101
+ let colors = [];
102
+ if (capability.wheelSlots) {
103
+ for (const slot of capability.wheelSlots) {
104
+ // calculate the color based on the color wheel slot
105
+ if (slot.colors.length > 0) {
106
+ colors = colors.concat(slot.colors);
107
+ }
108
+ }
109
+ }
110
+ if (colors.length > 1) {
111
+ // mixed colors -> gradient
112
+ let colorString;
113
+ for (const color of colors) {
114
+ if (colorString) {
115
+ colorString += ', ';
116
+ }
117
+ else {
118
+ colorString = '';
119
+ }
120
+ colorString += color;
121
+ }
122
+ property = 'background-image';
123
+ value = 'linear-gradient(to bottom right, ' + colorString + ')';
124
+ }
125
+ else if (colors.length === 1) {
126
+ value = colors[0];
127
+ }
128
+ else {
129
+ value = '#fff';
130
+ }
131
+ const style = {};
132
+ style[property] = value;
133
+ return style;
134
+ }
135
+ getCurrentSlotNumber() {
136
+ const capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.WheelSlot, undefined, this.wheelName, this._fixtureProfile.uuid);
137
+ if (capabilityValue) {
138
+ return capabilityValue.slotNumber;
139
+ }
140
+ return undefined;
141
+ }
142
+ slotCapabilityIsSelected(slotNumber) {
143
+ const selectedSlotNumber = this.getCurrentSlotNumber();
144
+ if (selectedSlotNumber >= 0) {
145
+ // a slot is selected
146
+ return selectedSlotNumber === slotNumber;
147
+ }
148
+ else {
149
+ // no slot is selected and the capability is inactive
150
+ // -> show the approx. color, if a color or a similar slot from a different wheel has been selected
151
+ const approximatedCapability = this.presetService.getApproximatedColorWheelCapability(this.presetService.selectedPreset, this._channel);
152
+ if (approximatedCapability) {
153
+ return slotNumber === approximatedCapability.capability.slotNumber;
154
+ }
155
+ else {
156
+ return false;
157
+ }
158
+ }
159
+ }
160
+ changeActive(active) {
161
+ if (active) {
162
+ this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.WheelSlot, undefined, 1, undefined, this.wheelName, this._fixtureProfile.uuid);
163
+ }
164
+ else {
165
+ this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.WheelSlot, undefined, this.wheelName, this._fixtureProfile.uuid);
166
+ }
167
+ this.presetService.previewLive();
168
+ }
169
+ selectSlotNumber(slotNumber) {
170
+ this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.WheelSlot, undefined, slotNumber, undefined, this.wheelName, this._fixtureProfile.uuid);
171
+ this.presetService.previewLive();
172
+ }
173
+ static { this.ɵfac = function FixtureCapabilityColorWheelComponent_Factory(t) { return new (t || FixtureCapabilityColorWheelComponent)(i0.ɵɵdirectiveInject(i1.PresetService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i2.FixtureService)); }; }
174
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixtureCapabilityColorWheelComponent, selectors: [["lib-app-fixture-capability-color-wheel"]], inputs: { profile: "profile", channel: "channel", wheelIndex: "wheelIndex", showContainer: "showContainer" }, decls: 11, vars: 12, consts: [[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"], [4, "ngIf"], ["class", "d-flex", "style", "max-width: 240px; flex-wrap: wrap", 4, "ngIf"], [1, "d-flex", 2, "max-width", "240px", "flex-wrap", "wrap"], ["class", "m-1 color", 3, "color-selected", "ngStyle", "click", 4, "ngFor", "ngForOf"], [1, "m-1", "color", 3, "click", "ngStyle"], ["class", "color-selected-inner", 3, "click", 4, "ngIf"], [1, "color-selected-inner", 3, "click"]], template: function FixtureCapabilityColorWheelComponent_Template(rf, ctx) { if (rf & 1) {
175
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "input", 4);
176
+ i0.ɵɵlistener("ngModelChange", function FixtureCapabilityColorWheelComponent_Template_input_ngModelChange_4_listener($event) { return ctx.changeActive($event); });
177
+ i0.ɵɵelementEnd();
178
+ i0.ɵɵelementStart(5, "label", 5);
179
+ i0.ɵɵtext(6);
180
+ i0.ɵɵpipe(7, "translate");
181
+ i0.ɵɵelementEnd()()()();
182
+ i0.ɵɵelementStart(8, "div", 6);
183
+ i0.ɵɵtemplate(9, FixtureCapabilityColorWheelComponent_div_9_Template, 2, 2, "div", 7)(10, FixtureCapabilityColorWheelComponent_div_10_Template, 2, 1, "div", 8);
184
+ i0.ɵɵelementEnd()();
185
+ } if (rf & 2) {
186
+ i0.ɵɵclassProp("capability-deactivated", ctx.getCurrentSlotNumber() == undefined);
187
+ i0.ɵɵadvance(4);
188
+ i0.ɵɵpropertyInterpolate1("id", "capabilityColorWheel", ctx.wheelIndex, "Active");
189
+ i0.ɵɵproperty("ngModel", ctx.getCurrentSlotNumber() != undefined);
190
+ i0.ɵɵadvance();
191
+ i0.ɵɵpropertyInterpolate1("for", "capabilityColorWheel", ctx.wheelIndex, "Active");
192
+ i0.ɵɵadvance();
193
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(7, 10, "designer.fixture.capability-color"), " ");
194
+ i0.ɵɵadvance(3);
195
+ i0.ɵɵproperty("ngIf", ctx.showContainer);
196
+ i0.ɵɵadvance();
197
+ i0.ɵɵproperty("ngIf", ctx.wheel);
198
+ } }, dependencies: [i3.NgForOf, i3.NgIf, i3.NgStyle, i4.CheckboxControlValueAccessor, i4.NgControlStatus, i4.NgModel, i5.TranslatePipe], styles: [".color[_ngcontent-%COMP%]{box-sizing:border-box;width:50px;height:50px;border:solid 1px #ced4da;cursor:pointer}.color-selected[_ngcontent-%COMP%]{border-width:3px;border-color:#fff}.color-selected-inner[_ngcontent-%COMP%]{border:solid 1px black;height:100%;width:100%}"] }); }
199
+ }
200
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FixtureCapabilityColorWheelComponent, [{
201
+ type: Component,
202
+ args: [{ selector: 'lib-app-fixture-capability-color-wheel', template: "<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"getCurrentSlotNumber() == 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=\"capabilityColorWheel{{ wheelIndex }}Active\"\n [ngModel]=\"getCurrentSlotNumber() != undefined\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityColorWheel{{ wheelIndex }}Active\">\n {{ 'designer.fixture.capability-color' | translate }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"card-body h-100\">\n <div *ngIf=\"showContainer\">{{ _fixtureProfile.name }} - {{ _channel.name }}</div>\n\n <div *ngIf=\"wheel\" class=\"d-flex\" style=\"max-width: 240px; flex-wrap: wrap\">\n <div\n *ngFor=\"let slot of slotCapabilities; let i = index\"\n (click)=\"selectSlotNumber(slot.capability.slotNumber)\"\n class=\"m-1 color\"\n [class.color-selected]=\"slotCapabilityIsSelected(slot.capability.slotNumber)\"\n [ngStyle]=\"getCapabilityColorStyle(slot)\"\n >\n <div\n *ngIf=\"slotCapabilityIsSelected(slot.capability.slotNumber)\"\n (click)=\"selectSlotNumber(slot.capability.slotNumber)\"\n class=\"color-selected-inner\"\n ></div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".color{box-sizing:border-box;width:50px;height:50px;border:solid 1px #ced4da;cursor:pointer}.color-selected{border-width:3px;border-color:#fff}.color-selected-inner{border:solid 1px black;height:100%;width:100%}\n"] }]
203
+ }], () => [{ type: i1.PresetService }, { type: i0.ChangeDetectorRef }, { type: i2.FixtureService }], { profile: [{
204
+ type: Input
205
+ }], channel: [{
206
+ type: Input
207
+ }], wheelIndex: [{
208
+ type: Input
209
+ }], showContainer: [{
210
+ type: Input
211
+ }] }); })();
212
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FixtureCapabilityColorWheelComponent, { className: "FixtureCapabilityColorWheelComponent" }); })();
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1jYXBhYmlsaXR5LWNvbG9yLXdoZWVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvZml4dHVyZS9maXh0dXJlLWNhcGFiaWxpdHkvZml4dHVyZS1jYXBhYmlsaXR5LWNvbG9yLXdoZWVsL2ZpeHR1cmUtY2FwYWJpbGl0eS1jb2xvci13aGVlbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2ZpeHR1cmUvZml4dHVyZS1jYXBhYmlsaXR5L2ZpeHR1cmUtY2FwYWJpbGl0eS1jb2xvci13aGVlbC9maXh0dXJlLWNhcGFiaWxpdHktY29sb3Itd2hlZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBR3ZGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7OztJQ1c3RCwyQkFBMkI7SUFBQSxZQUFnRDtJQUFBLGlCQUFNOzs7SUFBdEQsY0FBZ0Q7SUFBaEQsdUZBQWdEOzs7O0lBVXZFLCtCQUlDO0lBRkMseVBBQVMsc0RBQTRDLEtBQUM7SUFFdkQsaUJBQU07Ozs7SUFYVCwrQkFNQztJQUpDLCtOQUFTLHNEQUE0QyxLQUFDO0lBS3RELG1HQUlDO0lBQ0gsaUJBQU07Ozs7SUFSSixnR0FBNkU7SUFD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O2tGQXhCSyxvQ0FBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZUNhcGFiaWxpdHkgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUtY2FwYWJpbGl0eSc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlQ2hhbm5lbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jYWNoZWQtZml4dHVyZS1jaGFubmVsJztcbmltcG9ydCB7IEZpeHR1cmVDYXBhYmlsaXR5VHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgRml4dHVyZVByb2ZpbGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZml4dHVyZS1wcm9maWxlJztcbmltcG9ydCB7IEZpeHR1cmVXaGVlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maXh0dXJlLXdoZWVsJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXNldFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVzZXQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hcHAtZml4dHVyZS1jYXBhYmlsaXR5LWNvbG9yLXdoZWVsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpeHR1cmUtY2FwYWJpbGl0eS1jb2xvci13aGVlbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpeHR1cmUtY2FwYWJpbGl0eS1jb2xvci13aGVlbC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3JXaGVlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgX2ZpeHR1cmVQcm9maWxlOiBGaXh0dXJlUHJvZmlsZTtcbiAgX2NoYW5uZWw6IENhY2hlZEZpeHR1cmVDaGFubmVsO1xuICB3aGVlbE5hbWU6IHN0cmluZztcbiAgd2hlZWw6IEZpeHR1cmVXaGVlbDtcbiAgc2xvdENhcGFiaWxpdGllczogQ2FjaGVkRml4dHVyZUNhcGFiaWxpdHlbXTtcblxuICBwcml2YXRlIGNvbG9yQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgQElucHV0KClcbiAgc2V0IHByb2ZpbGUodmFsdWU6IEZpeHR1cmVQcm9maWxlKSB7XG4gICAgdGhpcy5fZml4dHVyZVByb2ZpbGUgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGNoYW5uZWwodmFsdWU6IENhY2hlZEZpeHR1cmVDaGFubmVsKSB7XG4gICAgdGhpcy5fY2hhbm5lbCA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBASW5wdXQoKVxuICB3aGVlbEluZGV4OiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgc2hvd0NvbnRhaW5lciA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwcmVzZXRTZXJ2aWNlOiBQcmVzZXRTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb2xvckNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMucHJlc2V0U2VydmljZS5maXh0dXJlQ29sb3JDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY29sb3JDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlKCkge1xuICAgIGlmICh0aGlzLl9maXh0dXJlUHJvZmlsZSAmJiB0aGlzLl9jaGFubmVsKSB7XG4gICAgICB0aGlzLndoZWVsTmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc2xvdENhcGFiaWxpdGllcyA9IFtdO1xuXG4gICAgICAvLyBnZXQgdGhlIHdoZWVsIG5hbWVcbiAgICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiB0aGlzLl9jaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICBpZiAoY2FwYWJpbGl0eS53aGVlbCkge1xuICAgICAgICAgIHRoaXMud2hlZWxOYW1lID0gY2FwYWJpbGl0eS53aGVlbE5hbWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy53aGVlbE5hbWUpIHtcbiAgICAgICAgdGhpcy53aGVlbE5hbWUgPSB0aGlzLl9jaGFubmVsLm5hbWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMud2hlZWwgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldFdoZWVsQnlOYW1lKHRoaXMuX2ZpeHR1cmVQcm9maWxlLCB0aGlzLndoZWVsTmFtZSk7XG5cbiAgICAgIC8vIGNhbGN1bGF0ZSBhbGwgYXZhaWxhYmxlIHNsb3RzXG4gICAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHkgb2YgdGhpcy5fY2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgaWYgKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuV2hlZWxTbG90KSB7XG4gICAgICAgICAgdGhpcy5zbG90Q2FwYWJpbGl0aWVzLnB1c2goY2FwYWJpbGl0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGdldENhcGFiaWxpdHlDb2xvclN0eWxlKGNhcGFiaWxpdHk6IENhY2hlZEZpeHR1cmVDYXBhYmlsaXR5KTogYW55IHtcbiAgICBsZXQgcHJvcGVydHkgPSAnYmFja2dyb3VuZC1jb2xvcic7XG4gICAgbGV0IHZhbHVlID0gJ2JsYWNrJztcbiAgICBsZXQgY29sb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGNhcGFiaWxpdHkud2hlZWxTbG90cykge1xuICAgICAgZm9yIChjb25zdCBzbG90IG9mIGNhcGFiaWxpdHkud2hlZWxTbG90cykge1xuICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIGNvbG9yIGJhc2VkIG9uIHRoZSBjb2xvciB3aGVlbCBzbG90XG4gICAgICAgIGlmIChzbG90LmNvbG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29sb3JzID0gY29sb3JzLmNvbmNhdChzbG90LmNvbG9ycyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29sb3JzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIG1peGVkIGNvbG9ycyAtPiBncmFkaWVudFxuICAgICAgbGV0IGNvbG9yU3RyaW5nOiBzdHJpbmc7XG4gICAgICBmb3IgKGNvbnN0IGNvbG9yIG9mIGNvbG9ycykge1xuICAgICAgICBpZiAoY29sb3JTdHJpbmcpIHtcbiAgICAgICAgICBjb2xvclN0cmluZyArPSAnLCAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbG9yU3RyaW5nID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29sb3JTdHJpbmcgKz0gY29sb3I7XG4gICAgICB9XG4gICAgICBwcm9wZXJ0eSA9ICdiYWNrZ3JvdW5kLWltYWdlJztcbiAgICAgIHZhbHVlID0gJ2xpbmVhci1ncmFkaWVudCh0byBib3R0b20gcmlnaHQsICcgKyBjb2xvclN0cmluZyArICcpJztcbiAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhbHVlID0gY29sb3JzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9ICcjZmZmJztcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZSA9IHt9O1xuICAgIHN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIGdldEN1cnJlbnRTbG90TnVtYmVyKCk6IG51bWJlciB7XG4gICAgY29uc3QgY2FwYWJpbGl0eVZhbHVlID0gdGhpcy5wcmVzZXRTZXJ2aWNlLmdldENhcGFiaWxpdHlWYWx1ZShcbiAgICAgIHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCxcbiAgICAgIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5XaGVlbFNsb3QsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLndoZWVsTmFtZSxcbiAgICAgIHRoaXMuX2ZpeHR1cmVQcm9maWxlLnV1aWRcbiAgICApO1xuXG4gICAgaWYgKGNhcGFiaWxpdHlWYWx1ZSkge1xuICAgICAgcmV0dXJuIGNhcGFiaWxpdHlWYWx1ZS5zbG90TnVtYmVyO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgc2xvdENhcGFiaWxpdHlJc1NlbGVjdGVkKHNsb3ROdW1iZXI6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkU2xvdE51bWJlciA9IHRoaXMuZ2V0Q3VycmVudFNsb3ROdW1iZXIoKTtcblxuICAgIGlmIChzZWxlY3RlZFNsb3ROdW1iZXIgPj0gMCkge1xuICAgICAgLy8gYSBzbG90IGlzIHNlbGVjdGVkXG4gICAgICByZXR1cm4gc2VsZWN0ZWRTbG90TnVtYmVyID09PSBzbG90TnVtYmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBubyBzbG90IGlzIHNlbGVjdGVkIGFuZCB0aGUgY2FwYWJpbGl0eSBpcyBpbmFjdGl2ZVxuICAgICAgLy8gLT4gc2hvdyB0aGUgYXBwcm94LiBjb2xvciwgaWYgYSBjb2xvciBvciBhIHNpbWlsYXIgc2xvdCBmcm9tIGEgZGlmZmVyZW50IHdoZWVsIGhhcyBiZWVuIHNlbGVjdGVkXG4gICAgICBjb25zdCBhcHByb3hpbWF0ZWRDYXBhYmlsaXR5ID0gdGhpcy5wcmVzZXRTZXJ2aWNlLmdldEFwcHJveGltYXRlZENvbG9yV2hlZWxDYXBhYmlsaXR5KFxuICAgICAgICB0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQsXG4gICAgICAgIHRoaXMuX2NoYW5uZWxcbiAgICAgICk7XG5cbiAgICAgIGlmIChhcHByb3hpbWF0ZWRDYXBhYmlsaXR5KSB7XG4gICAgICAgIHJldHVybiBzbG90TnVtYmVyID09PSBhcHByb3hpbWF0ZWRDYXBhYmlsaXR5LmNhcGFiaWxpdHkuc2xvdE51bWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VBY3RpdmUoYWN0aXZlOiBib29sZWFuKSB7XG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnNldENhcGFiaWxpdHlWYWx1ZShcbiAgICAgICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0LFxuICAgICAgICBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuV2hlZWxTbG90LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIDEsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdGhpcy53aGVlbE5hbWUsXG4gICAgICAgIHRoaXMuX2ZpeHR1cmVQcm9maWxlLnV1aWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJlc2V0U2VydmljZS5kZWxldGVDYXBhYmlsaXR5VmFsdWUoXG4gICAgICAgIHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCxcbiAgICAgICAgRml4dHVyZUNhcGFiaWxpdHlUeXBlLldoZWVsU2xvdCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLndoZWVsTmFtZSxcbiAgICAgICAgdGhpcy5fZml4dHVyZVByb2ZpbGUudXVpZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnByZXNldFNlcnZpY2UucHJldmlld0xpdmUoKTtcbiAgfVxuXG4gIHNlbGVjdFNsb3ROdW1iZXIoc2xvdE51bWJlcjogbnVtYmVyKSB7XG4gICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnNldENhcGFiaWxpdHlWYWx1ZShcbiAgICAgIHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCxcbiAgICAgIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5XaGVlbFNsb3QsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBzbG90TnVtYmVyLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy53aGVlbE5hbWUsXG4gICAgICB0aGlzLl9maXh0dXJlUHJvZmlsZS51dWlkXG4gICAgKTtcbiAgICB0aGlzLnByZXNldFNlcnZpY2UucHJldmlld0xpdmUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyLXNlY29uZGFyeSBoLTEwMFwiIFtjbGFzcy5jYXBhYmlsaXR5LWRlYWN0aXZhdGVkXT1cImdldEN1cnJlbnRTbG90TnVtYmVyKCkgPT0gdW5kZWZpbmVkXCIgc3R5bGU9XCJtaW4taGVpZ2h0OiAyMDBweFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgIGlkPVwiY2FwYWJpbGl0eUNvbG9yV2hlZWx7eyB3aGVlbEluZGV4IH19QWN0aXZlXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJnZXRDdXJyZW50U2xvdE51bWJlcigpICE9IHVuZGVmaW5lZFwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQWN0aXZlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY2FwYWJpbGl0eUNvbG9yV2hlZWx7eyB3aGVlbEluZGV4IH19QWN0aXZlXCI+XG4gICAgICAgICAge3sgJ2Rlc2lnbmVyLmZpeHR1cmUuY2FwYWJpbGl0eS1jb2xvcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGgtMTAwXCI+XG4gICAgPGRpdiAqbmdJZj1cInNob3dDb250YWluZXJcIj57eyBfZml4dHVyZVByb2ZpbGUubmFtZSB9fSAtIHt7IF9jaGFubmVsLm5hbWUgfX08L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJ3aGVlbFwiIGNsYXNzPVwiZC1mbGV4XCIgc3R5bGU9XCJtYXgtd2lkdGg6IDI0MHB4OyBmbGV4LXdyYXA6IHdyYXBcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHNsb3Qgb2Ygc2xvdENhcGFiaWxpdGllczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RTbG90TnVtYmVyKHNsb3QuY2FwYWJpbGl0eS5zbG90TnVtYmVyKVwiXG4gICAgICAgIGNsYXNzPVwibS0xIGNvbG9yXCJcbiAgICAgICAgW2NsYXNzLmNvbG9yLXNlbGVjdGVkXT1cInNsb3RDYXBhYmlsaXR5SXNTZWxlY3RlZChzbG90LmNhcGFiaWxpdHkuc2xvdE51bWJlcilcIlxuICAgICAgICBbbmdTdHlsZV09XCJnZXRDYXBhYmlsaXR5Q29sb3JTdHlsZShzbG90KVwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNsb3RDYXBhYmlsaXR5SXNTZWxlY3RlZChzbG90LmNhcGFiaWxpdHkuc2xvdE51bWJlcilcIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RTbG90TnVtYmVyKHNsb3QuY2FwYWJpbGl0eS5zbG90TnVtYmVyKVwiXG4gICAgICAgICAgY2xhc3M9XCJjb2xvci1zZWxlY3RlZC1pbm5lclwiXG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,78 @@
1
+ import { ChangeDetectorRef, Component } from '@angular/core';
2
+ import { FixtureCapabilityType } from '../../../models/fixture-capability';
3
+ import { PresetService } from '../../../services/preset.service';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../../services/preset.service";
6
+ import * as i2 from "@angular/forms";
7
+ import * as i3 from "ngx-bootstrap-slider";
8
+ export class FixtureCapabilityDimmerComponent {
9
+ constructor(presetService, changeDetectorRef) {
10
+ this.presetService = presetService;
11
+ this.changeDetectorRef = changeDetectorRef;
12
+ }
13
+ ngOnInit() { }
14
+ getValue() {
15
+ const capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Intensity);
16
+ if (capabilityValue) {
17
+ return capabilityValue.valuePercentage;
18
+ }
19
+ return undefined;
20
+ }
21
+ getValueText() {
22
+ const value = this.getValue();
23
+ if (value >= 0) {
24
+ return Math.round(value * 100 * 100) / 100;
25
+ }
26
+ return undefined;
27
+ }
28
+ setValue(value) {
29
+ if (isNaN(value)) {
30
+ return;
31
+ }
32
+ if (value < 0 || value > 1) {
33
+ return;
34
+ }
35
+ this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Intensity, value);
36
+ this.changeDetectorRef.detectChanges();
37
+ this.presetService.previewLive();
38
+ }
39
+ changeActive(active) {
40
+ if (active) {
41
+ this.setValue(1);
42
+ }
43
+ else {
44
+ this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Intensity);
45
+ this.changeDetectorRef.detectChanges();
46
+ }
47
+ this.presetService.previewLive();
48
+ }
49
+ static { this.ɵfac = function FixtureCapabilityDimmerComponent_Factory(t) { return new (t || FixtureCapabilityDimmerComponent)(i0.ɵɵdirectiveInject(i1.PresetService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
50
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixtureCapabilityDimmerComponent, selectors: [["lib-app-fixture-capability-dimmer"]], decls: 12, vars: 11, consts: [[1, "card", "border-secondary", "h-100", 2, "min-height", "200px"], [1, "card-header"], [1, "my-auto"], [1, "form-check"], ["type", "checkbox", "id", "capabilityDimmerActive", 1, "form-check-input", 3, "ngModelChange", "ngModel"], ["for", "capabilityDimmerActive", 1, "form-check-label"], [1, "icon-dimmer"], [1, "card-body", "h-100", "d-flex", 2, "flex-direction", "column"], [1, "mb-4", "w-100", "d-flex"], ["type", "text", 1, "mx-auto", 2, "width", "42px", "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 FixtureCapabilityDimmerComponent_Template(rf, ctx) { if (rf & 1) {
51
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "input", 4);
52
+ i0.ɵɵlistener("ngModelChange", function FixtureCapabilityDimmerComponent_Template_input_ngModelChange_4_listener($event) { return ctx.changeActive($event); });
53
+ i0.ɵɵelementEnd();
54
+ i0.ɵɵelementStart(5, "label", 5);
55
+ i0.ɵɵelement(6, "i", 6);
56
+ i0.ɵɵelementEnd()()()();
57
+ i0.ɵɵelementStart(7, "div", 7)(8, "div", 8)(9, "input", 9);
58
+ i0.ɵɵlistener("ngModelChange", function FixtureCapabilityDimmerComponent_Template_input_ngModelChange_9_listener($event) { return ctx.setValue($event / 100); });
59
+ i0.ɵɵelementEnd()();
60
+ i0.ɵɵelementStart(10, "div", 10)(11, "mv-slider", 11);
61
+ i0.ɵɵlistener("change", function FixtureCapabilityDimmerComponent_Template_mv_slider_change_11_listener($event) { return ctx.setValue($event.newValue); });
62
+ i0.ɵɵelementEnd()()()();
63
+ } if (rf & 2) {
64
+ i0.ɵɵclassProp("capability-deactivated", ctx.getValue() == undefined);
65
+ i0.ɵɵadvance(4);
66
+ i0.ɵɵproperty("ngModel", ctx.getValue() != undefined);
67
+ i0.ɵɵadvance(5);
68
+ i0.ɵɵproperty("ngModel", ctx.getValueText() >= 0 ? ctx.getValueText() : 0);
69
+ i0.ɵɵadvance(2);
70
+ i0.ɵɵproperty("value", ctx.getValue() >= 0 ? ctx.getValue() : 0)("orientation", "vertical")("reversed", true)("tooltip", "hide")("min", 0)("max", 1)("step", 0.001);
71
+ } }, dependencies: [i2.DefaultValueAccessor, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.SliderComponent] }); }
72
+ }
73
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FixtureCapabilityDimmerComponent, [{
74
+ type: Component,
75
+ args: [{ selector: 'lib-app-fixture-capability-dimmer', template: "<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"getValue() == 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=\"capabilityDimmerActive\"\n [ngModel]=\"getValue() != undefined\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityDimmerActive\">\n <i class=\"icon-dimmer\"></i>\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"card-body h-100 d-flex\" style=\"flex-direction: column\">\n <div class=\"mb-4 w-100 d-flex\">\n <input\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"getValueText() >= 0 ? getValueText() : 0\"\n (ngModelChange)=\"setValue($event / 100)\"\n style=\"width: 42px; 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 class=\"mx-auto\"\n [value]=\"getValue() >= 0 ? getValue() : 0\"\n (change)=\"setValue($event.newValue)\"\n [orientation]=\"'vertical'\"\n [reversed]=\"true\"\n style=\"height: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"0\"\n [max]=\"1\"\n [step]=\"0.001\"\n ></mv-slider>\n </div>\n </div>\n</div>\n" }]
76
+ }], () => [{ type: i1.PresetService }, { type: i0.ChangeDetectorRef }], null); })();
77
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FixtureCapabilityDimmerComponent, { className: "FixtureCapabilityDimmerComponent" }); })();
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1jYXBhYmlsaXR5LWRpbW1lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2ZpeHR1cmUvZml4dHVyZS1jYXBhYmlsaXR5L2ZpeHR1cmUtY2FwYWJpbGl0eS1kaW1tZXIvZml4dHVyZS1jYXBhYmlsaXR5LWRpbW1lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2ZpeHR1cmUvZml4dHVyZS1jYXBhYmlsaXR5L2ZpeHR1cmUtY2FwYWJpbGl0eS1kaW1tZXIvZml4dHVyZS1jYXBhYmlsaXR5LWRpbW1lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7QUFPakUsTUFBTSxPQUFPLGdDQUFnQztJQUMzQyxZQUFvQixhQUE0QixFQUFVLGlCQUFvQztRQUExRSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFBRyxDQUFDO0lBRWxHLFFBQVEsS0FBSSxDQUFDO0lBRWIsUUFBUTtRQUNOLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixPQUFPLGVBQWUsQ0FBQyxlQUFlLENBQUM7UUFDekMsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxZQUFZO1FBQ1YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVU7UUFDakIsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWU7UUFDMUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO2lHQTNDVSxnQ0FBZ0M7b0VBQWhDLGdDQUFnQztZQ0xyQyxBQURGLEFBREYsQUFERixBQURGLDhCQUE0SCxhQUNqRyxhQUNGLGFBQ0ssZUFPcEI7WUFEQSxrSUFBaUIsd0JBQW9CLElBQUM7WUFMeEMsaUJBTUU7WUFDRixnQ0FBNkQ7WUFDM0QsdUJBQTJCO1lBSW5DLEFBREUsQUFERSxBQURFLGlCQUFRLEVBQ0osRUFDRixFQUNGO1lBSUYsQUFERixBQURGLDhCQUFtRSxhQUNsQyxlQU8zQjtZQUZBLGtJQUFpQixzQkFBa0IsR0FBRyxDQUFDLElBQUM7WUFHNUMsQUFQRSxpQkFNRSxFQUNFO1lBR0osQUFERixnQ0FBZ0MscUJBWTdCO1lBUkMseUhBQVUsNkJBQXlCLElBQUM7WUFXNUMsQUFERSxBQURFLEFBREcsaUJBQVksRUFDVCxFQUNGLEVBQ0Y7O1lBNUNtQyxxRUFBd0Q7WUFRdkYsZUFBbUM7WUFBbkMscURBQW1DO1lBZXJDLGVBQW9EO1lBQXBELDBFQUFvRDtZQVNwRCxlQUEwQztZQVExQyxBQURBLEFBREEsQUFEQSxBQUZBLEFBREEsQUFGQSxnRUFBMEMsMkJBRWhCLGtCQUNULG1CQUVDLFVBQ1QsVUFDQSxlQUNLOzs7aUZEL0JULGdDQUFnQztjQUw1QyxTQUFTOzJCQUNFLG1DQUFtQzs7a0ZBSWxDLGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpeHR1cmUtY2FwYWJpbGl0eSc7XG5pbXBvcnQgeyBQcmVzZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJlc2V0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYXBwLWZpeHR1cmUtY2FwYWJpbGl0eS1kaW1tZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZml4dHVyZS1jYXBhYmlsaXR5LWRpbW1lci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpeHR1cmUtY2FwYWJpbGl0eS1kaW1tZXIuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGaXh0dXJlQ2FwYWJpbGl0eURpbW1lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJlc2V0U2VydmljZTogUHJlc2V0U2VydmljZSwgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKSB7fVxuXG4gIGdldFZhbHVlKCk6IG51bWJlciB7XG4gICAgY29uc3QgY2FwYWJpbGl0eVZhbHVlID0gdGhpcy5wcmVzZXRTZXJ2aWNlLmdldENhcGFiaWxpdHlWYWx1ZSh0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHkpO1xuICAgIGlmIChjYXBhYmlsaXR5VmFsdWUpIHtcbiAgICAgIHJldHVybiBjYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0VmFsdWVUZXh0KCk6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgaWYgKHZhbHVlID49IDApIHtcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMTAwICogMTAwKSAvIDEwMDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHNldFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByZXNldFNlcnZpY2Uuc2V0Q2FwYWJpbGl0eVZhbHVlKHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCwgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkludGVuc2l0eSwgdmFsdWUpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMucHJlc2V0U2VydmljZS5wcmV2aWV3TGl2ZSgpO1xuICB9XG5cbiAgY2hhbmdlQWN0aXZlKGFjdGl2ZTogYm9vbGVhbikge1xuICAgIGlmIChhY3RpdmUpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUoMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJlc2V0U2VydmljZS5kZWxldGVDYXBhYmlsaXR5VmFsdWUodGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0LCBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuSW50ZW5zaXR5KTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICB0aGlzLnByZXNldFNlcnZpY2UucHJldmlld0xpdmUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyLXNlY29uZGFyeSBoLTEwMFwiIFtjbGFzcy5jYXBhYmlsaXR5LWRlYWN0aXZhdGVkXT1cImdldFZhbHVlKCkgPT0gdW5kZWZpbmVkXCIgc3R5bGU9XCJtaW4taGVpZ2h0OiAyMDBweFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgIGlkPVwiY2FwYWJpbGl0eURpbW1lckFjdGl2ZVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwiZ2V0VmFsdWUoKSAhPSB1bmRlZmluZWRcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUFjdGl2ZSgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImNhcGFiaWxpdHlEaW1tZXJBY3RpdmVcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImljb24tZGltbWVyXCI+PC9pPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgaC0xMDAgZC1mbGV4XCIgc3R5bGU9XCJmbGV4LWRpcmVjdGlvbjogY29sdW1uXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTQgdy0xMDAgZC1mbGV4XCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJteC1hdXRvXCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbbmdNb2RlbF09XCJnZXRWYWx1ZVRleHQoKSA+PSAwID8gZ2V0VmFsdWVUZXh0KCkgOiAwXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0VmFsdWUoJGV2ZW50IC8gMTAwKVwiXG4gICAgICAgIHN0eWxlPVwid2lkdGg6IDQycHg7IGhlaWdodDogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2VcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJoLTEwMCB3LTEwMCBkLWZsZXhcIj5cbiAgICAgIDxtdi1zbGlkZXJcbiAgICAgICAgY2xhc3M9XCJteC1hdXRvXCJcbiAgICAgICAgW3ZhbHVlXT1cImdldFZhbHVlKCkgPj0gMCA/IGdldFZhbHVlKCkgOiAwXCJcbiAgICAgICAgKGNoYW5nZSk9XCJzZXRWYWx1ZSgkZXZlbnQubmV3VmFsdWUpXCJcbiAgICAgICAgW29yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIlxuICAgICAgICBbcmV2ZXJzZWRdPVwidHJ1ZVwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCJcbiAgICAgICAgW3Rvb2x0aXBdPVwiJ2hpZGUnXCJcbiAgICAgICAgW21pbl09XCIwXCJcbiAgICAgICAgW21heF09XCIxXCJcbiAgICAgICAgW3N0ZXBdPVwiMC4wMDFcIlxuICAgICAgPjwvbXYtc2xpZGVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19