@rocketshow/designer 1.32.0 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/de.json +2 -1
- package/assets/i18n/en.json +2 -1
- package/esm2022/lib/array-sort-pipe.mjs +30 -0
- package/esm2022/lib/designer.component.mjs +672 -0
- package/esm2022/lib/designer.module.mjs +186 -0
- package/esm2022/lib/designer.service.mjs +14 -0
- package/esm2022/lib/dropzone/dropzone.component.mjs +93 -0
- package/esm2022/lib/effect/effect-curve/effect-curve.component.mjs +577 -0
- package/esm2022/lib/effect/effect-pan-tilt/effect-pan-tilt.component.mjs +36 -0
- package/esm2022/lib/effect/effect.component.mjs +174 -0
- package/esm2022/lib/error-dialog/error-dialog.component.mjs +75 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.mjs +222 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.mjs +147 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.mjs +213 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.mjs +78 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.mjs +119 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability.component.mjs +169 -0
- package/esm2022/lib/fixture/fixture-channel/fixture-channel.component.mjs +162 -0
- package/esm2022/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.mjs +365 -0
- package/esm2022/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.mjs +151 -0
- package/esm2022/lib/fixture/fixture-settings/fixture-settings.component.mjs +46 -0
- package/esm2022/lib/fixture/fixture.component.mjs +148 -0
- package/esm2022/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.mjs +145 -0
- package/esm2022/lib/fixture-pool/fixture-pool.component.mjs +643 -0
- package/esm2022/lib/intro/intro.component.mjs +95 -0
- package/esm2022/lib/master-dimmer/master-dimmer.component.mjs +66 -0
- package/esm2022/lib/models/cached-fixture-capability.mjs +9 -0
- package/esm2022/lib/models/cached-fixture-channel.mjs +7 -0
- package/esm2022/lib/models/cached-fixture.mjs +6 -0
- package/esm2022/lib/models/color.mjs +8 -0
- package/esm2022/lib/models/composition.mjs +46 -0
- package/esm2022/lib/models/effect-curve-profile-channel.mjs +15 -0
- package/esm2022/lib/models/effect-curve.mjs +69 -0
- package/esm2022/lib/models/effect-pan-tilt.mjs +19 -0
- package/esm2022/lib/models/effect.mjs +12 -0
- package/esm2022/lib/models/fixture-capability-value.mjs +15 -0
- package/esm2022/lib/models/fixture-capability.mjs +84 -0
- package/esm2022/lib/models/fixture-channel-value.mjs +11 -0
- package/esm2022/lib/models/fixture-channel.mjs +24 -0
- package/esm2022/lib/models/fixture-matrix-pixel-group-constraints.mjs +27 -0
- package/esm2022/lib/models/fixture-matrix-pixel-group.mjs +12 -0
- package/esm2022/lib/models/fixture-matrix.mjs +25 -0
- package/esm2022/lib/models/fixture-mode-channel.mjs +26 -0
- package/esm2022/lib/models/fixture-mode.mjs +17 -0
- package/esm2022/lib/models/fixture-physical.mjs +14 -0
- package/esm2022/lib/models/fixture-profile.mjs +85 -0
- package/esm2022/lib/models/fixture-wheel-slot.mjs +26 -0
- package/esm2022/lib/models/fixture-wheel.mjs +15 -0
- package/esm2022/lib/models/fixture.mjs +40 -0
- package/esm2022/lib/models/preset-fixture.mjs +10 -0
- package/esm2022/lib/models/preset-region-scene.mjs +8 -0
- package/esm2022/lib/models/preset.mjs +65 -0
- package/esm2022/lib/models/project.mjs +78 -0
- package/esm2022/lib/models/scene-playback-region.mjs +11 -0
- package/esm2022/lib/models/scene.mjs +27 -0
- package/esm2022/lib/preset/preset-settings/preset-settings.component.mjs +194 -0
- package/esm2022/lib/preset/preset.component.mjs +131 -0
- package/esm2022/lib/preview/models/color-changer-3d.mjs +64 -0
- package/esm2022/lib/preview/models/fixture-3d.mjs +274 -0
- package/esm2022/lib/preview/models/moving-head-3d.mjs +124 -0
- package/esm2022/lib/preview/preview.component.mjs +219 -0
- package/esm2022/lib/project/project-browser/project-browser.component.mjs +143 -0
- package/esm2022/lib/project/project-import/project-import.component.mjs +107 -0
- package/esm2022/lib/project/project-save/project-save.component.mjs +178 -0
- package/esm2022/lib/project/project-share/project-share.component.mjs +71 -0
- package/esm2022/lib/scene/scene-settings/scene-settings.component.mjs +146 -0
- package/esm2022/lib/scene/scene.component.mjs +110 -0
- package/esm2022/lib/services/animation.service.mjs +16 -0
- package/esm2022/lib/services/config.service.mjs +28 -0
- package/esm2022/lib/services/effect.service.mjs +14 -0
- package/esm2022/lib/services/error-dialog.service.mjs +39 -0
- package/esm2022/lib/services/fixture-pool.service.mjs +30 -0
- package/esm2022/lib/services/fixture.service.mjs +639 -0
- package/esm2022/lib/services/hotkey-target-exclude.service.mjs +24 -0
- package/esm2022/lib/services/intro.service.mjs +140 -0
- package/esm2022/lib/services/preset.service.mjs +449 -0
- package/esm2022/lib/services/preview-mesh.service.mjs +57 -0
- package/esm2022/lib/services/preview.service.mjs +497 -0
- package/esm2022/lib/services/project-load.service.mjs +209 -0
- package/esm2022/lib/services/project.service.mjs +93 -0
- package/esm2022/lib/services/scene.service.mjs +164 -0
- package/esm2022/lib/services/timeline.service.mjs +726 -0
- package/esm2022/lib/services/user-ensure-login.service.mjs +38 -0
- package/esm2022/lib/services/user.service.mjs +89 -0
- package/esm2022/lib/services/uuid.service.mjs +23 -0
- package/esm2022/lib/services/warning-dialog.service.mjs +38 -0
- package/esm2022/lib/timeline/composition-settings/composition-settings.component.mjs +304 -0
- package/esm2022/lib/timeline/timeline-grid/timeline-grid.component.mjs +216 -0
- package/esm2022/lib/timeline/timeline.component.mjs +418 -0
- package/esm2022/lib/user/user-login/user-login.component.mjs +144 -0
- package/esm2022/lib/user/user-register/user-register.component.mjs +220 -0
- package/esm2022/lib/wait-dialog/wait-dialog.component.mjs +26 -0
- package/esm2022/lib/warning-dialog/warning-dialog.component.mjs +68 -0
- package/esm2022/public_api.mjs +7 -0
- package/esm2022/rocketshow-designer.mjs +5 -0
- package/fesm2022/rocketshow-designer.mjs +11171 -0
- package/fesm2022/rocketshow-designer.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/array-sort-pipe.d.ts +3 -0
- package/lib/designer.component.d.ts +19 -16
- package/lib/designer.module.d.ts +55 -0
- package/lib/designer.service.d.ts +3 -0
- package/lib/dropzone/dropzone.component.d.ts +24 -0
- package/lib/effect/effect-curve/effect-curve.component.d.ts +4 -1
- package/lib/effect/effect-pan-tilt/effect-pan-tilt.component.d.ts +3 -0
- package/lib/effect/effect.component.d.ts +3 -0
- package/lib/error-dialog/error-dialog.component.d.ts +3 -0
- package/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.d.ts +4 -1
- package/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.d.ts +3 -0
- package/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.d.ts +5 -2
- package/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.d.ts +3 -0
- package/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.d.ts +3 -0
- package/lib/fixture/fixture-capability/fixture-capability.component.d.ts +3 -0
- package/lib/fixture/fixture-channel/fixture-channel.component.d.ts +3 -0
- package/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.d.ts +3 -0
- package/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.d.ts +3 -0
- package/lib/fixture/fixture-settings/fixture-settings.component.d.ts +3 -0
- package/lib/fixture/fixture.component.d.ts +7 -3
- package/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.d.ts +3 -0
- package/lib/fixture-pool/fixture-pool.component.d.ts +3 -0
- package/lib/intro/intro.component.d.ts +3 -0
- package/lib/master-dimmer/master-dimmer.component.d.ts +3 -0
- package/lib/models/cached-fixture.d.ts +1 -0
- package/lib/models/fixture-matrix-pixel-group-constraints.d.ts +8 -0
- package/lib/models/fixture-matrix-pixel-group.d.ts +6 -0
- package/lib/models/fixture-matrix.d.ts +6 -0
- package/lib/models/fixture-mode-channel.d.ts +8 -0
- package/lib/models/fixture-mode.d.ts +3 -1
- package/lib/models/fixture-physical.d.ts +4 -0
- package/lib/models/fixture-profile.d.ts +5 -0
- package/lib/models/preset-fixture.d.ts +5 -0
- package/lib/models/preset.d.ts +2 -0
- package/lib/models/project.d.ts +3 -0
- package/lib/preset/preset-settings/preset-settings.component.d.ts +3 -0
- package/lib/preset/preset.component.d.ts +3 -0
- package/lib/preview/models/color-changer-3d.d.ts +1 -11
- package/lib/preview/models/fixture-3d.d.ts +11 -0
- package/lib/preview/models/moving-head-3d.d.ts +1 -11
- package/lib/preview/preview.component.d.ts +4 -4
- package/lib/project/project-browser/project-browser.component.d.ts +3 -0
- package/lib/project/project-import/project-import.component.d.ts +3 -0
- package/lib/project/project-save/project-save.component.d.ts +3 -0
- package/lib/project/project-share/project-share.component.d.ts +3 -0
- package/lib/scene/scene-settings/scene-settings.component.d.ts +3 -0
- package/lib/scene/scene.component.d.ts +3 -0
- package/lib/services/animation.service.d.ts +3 -0
- package/lib/services/config.service.d.ts +4 -0
- package/lib/services/effect.service.d.ts +3 -0
- package/lib/services/error-dialog.service.d.ts +3 -0
- package/lib/services/fixture-pool.service.d.ts +3 -0
- package/lib/services/fixture.service.d.ts +10 -2
- package/lib/services/hotkey-target-exclude.service.d.ts +3 -0
- package/lib/services/intro.service.d.ts +3 -0
- package/lib/services/preset.service.d.ts +7 -2
- package/lib/services/preview-mesh.service.d.ts +3 -0
- package/lib/services/preview.service.d.ts +6 -4
- package/lib/services/project-load.service.d.ts +8 -1
- package/lib/services/project.service.d.ts +5 -3
- package/lib/services/scene.service.d.ts +3 -0
- package/lib/services/timeline.service.d.ts +3 -0
- package/lib/services/user-ensure-login.service.d.ts +3 -0
- package/lib/services/user.service.d.ts +3 -0
- package/lib/services/uuid.service.d.ts +3 -0
- package/lib/services/warning-dialog.service.d.ts +3 -0
- package/lib/timeline/composition-settings/composition-settings.component.d.ts +5 -1
- package/lib/timeline/timeline-grid/timeline-grid.component.d.ts +3 -0
- package/lib/timeline/timeline.component.d.ts +3 -0
- package/lib/user/user-login/user-login.component.d.ts +3 -0
- package/lib/user/user-register/user-register.component.d.ts +3 -0
- package/lib/wait-dialog/wait-dialog.component.d.ts +3 -0
- package/lib/warning-dialog/warning-dialog.component.d.ts +3 -0
- package/package.json +20 -22
- package/rocketshow-designer-1.35.0.tgz +0 -0
- package/bundles/rocketshow-designer.umd.js +0 -9966
- package/bundles/rocketshow-designer.umd.js.map +0 -1
- package/bundles/rocketshow-designer.umd.min.js +0 -17
- package/bundles/rocketshow-designer.umd.min.js.map +0 -1
- package/esm2015/lib/array-sort-pipe.js +0 -28
- package/esm2015/lib/designer.component.js +0 -411
- package/esm2015/lib/designer.module.js +0 -117
- package/esm2015/lib/designer.service.js +0 -16
- package/esm2015/lib/effect/effect-curve/effect-curve.component.js +0 -325
- package/esm2015/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -30
- package/esm2015/lib/effect/effect.component.js +0 -73
- package/esm2015/lib/error-dialog/error-dialog.component.js +0 -42
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -141
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -128
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -163
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -60
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -87
- package/esm2015/lib/fixture/fixture-capability/fixture-capability.component.js +0 -97
- package/esm2015/lib/fixture/fixture-channel/fixture-channel.component.js +0 -66
- package/esm2015/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -200
- package/esm2015/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -31
- package/esm2015/lib/fixture/fixture-settings/fixture-settings.component.js +0 -35
- package/esm2015/lib/fixture/fixture.component.js +0 -70
- package/esm2015/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -128
- package/esm2015/lib/fixture-pool/fixture-pool.component.js +0 -331
- package/esm2015/lib/intro/intro.component.js +0 -25
- package/esm2015/lib/master-dimmer/master-dimmer.component.js +0 -41
- package/esm2015/lib/models/cached-fixture-capability.js +0 -9
- package/esm2015/lib/models/cached-fixture-channel.js +0 -7
- package/esm2015/lib/models/cached-fixture.js +0 -6
- package/esm2015/lib/models/color.js +0 -8
- package/esm2015/lib/models/composition.js +0 -46
- package/esm2015/lib/models/effect-curve-profile-channel.js +0 -15
- package/esm2015/lib/models/effect-curve.js +0 -69
- package/esm2015/lib/models/effect-pan-tilt.js +0 -19
- package/esm2015/lib/models/effect.js +0 -12
- package/esm2015/lib/models/fixture-capability-value.js +0 -15
- package/esm2015/lib/models/fixture-capability.js +0 -84
- package/esm2015/lib/models/fixture-channel-value.js +0 -11
- package/esm2015/lib/models/fixture-channel.js +0 -24
- package/esm2015/lib/models/fixture-mode.js +0 -14
- package/esm2015/lib/models/fixture-profile.js +0 -70
- package/esm2015/lib/models/fixture-wheel-slot.js +0 -26
- package/esm2015/lib/models/fixture-wheel.js +0 -15
- package/esm2015/lib/models/fixture.js +0 -40
- package/esm2015/lib/models/preset-region-scene.js +0 -8
- package/esm2015/lib/models/preset.js +0 -56
- package/esm2015/lib/models/project.js +0 -68
- package/esm2015/lib/models/scene-playback-region.js +0 -11
- package/esm2015/lib/models/scene.js +0 -27
- package/esm2015/lib/models/universe.js +0 -11
- package/esm2015/lib/preset/preset-settings/preset-settings.component.js +0 -66
- package/esm2015/lib/preset/preset.component.js +0 -85
- package/esm2015/lib/preview/models/color-changer-3d.js +0 -167
- package/esm2015/lib/preview/models/fixture-3d.js +0 -150
- package/esm2015/lib/preview/models/moving-head-3d.js +0 -233
- package/esm2015/lib/preview/preview.component.js +0 -242
- package/esm2015/lib/project/project-browser/project-browser.component.js +0 -73
- package/esm2015/lib/project/project-import/project-import.component.js +0 -89
- package/esm2015/lib/project/project-save/project-save.component.js +0 -105
- package/esm2015/lib/project/project-share/project-share.component.js +0 -43
- package/esm2015/lib/scene/scene-settings/scene-settings.component.js +0 -52
- package/esm2015/lib/scene/scene.component.js +0 -56
- package/esm2015/lib/services/animation.service.js +0 -17
- package/esm2015/lib/services/config.service.js +0 -28
- package/esm2015/lib/services/effect.service.js +0 -16
- package/esm2015/lib/services/error-dialog.service.js +0 -44
- package/esm2015/lib/services/fixture-pool.service.js +0 -34
- package/esm2015/lib/services/fixture.service.js +0 -443
- package/esm2015/lib/services/hotkey-target-exclude.service.js +0 -26
- package/esm2015/lib/services/intro.service.js +0 -144
- package/esm2015/lib/services/preset.service.js +0 -416
- package/esm2015/lib/services/preview-mesh.service.js +0 -58
- package/esm2015/lib/services/preview.service.js +0 -500
- package/esm2015/lib/services/project-load.service.js +0 -171
- package/esm2015/lib/services/project.service.js +0 -113
- package/esm2015/lib/services/scene.service.js +0 -174
- package/esm2015/lib/services/timeline.service.js +0 -738
- package/esm2015/lib/services/universe.service.js +0 -24
- package/esm2015/lib/services/user-ensure-login.service.js +0 -44
- package/esm2015/lib/services/user.service.js +0 -93
- package/esm2015/lib/services/uuid.service.js +0 -25
- package/esm2015/lib/services/warning-dialog.service.js +0 -43
- package/esm2015/lib/timeline/composition-settings/composition-settings.component.js +0 -197
- package/esm2015/lib/timeline/timeline-grid/timeline-grid.component.js +0 -55
- package/esm2015/lib/timeline/timeline.component.js +0 -239
- package/esm2015/lib/user/user-login/user-login.component.js +0 -64
- package/esm2015/lib/user/user-register/user-register.component.js +0 -89
- package/esm2015/lib/wait-dialog/wait-dialog.component.js +0 -16
- package/esm2015/lib/warning-dialog/warning-dialog.component.js +0 -42
- package/esm2015/public_api.js +0 -7
- package/esm2015/rocketshow-designer.js +0 -61
- package/esm5/lib/array-sort-pipe.js +0 -31
- package/esm5/lib/designer.component.js +0 -468
- package/esm5/lib/designer.module.js +0 -120
- package/esm5/lib/designer.service.js +0 -17
- package/esm5/lib/effect/effect-curve/effect-curve.component.js +0 -386
- package/esm5/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -31
- package/esm5/lib/effect/effect.component.js +0 -75
- package/esm5/lib/error-dialog/error-dialog.component.js +0 -43
- package/esm5/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -159
- package/esm5/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -130
- package/esm5/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -215
- package/esm5/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -61
- package/esm5/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -88
- package/esm5/lib/fixture/fixture-capability/fixture-capability.component.js +0 -130
- package/esm5/lib/fixture/fixture-channel/fixture-channel.component.js +0 -68
- package/esm5/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -306
- package/esm5/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -32
- package/esm5/lib/fixture/fixture-settings/fixture-settings.component.js +0 -36
- package/esm5/lib/fixture/fixture.component.js +0 -71
- package/esm5/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -127
- package/esm5/lib/fixture-pool/fixture-pool.component.js +0 -430
- package/esm5/lib/intro/intro.component.js +0 -26
- package/esm5/lib/master-dimmer/master-dimmer.component.js +0 -42
- package/esm5/lib/models/cached-fixture-capability.js +0 -11
- package/esm5/lib/models/cached-fixture-channel.js +0 -9
- package/esm5/lib/models/cached-fixture.js +0 -8
- package/esm5/lib/models/color.js +0 -10
- package/esm5/lib/models/composition.js +0 -60
- package/esm5/lib/models/effect-curve-profile-channel.js +0 -29
- package/esm5/lib/models/effect-curve.js +0 -95
- package/esm5/lib/models/effect-pan-tilt.js +0 -24
- package/esm5/lib/models/effect.js +0 -14
- package/esm5/lib/models/fixture-capability-value.js +0 -17
- package/esm5/lib/models/fixture-capability.js +0 -86
- package/esm5/lib/models/fixture-channel-value.js +0 -13
- package/esm5/lib/models/fixture-channel.js +0 -38
- package/esm5/lib/models/fixture-mode.js +0 -16
- package/esm5/lib/models/fixture-profile.js +0 -114
- package/esm5/lib/models/fixture-wheel-slot.js +0 -28
- package/esm5/lib/models/fixture-wheel.js +0 -29
- package/esm5/lib/models/fixture.js +0 -42
- package/esm5/lib/models/preset-region-scene.js +0 -10
- package/esm5/lib/models/preset.js +0 -90
- package/esm5/lib/models/project.js +0 -122
- package/esm5/lib/models/scene-playback-region.js +0 -13
- package/esm5/lib/models/scene.js +0 -29
- package/esm5/lib/models/universe.js +0 -13
- package/esm5/lib/preset/preset-settings/preset-settings.component.js +0 -67
- package/esm5/lib/preset/preset.component.js +0 -86
- package/esm5/lib/preview/models/color-changer-3d.js +0 -194
- package/esm5/lib/preview/models/fixture-3d.js +0 -196
- package/esm5/lib/preview/models/moving-head-3d.js +0 -250
- package/esm5/lib/preview/preview.component.js +0 -280
- package/esm5/lib/project/project-browser/project-browser.component.js +0 -77
- package/esm5/lib/project/project-import/project-import.component.js +0 -88
- package/esm5/lib/project/project-save/project-save.component.js +0 -120
- package/esm5/lib/project/project-share/project-share.component.js +0 -44
- package/esm5/lib/scene/scene-settings/scene-settings.component.js +0 -53
- package/esm5/lib/scene/scene.component.js +0 -57
- package/esm5/lib/services/animation.service.js +0 -18
- package/esm5/lib/services/config.service.js +0 -29
- package/esm5/lib/services/effect.service.js +0 -17
- package/esm5/lib/services/error-dialog.service.js +0 -46
- package/esm5/lib/services/fixture-pool.service.js +0 -36
- package/esm5/lib/services/fixture.service.js +0 -643
- package/esm5/lib/services/hotkey-target-exclude.service.js +0 -27
- package/esm5/lib/services/intro.service.js +0 -145
- package/esm5/lib/services/preset.service.js +0 -637
- package/esm5/lib/services/preview-mesh.service.js +0 -61
- package/esm5/lib/services/preview.service.js +0 -754
- package/esm5/lib/services/project-load.service.js +0 -185
- package/esm5/lib/services/project.service.js +0 -127
- package/esm5/lib/services/scene.service.js +0 -251
- package/esm5/lib/services/timeline.service.js +0 -845
- package/esm5/lib/services/universe.service.js +0 -36
- package/esm5/lib/services/user-ensure-login.service.js +0 -45
- package/esm5/lib/services/user.service.js +0 -95
- package/esm5/lib/services/uuid.service.js +0 -26
- package/esm5/lib/services/warning-dialog.service.js +0 -45
- package/esm5/lib/timeline/composition-settings/composition-settings.component.js +0 -206
- package/esm5/lib/timeline/timeline-grid/timeline-grid.component.js +0 -56
- package/esm5/lib/timeline/timeline.component.js +0 -243
- package/esm5/lib/user/user-login/user-login.component.js +0 -66
- package/esm5/lib/user/user-register/user-register.component.js +0 -91
- package/esm5/lib/wait-dialog/wait-dialog.component.js +0 -18
- package/esm5/lib/warning-dialog/warning-dialog.component.js +0 -43
- package/esm5/public_api.js +0 -7
- package/esm5/rocketshow-designer.js +0 -61
- package/fesm2015/rocketshow-designer.js +0 -7945
- package/fesm2015/rocketshow-designer.js.map +0 -1
- package/fesm5/rocketshow-designer.js +0 -9690
- package/fesm5/rocketshow-designer.js.map +0 -1
- package/lib/models/universe.d.ts +0 -8
- package/lib/services/universe.service.d.ts +0 -6
- package/rocketshow-designer-1.32.0.tgz +0 -0
- package/rocketshow-designer.d.ts +0 -60
- package/rocketshow-designer.metadata.json +0 -1
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
4
|
-
import { ConfigService } from './config.service';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "./config.service";
|
|
7
|
-
let IntroService = class IntroService {
|
|
8
|
-
constructor(configService) {
|
|
9
|
-
this.configService = configService;
|
|
10
|
-
this.showIntro = false;
|
|
11
|
-
this.activeStep = 'start';
|
|
12
|
-
this.positionTopPercentage = 50;
|
|
13
|
-
this.positionLeftPercentage = 50;
|
|
14
|
-
this.stylePosition = 'top: calc(50% - 150px); left: calc(50% - 200px);';
|
|
15
|
-
this.stepChanged = new Subject();
|
|
16
|
-
}
|
|
17
|
-
refresh() {
|
|
18
|
-
// called, as soon as the config has been updated
|
|
19
|
-
if (this.configService.intro) {
|
|
20
|
-
if (localStorage.getItem('showIntro')) {
|
|
21
|
-
this.showIntro = localStorage.getItem('showIntro') === 'true';
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
this.showIntro = true;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
setShowIntro(value) {
|
|
29
|
-
this.showIntro = value;
|
|
30
|
-
if (value) {
|
|
31
|
-
localStorage.setItem('showIntro', 'true');
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
localStorage.setItem('showIntro', 'false');
|
|
35
|
-
}
|
|
36
|
-
this.stepChanged.next();
|
|
37
|
-
}
|
|
38
|
-
reset() {
|
|
39
|
-
this.activeStep = 'start';
|
|
40
|
-
this.setShowIntro(true);
|
|
41
|
-
this.stepChanged.next();
|
|
42
|
-
}
|
|
43
|
-
showStep(step) {
|
|
44
|
-
if (!this.showIntro) {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
if (this.activeStep !== step) {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
next() {
|
|
53
|
-
switch (this.activeStep) {
|
|
54
|
-
case 'start':
|
|
55
|
-
this.activeStep = 'preview';
|
|
56
|
-
this.positionTopPercentage = 60;
|
|
57
|
-
this.positionLeftPercentage = 40;
|
|
58
|
-
break;
|
|
59
|
-
case 'preview':
|
|
60
|
-
this.activeStep = 'fixtures';
|
|
61
|
-
this.positionTopPercentage = 40;
|
|
62
|
-
this.positionLeftPercentage = 30;
|
|
63
|
-
break;
|
|
64
|
-
case 'fixtures':
|
|
65
|
-
this.activeStep = 'presets';
|
|
66
|
-
this.positionTopPercentage = 30;
|
|
67
|
-
this.positionLeftPercentage = 50;
|
|
68
|
-
break;
|
|
69
|
-
case 'presets':
|
|
70
|
-
this.activeStep = 'capabilities';
|
|
71
|
-
this.positionTopPercentage = 50;
|
|
72
|
-
this.positionLeftPercentage = 60;
|
|
73
|
-
break;
|
|
74
|
-
case 'capabilities':
|
|
75
|
-
this.activeStep = 'scenes';
|
|
76
|
-
this.positionTopPercentage = 50;
|
|
77
|
-
this.positionLeftPercentage = 40;
|
|
78
|
-
break;
|
|
79
|
-
case 'scenes':
|
|
80
|
-
this.activeStep = 'timeline';
|
|
81
|
-
this.positionTopPercentage = 40;
|
|
82
|
-
this.positionLeftPercentage = 50;
|
|
83
|
-
break;
|
|
84
|
-
case 'timeline':
|
|
85
|
-
this.activeStep = 'finish';
|
|
86
|
-
this.positionTopPercentage = 50;
|
|
87
|
-
this.positionLeftPercentage = 50;
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
this.stepChanged.next();
|
|
91
|
-
}
|
|
92
|
-
back() {
|
|
93
|
-
switch (this.activeStep) {
|
|
94
|
-
case 'preview':
|
|
95
|
-
this.activeStep = 'start';
|
|
96
|
-
this.positionTopPercentage = 50;
|
|
97
|
-
this.positionLeftPercentage = 50;
|
|
98
|
-
break;
|
|
99
|
-
case 'fixtures':
|
|
100
|
-
this.activeStep = 'preview';
|
|
101
|
-
this.positionTopPercentage = 60;
|
|
102
|
-
this.positionLeftPercentage = 40;
|
|
103
|
-
break;
|
|
104
|
-
case 'presets':
|
|
105
|
-
this.activeStep = 'fixtures';
|
|
106
|
-
this.positionTopPercentage = 30;
|
|
107
|
-
this.positionLeftPercentage = 50;
|
|
108
|
-
break;
|
|
109
|
-
case 'capabilities':
|
|
110
|
-
this.activeStep = 'presets';
|
|
111
|
-
this.positionTopPercentage = 40;
|
|
112
|
-
this.positionLeftPercentage = 30;
|
|
113
|
-
break;
|
|
114
|
-
case 'scenes':
|
|
115
|
-
this.activeStep = 'capabilities';
|
|
116
|
-
this.positionTopPercentage = 50;
|
|
117
|
-
this.positionLeftPercentage = 60;
|
|
118
|
-
break;
|
|
119
|
-
case 'timeline':
|
|
120
|
-
this.activeStep = 'scenes';
|
|
121
|
-
this.positionTopPercentage = 50;
|
|
122
|
-
this.positionLeftPercentage = 40;
|
|
123
|
-
break;
|
|
124
|
-
case 'finish':
|
|
125
|
-
this.activeStep = 'timeline';
|
|
126
|
-
this.positionTopPercentage = 40;
|
|
127
|
-
this.positionLeftPercentage = 50;
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
this.stepChanged.next();
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
IntroService.ctorParameters = () => [
|
|
134
|
-
{ type: ConfigService }
|
|
135
|
-
];
|
|
136
|
-
IntroService.ɵprov = i0.ɵɵdefineInjectable({ factory: function IntroService_Factory() { return new IntroService(i0.ɵɵinject(i1.ConfigService)); }, token: IntroService, providedIn: "root" });
|
|
137
|
-
IntroService = __decorate([
|
|
138
|
-
Injectable({
|
|
139
|
-
providedIn: 'root',
|
|
140
|
-
}),
|
|
141
|
-
__metadata("design:paramtypes", [ConfigService])
|
|
142
|
-
], IntroService);
|
|
143
|
-
export { IntroService };
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50cm8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Byb2NrZXRzaG93L2Rlc2lnbmVyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2ludHJvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQUtqRCxJQUFhLFlBQVksR0FBekIsTUFBYSxZQUFZO0lBUXZCLFlBQW9CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBUGhELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsZUFBVSxHQUFHLE9BQU8sQ0FBQztRQUNyQiwwQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDM0IsMkJBQXNCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsa0RBQWtELENBQUM7UUFDbkUsZ0JBQVcsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUVFLENBQUM7SUFFcEQsT0FBTztRQUNMLGlEQUFpRDtRQUNqRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFO1lBQzVCLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLE1BQU0sQ0FBQzthQUMvRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzthQUN2QjtTQUNGO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksS0FBSyxFQUFFO1lBQ1QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDM0M7YUFBTTtZQUNMLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVk7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDNUIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUk7UUFDRixRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdkIsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO2dCQUM1QixJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO2dCQUNqQyxNQUFNO1lBQ1IsS0FBSyxTQUFTO2dCQUNaLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO2dCQUM3QixJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO2dCQUNqQyxNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO2dCQUM1QixJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO2dCQUNqQyxNQUFNO1lBQ1IsS0FBSyxTQUFTO2dCQUNaLElBQUksQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDO2dCQUNqQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO2dCQUNqQyxNQUFNO1lBQ1IsS0FBSyxjQUFjO2dCQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztnQkFDakMsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztnQkFDakMsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztnQkFDakMsTUFBTTtTQUNUO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSTtRQUNGLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN2QixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU07WUFDUixLQUFLLFVBQVU7Z0JBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU07WUFDUixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU07WUFDUixLQUFLLGNBQWM7Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO2dCQUM1QixJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO2dCQUNqQyxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDO2dCQUNqQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO2dCQUNqQyxNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO2dCQUMzQixJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO2dCQUNqQyxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO2dCQUM3QixJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO2dCQUNqQyxNQUFNO1NBQ1Q7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7Q0FDRixDQUFBOztZQTVIb0MsYUFBYTs7O0FBUnJDLFlBQVk7SUFIeEIsVUFBVSxDQUFDO1FBQ1YsVUFBVSxFQUFFLE1BQU07S0FDbkIsQ0FBQztxQ0FTbUMsYUFBYTtHQVJyQyxZQUFZLENBb0l4QjtTQXBJWSxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4vY29uZmlnLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgSW50cm9TZXJ2aWNlIHtcbiAgc2hvd0ludHJvID0gZmFsc2U7XG4gIGFjdGl2ZVN0ZXAgPSAnc3RhcnQnO1xuICBwb3NpdGlvblRvcFBlcmNlbnRhZ2UgPSA1MDtcbiAgcG9zaXRpb25MZWZ0UGVyY2VudGFnZSA9IDUwO1xuICBzdHlsZVBvc2l0aW9uID0gJ3RvcDogY2FsYyg1MCUgLSAxNTBweCk7IGxlZnQ6IGNhbGMoNTAlIC0gMjAwcHgpOyc7XG4gIHN0ZXBDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UpIHt9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICAvLyBjYWxsZWQsIGFzIHNvb24gYXMgdGhlIGNvbmZpZyBoYXMgYmVlbiB1cGRhdGVkXG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pbnRybykge1xuICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzaG93SW50cm8nKSkge1xuICAgICAgICB0aGlzLnNob3dJbnRybyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzaG93SW50cm8nKSA9PT0gJ3RydWUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93SW50cm8gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldFNob3dJbnRybyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2hvd0ludHJvID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2hvd0ludHJvJywgJ3RydWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Nob3dJbnRybycsICdmYWxzZScpO1xuICAgIH1cbiAgICB0aGlzLnN0ZXBDaGFuZ2VkLm5leHQoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuYWN0aXZlU3RlcCA9ICdzdGFydCc7XG4gICAgdGhpcy5zZXRTaG93SW50cm8odHJ1ZSk7XG4gICAgdGhpcy5zdGVwQ2hhbmdlZC5uZXh0KCk7XG4gIH1cblxuICBzaG93U3RlcChzdGVwOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc2hvd0ludHJvKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aXZlU3RlcCAhPT0gc3RlcCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlU3RlcCkge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICB0aGlzLmFjdGl2ZVN0ZXAgPSAncHJldmlldyc7XG4gICAgICAgIHRoaXMucG9zaXRpb25Ub3BQZXJjZW50YWdlID0gNjA7XG4gICAgICAgIHRoaXMucG9zaXRpb25MZWZ0UGVyY2VudGFnZSA9IDQwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ByZXZpZXcnOlxuICAgICAgICB0aGlzLmFjdGl2ZVN0ZXAgPSAnZml4dHVyZXMnO1xuICAgICAgICB0aGlzLnBvc2l0aW9uVG9wUGVyY2VudGFnZSA9IDQwO1xuICAgICAgICB0aGlzLnBvc2l0aW9uTGVmdFBlcmNlbnRhZ2UgPSAzMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmaXh0dXJlcyc6XG4gICAgICAgIHRoaXMuYWN0aXZlU3RlcCA9ICdwcmVzZXRzJztcbiAgICAgICAgdGhpcy5wb3NpdGlvblRvcFBlcmNlbnRhZ2UgPSAzMDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkxlZnRQZXJjZW50YWdlID0gNTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncHJlc2V0cyc6XG4gICAgICAgIHRoaXMuYWN0aXZlU3RlcCA9ICdjYXBhYmlsaXRpZXMnO1xuICAgICAgICB0aGlzLnBvc2l0aW9uVG9wUGVyY2VudGFnZSA9IDUwO1xuICAgICAgICB0aGlzLnBvc2l0aW9uTGVmdFBlcmNlbnRhZ2UgPSA2MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjYXBhYmlsaXRpZXMnOlxuICAgICAgICB0aGlzLmFjdGl2ZVN0ZXAgPSAnc2NlbmVzJztcbiAgICAgICAgdGhpcy5wb3NpdGlvblRvcFBlcmNlbnRhZ2UgPSA1MDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkxlZnRQZXJjZW50YWdlID0gNDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc2NlbmVzJzpcbiAgICAgICAgdGhpcy5hY3RpdmVTdGVwID0gJ3RpbWVsaW5lJztcbiAgICAgICAgdGhpcy5wb3NpdGlvblRvcFBlcmNlbnRhZ2UgPSA0MDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkxlZnRQZXJjZW50YWdlID0gNTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGltZWxpbmUnOlxuICAgICAgICB0aGlzLmFjdGl2ZVN0ZXAgPSAnZmluaXNoJztcbiAgICAgICAgdGhpcy5wb3NpdGlvblRvcFBlcmNlbnRhZ2UgPSA1MDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkxlZnRQZXJjZW50YWdlID0gNTA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc3RlcENoYW5nZWQubmV4dCgpO1xuICB9XG5cbiAgYmFjaygpIHtcbiAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlU3RlcCkge1xuICAgICAgY2FzZSAncHJldmlldyc6XG4gICAgICAgIHRoaXMuYWN0aXZlU3RlcCA9ICdzdGFydCc7XG4gICAgICAgIHRoaXMucG9zaXRpb25Ub3BQZXJjZW50YWdlID0gNTA7XG4gICAgICAgIHRoaXMucG9zaXRpb25MZWZ0UGVyY2VudGFnZSA9IDUwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ZpeHR1cmVzJzpcbiAgICAgICAgdGhpcy5hY3RpdmVTdGVwID0gJ3ByZXZpZXcnO1xuICAgICAgICB0aGlzLnBvc2l0aW9uVG9wUGVyY2VudGFnZSA9IDYwO1xuICAgICAgICB0aGlzLnBvc2l0aW9uTGVmdFBlcmNlbnRhZ2UgPSA0MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwcmVzZXRzJzpcbiAgICAgICAgdGhpcy5hY3RpdmVTdGVwID0gJ2ZpeHR1cmVzJztcbiAgICAgICAgdGhpcy5wb3NpdGlvblRvcFBlcmNlbnRhZ2UgPSAzMDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkxlZnRQZXJjZW50YWdlID0gNTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2FwYWJpbGl0aWVzJzpcbiAgICAgICAgdGhpcy5hY3RpdmVTdGVwID0gJ3ByZXNldHMnO1xuICAgICAgICB0aGlzLnBvc2l0aW9uVG9wUGVyY2VudGFnZSA9IDQwO1xuICAgICAgICB0aGlzLnBvc2l0aW9uTGVmdFBlcmNlbnRhZ2UgPSAzMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzY2VuZXMnOlxuICAgICAgICB0aGlzLmFjdGl2ZVN0ZXAgPSAnY2FwYWJpbGl0aWVzJztcbiAgICAgICAgdGhpcy5wb3NpdGlvblRvcFBlcmNlbnRhZ2UgPSA1MDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkxlZnRQZXJjZW50YWdlID0gNjA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGltZWxpbmUnOlxuICAgICAgICB0aGlzLmFjdGl2ZVN0ZXAgPSAnc2NlbmVzJztcbiAgICAgICAgdGhpcy5wb3NpdGlvblRvcFBlcmNlbnRhZ2UgPSA1MDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkxlZnRQZXJjZW50YWdlID0gNDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZmluaXNoJzpcbiAgICAgICAgdGhpcy5hY3RpdmVTdGVwID0gJ3RpbWVsaW5lJztcbiAgICAgICAgdGhpcy5wb3NpdGlvblRvcFBlcmNlbnRhZ2UgPSA0MDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkxlZnRQZXJjZW50YWdlID0gNTA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc3RlcENoYW5nZWQubmV4dCgpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,416 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { HttpClient } from '@angular/common/http';
|
|
3
|
-
import { Injectable } from '@angular/core';
|
|
4
|
-
import { Subject } from 'rxjs';
|
|
5
|
-
import { FixtureCapabilityColor, FixtureCapabilityType } from '../models/fixture-capability';
|
|
6
|
-
import { FixtureCapabilityValue } from '../models/fixture-capability-value';
|
|
7
|
-
import { FixtureChannelValue } from '../models/fixture-channel-value';
|
|
8
|
-
import { Preset } from '../models/preset';
|
|
9
|
-
import { AnimationService } from './animation.service';
|
|
10
|
-
import { ConfigService } from './config.service';
|
|
11
|
-
import { EffectService } from './effect.service';
|
|
12
|
-
import { FixtureService } from './fixture.service';
|
|
13
|
-
import { ProjectService } from './project.service';
|
|
14
|
-
import { UuidService } from './uuid.service';
|
|
15
|
-
import * as i0 from "@angular/core";
|
|
16
|
-
import * as i1 from "./effect.service";
|
|
17
|
-
import * as i2 from "./uuid.service";
|
|
18
|
-
import * as i3 from "./project.service";
|
|
19
|
-
import * as i4 from "./fixture.service";
|
|
20
|
-
import * as i5 from "./config.service";
|
|
21
|
-
import * as i6 from "@angular/common/http";
|
|
22
|
-
import * as i7 from "./animation.service";
|
|
23
|
-
let PresetService = class PresetService {
|
|
24
|
-
constructor(effectService, uuidService, projectService, fixtureService, configService, http, animationService) {
|
|
25
|
-
this.effectService = effectService;
|
|
26
|
-
this.uuidService = uuidService;
|
|
27
|
-
this.projectService = projectService;
|
|
28
|
-
this.fixtureService = fixtureService;
|
|
29
|
-
this.configService = configService;
|
|
30
|
-
this.http = http;
|
|
31
|
-
this.animationService = animationService;
|
|
32
|
-
// fires, when the current preview element has changed (scene/preset)
|
|
33
|
-
this.previewSelectionChanged = new Subject();
|
|
34
|
-
// fires, when the fixture selection has changed
|
|
35
|
-
this.fixtureSelectionChanged = new Subject();
|
|
36
|
-
// fires, when the fixture selection has changed for settings
|
|
37
|
-
this.fixtureSelectionSettingsChanged = new Subject();
|
|
38
|
-
// fires, when the selected color has changed. This is required,
|
|
39
|
-
// because detectChanges is not enough to trigger different components.
|
|
40
|
-
this.fixtureColorChanged = new Subject();
|
|
41
|
-
this.liveChangePending = false;
|
|
42
|
-
}
|
|
43
|
-
getPresetByUuid(uuid) {
|
|
44
|
-
for (const preset of this.projectService.project.presets) {
|
|
45
|
-
if (preset.uuid === uuid) {
|
|
46
|
-
return preset;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
fixtureIsSelected(fixture, preset) {
|
|
51
|
-
// is the passed fixture selected in the passed/currently selected preset?
|
|
52
|
-
if (!preset) {
|
|
53
|
-
if (this.selectedPreset) {
|
|
54
|
-
preset = this.selectedPreset;
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
for (const selectedFixtureUuid of preset.fixtureUuids) {
|
|
61
|
-
if (selectedFixtureUuid === fixture.uuid) {
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
switchFixtureSelection(fixture) {
|
|
68
|
-
if (!this.selectedPreset) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
// select all fixtures at the specified start channel or unselect them,
|
|
72
|
-
// if already selected
|
|
73
|
-
if (this.fixtureIsSelected(fixture)) {
|
|
74
|
-
for (let i = this.selectedPreset.fixtureUuids.length - 1; i >= 0; i--) {
|
|
75
|
-
const projectFixture = this.fixtureService.getFixtureByUuid(this.selectedPreset.fixtureUuids[i]);
|
|
76
|
-
if (projectFixture.dmxFirstChannel === fixture.dmxFirstChannel) {
|
|
77
|
-
this.selectedPreset.fixtureUuids.splice(i, 1);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
for (const projectFixture of this.projectService.project.fixtures) {
|
|
83
|
-
if (projectFixture.dmxFirstChannel === fixture.dmxFirstChannel) {
|
|
84
|
-
this.selectedPreset.fixtureUuids.push(projectFixture.uuid);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
selectAllFixtures() {
|
|
90
|
-
if (!this.selectedPreset) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
for (const fixture of this.projectService.project.fixtures) {
|
|
94
|
-
if (!this.fixtureIsSelected(fixture)) {
|
|
95
|
-
this.selectedPreset.fixtureUuids.push(fixture.uuid);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
selectNoFixtures() {
|
|
100
|
-
if (!this.selectedPreset) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
this.selectedPreset.fixtureUuids = [];
|
|
104
|
-
}
|
|
105
|
-
removeDeletedFixtures() {
|
|
106
|
-
// after changing the configuration in the fixture pool, we might need to
|
|
107
|
-
// delete some fixtures
|
|
108
|
-
for (const preset of this.projectService.project.presets) {
|
|
109
|
-
for (let i = preset.fixtureUuids.length - 1; i >= 0; i--) {
|
|
110
|
-
const presetFixture = this.fixtureService.getFixtureByUuid(preset.fixtureUuids[i]);
|
|
111
|
-
if (!presetFixture) {
|
|
112
|
-
preset.fixtureUuids.splice(i, 1);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
updateFixtureSelection() {
|
|
118
|
-
// after changing the configuration in the fixture pool, we might need to
|
|
119
|
-
// select some more fixtures on the same channel as already selected ones
|
|
120
|
-
for (const preset of this.projectService.project.presets) {
|
|
121
|
-
for (let i = preset.fixtureUuids.length - 1; i >= 0; i--) {
|
|
122
|
-
const presetFixture = this.fixtureService.getFixtureByUuid(preset.fixtureUuids[i]);
|
|
123
|
-
for (const projectFixture of this.projectService.project.fixtures) {
|
|
124
|
-
if (projectFixture.dmxFirstChannel === presetFixture.dmxFirstChannel && !this.fixtureIsSelected(projectFixture, preset)) {
|
|
125
|
-
preset.fixtureUuids.push(projectFixture.uuid);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
deleteCapabilityValue(preset, capabilityType, color, wheel, profileUuid) {
|
|
132
|
-
for (let i = 0; i < preset.fixtureCapabilityValues.length; i++) {
|
|
133
|
-
if (this.fixtureService.capabilitiesMatch(preset.fixtureCapabilityValues[i].type, capabilityType, preset.fixtureCapabilityValues[i].color, color, preset.fixtureCapabilityValues[i].wheel, wheel, preset.fixtureCapabilityValues[i].profileUuid, profileUuid)) {
|
|
134
|
-
preset.fixtureCapabilityValues.splice(i, 1);
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
setCapabilityValue(preset, capabilityType, valuePercentage, slotNumber, color, wheel, profileUuid) {
|
|
140
|
-
// Delete existant properties with this type and set the new value
|
|
141
|
-
this.deleteCapabilityValue(preset, capabilityType, color, wheel, profileUuid);
|
|
142
|
-
const fixtureCapabilityValue = new FixtureCapabilityValue();
|
|
143
|
-
fixtureCapabilityValue.type = capabilityType;
|
|
144
|
-
fixtureCapabilityValue.color = color;
|
|
145
|
-
fixtureCapabilityValue.wheel = wheel;
|
|
146
|
-
fixtureCapabilityValue.valuePercentage = valuePercentage;
|
|
147
|
-
fixtureCapabilityValue.slotNumber = slotNumber;
|
|
148
|
-
fixtureCapabilityValue.profileUuid = profileUuid;
|
|
149
|
-
preset.fixtureCapabilityValues.push(fixtureCapabilityValue);
|
|
150
|
-
}
|
|
151
|
-
getCapabilityValue(preset, capabilityType, color, wheel, profileUuid) {
|
|
152
|
-
for (const capabilityValue of preset.fixtureCapabilityValues) {
|
|
153
|
-
if (this.fixtureService.capabilitiesMatch(capabilityValue.type, capabilityType, capabilityValue.color, color, capabilityValue.wheel, wheel, capabilityValue.profileUuid, profileUuid)) {
|
|
154
|
-
return capabilityValue;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
return undefined;
|
|
158
|
-
}
|
|
159
|
-
deleteChannelValue(channelName, profileUuid) {
|
|
160
|
-
for (let i = 0; i < this.selectedPreset.fixtureChannelValues.length; i++) {
|
|
161
|
-
if (this.selectedPreset.fixtureChannelValues[i].channelName === channelName &&
|
|
162
|
-
this.selectedPreset.fixtureChannelValues[i].profileUuid === profileUuid) {
|
|
163
|
-
this.selectedPreset.fixtureChannelValues.splice(i, 1);
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
setChannelValue(channelName, profileUuid, value) {
|
|
169
|
-
// Delete existant properties with this type and set the new value
|
|
170
|
-
this.deleteChannelValue(channelName, profileUuid);
|
|
171
|
-
const fixtureChannelValue = new FixtureChannelValue();
|
|
172
|
-
fixtureChannelValue.channelName = channelName;
|
|
173
|
-
fixtureChannelValue.profileUuid = profileUuid;
|
|
174
|
-
fixtureChannelValue.value = value;
|
|
175
|
-
this.selectedPreset.fixtureChannelValues.push(fixtureChannelValue);
|
|
176
|
-
}
|
|
177
|
-
getChannelValue(channelName, profileUuid) {
|
|
178
|
-
for (const channelValue of this.selectedPreset.fixtureChannelValues) {
|
|
179
|
-
if (channelValue.channelName === channelName && channelValue.profileUuid === profileUuid) {
|
|
180
|
-
return channelValue.value;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
getApproximatedColorWheelCapability(preset, cachedChannel) {
|
|
185
|
-
// return an approximated wheel slot channel capability, if a color or a slot on a different
|
|
186
|
-
// wheel has been selected
|
|
187
|
-
let colorRed;
|
|
188
|
-
let colorGreen;
|
|
189
|
-
let colorBlue;
|
|
190
|
-
let lowestDiff = Number.MAX_VALUE;
|
|
191
|
-
let lowestDiffCapability;
|
|
192
|
-
let capabilityValue;
|
|
193
|
-
capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Red);
|
|
194
|
-
if (capabilityValue) {
|
|
195
|
-
colorRed = 255 * capabilityValue.valuePercentage;
|
|
196
|
-
}
|
|
197
|
-
capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Green);
|
|
198
|
-
if (capabilityValue) {
|
|
199
|
-
colorGreen = 255 * capabilityValue.valuePercentage;
|
|
200
|
-
}
|
|
201
|
-
capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Blue);
|
|
202
|
-
if (capabilityValue) {
|
|
203
|
-
colorBlue = 255 * capabilityValue.valuePercentage;
|
|
204
|
-
}
|
|
205
|
-
if (!colorRed && !colorGreen && !colorBlue) {
|
|
206
|
-
// no color found -> search the first color wheel
|
|
207
|
-
// TODO
|
|
208
|
-
}
|
|
209
|
-
if (colorRed !== undefined && colorGreen !== undefined && colorBlue !== undefined) {
|
|
210
|
-
for (const capability of cachedChannel.capabilities) {
|
|
211
|
-
if (capability.capability.slotNumber) {
|
|
212
|
-
const mixedColor = this.fixtureService.getMixedWheelSlotColor(capability.wheel, capability.capability.slotNumber);
|
|
213
|
-
if (mixedColor) {
|
|
214
|
-
const diff = Math.abs(mixedColor.red - colorRed) + Math.abs(mixedColor.green - colorGreen) + Math.abs(mixedColor.blue - colorBlue);
|
|
215
|
-
if (diff < lowestDiff) {
|
|
216
|
-
lowestDiff = diff;
|
|
217
|
-
lowestDiffCapability = capability;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
return lowestDiffCapability;
|
|
224
|
-
}
|
|
225
|
-
hasCapabilityType(type) {
|
|
226
|
-
// there is at least one channel with at least one intensity capability
|
|
227
|
-
for (const fixtureUuid of this.selectedPreset.fixtureUuids) {
|
|
228
|
-
const fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);
|
|
229
|
-
for (const channel of fixture.channels) {
|
|
230
|
-
if (channel.channel) {
|
|
231
|
-
for (const capability of channel.capabilities) {
|
|
232
|
-
if (capability.capability.type === type) {
|
|
233
|
-
return true;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
return false;
|
|
240
|
-
}
|
|
241
|
-
hasCapabilityDimmer() {
|
|
242
|
-
return this.hasCapabilityType(FixtureCapabilityType.Intensity);
|
|
243
|
-
}
|
|
244
|
-
hasCapabilityColor() {
|
|
245
|
-
// TODO optionally color temperature and color white (see stairville/mh-100)
|
|
246
|
-
// one of the profiles has a color intensity
|
|
247
|
-
if (this.hasCapabilityType(FixtureCapabilityType.ColorIntensity)) {
|
|
248
|
-
return true;
|
|
249
|
-
}
|
|
250
|
-
return false;
|
|
251
|
-
}
|
|
252
|
-
hasCapabilityColorOrColorWheel() {
|
|
253
|
-
// TODO optionally color temperature and color white (see stairville/mh-100)
|
|
254
|
-
// one of the profiles has a color intensity
|
|
255
|
-
if (this.hasCapabilityColor()) {
|
|
256
|
-
return true;
|
|
257
|
-
}
|
|
258
|
-
// a color wheel is involved
|
|
259
|
-
for (const fixtureUuid of this.selectedPreset.fixtureUuids) {
|
|
260
|
-
const fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);
|
|
261
|
-
for (const channel of fixture.channels) {
|
|
262
|
-
if (channel.colorWheel) {
|
|
263
|
-
return true;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
return false;
|
|
268
|
-
}
|
|
269
|
-
hasCapabilityPanTilt() {
|
|
270
|
-
let hasPan = false;
|
|
271
|
-
let hasTilt = false;
|
|
272
|
-
// there is at least one pan and one tilt channel
|
|
273
|
-
if (this.hasCapabilityType(FixtureCapabilityType.Pan)) {
|
|
274
|
-
hasPan = true;
|
|
275
|
-
}
|
|
276
|
-
if (this.hasCapabilityType(FixtureCapabilityType.Tilt)) {
|
|
277
|
-
hasTilt = true;
|
|
278
|
-
}
|
|
279
|
-
if (hasPan && hasTilt) {
|
|
280
|
-
return true;
|
|
281
|
-
}
|
|
282
|
-
return false;
|
|
283
|
-
}
|
|
284
|
-
selectPreset(index) {
|
|
285
|
-
this.effectService.selectedEffect = undefined;
|
|
286
|
-
this.selectedPreset = this.projectService.project.presets[index];
|
|
287
|
-
this.projectService.project.selectedPresetUuid = this.projectService.project.presets[index].uuid;
|
|
288
|
-
this.autoOpenFirstEffect();
|
|
289
|
-
this.previewSelectionChanged.next();
|
|
290
|
-
this.previewLive();
|
|
291
|
-
}
|
|
292
|
-
autoOpenFirstEffect() {
|
|
293
|
-
// open the first effect, if the preset only has one
|
|
294
|
-
if (this.selectedPreset && this.selectedPreset.effects.length === 1) {
|
|
295
|
-
this.effectService.selectedEffect = this.selectedPreset.effects[0];
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
addPreset(name) {
|
|
299
|
-
const preset = new Preset();
|
|
300
|
-
preset.uuid = this.uuidService.getUuid();
|
|
301
|
-
preset.name = name || 'New Preset';
|
|
302
|
-
// Insert the new preset before the highest currently selected preset
|
|
303
|
-
let highestSelectedPresetIndex = 0;
|
|
304
|
-
for (let i = 0; i < this.projectService.project.presets.length; i++) {
|
|
305
|
-
if (this.selectedPreset === this.projectService.project.presets[i]) {
|
|
306
|
-
highestSelectedPresetIndex = i;
|
|
307
|
-
break;
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
this.projectService.project.presets.splice(highestSelectedPresetIndex, 0, preset);
|
|
311
|
-
this.selectPreset(highestSelectedPresetIndex);
|
|
312
|
-
}
|
|
313
|
-
getSelectedProfiles() {
|
|
314
|
-
const profiles = [];
|
|
315
|
-
if (!this.selectedPreset) {
|
|
316
|
-
return profiles;
|
|
317
|
-
}
|
|
318
|
-
for (const fixtureUuid of this.selectedPreset.fixtureUuids) {
|
|
319
|
-
const fixture = this.fixtureService.getFixtureByUuid(fixtureUuid);
|
|
320
|
-
const profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);
|
|
321
|
-
if (profiles.indexOf(profile) < 0) {
|
|
322
|
-
profiles.push(profile);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
return profiles;
|
|
326
|
-
}
|
|
327
|
-
getSelectedProfileChannels(selectedProfiles) {
|
|
328
|
-
const availableChannels = new Map();
|
|
329
|
-
const calculatedProfileModes = new Map();
|
|
330
|
-
for (const profile of selectedProfiles) {
|
|
331
|
-
const modes = [];
|
|
332
|
-
for (const fixtureUuid of this.selectedPreset.fixtureUuids) {
|
|
333
|
-
const fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);
|
|
334
|
-
if (modes.indexOf(fixture.mode) < 0) {
|
|
335
|
-
modes.push(fixture.mode);
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
calculatedProfileModes.set(profile, modes);
|
|
339
|
-
}
|
|
340
|
-
// calculate all required channels from the modes
|
|
341
|
-
calculatedProfileModes.forEach((modes, profile) => {
|
|
342
|
-
const profileChannels = [];
|
|
343
|
-
for (const mode of modes) {
|
|
344
|
-
const channels = this.fixtureService.getCachedChannels(profile, mode);
|
|
345
|
-
for (const channel of channels) {
|
|
346
|
-
// only add the channel, if no channel with the same name has already been added
|
|
347
|
-
// (e.g. a fine channel)
|
|
348
|
-
if (channel.channel && !profileChannels.find((c) => c.name === channel.name)) {
|
|
349
|
-
profileChannels.push(channel);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
availableChannels.set(profile, profileChannels);
|
|
354
|
-
});
|
|
355
|
-
return availableChannels;
|
|
356
|
-
}
|
|
357
|
-
previewLive(compositionName = '', positionMillis) {
|
|
358
|
-
if (!this.configService.livePreview) {
|
|
359
|
-
return;
|
|
360
|
-
}
|
|
361
|
-
// collect all changes and delay them to not flood the backend
|
|
362
|
-
// (except play events. they need to be delivered always)
|
|
363
|
-
if (this.livePreviewTimer && !compositionName) {
|
|
364
|
-
this.liveChangePending = true;
|
|
365
|
-
return;
|
|
366
|
-
}
|
|
367
|
-
let position = positionMillis;
|
|
368
|
-
if (position === undefined) {
|
|
369
|
-
position = Math.round(this.animationService.timeMillis);
|
|
370
|
-
}
|
|
371
|
-
this.http
|
|
372
|
-
.post('preview?positionMillis=' + position + '&compositionName=' + compositionName, JSON.stringify(this.projectService.project))
|
|
373
|
-
.subscribe();
|
|
374
|
-
this.liveChangePending = false;
|
|
375
|
-
if (!compositionName) {
|
|
376
|
-
this.livePreviewTimer = setTimeout(() => {
|
|
377
|
-
this.livePreviewTimer = undefined;
|
|
378
|
-
if (this.liveChangePending) {
|
|
379
|
-
this.http
|
|
380
|
-
.post('preview?positionMillis=' + position + '&compositionName=' + compositionName, JSON.stringify(this.projectService.project))
|
|
381
|
-
.subscribe();
|
|
382
|
-
}
|
|
383
|
-
}, 50);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
stopPreviewPlay() {
|
|
387
|
-
if (!this.configService.livePreview) {
|
|
388
|
-
return;
|
|
389
|
-
}
|
|
390
|
-
this.http.post('stop-preview-play', null).subscribe();
|
|
391
|
-
}
|
|
392
|
-
};
|
|
393
|
-
PresetService.ctorParameters = () => [
|
|
394
|
-
{ type: EffectService },
|
|
395
|
-
{ type: UuidService },
|
|
396
|
-
{ type: ProjectService },
|
|
397
|
-
{ type: FixtureService },
|
|
398
|
-
{ type: ConfigService },
|
|
399
|
-
{ type: HttpClient },
|
|
400
|
-
{ type: AnimationService }
|
|
401
|
-
];
|
|
402
|
-
PresetService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PresetService_Factory() { return new PresetService(i0.ɵɵinject(i1.EffectService), i0.ɵɵinject(i2.UuidService), i0.ɵɵinject(i3.ProjectService), i0.ɵɵinject(i4.FixtureService), i0.ɵɵinject(i5.ConfigService), i0.ɵɵinject(i6.HttpClient), i0.ɵɵinject(i7.AnimationService)); }, token: PresetService, providedIn: "root" });
|
|
403
|
-
PresetService = __decorate([
|
|
404
|
-
Injectable({
|
|
405
|
-
providedIn: 'root',
|
|
406
|
-
}),
|
|
407
|
-
__metadata("design:paramtypes", [EffectService,
|
|
408
|
-
UuidService,
|
|
409
|
-
ProjectService,
|
|
410
|
-
FixtureService,
|
|
411
|
-
ConfigService,
|
|
412
|
-
HttpClient,
|
|
413
|
-
AnimationService])
|
|
414
|
-
], PresetService);
|
|
415
|
-
export { PresetService };
|
|
416
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Acm9ja2V0c2hvdy9kZXNpZ25lci8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9wcmVzZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUd0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBSzdDLElBQWEsYUFBYSxHQUExQixNQUFhLGFBQWE7SUFtQnhCLFlBQ1UsYUFBNEIsRUFDNUIsV0FBd0IsRUFDeEIsY0FBOEIsRUFDOUIsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIsSUFBZ0IsRUFDaEIsZ0JBQWtDO1FBTmxDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGdCQUFXLEdBQVgs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LENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7eUJBQy9ILFNBQVMsRUFBRSxDQUFDO2lCQUNoQjtZQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNSO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7WUFDbkMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDeEQsQ0FBQztDQUNGLENBQUE7O1lBbGQwQixhQUFhO1lBQ2YsV0FBVztZQUNSLGNBQWM7WUFDZCxjQUFjO1lBQ2YsYUFBYTtZQUN0QixVQUFVO1lBQ0UsZ0JBQWdCOzs7QUExQmpDLGFBQWE7SUFIekIsVUFBVSxDQUFDO1FBQ1YsVUFBVSxFQUFFLE1BQU07S0FDbkIsQ0FBQztxQ0FxQnlCLGFBQWE7UUFDZixXQUFXO1FBQ1IsY0FBYztRQUNkLGNBQWM7UUFDZixhQUFhO1FBQ3RCLFVBQVU7UUFDRSxnQkFBZ0I7R0ExQmpDLGFBQWEsQ0FzZXpCO1NBdGVZLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZUNhcGFiaWxpdHkgfSBmcm9tICcuLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUtY2FwYWJpbGl0eSc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlQ2hhbm5lbCB9IGZyb20gJy4uL21vZGVscy9jYWNoZWQtZml4dHVyZS1jaGFubmVsJztcbmltcG9ydCB7IEZpeHR1cmUgfSBmcm9tICcuLi9tb2RlbHMvZml4dHVyZSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLCBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IEZpeHR1cmVDYXBhYmlsaXR5VmFsdWUgfSBmcm9tICcuLi9tb2RlbHMvZml4dHVyZS1jYXBhYmlsaXR5LXZhbHVlJztcbmltcG9ydCB7IEZpeHR1cmVDaGFubmVsVmFsdWUgfSBmcm9tICcuLi9tb2RlbHMvZml4dHVyZS1jaGFubmVsLXZhbHVlJztcbmltcG9ydCB7IEZpeHR1cmVNb2RlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtbW9kZSc7XG5pbXBvcnQgeyBGaXh0dXJlUHJvZmlsZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLXByb2ZpbGUnO1xuaW1wb3J0IHsgUHJlc2V0IH0gZnJvbSAnLi4vbW9kZWxzL3ByZXNldCc7XG5pbXBvcnQgeyBBbmltYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9hbmltYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBFZmZlY3RTZXJ2aWNlIH0gZnJvbSAnLi9lZmZlY3Quc2VydmljZSc7XG5pbXBvcnQgeyBGaXh0dXJlU2VydmljZSB9IGZyb20gJy4vZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi9wcm9qZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXVpZFNlcnZpY2UgfSBmcm9tICcuL3V1aWQuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQcmVzZXRTZXJ2aWNlIHtcbiAgc2VsZWN0ZWRQcmVzZXQ6IFByZXNldDtcblxuICAvLyBmaXJlcywgd2hlbiB0aGUgY3VycmVudCBwcmV2aWV3IGVsZW1lbnQgaGFzIGNoYW5nZWQgKHNjZW5lL3ByZXNldClcbiAgcHJldmlld1NlbGVjdGlvbkNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vIGZpcmVzLCB3aGVuIHRoZSBmaXh0dXJlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZFxuICBmaXh0dXJlU2VsZWN0aW9uQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gZmlyZXMsIHdoZW4gdGhlIGZpeHR1cmUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkIGZvciBzZXR0aW5nc1xuICBmaXh0dXJlU2VsZWN0aW9uU2V0dGluZ3NDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyBmaXJlcywgd2hlbiB0aGUgc2VsZWN0ZWQgY29sb3IgaGFzIGNoYW5nZWQuIFRoaXMgaXMgcmVxdWlyZWQsXG4gIC8vIGJlY2F1c2UgZGV0ZWN0Q2hhbmdlcyBpcyBub3QgZW5vdWdoIHRvIHRyaWdnZXIgZGlmZmVyZW50IGNvbXBvbmVudHMuXG4gIGZpeHR1cmVDb2xvckNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGxpdmVQcmV2aWV3VGltZXI6IGFueTtcbiAgbGl2ZUNoYW5nZVBlbmRpbmcgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVmZmVjdFNlcnZpY2U6IEVmZmVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1dWlkU2VydmljZTogVXVpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm9qZWN0U2VydmljZTogUHJvamVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGFuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2VcbiAgKSB7fVxuXG4gIGdldFByZXNldEJ5VXVpZCh1dWlkOiBzdHJpbmcpOiBQcmVzZXQge1xuICAgIGZvciAoY29uc3QgcHJlc2V0IG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzKSB7XG4gICAgICBpZiAocHJlc2V0LnV1aWQgPT09IHV1aWQpIHtcbiAgICAgICAgcmV0dXJuIHByZXNldDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXh0dXJlSXNTZWxlY3RlZChmaXh0dXJlOiBGaXh0dXJlLCBwcmVzZXQ/OiBQcmVzZXQpOiBib29sZWFuIHtcbiAgICAvLyBpcyB0aGUgcGFzc2VkIGZpeHR1cmUgc2VsZWN0ZWQgaW4gdGhlIHBhc3NlZC9jdXJyZW50bHkgc2VsZWN0ZWQgcHJlc2V0P1xuICAgIGlmICghcHJlc2V0KSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFByZXNldCkge1xuICAgICAgICBwcmVzZXQgPSB0aGlzLnNlbGVjdGVkUHJlc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VsZWN0ZWRGaXh0dXJlVXVpZCBvZiBwcmVzZXQuZml4dHVyZVV1aWRzKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRGaXh0dXJlVXVpZCA9PT0gZml4dHVyZS51dWlkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaEZpeHR1cmVTZWxlY3Rpb24oZml4dHVyZTogRml4dHVyZSkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFByZXNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNlbGVjdCBhbGwgZml4dHVyZXMgYXQgdGhlIHNwZWNpZmllZCBzdGFydCBjaGFubmVsIG9yIHVuc2VsZWN0IHRoZW0sXG4gICAgLy8gaWYgYWxyZWFkeSBzZWxlY3RlZFxuICAgIGlmICh0aGlzLmZpeHR1cmVJc1NlbGVjdGVkKGZpeHR1cmUpKSB7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcHJvamVjdEZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQodGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHNbaV0pO1xuICAgICAgICBpZiAocHJvamVjdEZpeHR1cmUuZG14Rmlyc3RDaGFubmVsID09PSBmaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZVV1aWRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IHByb2plY3RGaXh0dXJlIG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlcykge1xuICAgICAgICBpZiAocHJvamVjdEZpeHR1cmUuZG14Rmlyc3RDaGFubmVsID09PSBmaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZVV1aWRzLnB1c2gocHJvamVjdEZpeHR1cmUudXVpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3RBbGxGaXh0dXJlcygpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRQcmVzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpeHR1cmUgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LmZpeHR1cmVzKSB7XG4gICAgICBpZiAoIXRoaXMuZml4dHVyZUlzU2VsZWN0ZWQoZml4dHVyZSkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHMucHVzaChmaXh0dXJlLnV1aWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdE5vRml4dHVyZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHMgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVEZWxldGVkRml4dHVyZXMoKSB7XG4gICAgLy8gYWZ0ZXIgY2hhbmdpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGZpeHR1cmUgcG9vbCwgd2UgbWlnaHQgbmVlZCB0b1xuICAgIC8vIGRlbGV0ZSBzb21lIGZpeHR1cmVzXG4gICAgZm9yIChjb25zdCBwcmVzZXQgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSBwcmVzZXQuZml4dHVyZVV1aWRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHByZXNldEZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQocHJlc2V0LmZpeHR1cmVVdWlkc1tpXSk7XG4gICAgICAgIGlmICghcHJlc2V0Rml4dHVyZSkge1xuICAgICAgICAgIHByZXNldC5maXh0dXJlVXVpZHMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZpeHR1cmVTZWxlY3Rpb24oKSB7XG4gICAgLy8gYWZ0ZXIgY2hhbmdpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGZpeHR1cmUgcG9vbCwgd2UgbWlnaHQgbmVlZCB0b1xuICAgIC8vIHNlbGVjdCBzb21lIG1vcmUgZml4dHVyZXMgb24gdGhlIHNhbWUgY2hhbm5lbCBhcyBhbHJlYWR5IHNlbGVjdGVkIG9uZXNcbiAgICBmb3IgKGNvbnN0IHByZXNldCBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cykge1xuICAgICAgZm9yIChsZXQgaSA9IHByZXNldC5maXh0dXJlVXVpZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcHJlc2V0Rml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZChwcmVzZXQuZml4dHVyZVV1aWRzW2ldKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9qZWN0Rml4dHVyZSBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuZml4dHVyZXMpIHtcbiAgICAgICAgICBpZiAocHJvamVjdEZpeHR1cmUuZG14Rmlyc3RDaGFubmVsID09PSBwcmVzZXRGaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCAmJiAhdGhpcy5maXh0dXJlSXNTZWxlY3RlZChwcm9qZWN0Rml4dHVyZSwgcHJlc2V0KSkge1xuICAgICAgICAgICAgcHJlc2V0LmZpeHR1cmVVdWlkcy5wdXNoKHByb2plY3RGaXh0dXJlLnV1aWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZUNhcGFiaWxpdHlWYWx1ZShcbiAgICBwcmVzZXQ6IFByZXNldCxcbiAgICBjYXBhYmlsaXR5VHlwZTogRml4dHVyZUNhcGFiaWxpdHlUeXBlLFxuICAgIGNvbG9yPzogRml4dHVyZUNhcGFiaWxpdHlDb2xvcixcbiAgICB3aGVlbD86IHN0cmluZyxcbiAgICBwcm9maWxlVXVpZD86IHN0cmluZ1xuICApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhcGFiaWxpdGllc01hdGNoKFxuICAgICAgICAgIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlc1tpXS50eXBlLFxuICAgICAgICAgIGNhcGFiaWxpdHlUeXBlLFxuICAgICAgICAgIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlc1tpXS5jb2xvcixcbiAgICAgICAgICBjb2xvcixcbiAgICAgICAgICBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXNbaV0ud2hlZWwsXG4gICAgICAgICAgd2hlZWwsXG4gICAgICAgICAgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzW2ldLnByb2ZpbGVVdWlkLFxuICAgICAgICAgIHByb2ZpbGVVdWlkXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0Q2FwYWJpbGl0eVZhbHVlKFxuICAgIHByZXNldDogUHJlc2V0LFxuICAgIGNhcGFiaWxpdHlUeXBlOiBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUsXG4gICAgdmFsdWVQZXJjZW50YWdlOiBudW1iZXIsXG4gICAgc2xvdE51bWJlcj86IG51bWJlcixcbiAgICBjb2xvcj86IEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IsXG4gICAgd2hlZWw/OiBzdHJpbmcsXG4gICAgcHJvZmlsZVV1aWQ/OiBzdHJpbmdcbiAgKSB7XG4gICAgLy8gRGVsZXRlIGV4aXN0YW50IHByb3BlcnRpZXMgd2l0aCB0aGlzIHR5cGUgYW5kIHNldCB0aGUgbmV3IHZhbHVlXG4gICAgdGhpcy5kZWxldGVDYXBhYmlsaXR5VmFsdWUocHJlc2V0LCBjYXBhYmlsaXR5VHlwZSwgY29sb3IsIHdoZWVsLCBwcm9maWxlVXVpZCk7XG5cbiAgICBjb25zdCBmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlID0gbmV3IEZpeHR1cmVDYXBhYmlsaXR5VmFsdWUoKTtcbiAgICBmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlLnR5cGUgPSBjYXBhYmlsaXR5VHlwZTtcbiAgICBmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlLmNvbG9yID0gY29sb3I7XG4gICAgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZS53aGVlbCA9IHdoZWVsO1xuICAgIGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlID0gdmFsdWVQZXJjZW50YWdlO1xuICAgIGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUuc2xvdE51bWJlciA9IHNsb3ROdW1iZXI7XG4gICAgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZS5wcm9maWxlVXVpZCA9IHByb2ZpbGVVdWlkO1xuXG4gICAgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzLnB1c2goZml4dHVyZUNhcGFiaWxpdHlWYWx1ZSk7XG4gIH1cblxuICBnZXRDYXBhYmlsaXR5VmFsdWUoXG4gICAgcHJlc2V0OiBQcmVzZXQsXG4gICAgY2FwYWJpbGl0eVR5cGU6IEZpeHR1cmVDYXBhYmlsaXR5VHlwZSxcbiAgICBjb2xvcj86IEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IsXG4gICAgd2hlZWw/OiBzdHJpbmcsXG4gICAgcHJvZmlsZVV1aWQ/OiBzdHJpbmdcbiAgKTogRml4dHVyZUNhcGFiaWxpdHlWYWx1ZSB7XG4gICAgZm9yIChjb25zdCBjYXBhYmlsaXR5VmFsdWUgb2YgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZml4dHVyZVNlcnZpY2UuY2FwYWJpbGl0aWVzTWF0Y2goXG4gICAgICAgICAgY2FwYWJpbGl0eVZhbHVlLnR5cGUsXG4gICAgICAgICAgY2FwYWJpbGl0eVR5cGUsXG4gICAgICAgICAgY2FwYWJpbGl0eVZhbHVlLmNvbG9yLFxuICAgICAgICAgIGNvbG9yLFxuICAgICAgICAgIGNhcGFiaWxpdHlWYWx1ZS53aGVlbCxcbiAgICAgICAgICB3aGVlbCxcbiAgICAgICAgICBjYXBhYmlsaXR5VmFsdWUucHJvZmlsZVV1aWQsXG4gICAgICAgICAgcHJvZmlsZVV1aWRcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBjYXBhYmlsaXR5VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBkZWxldGVDaGFubmVsVmFsdWUoY2hhbm5lbE5hbWU6IHN0cmluZywgcHJvZmlsZVV1aWQ6IHN0cmluZykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlQ2hhbm5lbFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVDaGFubmVsVmFsdWVzW2ldLmNoYW5uZWxOYW1lID09PSBjaGFubmVsTmFtZSAmJlxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVDaGFubmVsVmFsdWVzW2ldLnByb2ZpbGVVdWlkID09PSBwcm9maWxlVXVpZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0Q2hhbm5lbFZhbHVlKGNoYW5uZWxOYW1lOiBzdHJpbmcsIHByb2ZpbGVVdWlkOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIpIHtcbiAgICAvLyBEZWxldGUgZXhpc3RhbnQgcHJvcGVydGllcyB3aXRoIHRoaXMgdHlwZSBhbmQgc2V0IHRoZSBuZXcgdmFsdWVcbiAgICB0aGlzLmRlbGV0ZUNoYW5uZWxWYWx1ZShjaGFubmVsTmFtZSwgcHJvZmlsZVV1aWQpO1xuXG4gICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNoYW5uZWxOYW1lO1xuICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBwcm9maWxlVXVpZDtcbiAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVDaGFubmVsVmFsdWVzLnB1c2goZml4dHVyZUNoYW5uZWxWYWx1ZSk7XG4gIH1cblxuICBnZXRDaGFubmVsVmFsdWUoY2hhbm5lbE5hbWU6IHN0cmluZywgcHJvZmlsZVV1aWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgZm9yIChjb25zdCBjaGFubmVsVmFsdWUgb2YgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlQ2hhbm5lbFZhbHVlcykge1xuICAgICAgaWYgKGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9PT0gY2hhbm5lbE5hbWUgJiYgY2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID09PSBwcm9maWxlVXVpZCkge1xuICAgICAgICByZXR1cm4gY2hhbm5lbFZhbHVlLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEFwcHJveGltYXRlZENvbG9yV2hlZWxDYXBhYmlsaXR5KHByZXNldDogUHJlc2V0LCBjYWNoZWRDaGFubmVsOiBDYWNoZWRGaXh0dXJlQ2hhbm5lbCk6IENhY2hlZEZpeHR1cmVDYXBhYmlsaXR5IHtcbiAgICAvLyByZXR1cm4gYW4gYXBwcm94aW1hdGVkIHdoZWVsIHNsb3QgY2hhbm5lbCBjYXBhYmlsaXR5LCBpZiBhIGNvbG9yIG9yIGEgc2xvdCBvbiBhIGRpZmZlcmVudFxuICAgIC8vIHdoZWVsIGhhcyBiZWVuIHNlbGVjdGVkXG4gICAgbGV0IGNvbG9yUmVkOiBudW1iZXI7XG4gICAgbGV0IGNvbG9yR3JlZW46IG51bWJlcjtcbiAgICBsZXQgY29sb3JCbHVlOiBudW1iZXI7XG4gICAgbGV0IGxvd2VzdERpZmYgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIGxldCBsb3dlc3REaWZmQ2FwYWJpbGl0eTogQ2FjaGVkRml4dHVyZUNhcGFiaWxpdHk7XG4gICAgbGV0IGNhcGFiaWxpdHlWYWx1ZTogRml4dHVyZUNhcGFiaWxpdHlWYWx1ZTtcblxuICAgIGNhcGFiaWxpdHlWYWx1ZSA9IHRoaXMuZ2V0Q2FwYWJpbGl0eVZhbHVlKHByZXNldCwgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5LCBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLlJlZCk7XG4gICAgaWYgKGNhcGFiaWxpdHlWYWx1ZSkge1xuICAgICAgY29sb3JSZWQgPSAyNTUgKiBjYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlO1xuICAgIH1cbiAgICBjYXBhYmlsaXR5VmFsdWUgPSB0aGlzLmdldENhcGFiaWxpdHlWYWx1ZShwcmVzZXQsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSwgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5HcmVlbik7XG4gICAgaWYgKGNhcGFiaWxpdHlWYWx1ZSkge1xuICAgICAgY29sb3JHcmVlbiA9IDI1NSAqIGNhcGFiaWxpdHlWYWx1ZS52YWx1ZVBlcmNlbnRhZ2U7XG4gICAgfVxuICAgIGNhcGFiaWxpdHlWYWx1ZSA9IHRoaXMuZ2V0Q2FwYWJpbGl0eVZhbHVlKHByZXNldCwgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5LCBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLkJsdWUpO1xuICAgIGlmIChjYXBhYmlsaXR5VmFsdWUpIHtcbiAgICAgIGNvbG9yQmx1ZSA9IDI1NSAqIGNhcGFiaWxpdHlWYWx1ZS52YWx1ZVBlcmNlbnRhZ2U7XG4gICAgfVxuXG4gICAgaWYgKCFjb2xvclJlZCAmJiAhY29sb3JHcmVlbiAmJiAhY29sb3JCbHVlKSB7XG4gICAgICAvLyBubyBjb2xvciBmb3VuZCAtPiBzZWFyY2ggdGhlIGZpcnN0IGNvbG9yIHdoZWVsXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgaWYgKGNvbG9yUmVkICE9PSB1bmRlZmluZWQgJiYgY29sb3JHcmVlbiAhPT0gdW5kZWZpbmVkICYmIGNvbG9yQmx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHkgb2YgY2FjaGVkQ2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgaWYgKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5zbG90TnVtYmVyKSB7XG4gICAgICAgICAgY29uc3QgbWl4ZWRDb2xvciA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0TWl4ZWRXaGVlbFNsb3RDb2xvcihjYXBhYmlsaXR5LndoZWVsLCBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuc2xvdE51bWJlcik7XG4gICAgICAgICAgaWYgKG1peGVkQ29sb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPVxuICAgICAgICAgICAgICBNYXRoLmFicyhtaXhlZENvbG9yLnJlZCAtIGNvbG9yUmVkKSArIE1hdGguYWJzKG1peGVkQ29sb3IuZ3JlZW4gLSBjb2xvckdyZWVuKSArIE1hdGguYWJzKG1peGVkQ29sb3IuYmx1ZSAtIGNvbG9yQmx1ZSk7XG5cbiAgICAgICAgICAgIGlmIChkaWZmIDwgbG93ZXN0RGlmZikge1xuICAgICAgICAgICAgICBsb3dlc3REaWZmID0gZGlmZjtcbiAgICAgICAgICAgICAgbG93ZXN0RGlmZkNhcGFiaWxpdHkgPSBjYXBhYmlsaXR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsb3dlc3REaWZmQ2FwYWJpbGl0eTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzQ2FwYWJpbGl0eVR5cGUodHlwZTogRml4dHVyZUNhcGFiaWxpdHlUeXBlKTogYm9vbGVhbiB7XG4gICAgLy8gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYW5uZWwgd2l0aCBhdCBsZWFzdCBvbmUgaW50ZW5zaXR5IGNhcGFiaWxpdHlcbiAgICBmb3IgKGNvbnN0IGZpeHR1cmVVdWlkIG9mIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZVV1aWRzKSB7XG4gICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDYWNoZWRGaXh0dXJlQnlVdWlkKGZpeHR1cmVVdWlkKTtcbiAgICAgIGZvciAoY29uc3QgY2hhbm5lbCBvZiBmaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICAgIGlmIChjaGFubmVsLmNoYW5uZWwpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHkgb2YgY2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgIGlmIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSA9PT0gdHlwZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaGFzQ2FwYWJpbGl0eURpbW1lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNDYXBhYmlsaXR5VHlwZShGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuSW50ZW5zaXR5KTtcbiAgfVxuXG4gIGhhc0NhcGFiaWxpdHlDb2xvcigpOiBib29sZWFuIHtcbiAgICAvLyBUT0RPIG9wdGlvbmFsbHkgY29sb3IgdGVtcGVyYXR1cmUgYW5kIGNvbG9yIHdoaXRlIChzZWUgc3RhaXJ2aWxsZS9taC0xMDApXG5cbiAgICAvLyBvbmUgb2YgdGhlIHByb2ZpbGVzIGhhcyBhIGNvbG9yIGludGVuc2l0eVxuICAgIGlmICh0aGlzLmhhc0NhcGFiaWxpdHlUeXBlKEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGhhc0NhcGFiaWxpdHlDb2xvck9yQ29sb3JXaGVlbCgpOiBib29sZWFuIHtcbiAgICAvLyBUT0RPIG9wdGlvbmFsbHkgY29sb3IgdGVtcGVyYXR1cmUgYW5kIGNvbG9yIHdoaXRlIChzZWUgc3RhaXJ2aWxsZS9taC0xMDApXG5cbiAgICAvLyBvbmUgb2YgdGhlIHByb2ZpbGVzIGhhcyBhIGNvbG9yIGludGVuc2l0eVxuICAgIGlmICh0aGlzLmhhc0NhcGFiaWxpdHlDb2xvcigpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBhIGNvbG9yIHdoZWVsIGlzIGludm9sdmVkXG4gICAgZm9yIChjb25zdCBmaXh0dXJlVXVpZCBvZiB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkcykge1xuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Q2FjaGVkRml4dHVyZUJ5VXVpZChmaXh0dXJlVXVpZCk7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgZml4dHVyZS5jaGFubmVscykge1xuICAgICAgICBpZiAoY2hhbm5lbC5jb2xvcldoZWVsKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBoYXNDYXBhYmlsaXR5UGFuVGlsdCgpOiBib29sZWFuIHtcbiAgICBsZXQgaGFzUGFuID0gZmFsc2U7XG4gICAgbGV0IGhhc1RpbHQgPSBmYWxzZTtcblxuICAgIC8vIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBwYW4gYW5kIG9uZSB0aWx0IGNoYW5uZWxcbiAgICBpZiAodGhpcy5oYXNDYXBhYmlsaXR5VHlwZShGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuUGFuKSkge1xuICAgICAgaGFzUGFuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNDYXBhYmlsaXR5VHlwZShGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuVGlsdCkpIHtcbiAgICAgIGhhc1RpbHQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChoYXNQYW4gJiYgaGFzVGlsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2VsZWN0UHJlc2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmVmZmVjdFNlcnZpY2Uuc2VsZWN0ZWRFZmZlY3QgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWxlY3RlZFByZXNldCA9IHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzW2luZGV4XTtcbiAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc2VsZWN0ZWRQcmVzZXRVdWlkID0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHNbaW5kZXhdLnV1aWQ7XG4gICAgdGhpcy5hdXRvT3BlbkZpcnN0RWZmZWN0KCk7XG4gICAgdGhpcy5wcmV2aWV3U2VsZWN0aW9uQ2hhbmdlZC5uZXh0KCk7XG4gICAgdGhpcy5wcmV2aWV3TGl2ZSgpO1xuICB9XG5cbiAgYXV0b09wZW5GaXJzdEVmZmVjdCgpIHtcbiAgICAvLyBvcGVuIHRoZSBmaXJzdCBlZmZlY3QsIGlmIHRoZSBwcmVzZXQgb25seSBoYXMgb25lXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRQcmVzZXQgJiYgdGhpcy5zZWxlY3RlZFByZXNldC5lZmZlY3RzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5lZmZlY3RTZXJ2aWNlLnNlbGVjdGVkRWZmZWN0ID0gdGhpcy5zZWxlY3RlZFByZXNldC5lZmZlY3RzWzBdO1xuICAgIH1cbiAgfVxuXG4gIGFkZFByZXNldChuYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcHJlc2V0OiBQcmVzZXQgPSBuZXcgUHJlc2V0KCk7XG4gICAgcHJlc2V0LnV1aWQgPSB0aGlzLnV1aWRTZXJ2aWNlLmdldFV1aWQoKTtcbiAgICBwcmVzZXQubmFtZSA9IG5hbWUgfHwgJ05ldyBQcmVzZXQnO1xuXG4gICAgLy8gSW5zZXJ0IHRoZSBuZXcgcHJlc2V0IGJlZm9yZSB0aGUgaGlnaGVzdCBjdXJyZW50bHkgc2VsZWN0ZWQgcHJlc2V0XG4gICAgbGV0IGhpZ2hlc3RTZWxlY3RlZFByZXNldEluZGV4ID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJlc2V0ID09PSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1tpXSkge1xuICAgICAgICBoaWdoZXN0U2VsZWN0ZWRQcmVzZXRJbmRleCA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzLnNwbGljZShoaWdoZXN0U2VsZWN0ZWRQcmVzZXRJbmRleCwgMCwgcHJlc2V0KTtcbiAgICB0aGlzLnNlbGVjdFByZXNldChoaWdoZXN0U2VsZWN0ZWRQcmVzZXRJbmRleCk7XG4gIH1cblxuICBnZXRTZWxlY3RlZFByb2ZpbGVzKCkge1xuICAgIGNvbnN0IHByb2ZpbGVzOiBGaXh0dXJlUHJvZmlsZVtdID0gW107XG5cbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRQcmVzZXQpIHtcbiAgICAgIHJldHVybiBwcm9maWxlcztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpeHR1cmVVdWlkIG9mIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZVV1aWRzKSB7XG4gICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRGaXh0dXJlQnlVdWlkKGZpeHR1cmVVdWlkKTtcbiAgICAgIGNvbnN0IHByb2ZpbGUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldFByb2ZpbGVCeVV1aWQoZml4dHVyZS5wcm9maWxlVXVpZCk7XG5cbiAgICAgIGlmIChwcm9maWxlcy5pbmRleE9mKHByb2ZpbGUpIDwgMCkge1xuICAgICAgICBwcm9maWxlcy5wdXNoKHByb2ZpbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9maWxlcztcbiAgfVxuXG4gIGdldFNlbGVjdGVkUHJvZmlsZUNoYW5uZWxzKHNlbGVjdGVkUHJvZmlsZXM6IEZpeHR1cmVQcm9maWxlW10pIHtcbiAgICBjb25zdCBhdmFpbGFibGVDaGFubmVsczogTWFwPEZpeHR1cmVQcm9maWxlLCBDYWNoZWRGaXh0dXJlQ2hhbm5lbFtdPiA9IG5ldyBNYXA8Rml4dHVyZVByb2ZpbGUsIENhY2hlZEZpeHR1cmVDaGFubmVsW10+KCk7XG5cbiAgICBjb25zdCBjYWxjdWxhdGVkUHJvZmlsZU1vZGVzID0gbmV3IE1hcDxGaXh0dXJlUHJvZmlsZSwgRml4dHVyZU1vZGVbXT4oKTtcbiAgICBmb3IgKGNvbnN0IHByb2ZpbGUgb2Ygc2VsZWN0ZWRQcm9maWxlcykge1xuICAgICAgY29uc3QgbW9kZXM6IEZpeHR1cmVNb2RlW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgZml4dHVyZVV1aWQgb2YgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHMpIHtcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Q2FjaGVkRml4dHVyZUJ5VXVpZChmaXh0dXJlVXVpZCk7XG4gICAgICAgIGlmIChtb2Rlcy5pbmRleE9mKGZpeHR1cmUubW9kZSkgPCAwKSB7XG4gICAgICAgICAgbW9kZXMucHVzaChmaXh0dXJlLm1vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYWxjdWxhdGVkUHJvZmlsZU1vZGVzLnNldChwcm9maWxlLCBtb2Rlcyk7XG4gICAgfVxuXG4gICAgLy8gY2FsY3VsYXRlIGFsbCByZXF1aXJlZCBjaGFubmVscyBmcm9tIHRoZSBtb2Rlc1xuICAgIGNhbGN1bGF0ZWRQcm9maWxlTW9kZXMuZm9yRWFjaCgobW9kZXM6IEZpeHR1cmVNb2RlW10sIHByb2ZpbGU6IEZpeHR1cmVQcm9maWxlKSA9PiB7XG4gICAgICBjb25zdCBwcm9maWxlQ2hhbm5lbHM6IENhY2hlZEZpeHR1cmVDaGFubmVsW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgbW9kZSBvZiBtb2Rlcykge1xuICAgICAgICBjb25zdCBjaGFubmVscyA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Q2FjaGVkQ2hhbm5lbHMocHJvZmlsZSwgbW9kZSk7XG4gICAgICAgIGZvciAoY29uc3QgY2hhbm5lbCBvZiBjaGFubmVscykge1xuICAgICAgICAgIC8vIG9ubHkgYWRkIHRoZSBjaGFubmVsLCBpZiBubyBjaGFubmVsIHdpdGggdGhlIHNhbWUgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkXG4gICAgICAgICAgLy8gKGUuZy4gYSBmaW5lIGNoYW5uZWwpXG4gICAgICAgICAgaWYgKGNoYW5uZWwuY2hhbm5lbCAmJiAhcHJvZmlsZUNoYW5uZWxzLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gY2hhbm5lbC5uYW1lKSkge1xuICAgICAgICAgICAgcHJvZmlsZUNoYW5uZWxzLnB1c2goY2hhbm5lbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhdmFpbGFibGVDaGFubmVscy5zZXQocHJvZmlsZSwgcHJvZmlsZUNoYW5uZWxzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhdmFpbGFibGVDaGFubmVscztcbiAgfVxuXG4gIHByZXZpZXdMaXZlKGNvbXBvc2l0aW9uTmFtZTogc3RyaW5nID0gJycsIHBvc2l0aW9uTWlsbGlzPzogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZ1NlcnZpY2UubGl2ZVByZXZpZXcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjb2xsZWN0IGFsbCBjaGFuZ2VzIGFuZCBkZWxheSB0aGVtIHRvIG5vdCBmbG9vZCB0aGUgYmFja2VuZFxuICAgIC8vIChleGNlcHQgcGxheSBldmVudHMuIHRoZXkgbmVlZCB0byBiZSBkZWxpdmVyZWQgYWx3YXlzKVxuICAgIGlmICh0aGlzLmxpdmVQcmV2aWV3VGltZXIgJiYgIWNvbXBvc2l0aW9uTmFtZSkge1xuICAgICAgdGhpcy5saXZlQ2hhbmdlUGVuZGluZyA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHBvc2l0aW9uID0gcG9zaXRpb25NaWxsaXM7XG5cbiAgICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcG9zaXRpb24gPSBNYXRoLnJvdW5kKHRoaXMuYW5pbWF0aW9uU2VydmljZS50aW1lTWlsbGlzKTtcbiAgICB9XG5cbiAgICB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KCdwcmV2aWV3P3Bvc2l0aW9uTWlsbGlzPScgKyBwb3NpdGlvbiArICcmY29tcG9zaXRpb25OYW1lPScgKyBjb21wb3NpdGlvbk5hbWUsIEpTT04uc3RyaW5naWZ5KHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdCkpXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmxpdmVDaGFuZ2VQZW5kaW5nID0gZmFsc2U7XG5cbiAgICBpZiAoIWNvbXBvc2l0aW9uTmFtZSkge1xuICAgICAgdGhpcy5saXZlUHJldmlld1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMubGl2ZVByZXZpZXdUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMubGl2ZUNoYW5nZVBlbmRpbmcpIHtcbiAgICAgICAgICB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0KCdwcmV2aWV3P3Bvc2l0aW9uTWlsbGlzPScgKyBwb3NpdGlvbiArICcmY29tcG9zaXRpb25OYW1lPScgKyBjb21wb3NpdGlvbk5hbWUsIEpTT04uc3RyaW5naWZ5KHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDUwKTtcbiAgICB9XG4gIH1cblxuICBzdG9wUHJldmlld1BsYXkoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZ1NlcnZpY2UubGl2ZVByZXZpZXcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmh0dHAucG9zdCgnc3RvcC1wcmV2aWV3LXBsYXknLCBudWxsKS5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19
|