@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,151 @@
1
+ import { ChangeDetectorRef, Component } from '@angular/core';
2
+ import { PreviewService } from '../../../services/preview.service';
3
+ import { ProjectService } from '../../../services/project.service';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../../services/project.service";
6
+ import * as i2 from "../../../services/preview.service";
7
+ import * as i3 from "@angular/forms";
8
+ import * as i4 from "ngx-bootstrap-slider";
9
+ import * as i5 from "@ngx-translate/core";
10
+ export class FixtureSettingsStageComponent {
11
+ constructor(projectService, previewService, changeDetectorRef) {
12
+ this.projectService = projectService;
13
+ this.previewService = previewService;
14
+ this.changeDetectorRef = changeDetectorRef;
15
+ }
16
+ ngOnInit() { }
17
+ update() {
18
+ this.previewService.updateStage();
19
+ this.changeDetectorRef.detectChanges();
20
+ }
21
+ static { this.ɵfac = function FixtureSettingsStageComponent_Factory(t) { return new (t || FixtureSettingsStageComponent)(i0.ɵɵdirectiveInject(i1.ProjectService), i0.ɵɵdirectiveInject(i2.PreviewService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
22
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixtureSettingsStageComponent, selectors: [["lib-app-fixture-settings-stage"]], decls: 65, vars: 57, consts: [[1, "card", "border-secondary", "h-100"], [1, "card-header"], [1, "card-body", "h-100"], [1, "d-flex"], [1, "my-auto", 2, "width", "120px", "float", "left"], [1, "my-auto", 2, "float", "left"], [2, "width", "140px", 3, "change", "tooltip", "value", "min", "max", "step"], [1, "my-auto"], ["type", "text", "readonly", "", 1, "slider-input-readonly", 3, "ngModelChange", "ngModel"], [1, "my-auto", "ml-1", 2, "color", "darkgray"]], template: function FixtureSettingsStageComponent_Template(rf, ctx) { if (rf & 1) {
23
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
24
+ i0.ɵɵtext(2);
25
+ i0.ɵɵpipe(3, "translate");
26
+ i0.ɵɵelementEnd();
27
+ i0.ɵɵelementStart(4, "div", 2)(5, "div", 3)(6, "div", 4);
28
+ i0.ɵɵtext(7);
29
+ i0.ɵɵpipe(8, "translate");
30
+ i0.ɵɵelementEnd();
31
+ i0.ɵɵelementStart(9, "div", 5)(10, "mv-slider", 6);
32
+ i0.ɵɵlistener("change", function FixtureSettingsStageComponent_Template_mv_slider_change_10_listener($event) { ctx.projectService.project.stageWidthCm = $event.newValue; return ctx.update(); });
33
+ i0.ɵɵelementEnd()();
34
+ i0.ɵɵelementStart(11, "div", 7)(12, "input", 8);
35
+ i0.ɵɵlistener("ngModelChange", function FixtureSettingsStageComponent_Template_input_ngModelChange_12_listener($event) { ctx.projectService.project.stageWidthCm = $event; return ctx.update(); });
36
+ i0.ɵɵelementEnd()();
37
+ i0.ɵɵelementStart(13, "div", 9);
38
+ i0.ɵɵtext(14, "cm");
39
+ i0.ɵɵelementEnd()();
40
+ i0.ɵɵelementStart(15, "div", 3)(16, "div", 4);
41
+ i0.ɵɵtext(17);
42
+ i0.ɵɵpipe(18, "translate");
43
+ i0.ɵɵelementEnd();
44
+ i0.ɵɵelementStart(19, "div", 5)(20, "mv-slider", 6);
45
+ i0.ɵɵlistener("change", function FixtureSettingsStageComponent_Template_mv_slider_change_20_listener($event) { ctx.projectService.project.stageHeightCm = $event.newValue; return ctx.update(); });
46
+ i0.ɵɵelementEnd()();
47
+ i0.ɵɵelementStart(21, "div", 7)(22, "input", 8);
48
+ i0.ɵɵlistener("ngModelChange", function FixtureSettingsStageComponent_Template_input_ngModelChange_22_listener($event) { ctx.projectService.project.stageHeightCm = $event; return ctx.update(); });
49
+ i0.ɵɵelementEnd()();
50
+ i0.ɵɵelementStart(23, "div", 9);
51
+ i0.ɵɵtext(24, "cm");
52
+ i0.ɵɵelementEnd()();
53
+ i0.ɵɵelementStart(25, "div", 3)(26, "div", 4);
54
+ i0.ɵɵtext(27);
55
+ i0.ɵɵpipe(28, "translate");
56
+ i0.ɵɵelementEnd();
57
+ i0.ɵɵelementStart(29, "div", 5)(30, "mv-slider", 6);
58
+ i0.ɵɵlistener("change", function FixtureSettingsStageComponent_Template_mv_slider_change_30_listener($event) { ctx.projectService.project.stageDepthCm = $event.newValue; return ctx.update(); });
59
+ i0.ɵɵelementEnd()();
60
+ i0.ɵɵelementStart(31, "div", 7)(32, "input", 8);
61
+ i0.ɵɵlistener("ngModelChange", function FixtureSettingsStageComponent_Template_input_ngModelChange_32_listener($event) { ctx.projectService.project.stageDepthCm = $event; return ctx.update(); });
62
+ i0.ɵɵelementEnd()();
63
+ i0.ɵɵelementStart(33, "div", 9);
64
+ i0.ɵɵtext(34, "cm");
65
+ i0.ɵɵelementEnd()();
66
+ i0.ɵɵelementStart(35, "div", 3)(36, "div", 4);
67
+ i0.ɵɵtext(37);
68
+ i0.ɵɵpipe(38, "translate");
69
+ i0.ɵɵelementEnd();
70
+ i0.ɵɵelementStart(39, "div", 5)(40, "mv-slider", 6);
71
+ i0.ɵɵlistener("change", function FixtureSettingsStageComponent_Template_mv_slider_change_40_listener($event) { ctx.projectService.project.stageFloorHeightCm = $event.newValue; return ctx.update(); });
72
+ i0.ɵɵelementEnd()();
73
+ i0.ɵɵelementStart(41, "div", 7)(42, "input", 8);
74
+ i0.ɵɵlistener("ngModelChange", function FixtureSettingsStageComponent_Template_input_ngModelChange_42_listener($event) { ctx.projectService.project.stageFloorHeightCm = $event; return ctx.update(); });
75
+ i0.ɵɵelementEnd()();
76
+ i0.ɵɵelementStart(43, "div", 9);
77
+ i0.ɵɵtext(44, "cm");
78
+ i0.ɵɵelementEnd()();
79
+ i0.ɵɵelementStart(45, "div", 3)(46, "div", 4);
80
+ i0.ɵɵtext(47);
81
+ i0.ɵɵpipe(48, "translate");
82
+ i0.ɵɵelementEnd();
83
+ i0.ɵɵelementStart(49, "div", 5)(50, "mv-slider", 6);
84
+ i0.ɵɵlistener("change", function FixtureSettingsStageComponent_Template_mv_slider_change_50_listener($event) { ctx.projectService.project.stageCeilingHeightCm = $event.newValue; return ctx.update(); });
85
+ i0.ɵɵelementEnd()();
86
+ i0.ɵɵelementStart(51, "div", 7)(52, "input", 8);
87
+ i0.ɵɵlistener("ngModelChange", function FixtureSettingsStageComponent_Template_input_ngModelChange_52_listener($event) { ctx.projectService.project.stageCeilingHeightCm = $event; return ctx.update(); });
88
+ i0.ɵɵelementEnd()();
89
+ i0.ɵɵelementStart(53, "div", 9);
90
+ i0.ɵɵtext(54, "cm");
91
+ i0.ɵɵelementEnd()();
92
+ i0.ɵɵelementStart(55, "div", 3)(56, "div", 4);
93
+ i0.ɵɵtext(57);
94
+ i0.ɵɵpipe(58, "translate");
95
+ i0.ɵɵelementEnd();
96
+ i0.ɵɵelementStart(59, "div", 5)(60, "mv-slider", 6);
97
+ i0.ɵɵlistener("change", function FixtureSettingsStageComponent_Template_mv_slider_change_60_listener($event) { ctx.projectService.project.stagePillarWidthCm = $event.newValue; return ctx.update(); });
98
+ i0.ɵɵelementEnd()();
99
+ i0.ɵɵelementStart(61, "div", 7)(62, "input", 8);
100
+ i0.ɵɵlistener("ngModelChange", function FixtureSettingsStageComponent_Template_input_ngModelChange_62_listener($event) { ctx.projectService.project.stagePillarWidthCm = $event; return ctx.update(); });
101
+ i0.ɵɵelementEnd()();
102
+ i0.ɵɵelementStart(63, "div", 9);
103
+ i0.ɵɵtext(64, "cm");
104
+ i0.ɵɵelementEnd()()()();
105
+ } if (rf & 2) {
106
+ i0.ɵɵadvance(2);
107
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 43, "designer.fixture.setting-stage"), " ");
108
+ i0.ɵɵadvance(5);
109
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 45, "designer.fixture.setting-stage-width"), " ");
110
+ i0.ɵɵadvance(3);
111
+ i0.ɵɵproperty("tooltip", "hide")("value", ctx.projectService.project.stageWidthCm)("min", 100)("max", 2000)("step", 5);
112
+ i0.ɵɵadvance(2);
113
+ i0.ɵɵproperty("ngModel", ctx.projectService.project.stageWidthCm);
114
+ i0.ɵɵadvance(5);
115
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(18, 47, "designer.fixture.setting-stage-height"), " ");
116
+ i0.ɵɵadvance(3);
117
+ i0.ɵɵproperty("tooltip", "hide")("value", ctx.projectService.project.stageHeightCm)("min", 100)("max", 2000)("step", 5);
118
+ i0.ɵɵadvance(2);
119
+ i0.ɵɵproperty("ngModel", ctx.projectService.project.stageHeightCm);
120
+ i0.ɵɵadvance(5);
121
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(28, 49, "designer.fixture.setting-stage-depth"), " ");
122
+ i0.ɵɵadvance(3);
123
+ i0.ɵɵproperty("tooltip", "hide")("value", ctx.projectService.project.stageDepthCm)("min", 100)("max", 2000)("step", 5);
124
+ i0.ɵɵadvance(2);
125
+ i0.ɵɵproperty("ngModel", ctx.projectService.project.stageDepthCm);
126
+ i0.ɵɵadvance(5);
127
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(38, 51, "designer.fixture.setting-stage-floor-height"), " ");
128
+ i0.ɵɵadvance(3);
129
+ i0.ɵɵproperty("tooltip", "hide")("value", ctx.projectService.project.stageFloorHeightCm)("min", 1)("max", 1000)("step", 5);
130
+ i0.ɵɵadvance(2);
131
+ i0.ɵɵproperty("ngModel", ctx.projectService.project.stageFloorHeightCm);
132
+ i0.ɵɵadvance(5);
133
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(48, 53, "designer.fixture.setting-stage-ceiling-height"), " ");
134
+ i0.ɵɵadvance(3);
135
+ i0.ɵɵproperty("tooltip", "hide")("value", ctx.projectService.project.stageCeilingHeightCm)("min", 1)("max", 1000)("step", 5);
136
+ i0.ɵɵadvance(2);
137
+ i0.ɵɵproperty("ngModel", ctx.projectService.project.stageCeilingHeightCm);
138
+ i0.ɵɵadvance(5);
139
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(58, 55, "designer.fixture.setting-stage-pillar-width"), " ");
140
+ i0.ɵɵadvance(3);
141
+ i0.ɵɵproperty("tooltip", "hide")("value", ctx.projectService.project.stagePillarWidthCm)("min", 1)("max", 200)("step", 5);
142
+ i0.ɵɵadvance(2);
143
+ i0.ɵɵproperty("ngModel", ctx.projectService.project.stagePillarWidthCm);
144
+ } }, dependencies: [i3.DefaultValueAccessor, i3.NgControlStatus, i3.NgModel, i4.SliderComponent, i5.TranslatePipe] }); }
145
+ }
146
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FixtureSettingsStageComponent, [{
147
+ type: Component,
148
+ args: [{ selector: 'lib-app-fixture-settings-stage', template: "<div class=\"card border-secondary h-100\">\n <div class=\"card-header\">\n {{ 'designer.fixture.setting-stage' | translate }}\n </div>\n\n <div class=\"card-body h-100\">\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-width' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageWidthCm\"\n [min]=\"100\"\n [max]=\"2000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageWidthCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageWidthCm\"\n (ngModelChange)=\"projectService.project.stageWidthCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-height' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageHeightCm\"\n [min]=\"100\"\n [max]=\"2000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageHeightCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageHeightCm\"\n (ngModelChange)=\"projectService.project.stageHeightCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-depth' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageDepthCm\"\n [min]=\"100\"\n [max]=\"2000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageDepthCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageDepthCm\"\n (ngModelChange)=\"projectService.project.stageDepthCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-floor-height' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageFloorHeightCm\"\n [min]=\"1\"\n [max]=\"1000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageFloorHeightCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageFloorHeightCm\"\n (ngModelChange)=\"projectService.project.stageFloorHeightCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-ceiling-height' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageCeilingHeightCm\"\n [min]=\"1\"\n [max]=\"1000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageCeilingHeightCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageCeilingHeightCm\"\n (ngModelChange)=\"projectService.project.stageCeilingHeightCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-pillar-width' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stagePillarWidthCm\"\n [min]=\"1\"\n [max]=\"200\"\n [step]=\"5\"\n (change)=\"projectService.project.stagePillarWidthCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stagePillarWidthCm\"\n (ngModelChange)=\"projectService.project.stagePillarWidthCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n </div>\n</div>\n" }]
149
+ }], () => [{ type: i1.ProjectService }, { type: i2.PreviewService }, { type: i0.ChangeDetectorRef }], null); })();
150
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FixtureSettingsStageComponent, { className: "FixtureSettingsStageComponent" }); })();
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1zZXR0aW5ncy1zdGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2ZpeHR1cmUvZml4dHVyZS1zZXR0aW5ncy9maXh0dXJlLXNldHRpbmdzLXN0YWdlL2ZpeHR1cmUtc2V0dGluZ3Mtc3RhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9maXh0dXJlL2ZpeHR1cmUtc2V0dGluZ3MvZml4dHVyZS1zZXR0aW5ncy1zdGFnZS9maXh0dXJlLXNldHRpbmdzLXN0YWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7OztBQU9uRSxNQUFNLE9BQU8sNkJBQTZCO0lBQ3hDLFlBQW1CLGNBQThCLEVBQVMsY0FBOEIsRUFBVSxpQkFBb0M7UUFBbkgsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtJQUFHLENBQUM7SUFFMUksUUFBUSxLQUFJLENBQUM7SUFFYixNQUFNO1FBQ0osSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekMsQ0FBQzs4RkFSVSw2QkFBNkI7b0VBQTdCLDZCQUE2QjtZQ1J4QyxBQURGLDhCQUF5QyxhQUNkO1lBQ3ZCLFlBQ0Y7O1lBQUEsaUJBQU07WUFJRixBQURGLEFBREYsOEJBQTZC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REEsZ0NBQWtCLHdEQUNpQyxVQUMxQyxhQUNHLFdBQ0Y7WUFRVixlQUFxRDtZQUFyRCx1RUFBcUQ7WUFXdkQsZUFDRjtZQURFLHdHQUNGO1lBSUksZUFBa0I7WUFJbEIsQUFEQSxBQURBLEFBREEsQUFEQSxnQ0FBa0IsMERBQ21DLFVBQzVDLGFBQ0csV0FDRjtZQVFWLGVBQXVEO1lBQXZELHlFQUF1RDtZQVd6RCxlQUNGO1lBREUsc0dBQ0Y7WUFJSSxlQUFrQjtZQUlsQixBQURBLEFBREEsQUFEQSxBQURBLGdDQUFrQix3REFDaUMsVUFDMUMsWUFDRSxXQUNEO1lBUVYsZUFBcUQ7WUFBckQsdUVBQXFEOzs7aUZENUpsRCw2QkFBNkI7Y0FMekMsU0FBUzsyQkFDRSxnQ0FBZ0M7O2tGQUkvQiw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByZXZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJldmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJvamVjdC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWFwcC1maXh0dXJlLXNldHRpbmdzLXN0YWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpeHR1cmUtc2V0dGluZ3Mtc3RhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maXh0dXJlLXNldHRpbmdzLXN0YWdlLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRml4dHVyZVNldHRpbmdzU3RhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlLCBwdWJsaWMgcHJldmlld1NlcnZpY2U6IFByZXZpZXdTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgdXBkYXRlKCkge1xuICAgIHRoaXMucHJldmlld1NlcnZpY2UudXBkYXRlU3RhZ2UoKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyLXNlY29uZGFyeSBoLTEwMFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICB7eyAnZGVzaWduZXIuZml4dHVyZS5zZXR0aW5nLXN0YWdlJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGgtMTAwXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIiBzdHlsZT1cIndpZHRoOiAxMjBweDsgZmxvYXQ6IGxlZnRcIj5cbiAgICAgICAge3sgJ2Rlc2lnbmVyLmZpeHR1cmUuc2V0dGluZy1zdGFnZS13aWR0aCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIiBzdHlsZT1cImZsb2F0OiBsZWZ0XCI+XG4gICAgICAgIDxtdi1zbGlkZXJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNDBweFwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ2hpZGUnXCJcbiAgICAgICAgICBbdmFsdWVdPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ21cIlxuICAgICAgICAgIFttaW5dPVwiMTAwXCJcbiAgICAgICAgICBbbWF4XT1cIjIwMDBcIlxuICAgICAgICAgIFtzdGVwXT1cIjVcIlxuICAgICAgICAgIChjaGFuZ2UpPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20gPSAkZXZlbnQubmV3VmFsdWU7IHVwZGF0ZSgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L212LXNsaWRlcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSA9ICRldmVudDsgdXBkYXRlKClcIlxuICAgICAgICAgIGNsYXNzPVwic2xpZGVyLWlucHV0LXJlYWRvbmx5XCJcbiAgICAgICAgICByZWFkb25seVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0byBtbC0xXCIgc3R5bGU9XCJjb2xvcjogZGFya2dyYXlcIj5jbTwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIiBzdHlsZT1cIndpZHRoOiAxMjBweDsgZmxvYXQ6IGxlZnRcIj5cbiAgICAgICAge3sgJ2Rlc2lnbmVyLmZpeHR1cmUuc2V0dGluZy1zdGFnZS1oZWlnaHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvXCIgc3R5bGU9XCJmbG9hdDogbGVmdFwiPlxuICAgICAgICA8bXYtc2xpZGVyXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTQwcHhcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidoaWRlJ1wiXG4gICAgICAgICAgW3ZhbHVlXT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbVwiXG4gICAgICAgICAgW21pbl09XCIxMDBcIlxuICAgICAgICAgIFttYXhdPVwiMjAwMFwiXG4gICAgICAgICAgW3N0ZXBdPVwiNVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gPSAkZXZlbnQubmV3VmFsdWU7IHVwZGF0ZSgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L212LXNsaWRlcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtID0gJGV2ZW50OyB1cGRhdGUoKVwiXG4gICAgICAgICAgY2xhc3M9XCJzbGlkZXItaW5wdXQtcmVhZG9ubHlcIlxuICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvIG1sLTFcIiBzdHlsZT1cImNvbG9yOiBkYXJrZ3JheVwiPmNtPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiIHN0eWxlPVwid2lkdGg6IDEyMHB4OyBmbG9hdDogbGVmdFwiPlxuICAgICAgICB7eyAnZGVzaWduZXIuZml4dHVyZS5zZXR0aW5nLXN0YWdlLWRlcHRoJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiIHN0eWxlPVwiZmxvYXQ6IGxlZnRcIj5cbiAgICAgICAgPG12LXNsaWRlclxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE0MHB4XCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInaGlkZSdcIlxuICAgICAgICAgIFt2YWx1ZV09XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbVwiXG4gICAgICAgICAgW21pbl09XCIxMDBcIlxuICAgICAgICAgIFttYXhdPVwiMjAwMFwiXG4gICAgICAgICAgW3N0ZXBdPVwiNVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSA9ICRldmVudC5uZXdWYWx1ZTsgdXBkYXRlKClcIlxuICAgICAgICA+XG4gICAgICAgIDwvbXYtc2xpZGVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgW25nTW9kZWxdPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ21cIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtID0gJGV2ZW50OyB1cGRhdGUoKVwiXG4gICAgICAgICAgY2xhc3M9XCJzbGlkZXItaW5wdXQtcmVhZG9ubHlcIlxuICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvIG1sLTFcIiBzdHlsZT1cImNvbG9yOiBkYXJrZ3JheVwiPmNtPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiIHN0eWxlPVwid2lkdGg6IDEyMHB4OyBmbG9hdDogbGVmdFwiPlxuICAgICAgICB7eyAnZGVzaWduZXIuZml4dHVyZS5zZXR0aW5nLXN0YWdlLWZsb29yLWhlaWdodCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIiBzdHlsZT1cImZsb2F0OiBsZWZ0XCI+XG4gICAgICAgIDxtdi1zbGlkZXJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNDBweFwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ2hpZGUnXCJcbiAgICAgICAgICBbdmFsdWVdPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q21cIlxuICAgICAgICAgIFttaW5dPVwiMVwiXG4gICAgICAgICAgW21heF09XCIxMDAwXCJcbiAgICAgICAgICBbc3RlcF09XCI1XCJcbiAgICAgICAgICAoY2hhbmdlKT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtID0gJGV2ZW50Lm5ld1ZhbHVlOyB1cGRhdGUoKVwiXG4gICAgICAgID5cbiAgICAgICAgPC9tdi1zbGlkZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20gPSAkZXZlbnQ7IHVwZGF0ZSgpXCJcbiAgICAgICAgICBjbGFzcz1cInNsaWRlci1pbnB1dC1yZWFkb25seVwiXG4gICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG8gbWwtMVwiIHN0eWxlPVwiY29sb3I6IGRhcmtncmF5XCI+Y208L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvXCIgc3R5bGU9XCJ3aWR0aDogMTIwcHg7IGZsb2F0OiBsZWZ0XCI+XG4gICAgICAgIHt7ICdkZXNpZ25lci5maXh0dXJlLnNldHRpbmctc3RhZ2UtY2VpbGluZy1oZWlnaHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvXCIgc3R5bGU9XCJmbG9hdDogbGVmdFwiPlxuICAgICAgICA8bXYtc2xpZGVyXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTQwcHhcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidoaWRlJ1wiXG4gICAgICAgICAgW3ZhbHVlXT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VDZWlsaW5nSGVpZ2h0Q21cIlxuICAgICAgICAgIFttaW5dPVwiMVwiXG4gICAgICAgICAgW21heF09XCIxMDAwXCJcbiAgICAgICAgICBbc3RlcF09XCI1XCJcbiAgICAgICAgICAoY2hhbmdlKT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VDZWlsaW5nSGVpZ2h0Q20gPSAkZXZlbnQubmV3VmFsdWU7IHVwZGF0ZSgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L212LXNsaWRlcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG9cIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VDZWlsaW5nSGVpZ2h0Q21cIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VDZWlsaW5nSGVpZ2h0Q20gPSAkZXZlbnQ7IHVwZGF0ZSgpXCJcbiAgICAgICAgICBjbGFzcz1cInNsaWRlci1pbnB1dC1yZWFkb25seVwiXG4gICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm15LWF1dG8gbWwtMVwiIHN0eWxlPVwiY29sb3I6IGRhcmtncmF5XCI+Y208L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvXCIgc3R5bGU9XCJ3aWR0aDogMTIwcHg7IGZsb2F0OiBsZWZ0XCI+XG4gICAgICAgIHt7ICdkZXNpZ25lci5maXh0dXJlLnNldHRpbmctc3RhZ2UtcGlsbGFyLXdpZHRoJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiIHN0eWxlPVwiZmxvYXQ6IGxlZnRcIj5cbiAgICAgICAgPG12LXNsaWRlclxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE0MHB4XCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInaGlkZSdcIlxuICAgICAgICAgIFt2YWx1ZV09XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbVwiXG4gICAgICAgICAgW21pbl09XCIxXCJcbiAgICAgICAgICBbbWF4XT1cIjIwMFwiXG4gICAgICAgICAgW3N0ZXBdPVwiNVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJwcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSA9ICRldmVudC5uZXdWYWx1ZTsgdXBkYXRlKClcIlxuICAgICAgICA+XG4gICAgICAgIDwvbXYtc2xpZGVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktYXV0b1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgW25nTW9kZWxdPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtID0gJGV2ZW50OyB1cGRhdGUoKVwiXG4gICAgICAgICAgY2xhc3M9XCJzbGlkZXItaW5wdXQtcmVhZG9ubHlcIlxuICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS1hdXRvIG1sLTFcIiBzdHlsZT1cImNvbG9yOiBkYXJrZ3JheVwiPmNtPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,46 @@
1
+ import { Component } from '@angular/core';
2
+ import { FixtureService } from '../../services/fixture.service';
3
+ import { PresetService } from '../../services/preset.service';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../services/fixture.service";
6
+ import * as i2 from "../../services/preset.service";
7
+ import * as i3 from "./fixture-settings-position/fixture-settings-position.component";
8
+ import * as i4 from "./fixture-settings-stage/fixture-settings-stage.component";
9
+ export class FixtureSettingsComponent {
10
+ constructor(fixtureService, presetService) {
11
+ this.fixtureService = fixtureService;
12
+ this.presetService = presetService;
13
+ this.dmxChannels = [];
14
+ for (let i = 0; i < 512; i++) {
15
+ this.dmxChannels.push(0);
16
+ }
17
+ }
18
+ ngOnInit() { }
19
+ isChrome() {
20
+ if (navigator.appVersion.indexOf('Chrome/') !== -1) {
21
+ return true;
22
+ }
23
+ return false;
24
+ }
25
+ static { this.ɵfac = function FixtureSettingsComponent_Factory(t) { return new (t || FixtureSettingsComponent)(i0.ɵɵdirectiveInject(i1.FixtureService), i0.ɵɵdirectiveInject(i2.PresetService)); }; }
26
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixtureSettingsComponent, selectors: [["lib-app-fixture-settings"]], decls: 9, vars: 2, consts: [[1, "card", "border-secondary", "panel", "h-100"], [1, "card-body", "capability-container", "d-flex", "h-100", 2, "overflow-y", "hidden"], [1, "row", "m-0", "pl-3"], [1, "col", "col-auto", "p-0", "my-3", "mr-3"]], template: function FixtureSettingsComponent_Template(rf, ctx) { if (rf & 1) {
27
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3);
28
+ i0.ɵɵelement(4, "lib-app-fixture-settings-position");
29
+ i0.ɵɵelementEnd();
30
+ i0.ɵɵelementStart(5, "div", 3);
31
+ i0.ɵɵelement(6, "lib-app-fixture-settings-stage");
32
+ i0.ɵɵelementEnd();
33
+ i0.ɵɵelementStart(7, "div", 3);
34
+ i0.ɵɵtext(8, "\u00A0");
35
+ i0.ɵɵelementEnd()()()();
36
+ } if (rf & 2) {
37
+ i0.ɵɵadvance(2);
38
+ i0.ɵɵclassProp("h-100", ctx.isChrome());
39
+ } }, dependencies: [i3.FixtureSettingsPositionComponent, i4.FixtureSettingsStageComponent], styles: [".dmx-channel[_ngcontent-%COMP%]{display:flex;float:left;width:28px;border:1px solid white;margin-left:-1px;margin-bottom:-1px}.dmx-channel-occupied[_ngcontent-%COMP%]{background-color:#fd7e14;border-left:none;border-right:none;cursor:move}.dmx-channel-occupied-start[_ngcontent-%COMP%]{border-left:1px solid white}.dmx-channel-occupied-end[_ngcontent-%COMP%]{border-right:1px solid white}"] }); }
40
+ }
41
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FixtureSettingsComponent, [{
42
+ type: Component,
43
+ args: [{ selector: 'lib-app-fixture-settings', template: "<div class=\"card border-secondary panel h-100\">\n <div class=\"card-body capability-container d-flex h-100\" style=\"overflow-y: hidden\">\n <!-- h-100 needs to be applied in chrome to avoid performance issues with many layouts (reflows)\n during sliding. But the class must not be applied e.g. in Safari, because the bottom margin is not correct\n anymore afterwards. -->\n <div class=\"row m-0 pl-3\" [class.h-100]=\"isChrome()\">\n <!-- Position -->\n <div class=\"col col-auto p-0 my-3 mr-3\">\n <lib-app-fixture-settings-position></lib-app-fixture-settings-position>\n </div>\n\n <!-- Stage -->\n <div class=\"col col-auto p-0 my-3 mr-3\">\n <lib-app-fixture-settings-stage></lib-app-fixture-settings-stage>\n </div>\n\n <!-- Fix spacing at the end -->\n <div class=\"col col-auto p-0 my-3 mr-3\">&nbsp;</div>\n </div>\n </div>\n</div>\n", styles: [".dmx-channel{display:flex;float:left;width:28px;border:1px solid white;margin-left:-1px;margin-bottom:-1px}.dmx-channel-occupied{background-color:#fd7e14;border-left:none;border-right:none;cursor:move}.dmx-channel-occupied-start{border-left:1px solid white}.dmx-channel-occupied-end{border-right:1px solid white}\n"] }]
44
+ }], () => [{ type: i1.FixtureService }, { type: i2.PresetService }], null); })();
45
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FixtureSettingsComponent, { className: "FixtureSettingsComponent" }); })();
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1zZXR0aW5ncy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2ZpeHR1cmUvZml4dHVyZS1zZXR0aW5ncy9maXh0dXJlLXNldHRpbmdzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvZml4dHVyZS9maXh0dXJlLXNldHRpbmdzL2ZpeHR1cmUtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7QUFPOUQsTUFBTSxPQUFPLHdCQUF3QjtJQUduQyxZQUFvQixjQUE4QixFQUFTLGFBQTRCO1FBQW5FLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFTLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBRnZGLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBR3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVEsS0FBSSxDQUFDO0lBRWIsUUFBUTtRQUNOLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7eUZBaEJVLHdCQUF3QjtvRUFBeEIsd0JBQXdCO1lDRi9CLEFBRkYsQUFKRixBQURGLDhCQUErQyxhQUN1QyxhQUk3QixhQUVYO1lBQ3RDLG9EQUF1RTtZQUN6RSxpQkFBTTtZQUdOLDhCQUF3QztZQUN0QyxpREFBaUU7WUFDbkUsaUJBQU07WUFHTiw4QkFBd0M7WUFBQSxzQkFBTTtZQUdwRCxBQURFLEFBREUsQUFEZ0QsaUJBQU0sRUFDaEQsRUFDRixFQUNGOztZQWZ3QixlQUEwQjtZQUExQix1Q0FBMEI7OztpRkRJM0Msd0JBQXdCO2NBTHBDLFNBQVM7MkJBQ0UsMEJBQTBCOztrRkFJekIsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXNldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVzZXQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hcHAtZml4dHVyZS1zZXR0aW5ncycsXG4gIHRlbXBsYXRlVXJsOiAnLi9maXh0dXJlLXNldHRpbmdzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZml4dHVyZS1zZXR0aW5ncy5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZpeHR1cmVTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRteENoYW5uZWxzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLCBwdWJsaWMgcHJlc2V0U2VydmljZTogUHJlc2V0U2VydmljZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTEyOyBpKyspIHtcbiAgICAgIHRoaXMuZG14Q2hhbm5lbHMucHVzaCgwKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgaXNDaHJvbWUoKTogYm9vbGVhbiB7XG4gICAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoJ0Nocm9tZS8nKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlci1zZWNvbmRhcnkgcGFuZWwgaC0xMDBcIj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBjYXBhYmlsaXR5LWNvbnRhaW5lciBkLWZsZXggaC0xMDBcIiBzdHlsZT1cIm92ZXJmbG93LXk6IGhpZGRlblwiPlxuICAgIDwhLS0gaC0xMDAgbmVlZHMgdG8gYmUgYXBwbGllZCBpbiBjaHJvbWUgdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzIHdpdGggbWFueSBsYXlvdXRzIChyZWZsb3dzKVxuICAgICAgZHVyaW5nIHNsaWRpbmcuIEJ1dCB0aGUgY2xhc3MgbXVzdCBub3QgYmUgYXBwbGllZCBlLmcuIGluIFNhZmFyaSwgYmVjYXVzZSB0aGUgYm90dG9tIG1hcmdpbiBpcyBub3QgY29ycmVjdFxuICAgICAgYW55bW9yZSBhZnRlcndhcmRzLiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwicm93IG0tMCBwbC0zXCIgW2NsYXNzLmgtMTAwXT1cImlzQ2hyb21lKClcIj5cbiAgICAgIDwhLS0gUG9zaXRpb24gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC1hdXRvIHAtMCBteS0zIG1yLTNcIj5cbiAgICAgICAgPGxpYi1hcHAtZml4dHVyZS1zZXR0aW5ncy1wb3NpdGlvbj48L2xpYi1hcHAtZml4dHVyZS1zZXR0aW5ncy1wb3NpdGlvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFN0YWdlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtYXV0byBwLTAgbXktMyBtci0zXCI+XG4gICAgICAgIDxsaWItYXBwLWZpeHR1cmUtc2V0dGluZ3Mtc3RhZ2U+PC9saWItYXBwLWZpeHR1cmUtc2V0dGluZ3Mtc3RhZ2U+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGaXggc3BhY2luZyBhdCB0aGUgZW5kIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtYXV0byBwLTAgbXktMyBtci0zXCI+Jm5ic3A7PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,138 @@
1
+ import { Component } from '@angular/core';
2
+ import { FixturePoolService } from '../services/fixture-pool.service';
3
+ import { FixtureService } from '../services/fixture.service';
4
+ import { IntroService } from '../services/intro.service';
5
+ import { PresetService } from '../services/preset.service';
6
+ import { ProjectService } from '../services/project.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../services/project.service";
9
+ import * as i2 from "../services/preset.service";
10
+ import * as i3 from "../services/fixture-pool.service";
11
+ import * as i4 from "../services/fixture.service";
12
+ import * as i5 from "../services/intro.service";
13
+ import * as i6 from "@angular/common";
14
+ import * as i7 from "@angular/forms";
15
+ import * as i8 from "ngx-sortablejs-plus";
16
+ import * as i9 from "@ngx-translate/core";
17
+ function FixtureComponent_div_12_div_1_Template(rf, ctx) { if (rf & 1) {
18
+ const _r1 = i0.ɵɵgetCurrentView();
19
+ i0.ɵɵelementStart(0, "div", 12)(1, "div", 13);
20
+ i0.ɵɵlistener("click", function FixtureComponent_div_12_div_1_Template_div_click_1_listener($event) { const item_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.selectFixture($event, item_r2)); });
21
+ i0.ɵɵelementStart(2, "div", 14);
22
+ i0.ɵɵelement(3, "i", 15);
23
+ i0.ɵɵelementEnd();
24
+ i0.ɵɵelementStart(4, "div", 16);
25
+ i0.ɵɵelement(5, "input", 17);
26
+ i0.ɵɵelementEnd();
27
+ i0.ɵɵelementStart(6, "div");
28
+ i0.ɵɵelement(7, "span");
29
+ i0.ɵɵtext(8);
30
+ i0.ɵɵelementEnd()()();
31
+ } if (rf & 2) {
32
+ const item_r2 = ctx.$implicit;
33
+ const ctx_r2 = i0.ɵɵnextContext(2);
34
+ i0.ɵɵclassProp("inactive-list-item", !ctx_r2.fixtureIsSelected(item_r2));
35
+ i0.ɵɵadvance(5);
36
+ i0.ɵɵproperty("ngModel", ctx_r2.fixtureIsSelected(item_r2));
37
+ i0.ɵɵadvance(2);
38
+ i0.ɵɵclassMapInterpolate1("icon-", ctx_r2.fixtureService.getFixtureIconClass(ctx_r2.fixtureService.getProfileByUuid(item_r2.profileUuid)), " mr-1");
39
+ i0.ɵɵadvance();
40
+ i0.ɵɵtextInterpolate1(" ", item_r2.name, " ");
41
+ } }
42
+ function FixtureComponent_div_12_Template(rf, ctx) { if (rf & 1) {
43
+ i0.ɵɵelementStart(0, "div", 10);
44
+ i0.ɵɵtemplate(1, FixtureComponent_div_12_div_1_Template, 9, 7, "div", 11);
45
+ i0.ɵɵelementEnd();
46
+ } if (rf & 2) {
47
+ const ctx_r2 = i0.ɵɵnextContext();
48
+ i0.ɵɵproperty("sortablejs", ctx_r2.projectService.project.fixtures);
49
+ i0.ɵɵadvance();
50
+ i0.ɵɵproperty("ngForOf", ctx_r2.projectService.project.fixtures);
51
+ } }
52
+ function FixtureComponent_div_13_Template(rf, ctx) { if (rf & 1) {
53
+ const _r4 = i0.ɵɵgetCurrentView();
54
+ i0.ɵɵelementStart(0, "div", 18)(1, "a", 19);
55
+ i0.ɵɵlistener("click", function FixtureComponent_div_13_Template_a_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); ctx_r2.openFixturePool(); return i0.ɵɵresetView(false); });
56
+ i0.ɵɵelement(2, "i", 20);
57
+ i0.ɵɵtext(3);
58
+ i0.ɵɵpipe(4, "translate");
59
+ i0.ɵɵelementEnd()();
60
+ } if (rf & 2) {
61
+ i0.ɵɵadvance(3);
62
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 1, "designer.fixture.no-fixtures"), "");
63
+ } }
64
+ export class FixtureComponent {
65
+ constructor(projectService, presetService, fixturePoolService, fixtureService, introService) {
66
+ this.projectService = projectService;
67
+ this.presetService = presetService;
68
+ this.fixturePoolService = fixturePoolService;
69
+ this.fixtureService = fixtureService;
70
+ this.introService = introService;
71
+ }
72
+ ngOnInit() { }
73
+ fixtureIsSelected(fixture) {
74
+ if (this.fixtureService.settingsSelection) {
75
+ return this.fixtureService.settingsFixtureIsSelected(fixture);
76
+ }
77
+ else {
78
+ return this.presetService.fixtureIsSelected(fixture);
79
+ }
80
+ }
81
+ selectFixture(event, fixture) {
82
+ if (this.fixtureService.settingsSelection) {
83
+ // select fixtures for the settings
84
+ this.fixtureService.switchSettingsFixtureSelection(fixture);
85
+ this.presetService.fixtureSelectionSettingsChanged.next();
86
+ }
87
+ else {
88
+ // select fixtures for the current preset
89
+ this.presetService.switchFixtureSelection(fixture);
90
+ this.presetService.fixtureSelectionChanged.next();
91
+ this.presetService.previewLive();
92
+ }
93
+ }
94
+ selectAll() {
95
+ this.presetService.selectAllFixtures();
96
+ this.presetService.fixtureSelectionChanged.next();
97
+ }
98
+ selectNone() {
99
+ this.presetService.selectNoFixtures();
100
+ this.presetService.fixtureSelectionChanged.next();
101
+ }
102
+ openFixturePool() {
103
+ this.fixturePoolService.open();
104
+ }
105
+ static { this.ɵfac = function FixtureComponent_Factory(t) { return new (t || FixtureComponent)(i0.ɵɵdirectiveInject(i1.ProjectService), i0.ɵɵdirectiveInject(i2.PresetService), i0.ɵɵdirectiveInject(i3.FixturePoolService), i0.ɵɵdirectiveInject(i4.FixtureService), i0.ɵɵdirectiveInject(i5.IntroService)); }; }
106
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixtureComponent, selectors: [["lib-app-fixture"]], decls: 14, vars: 4, consts: [[1, "card", "border-secondary", "h-100", "panel"], [1, "card-header", "d-flex"], [1, "ml-auto"], ["href", "#", 1, "btn", "btn-secondary", "m-0,", "p-0", 3, "click"], ["aria-hidden", "true", 1, "fa", "fa-square-o", "fa-fw"], ["aria-hidden", "true", 1, "fa", "fa-check-square-o", "fa-fw"], ["aria-hidden", "true", 1, "fa", "fa-cog", "fa-fw"], [1, "card-body", "h-100", "p-0"], ["class", "list-group", 3, "sortablejs", 4, "ngIf"], ["class", "w-100 h-100 d-flex p-3 text-center", 4, "ngIf"], [1, "list-group", 3, "sortablejs"], ["class", "list-group-item", 3, "inactive-list-item", 4, "ngFor", "ngForOf"], [1, "list-group-item"], [1, "row", "d-flex", 2, "cursor", "pointer", 3, "click"], [1, "col-auto", "list-sort-handle", "my-auto", 2, "cursor", "move", "cursor", "-webkit-grabbing"], ["aria-hidden", "true", 1, "fa", "fa-bars"], [1, "form-check"], ["type", "checkbox", "id", "active", 1, "form-check-input", 3, "ngModel"], [1, "w-100", "h-100", "d-flex", "p-3", "text-center"], ["href", "#", 1, "m-auto", 3, "click"], ["aria-hidden", "true", 1, "fa", "fa-plus-circle", "fa-fw"]], template: function FixtureComponent_Template(rf, ctx) { if (rf & 1) {
107
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div");
108
+ i0.ɵɵtext(3, "Fixtures");
109
+ i0.ɵɵelementEnd();
110
+ i0.ɵɵelementStart(4, "div", 2)(5, "a", 3);
111
+ i0.ɵɵlistener("click", function FixtureComponent_Template_a_click_5_listener() { ctx.selectNone(); return false; });
112
+ i0.ɵɵelement(6, "i", 4);
113
+ i0.ɵɵelementEnd();
114
+ i0.ɵɵelementStart(7, "a", 3);
115
+ i0.ɵɵlistener("click", function FixtureComponent_Template_a_click_7_listener() { ctx.selectAll(); return false; });
116
+ i0.ɵɵelement(8, "i", 5);
117
+ i0.ɵɵelementEnd();
118
+ i0.ɵɵelementStart(9, "a", 3);
119
+ i0.ɵɵlistener("click", function FixtureComponent_Template_a_click_9_listener() { ctx.openFixturePool(); return false; });
120
+ i0.ɵɵelement(10, "i", 6);
121
+ i0.ɵɵelementEnd()()();
122
+ i0.ɵɵelementStart(11, "div", 7);
123
+ i0.ɵɵtemplate(12, FixtureComponent_div_12_Template, 2, 2, "div", 8)(13, FixtureComponent_div_13_Template, 5, 3, "div", 9);
124
+ i0.ɵɵelementEnd()();
125
+ } if (rf & 2) {
126
+ i0.ɵɵclassProp("card-intro-active", ctx.introService.showStep("fixtures"));
127
+ i0.ɵɵadvance(12);
128
+ i0.ɵɵproperty("ngIf", ctx.presetService.selectedPreset);
129
+ i0.ɵɵadvance();
130
+ i0.ɵɵproperty("ngIf", ctx.projectService.project.fixtures.length == 0);
131
+ } }, dependencies: [i6.NgForOf, i6.NgIf, i7.CheckboxControlValueAccessor, i7.NgControlStatus, i7.NgModel, i8.SortablejsDirective, i9.TranslatePipe] }); }
132
+ }
133
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FixtureComponent, [{
134
+ type: Component,
135
+ args: [{ selector: 'lib-app-fixture', template: "<div class=\"card border-secondary h-100 panel\" [class.card-intro-active]=\"introService.showStep('fixtures')\">\n <div class=\"card-header d-flex\">\n <div>Fixtures</div>\n <div class=\"ml-auto\">\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"selectNone(); (false)\"\n ><i class=\"fa fa-square-o fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"selectAll(); (false)\"\n ><i class=\"fa fa-check-square-o fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"openFixturePool(); (false)\"\n ><i class=\"fa fa-cog fa-fw\" aria-hidden=\"true\"></i\n ></a>\n </div>\n </div>\n\n <div class=\"card-body h-100 p-0\">\n <!-- List of fixtures -->\n <div *ngIf=\"presetService.selectedPreset\" class=\"list-group\" [sortablejs]=\"projectService.project.fixtures\">\n <div\n class=\"list-group-item\"\n *ngFor=\"let item of projectService.project.fixtures\"\n [class.inactive-list-item]=\"!fixtureIsSelected(item)\"\n >\n <div class=\"row d-flex\" (click)=\"selectFixture($event, item)\" style=\"cursor: pointer\">\n <div class=\"col-auto list-sort-handle my-auto\" style=\"cursor: move; cursor: -webkit-grabbing\">\n <i class=\"fa fa-bars\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"form-check\">\n <input type=\"checkbox\" class=\"form-check-input\" id=\"active\" [ngModel]=\"fixtureIsSelected(item)\" />\n </div>\n <div>\n <span class=\"icon-{{ fixtureService.getFixtureIconClass(fixtureService.getProfileByUuid(item.profileUuid)) }} mr-1\"></span>\n {{ item.name }}\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"projectService.project.fixtures.length == 0\" class=\"w-100 h-100 d-flex p-3 text-center\">\n <a href=\"#\" class=\"m-auto\" (click)=\"openFixturePool(); (false)\"\n ><i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i> {{ 'designer.fixture.no-fixtures' | translate }}</a\n >\n </div>\n </div>\n</div>\n" }]
136
+ }], () => [{ type: i1.ProjectService }, { type: i2.PresetService }, { type: i3.FixturePoolService }, { type: i4.FixtureService }, { type: i5.IntroService }], null); })();
137
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FixtureComponent, { className: "FixtureComponent" }); })();
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2ZpeHR1cmUvZml4dHVyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL2ZpeHR1cmUvZml4dHVyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ2tCckQsQUFMRiwrQkFJQyxjQUN1RjtJQUE5RCxpTkFBUyxxQ0FBMkIsS0FBQztJQUMzRCwrQkFBOEY7SUFDNUYsd0JBQTZDO0lBQy9DLGlCQUFNO0lBQ04sK0JBQXdCO0lBQ3RCLDRCQUFrRztJQUNwRyxpQkFBTTtJQUNOLDJCQUFLO0lBQ0gsdUJBQTJIO0lBQzNILFlBQ0Y7SUFFSixBQURFLEFBREUsaUJBQU0sRUFDRixFQUNGOzs7O0lBZEosd0VBQXFEO0lBT1csZUFBbUM7SUFBbkMsMkRBQW1DO0lBR3pGLGVBQTZHO0lBQTdHLG1KQUE2RztJQUNuSCxjQUNGO0lBREUsNkNBQ0Y7OztJQWhCTiwrQkFBNEc7SUFDMUcseUVBSUM7SUFjSCxpQkFBTTs7O0lBbkJ1RCxtRUFBOEM7SUFHdEYsY0FBa0M7SUFBbEMsZ0VBQWtDOzs7O0lBbUJyRCxBQURGLCtCQUFvRyxZQUUvRjtJQUR3QixrSkFB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b250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaXh0dXJlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUnO1xuaW1wb3J0IHsgRml4dHVyZVBvb2xTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZml4dHVyZS1wb29sLnNlcnZpY2UnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSW50cm9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaW50cm8uc2VydmljZSc7XG5pbXBvcnQgeyBQcmVzZXRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJlc2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvamVjdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9qZWN0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYXBwLWZpeHR1cmUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZml4dHVyZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpeHR1cmUuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGaXh0dXJlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHByb2plY3RTZXJ2aWNlOiBQcm9qZWN0U2VydmljZSxcbiAgICBwdWJsaWMgcHJlc2V0U2VydmljZTogUHJlc2V0U2VydmljZSxcbiAgICBwcml2YXRlIGZpeHR1cmVQb29sU2VydmljZTogRml4dHVyZVBvb2xTZXJ2aWNlLFxuICAgIHB1YmxpYyBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHVibGljIGludHJvU2VydmljZTogSW50cm9TZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgZml4dHVyZUlzU2VsZWN0ZWQoZml4dHVyZTogRml4dHVyZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmZpeHR1cmVTZXJ2aWNlLnNldHRpbmdzU2VsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5maXh0dXJlU2VydmljZS5zZXR0aW5nc0ZpeHR1cmVJc1NlbGVjdGVkKGZpeHR1cmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmVzZXRTZXJ2aWNlLmZpeHR1cmVJc1NlbGVjdGVkKGZpeHR1cmUpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEZpeHR1cmUoZXZlbnQ6IGFueSwgZml4dHVyZTogRml4dHVyZSkge1xuICAgIGlmICh0aGlzLmZpeHR1cmVTZXJ2aWNlLnNldHRpbmdzU2VsZWN0aW9uKSB7XG4gICAgICAvLyBzZWxlY3QgZml4dHVyZXMgZm9yIHRoZSBzZXR0aW5nc1xuICAgICAgdGhpcy5maXh0dXJlU2VydmljZS5zd2l0Y2hTZXR0aW5nc0ZpeHR1cmVTZWxlY3Rpb24oZml4dHVyZSk7XG4gICAgICB0aGlzLnByZXNldFNlcnZpY2UuZml4dHVyZVNlbGVjdGlvblNldHRpbmdzQ2hhbmdlZC5uZXh0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNlbGVjdCBmaXh0dXJlcyBmb3IgdGhlIGN1cnJlbnQgcHJlc2V0XG4gICAgICB0aGlzLnByZXNldFNlcnZpY2Uuc3dpdGNoRml4dHVyZVNlbGVjdGlvbihmaXh0dXJlKTtcbiAgICAgIHRoaXMucHJlc2V0U2VydmljZS5maXh0dXJlU2VsZWN0aW9uQ2hhbmdlZC5uZXh0KCk7XG4gICAgICB0aGlzLnByZXNldFNlcnZpY2UucHJldmlld0xpdmUoKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdEFsbEZpeHR1cmVzKCk7XG4gICAgdGhpcy5wcmVzZXRTZXJ2aWNlLmZpeHR1cmVTZWxlY3Rpb25DaGFuZ2VkLm5leHQoKTtcbiAgfVxuXG4gIHNlbGVjdE5vbmUoKSB7XG4gICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdE5vRml4dHVyZXMoKTtcbiAgICB0aGlzLnByZXNldFNlcnZpY2UuZml4dHVyZVNlbGVjdGlvbkNoYW5nZWQubmV4dCgpO1xuICB9XG5cbiAgb3BlbkZpeHR1cmVQb29sKCkge1xuICAgIHRoaXMuZml4dHVyZVBvb2xTZXJ2aWNlLm9wZW4oKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyLXNlY29uZGFyeSBoLTEwMCBwYW5lbFwiIFtjbGFzcy5jYXJkLWludHJvLWFjdGl2ZV09XCJpbnRyb1NlcnZpY2Uuc2hvd1N0ZXAoJ2ZpeHR1cmVzJylcIj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleFwiPlxuICAgIDxkaXY+Rml4dHVyZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWwtYXV0b1wiPlxuICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IG0tMCwgcC0wXCIgKGNsaWNrKT1cInNlbGVjdE5vbmUoKTsgKGZhbHNlKVwiXG4gICAgICAgID48aSBjbGFzcz1cImZhIGZhLXNxdWFyZS1vIGZhLWZ3XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pXG4gICAgICA+PC9hPlxuICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IG0tMCwgcC0wXCIgKGNsaWNrKT1cInNlbGVjdEFsbCgpOyAoZmFsc2UpXCJcbiAgICAgICAgPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stc3F1YXJlLW8gZmEtZndcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2lcbiAgICAgID48L2E+XG4gICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgbS0wLCBwLTBcIiAoY2xpY2spPVwib3BlbkZpeHR1cmVQb29sKCk7IChmYWxzZSlcIlxuICAgICAgICA+PGkgY2xhc3M9XCJmYSBmYS1jb2cgZmEtZndcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2lcbiAgICAgID48L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgaC0xMDAgcC0wXCI+XG4gICAgPCEtLSBMaXN0IG9mIGZpeHR1cmVzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJwcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0XCIgY2xhc3M9XCJsaXN0LWdyb3VwXCIgW3NvcnRhYmxlanNdPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlc1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHByb2plY3RTZXJ2aWNlLnByb2plY3QuZml4dHVyZXNcIlxuICAgICAgICBbY2xhc3MuaW5hY3RpdmUtbGlzdC1pdGVtXT1cIiFmaXh0dXJlSXNTZWxlY3RlZChpdGVtKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4XCIgKGNsaWNrKT1cInNlbGVjdEZpeHR1cmUoJGV2ZW50LCBpdGVtKVwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIGxpc3Qtc29ydC1oYW5kbGUgbXktYXV0b1wiIHN0eWxlPVwiY3Vyc29yOiBtb3ZlOyBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmdcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFyc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwiYWN0aXZlXCIgW25nTW9kZWxdPVwiZml4dHVyZUlzU2VsZWN0ZWQoaXRlbSlcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24te3sgZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUljb25DbGFzcyhmaXh0dXJlU2VydmljZS5nZXRQcm9maWxlQnlVdWlkKGl0ZW0ucHJvZmlsZVV1aWQpKSB9fSBtci0xXCI+PC9zcGFuPlxuICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwicHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlcy5sZW5ndGggPT0gMFwiIGNsYXNzPVwidy0xMDAgaC0xMDAgZC1mbGV4IHAtMyB0ZXh0LWNlbnRlclwiPlxuICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cIm0tYXV0b1wiIChjbGljayk9XCJvcGVuRml4dHVyZVBvb2woKTsgKGZhbHNlKVwiXG4gICAgICAgID48aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlIGZhLWZ3XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnZGVzaWduZXIuZml4dHVyZS5uby1maXh0dXJlcycgfCB0cmFuc2xhdGUgfX08L2FcbiAgICAgID5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,145 @@
1
+ import { Component, HostListener } from '@angular/core';
2
+ import { TranslateService } from '@ngx-translate/core';
3
+ import { BsModalRef } from 'ngx-bootstrap/modal';
4
+ import { ToastrService } from 'ngx-toastr';
5
+ import { Subject } from 'rxjs';
6
+ import { map } from 'rxjs/operators';
7
+ import { FixtureProfile } from '../../models/fixture-profile';
8
+ import { FixtureService } from '../../services/fixture.service';
9
+ import { ProjectService } from '../../services/project.service';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "ngx-bootstrap/modal";
12
+ import * as i2 from "@ngx-translate/core";
13
+ import * as i3 from "ngx-toastr";
14
+ import * as i4 from "../../services/fixture.service";
15
+ import * as i5 from "../../services/project.service";
16
+ import * as i6 from "ngx-dropzone-wrapper";
17
+ export class FixturePoolCreateFromFileComponent {
18
+ constructor(bsModalRef, translateService, toastrService, fixtureService, projectService) {
19
+ this.bsModalRef = bsModalRef;
20
+ this.translateService = translateService;
21
+ this.toastrService = toastrService;
22
+ this.fixtureService = fixtureService;
23
+ this.projectService = projectService;
24
+ this.onClose = new Subject();
25
+ }
26
+ ngOnInit() {
27
+ this.dropzoneConfig = {
28
+ url: 'dummy',
29
+ addRemoveLinks: false,
30
+ maxFilesize: 10 /* 10 MB */,
31
+ acceptedFiles: '.json',
32
+ timeout: 0,
33
+ accept: (file, done) => {
34
+ const reader = new FileReader();
35
+ reader.addEventListener('loadend', (event) => {
36
+ // validate the file
37
+ const text = event.target.result;
38
+ const json = JSON.parse(text);
39
+ if (json['$schema'].match('https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/schema-(.*)/schemas/fixture.json')) {
40
+ // create the metadata from the file. we don't have the corresponding
41
+ // manufacturer-file, therefore we just assume the attributes from the
42
+ // fixture-file.
43
+ const manufacturerShortName = json['manufacturerKey'];
44
+ const manufacturerName = manufacturerShortName;
45
+ const uuid = manufacturerShortName + '/' + json['fixtureKey'];
46
+ const profile = new FixtureProfile(json);
47
+ profile.manufacturerShortName = manufacturerShortName;
48
+ profile.manufacturerName = manufacturerName;
49
+ profile.uuid = uuid;
50
+ profile.createdFromFile = true;
51
+ // add the profile to the project, if not already added
52
+ const loadedProfile = this.fixtureService.getProfileByUuid(uuid);
53
+ if (!loadedProfile) {
54
+ this.projectService.project.fixtureProfiles.push(profile);
55
+ }
56
+ // add a new fixture from this profile
57
+ this.onClose.next(profile);
58
+ this.bsModalRef.hide();
59
+ }
60
+ else {
61
+ // show an error toast
62
+ const msg = 'designer.fixture-pool.invalid-fixture-profile-file';
63
+ const title = 'designer.misc.toast-upload-error-title';
64
+ this.translateService.get([msg, title]).subscribe((result) => {
65
+ this.toastrService.error(result[msg], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });
66
+ });
67
+ }
68
+ done('noerr');
69
+ });
70
+ reader.readAsText(file);
71
+ },
72
+ previewTemplate: `
73
+ <div style="display: none;">
74
+ <!-- No preview -->
75
+ </div>
76
+ `,
77
+ };
78
+ this.translateService
79
+ .get('designer.misc.dropzone-message')
80
+ .pipe(map((result) => {
81
+ this.uploadMessage = '<h3 class="mb-0"><i class="fa fa-cloud-upload"></i></h3>' + result;
82
+ }))
83
+ .subscribe();
84
+ }
85
+ onUploadError(args) {
86
+ if (args[1] === 'noerr') {
87
+ // this error is set in the accept event listener -> everything OK
88
+ return;
89
+ }
90
+ const msg = 'designer.misc.toast-upload-error';
91
+ const title = 'designer.misc.toast-upload-error-title';
92
+ this.translateService.get([msg, title]).subscribe((result) => {
93
+ this.toastrService.error(result[msg] + args[1], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });
94
+ });
95
+ }
96
+ ok() {
97
+ this.onClose.next(undefined);
98
+ this.bsModalRef.hide();
99
+ }
100
+ cancel() {
101
+ this.onClose.next(undefined);
102
+ this.bsModalRef.hide();
103
+ }
104
+ handleKeyboardEvent(event) {
105
+ this.ok();
106
+ }
107
+ static { this.ɵfac = function FixturePoolCreateFromFileComponent_Factory(t) { return new (t || FixturePoolCreateFromFileComponent)(i0.ɵɵdirectiveInject(i1.BsModalRef), i0.ɵɵdirectiveInject(i2.TranslateService), i0.ɵɵdirectiveInject(i3.ToastrService), i0.ɵɵdirectiveInject(i4.FixtureService), i0.ɵɵdirectiveInject(i5.ProjectService)); }; }
108
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FixturePoolCreateFromFileComponent, selectors: [["lib-fixture-pool-create-from-file"]], hostBindings: function FixturePoolCreateFromFileComponent_HostBindings(rf, ctx) { if (rf & 1) {
109
+ i0.ɵɵlistener("keydown.enter", function FixturePoolCreateFromFileComponent_keydown_enter_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument);
110
+ } }, decls: 13, vars: 9, consts: [[1, "modal-header"], [1, "modal-title", "pull-left"], ["type", "button", "aria-label", "Close", 1, "close", "pull-right", 3, "click"], ["aria-hidden", "true"], [1, "modal-body"], [3, "error", "config", "useDropzoneClass", "message"], [1, "modal-footer"], ["type", "button", 1, "btn", "btn-primary", 3, "click"]], template: function FixturePoolCreateFromFileComponent_Template(rf, ctx) { if (rf & 1) {
111
+ i0.ɵɵelementStart(0, "div", 0)(1, "h4", 1);
112
+ i0.ɵɵtext(2);
113
+ i0.ɵɵpipe(3, "translate");
114
+ i0.ɵɵelementEnd();
115
+ i0.ɵɵelementStart(4, "button", 2);
116
+ i0.ɵɵlistener("click", function FixturePoolCreateFromFileComponent_Template_button_click_4_listener() { return ctx.bsModalRef.hide(); });
117
+ i0.ɵɵelementStart(5, "span", 3);
118
+ i0.ɵɵtext(6, "\u00D7");
119
+ i0.ɵɵelementEnd()()();
120
+ i0.ɵɵelementStart(7, "div", 4)(8, "dropzone", 5);
121
+ i0.ɵɵlistener("error", function FixturePoolCreateFromFileComponent_Template_dropzone_error_8_listener($event) { return ctx.onUploadError($event); });
122
+ i0.ɵɵelementEnd()();
123
+ i0.ɵɵelementStart(9, "div", 6)(10, "button", 7);
124
+ i0.ɵɵlistener("click", function FixturePoolCreateFromFileComponent_Template_button_click_10_listener() { return ctx.ok(); });
125
+ i0.ɵɵtext(11);
126
+ i0.ɵɵpipe(12, "translate");
127
+ i0.ɵɵelementEnd()();
128
+ } if (rf & 2) {
129
+ i0.ɵɵadvance(2);
130
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 5, "designer.fixture-pool.create-fixture-from-profile-file-dialog-title"));
131
+ i0.ɵɵadvance(6);
132
+ i0.ɵɵproperty("config", ctx.dropzoneConfig)("useDropzoneClass", "false")("message", ctx.uploadMessage);
133
+ i0.ɵɵadvance(3);
134
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(12, 7, "designer.misc.ok"));
135
+ } }, dependencies: [i6.DropzoneComponent, i2.TranslatePipe] }); }
136
+ }
137
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FixturePoolCreateFromFileComponent, [{
138
+ type: Component,
139
+ args: [{ selector: 'lib-fixture-pool-create-from-file', template: "<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.fixture-pool.create-fixture-from-profile-file-dialog-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <!-- Dropzone -->\n <dropzone [config]=\"dropzoneConfig\" [useDropzoneClass]=\"'false'\" [message]=\"uploadMessage\" (error)=\"onUploadError($event)\"></dropzone>\n</div>\n<div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n" }]
140
+ }], () => [{ type: i1.BsModalRef }, { type: i2.TranslateService }, { type: i3.ToastrService }, { type: i4.FixtureService }, { type: i5.ProjectService }], { handleKeyboardEvent: [{
141
+ type: HostListener,
142
+ args: ['document:keydown.enter', ['$event']]
143
+ }] }); })();
144
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FixturePoolCreateFromFileComponent, { className: "FixturePoolCreateFromFileComponent" }); })();
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1wb29sLWNyZWF0ZS1mcm9tLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9maXh0dXJlLXBvb2wvZml4dHVyZS1wb29sLWNyZWF0ZS1mcm9tLWZpbGUvZml4dHVyZS1wb29sLWNyZWF0ZS1mcm9tLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9maXh0dXJlLXBvb2wvZml4dHVyZS1wb29sLWNyZWF0ZS1mcm9tLWZpbGUvZml4dHVyZS1wb29sLWNyZWF0ZS1mcm9tLWZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7O0FBT2hFLE1BQU0sT0FBTyxrQ0FBa0M7SUFLN0MsWUFDUyxVQUFzQixFQUNyQixnQkFBa0MsRUFDbEMsYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsY0FBOEI7UUFKL0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFQakMsWUFBTyxHQUE0QixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBUXJELENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsR0FBRztZQUNwQixHQUFHLEVBQUUsT0FBTztZQUNaLGNBQWMsRUFBRSxLQUFLO1lBQ3JCLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVztZQUMzQixhQUFhLEVBQUUsT0FBTztZQUN0QixPQUFPLEVBQUUsQ0FBQztZQUNWLE1BQU0sRUFBRSxDQUFDLElBQVMsRUFBRSxJQUFTLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNoRCxvQkFBb0I7b0JBQ3BCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO29CQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM5QixJQUNFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQ25CLDZHQUE2RyxDQUM5RyxFQUNELENBQUM7d0JBQ0QscUVBQXFFO3dCQUNyRSxzRUFBc0U7d0JBQ3RFLGdCQUFnQjt3QkFDaEIsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQzt3QkFDdEQsTUFBTSxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FBQzt3QkFDL0MsTUFBTSxJQUFJLEdBQUcscUJBQXFCLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBRXpDLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQzt3QkFDdEQsT0FBTyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO3dCQUM1QyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzt3QkFDcEIsT0FBTyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBRS9CLHVEQUF1RDt3QkFDdkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDakUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDOzRCQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUM1RCxDQUFDO3dCQUVELHNDQUFzQzt3QkFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3pCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixzQkFBc0I7d0JBQ3RCLE1BQU0sR0FBRyxHQUFHLG9EQUFvRCxDQUFDO3dCQUNqRSxNQUFNLEtBQUssR0FBRyx3Q0FBd0MsQ0FBQzt3QkFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFOzRCQUMzRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUM3RyxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUVELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixDQUFDO1lBQ0QsZUFBZSxFQUFFOzs7O09BSWhCO1NBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0I7YUFDbEIsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO2FBQ3JDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNiLElBQUksQ0FBQyxhQUFhLEdBQUcsMERBQTBELEdBQUcsTUFBTSxDQUFDO1FBQzNGLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVNLGFBQWEsQ0FBQyxJQUFTO1FBQzVCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3hCLGtFQUFrRTtZQUNsRSxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLGtDQUFrQyxDQUFDO1FBQy9DLE1BQU0sS0FBSyxHQUFHLHdDQUF3QyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMzRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2SCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxFQUFFO1FBQ0EsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUdELG1CQUFtQixDQUFDLEtBQVU7UUFDNUIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQzttR0E3R1Usa0NBQWtDO29FQUFsQyxrQ0FBa0M7WUFBbEMsNkhBQUEsK0JBQTJCLGlDQUFPOztZQ2Y3QyxBQURGLDhCQUEwQixZQUNVO1lBQUEsWUFBdUY7O1lBQUEsaUJBQUs7WUFDOUgsaUNBQThGO1lBQTVCLCtHQUFTLHFCQUFpQixJQUFDO1lBQzNGLCtCQUF5QjtZQUFBLHNCQUFPO1lBRXBDLEFBREUsQUFEa0MsaUJBQU8sRUFDaEMsRUFDTDtZQUdKLEFBRkYsOEJBQXdCLGtCQUVxRztZQUFoQyx1SEFBUyx5QkFBcUIsSUFBQztZQUM1SCxBQUQ2SCxpQkFBVyxFQUNsSTtZQUVKLEFBREYsOEJBQTBCLGlCQUNxQztZQUFmLGdIQUFTLFFBQUksSUFBQztZQUFDLGFBQW9DOztZQUNuRyxBQURtRyxpQkFBUyxFQUN0Rzs7WUFYOEIsZUFBdUY7WUFBdkYsaUhBQXVGO1lBTy9HLGVBQXlCO1lBQThCLEFBQTdCLEFBQTFCLDJDQUF5Qiw2QkFBNkIsOEJBQTBCO1lBRzdCLGVBQW9DO1lBQXBDLCtEQUFvQzs7O2lGREt0RixrQ0FBa0M7Y0FMOUMsU0FBUzsyQkFDRSxtQ0FBbUM7Z0tBK0c3QyxtQkFBbUI7a0JBRGxCLFlBQVk7bUJBQUMsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7O2tGQTFHdkMsa0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgRHJvcHpvbmVDb25maWdJbnRlcmZhY2UgfSBmcm9tICduZ3gtZHJvcHpvbmUtd3JhcHBlcic7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGaXh0dXJlUHJvZmlsZSB9IGZyb20gJy4uLy4uL21vZGVscy9maXh0dXJlLXByb2ZpbGUnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvamVjdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9qZWN0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZml4dHVyZS1wb29sLWNyZWF0ZS1mcm9tLWZpbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZml4dHVyZS1wb29sLWNyZWF0ZS1mcm9tLWZpbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maXh0dXJlLXBvb2wtY3JlYXRlLWZyb20tZmlsZS5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZpeHR1cmVQb29sQ3JlYXRlRnJvbUZpbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgZHJvcHpvbmVDb25maWc6IERyb3B6b25lQ29uZmlnSW50ZXJmYWNlO1xuICBwdWJsaWMgdXBsb2FkTWVzc2FnZTogc3RyaW5nO1xuICBwdWJsaWMgb25DbG9zZTogU3ViamVjdDxGaXh0dXJlUHJvZmlsZT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBic01vZGFsUmVmOiBCc01vZGFsUmVmLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm9qZWN0U2VydmljZTogUHJvamVjdFNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZHJvcHpvbmVDb25maWcgPSB7XG4gICAgICB1cmw6ICdkdW1teScsXG4gICAgICBhZGRSZW1vdmVMaW5rczogZmFsc2UsXG4gICAgICBtYXhGaWxlc2l6ZTogMTAgLyogMTAgTUIgKi8sXG4gICAgICBhY2NlcHRlZEZpbGVzOiAnLmpzb24nLFxuICAgICAgdGltZW91dDogMCxcbiAgICAgIGFjY2VwdDogKGZpbGU6IGFueSwgZG9uZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAvLyB2YWxpZGF0ZSB0aGUgZmlsZVxuICAgICAgICAgIGNvbnN0IHRleHQgPSBldmVudC50YXJnZXQucmVzdWx0O1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGpzb25bJyRzY2hlbWEnXS5tYXRjaChcbiAgICAgICAgICAgICAgJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9PcGVuTGlnaHRpbmdQcm9qZWN0L29wZW4tZml4dHVyZS1saWJyYXJ5L3NjaGVtYS0oLiopL3NjaGVtYXMvZml4dHVyZS5qc29uJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSBtZXRhZGF0YSBmcm9tIHRoZSBmaWxlLiB3ZSBkb24ndCBoYXZlIHRoZSBjb3JyZXNwb25kaW5nXG4gICAgICAgICAgICAvLyBtYW51ZmFjdHVyZXItZmlsZSwgdGhlcmVmb3JlIHdlIGp1c3QgYXNzdW1lIHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhlXG4gICAgICAgICAgICAvLyBmaXh0dXJlLWZpbGUuXG4gICAgICAgICAgICBjb25zdCBtYW51ZmFjdHVyZXJTaG9ydE5hbWUgPSBqc29uWydtYW51ZmFjdHVyZXJLZXknXTtcbiAgICAgICAgICAgIGNvbnN0IG1hbnVmYWN0dXJlck5hbWUgPSBtYW51ZmFjdHVyZXJTaG9ydE5hbWU7XG4gICAgICAgICAgICBjb25zdCB1dWlkID0gbWFudWZhY3R1cmVyU2hvcnROYW1lICsgJy8nICsganNvblsnZml4dHVyZUtleSddO1xuICAgICAgICAgICAgY29uc3QgcHJvZmlsZSA9IG5ldyBGaXh0dXJlUHJvZmlsZShqc29uKTtcblxuICAgICAgICAgICAgcHJvZmlsZS5tYW51ZmFjdHVyZXJTaG9ydE5hbWUgPSBtYW51ZmFjdHVyZXJTaG9ydE5hbWU7XG4gICAgICAgICAgICBwcm9maWxlLm1hbnVmYWN0dXJlck5hbWUgPSBtYW51ZmFjdHVyZXJOYW1lO1xuICAgICAgICAgICAgcHJvZmlsZS51dWlkID0gdXVpZDtcbiAgICAgICAgICAgIHByb2ZpbGUuY3JlYXRlZEZyb21GaWxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gYWRkIHRoZSBwcm9maWxlIHRvIHRoZSBwcm9qZWN0LCBpZiBub3QgYWxyZWFkeSBhZGRlZFxuICAgICAgICAgICAgY29uc3QgbG9hZGVkUHJvZmlsZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0UHJvZmlsZUJ5VXVpZCh1dWlkKTtcbiAgICAgICAgICAgIGlmICghbG9hZGVkUHJvZmlsZSkge1xuICAgICAgICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuZml4dHVyZVByb2ZpbGVzLnB1c2gocHJvZmlsZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFkZCBhIG5ldyBmaXh0dXJlIGZyb20gdGhpcyBwcm9maWxlXG4gICAgICAgICAgICB0aGlzLm9uQ2xvc2UubmV4dChwcm9maWxlKTtcbiAgICAgICAgICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNob3cgYW4gZXJyb3IgdG9hc3RcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9ICdkZXNpZ25lci5maXh0dXJlLXBvb2wuaW52YWxpZC1maXh0dXJlLXByb2ZpbGUtZmlsZSc7XG4gICAgICAgICAgICBjb25zdCB0aXRsZSA9ICdkZXNpZ25lci5taXNjLnRvYXN0LXVwbG9hZC1lcnJvci10aXRsZSc7XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KFttc2csIHRpdGxlXSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKHJlc3VsdFttc2ddLCByZXN1bHRbdGl0bGVdLCB7IHRpbWVPdXQ6IDAsIGV4dGVuZGVkVGltZU91dDogMCwgZW5hYmxlSHRtbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUoJ25vZXJyJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgICAgIH0sXG4gICAgICBwcmV2aWV3VGVtcGxhdGU6IGBcbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuICAgICAgICA8IS0tIE5vIHByZXZpZXcgLS0+XG4gICAgICA8L2Rpdj5cbiAgICAgIGAsXG4gICAgfTtcblxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZVxuICAgICAgLmdldCgnZGVzaWduZXIubWlzYy5kcm9wem9uZS1tZXNzYWdlJylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkTWVzc2FnZSA9ICc8aDMgY2xhc3M9XCJtYi0wXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG91ZC11cGxvYWRcIj48L2k+PC9oMz4nICsgcmVzdWx0O1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG9uVXBsb2FkRXJyb3IoYXJnczogYW55KSB7XG4gICAgaWYgKGFyZ3NbMV0gPT09ICdub2VycicpIHtcbiAgICAgIC8vIHRoaXMgZXJyb3IgaXMgc2V0IGluIHRoZSBhY2NlcHQgZXZlbnQgbGlzdGVuZXIgLT4gZXZlcnl0aGluZyBPS1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1zZyA9ICdkZXNpZ25lci5taXNjLnRvYXN0LXVwbG9hZC1lcnJvcic7XG4gICAgY29uc3QgdGl0bGUgPSAnZGVzaWduZXIubWlzYy50b2FzdC11cGxvYWQtZXJyb3ItdGl0bGUnO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoW21zZywgdGl0bGVdKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKHJlc3VsdFttc2ddICsgYXJnc1sxXSwgcmVzdWx0W3RpdGxlXSwgeyB0aW1lT3V0OiAwLCBleHRlbmRlZFRpbWVPdXQ6IDAsIGVuYWJsZUh0bWw6IHRydWUgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvaygpIHtcbiAgICB0aGlzLm9uQ2xvc2UubmV4dCh1bmRlZmluZWQpO1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5vbkNsb3NlLm5leHQodW5kZWZpbmVkKTtcbiAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lbnRlcicsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub2soKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZSBwdWxsLWxlZnRcIj57eyAnZGVzaWduZXIuZml4dHVyZS1wb29sLmNyZWF0ZS1maXh0dXJlLWZyb20tcHJvZmlsZS1maWxlLWRpYWxvZy10aXRsZScgfCB0cmFuc2xhdGUgfX08L2g0PlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlIHB1bGwtcmlnaHRcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwiYnNNb2RhbFJlZi5oaWRlKClcIj5cbiAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgPCEtLSBEcm9wem9uZSAtLT5cbiAgPGRyb3B6b25lIFtjb25maWddPVwiZHJvcHpvbmVDb25maWdcIiBbdXNlRHJvcHpvbmVDbGFzc109XCInZmFsc2UnXCIgW21lc3NhZ2VdPVwidXBsb2FkTWVzc2FnZVwiIChlcnJvcik9XCJvblVwbG9hZEVycm9yKCRldmVudClcIj48L2Ryb3B6b25lPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm9rKClcIj57eyAnZGVzaWduZXIubWlzYy5vaycgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbjwvZGl2PlxuIl19