@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,34 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
4
|
-
import { FixturePoolComponent } from '../fixture-pool/fixture-pool.component';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "ngx-bootstrap/modal";
|
|
7
|
-
let FixturePoolService = class FixturePoolService {
|
|
8
|
-
constructor(modalService) {
|
|
9
|
-
this.modalService = modalService;
|
|
10
|
-
this.fixturePoolOpened = false;
|
|
11
|
-
}
|
|
12
|
-
open() {
|
|
13
|
-
if (this.fixturePoolOpened) {
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
this.fixturePoolOpened = true;
|
|
17
|
-
const bsModalRef = this.modalService.show(FixturePoolComponent, { keyboard: false, ignoreBackdropClick: true, class: 'modal-full' });
|
|
18
|
-
bsModalRef.content.onClose.subscribe((result) => {
|
|
19
|
-
this.fixturePoolOpened = false;
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
FixturePoolService.ctorParameters = () => [
|
|
24
|
-
{ type: BsModalService }
|
|
25
|
-
];
|
|
26
|
-
FixturePoolService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FixturePoolService_Factory() { return new FixturePoolService(i0.ɵɵinject(i1.BsModalService)); }, token: FixturePoolService, providedIn: "root" });
|
|
27
|
-
FixturePoolService = __decorate([
|
|
28
|
-
Injectable({
|
|
29
|
-
providedIn: 'root',
|
|
30
|
-
}),
|
|
31
|
-
__metadata("design:paramtypes", [BsModalService])
|
|
32
|
-
], FixturePoolService);
|
|
33
|
-
export { FixturePoolService };
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1wb29sLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Acm9ja2V0c2hvdy9kZXNpZ25lci8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9maXh0dXJlLXBvb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7OztBQUs5RSxJQUFhLGtCQUFrQixHQUEvQixNQUFhLGtCQUFrQjtJQUc3QixZQUFvQixZQUE0QjtRQUE1QixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFGeEMsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO0lBRWlCLENBQUM7SUFFcEQsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNwSSxVQUFVLENBQUMsT0FBZ0MsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDeEUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFBOztZQWJtQyxjQUFjOzs7QUFIckMsa0JBQWtCO0lBSDlCLFVBQVUsQ0FBQztRQUNWLFVBQVUsRUFBRSxNQUFNO0tBQ25CLENBQUM7cUNBSWtDLGNBQWM7R0FIckMsa0JBQWtCLENBZ0I5QjtTQWhCWSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgRml4dHVyZVBvb2xDb21wb25lbnQgfSBmcm9tICcuLi9maXh0dXJlLXBvb2wvZml4dHVyZS1wb29sLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBGaXh0dXJlUG9vbFNlcnZpY2Uge1xuICBwcml2YXRlIGZpeHR1cmVQb29sT3BlbmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlKSB7fVxuXG4gIG9wZW4oKSB7XG4gICAgaWYgKHRoaXMuZml4dHVyZVBvb2xPcGVuZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZpeHR1cmVQb29sT3BlbmVkID0gdHJ1ZTtcbiAgICBjb25zdCBic01vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhGaXh0dXJlUG9vbENvbXBvbmVudCwgeyBrZXlib2FyZDogZmFsc2UsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsIGNsYXNzOiAnbW9kYWwtZnVsbCcgfSk7XG4gICAgKGJzTW9kYWxSZWYuY29udGVudCBhcyBGaXh0dXJlUG9vbENvbXBvbmVudCkub25DbG9zZS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgdGhpcy5maXh0dXJlUG9vbE9wZW5lZCA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,443 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { HttpClient } from '@angular/common/http';
|
|
3
|
-
import { Injectable } from '@angular/core';
|
|
4
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
5
|
-
import { ToastrService } from 'ngx-toastr';
|
|
6
|
-
import { forkJoin, of } from 'rxjs';
|
|
7
|
-
import { map } from 'rxjs/operators';
|
|
8
|
-
import { CachedFixture } from '../models/cached-fixture';
|
|
9
|
-
import { CachedFixtureCapability } from '../models/cached-fixture-capability';
|
|
10
|
-
import { CachedFixtureChannel } from '../models/cached-fixture-channel';
|
|
11
|
-
import { Color } from '../models/color';
|
|
12
|
-
import { Fixture } from '../models/fixture';
|
|
13
|
-
import { FixtureProfile } from '../models/fixture-profile';
|
|
14
|
-
import { FixtureWheelSlotType } from '../models/fixture-wheel-slot';
|
|
15
|
-
import { ProjectService } from './project.service';
|
|
16
|
-
import { UuidService } from './uuid.service';
|
|
17
|
-
import * as i0 from "@angular/core";
|
|
18
|
-
import * as i1 from "@angular/common/http";
|
|
19
|
-
import * as i2 from "./project.service";
|
|
20
|
-
import * as i3 from "@ngx-translate/core";
|
|
21
|
-
import * as i4 from "ngx-toastr";
|
|
22
|
-
import * as i5 from "./uuid.service";
|
|
23
|
-
let FixtureService = class FixtureService {
|
|
24
|
-
constructor(http, projectService, translateService, toastrService, uuidService) {
|
|
25
|
-
this.http = http;
|
|
26
|
-
this.projectService = projectService;
|
|
27
|
-
this.translateService = translateService;
|
|
28
|
-
this.toastrService = toastrService;
|
|
29
|
-
this.uuidService = uuidService;
|
|
30
|
-
this.cachedFixtures = [];
|
|
31
|
-
// is the side-tab settings currently selected?
|
|
32
|
-
this.settingsSelection = false;
|
|
33
|
-
this.selectedSettingsFixtures = [];
|
|
34
|
-
}
|
|
35
|
-
getFixtureByUuid(uuid) {
|
|
36
|
-
for (const fixture of this.projectService.project.fixtures) {
|
|
37
|
-
if (fixture.uuid === uuid) {
|
|
38
|
-
return fixture;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
getCachedFixtureByUuid(uuid) {
|
|
43
|
-
for (const fixture of this.cachedFixtures) {
|
|
44
|
-
if (fixture.fixture.uuid === uuid) {
|
|
45
|
-
return fixture;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
// Get all profiles to search for (only metadata)
|
|
50
|
-
getSearchProfiles() {
|
|
51
|
-
return this.http.get('fixtures').pipe(map((response) => {
|
|
52
|
-
const searchProfiles = [];
|
|
53
|
-
for (const profile of response) {
|
|
54
|
-
searchProfiles.push(new FixtureProfile(profile));
|
|
55
|
-
}
|
|
56
|
-
return searchProfiles;
|
|
57
|
-
}));
|
|
58
|
-
}
|
|
59
|
-
getProfileByUuid(uuid) {
|
|
60
|
-
for (const fixtureProfile of this.projectService.project.fixtureProfiles) {
|
|
61
|
-
if (fixtureProfile.uuid === uuid) {
|
|
62
|
-
return fixtureProfile;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
loadProfileByUuid(uuid) {
|
|
67
|
-
const loadedProfile = this.getProfileByUuid(uuid);
|
|
68
|
-
if (loadedProfile) {
|
|
69
|
-
// This profile is already loaded
|
|
70
|
-
return of(undefined);
|
|
71
|
-
}
|
|
72
|
-
// Load the metadata and the profile
|
|
73
|
-
return forkJoin([this.http.get('fixtures?uuid=' + encodeURI(uuid)), this.http.get('fixture?uuid=' + encodeURI(uuid))]).pipe(map((result) => {
|
|
74
|
-
const mergedData = Object.assign(Object.assign({}, result[0][0]), result[1]);
|
|
75
|
-
const fixtureProfile = new FixtureProfile(mergedData);
|
|
76
|
-
this.projectService.project.fixtureProfiles.push(fixtureProfile);
|
|
77
|
-
}));
|
|
78
|
-
}
|
|
79
|
-
getRotationAngleDeg(value) {
|
|
80
|
-
// convert a rotation angle value into degrees
|
|
81
|
-
if (value.endsWith('deg')) {
|
|
82
|
-
return Number.parseInt(value.replace('deg', ''));
|
|
83
|
-
}
|
|
84
|
-
else if (value.endsWith('%')) {
|
|
85
|
-
const perc = Number.parseInt(value.replace('%', ''));
|
|
86
|
-
return (perc / 100) * 360;
|
|
87
|
-
}
|
|
88
|
-
return undefined;
|
|
89
|
-
}
|
|
90
|
-
getWheelSlotColors(wheel, slotNumber) {
|
|
91
|
-
let colors = [];
|
|
92
|
-
const wheelSlots = this.getWheelSlots(wheel, slotNumber);
|
|
93
|
-
for (const slot of wheelSlots) {
|
|
94
|
-
if (slot.colors && slot.colors.length > 0) {
|
|
95
|
-
colors = colors.concat(slot.colors);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return colors;
|
|
99
|
-
}
|
|
100
|
-
getMixedWheelSlotColor(wheel, slotNumber) {
|
|
101
|
-
const colors = this.getWheelSlotColors(wheel, slotNumber);
|
|
102
|
-
const colorsRgb = [];
|
|
103
|
-
if (colors.length === 0) {
|
|
104
|
-
return undefined;
|
|
105
|
-
}
|
|
106
|
-
for (const color of colors) {
|
|
107
|
-
colorsRgb.push(this.hexToRgb(color));
|
|
108
|
-
}
|
|
109
|
-
return this.mixColors(colorsRgb);
|
|
110
|
-
}
|
|
111
|
-
componentToHex(c) {
|
|
112
|
-
const hex = c.toString(16);
|
|
113
|
-
return hex.length === 1 ? '0' + hex : hex;
|
|
114
|
-
}
|
|
115
|
-
rgbToHex(r, g, b) {
|
|
116
|
-
return '#' + this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b);
|
|
117
|
-
}
|
|
118
|
-
hexToRgb(hex) {
|
|
119
|
-
// expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
|
|
120
|
-
const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
|
|
121
|
-
hex = hex.replace(shorthandRegex, (m, r, g, b) => {
|
|
122
|
-
return r + r + g + g + b + b;
|
|
123
|
-
});
|
|
124
|
-
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
125
|
-
return result ? new Color(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : null;
|
|
126
|
-
}
|
|
127
|
-
mixColors(colors) {
|
|
128
|
-
// mix an array of rgb-colors containing r, g, b values to a new color
|
|
129
|
-
let r = 0;
|
|
130
|
-
let g = 0;
|
|
131
|
-
let b = 0;
|
|
132
|
-
for (const color of colors) {
|
|
133
|
-
r += color.red;
|
|
134
|
-
g += color.green;
|
|
135
|
-
b += color.blue;
|
|
136
|
-
}
|
|
137
|
-
r /= colors.length;
|
|
138
|
-
g /= colors.length;
|
|
139
|
-
b /= colors.length;
|
|
140
|
-
return new Color(r, g, b);
|
|
141
|
-
}
|
|
142
|
-
wheelHasSlotType(wheel, slotType) {
|
|
143
|
-
for (const slot of wheel.slots) {
|
|
144
|
-
if (slot.type === slotType) {
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
getWheelByName(profile, wheelName) {
|
|
151
|
-
for (const property in profile.wheels) {
|
|
152
|
-
if (property === wheelName) {
|
|
153
|
-
return profile.wheels[property];
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
// wheel not found
|
|
157
|
-
return undefined;
|
|
158
|
-
}
|
|
159
|
-
getWheelSlots(wheel, slotNumber) {
|
|
160
|
-
// return one slot or two slots, if they are mixed (e.g. slor number 2.5 returns the slots 2 and 3)
|
|
161
|
-
const slots = [];
|
|
162
|
-
if (!wheel) {
|
|
163
|
-
return slots;
|
|
164
|
-
}
|
|
165
|
-
if (slotNumber - Math.floor(slotNumber) > 0) {
|
|
166
|
-
// two slots are set
|
|
167
|
-
const number = Math.floor(slotNumber);
|
|
168
|
-
slots.push(wheel.slots[number - 1]);
|
|
169
|
-
if (number >= 0 && number < wheel.slots.length) {
|
|
170
|
-
slots.push(wheel.slots[number]);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
// only one slot is set
|
|
175
|
-
slots.push(wheel.slots[slotNumber - 1]);
|
|
176
|
-
}
|
|
177
|
-
return slots;
|
|
178
|
-
}
|
|
179
|
-
getModeByFixture(profile, fixture) {
|
|
180
|
-
for (const mode of profile.modes) {
|
|
181
|
-
if (mode.shortName) {
|
|
182
|
-
if (mode.shortName === fixture.modeShortName) {
|
|
183
|
-
return mode;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
if (mode.name === fixture.modeShortName) {
|
|
188
|
-
return mode;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
getFixtureCapability(capability, channelName, profile) {
|
|
194
|
-
const cachedFixtureCapability = new CachedFixtureCapability();
|
|
195
|
-
cachedFixtureCapability.capability = capability;
|
|
196
|
-
if (capability.slotNumber) {
|
|
197
|
-
// there is a wheel connected to this capability
|
|
198
|
-
if (typeof capability.wheel === 'string') {
|
|
199
|
-
cachedFixtureCapability.wheelName = capability.wheel;
|
|
200
|
-
}
|
|
201
|
-
else if (Array.isArray(capability.wheel)) {
|
|
202
|
-
cachedFixtureCapability.wheelName = capability.wheel[0];
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
cachedFixtureCapability.wheelName = channelName;
|
|
206
|
-
}
|
|
207
|
-
cachedFixtureCapability.wheel = this.getWheelByName(profile, cachedFixtureCapability.wheelName);
|
|
208
|
-
cachedFixtureCapability.wheelSlots = this.getWheelSlots(cachedFixtureCapability.wheel, capability.slotNumber);
|
|
209
|
-
cachedFixtureCapability.wheelIsColor = this.wheelHasSlotType(cachedFixtureCapability.wheel, FixtureWheelSlotType.Color);
|
|
210
|
-
}
|
|
211
|
-
if (cachedFixtureCapability.capability.dmxRange && cachedFixtureCapability.capability.dmxRange.length === 2) {
|
|
212
|
-
cachedFixtureCapability.centerValue = Math.floor((cachedFixtureCapability.capability.dmxRange[0] + cachedFixtureCapability.capability.dmxRange[1]) / 2);
|
|
213
|
-
}
|
|
214
|
-
return cachedFixtureCapability;
|
|
215
|
-
}
|
|
216
|
-
getCapabilitiesByChannel(fixtureChannel, channelName, profile) {
|
|
217
|
-
const capabilites = [];
|
|
218
|
-
if (fixtureChannel.capability) {
|
|
219
|
-
capabilites.push(this.getFixtureCapability(fixtureChannel.capability, channelName, profile));
|
|
220
|
-
}
|
|
221
|
-
else if (fixtureChannel.capabilities) {
|
|
222
|
-
for (const capability of fixtureChannel.capabilities) {
|
|
223
|
-
capabilites.push(this.getFixtureCapability(capability, channelName, profile));
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
return capabilites;
|
|
227
|
-
}
|
|
228
|
-
getMaxValueByChannel(fixtureChannel) {
|
|
229
|
-
return Math.pow(256, 1 + fixtureChannel.fineChannelAliases.length) - 1;
|
|
230
|
-
}
|
|
231
|
-
getDefaultValueByChannel(fixtureChannel) {
|
|
232
|
-
if (!fixtureChannel.defaultValue) {
|
|
233
|
-
return undefined;
|
|
234
|
-
}
|
|
235
|
-
if (isNaN(fixtureChannel.defaultValue) && fixtureChannel.defaultValue.endsWith('%')) {
|
|
236
|
-
// percentage value
|
|
237
|
-
const percentage = Number.parseInt(fixtureChannel.defaultValue.replace('%', ''));
|
|
238
|
-
const maxValue = this.getMaxValueByChannel(fixtureChannel);
|
|
239
|
-
return (maxValue / 100) * percentage;
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
// DMX value
|
|
243
|
-
return Number.parseInt(fixtureChannel.defaultValue);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
getColorWheelByChannel(channel, profile) {
|
|
247
|
-
for (const channelCapability of channel.capabilities) {
|
|
248
|
-
if (channelCapability.wheelIsColor) {
|
|
249
|
-
return channelCapability.wheel;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
return undefined;
|
|
253
|
-
}
|
|
254
|
-
// private channelInList(channels: CachedFixtureChannel[], name: string): boolean {
|
|
255
|
-
// for (let channel of channels) {
|
|
256
|
-
// if (channel.channelName === name) {
|
|
257
|
-
// return true;
|
|
258
|
-
// }
|
|
259
|
-
// }
|
|
260
|
-
// return false;
|
|
261
|
-
// }
|
|
262
|
-
getChannelByName(fixture, channelName) {
|
|
263
|
-
for (const channel of fixture.channels) {
|
|
264
|
-
if ((channel.name && channel.name === channelName) ||
|
|
265
|
-
(channel.channel && channel.channel.fineChannelAliases.indexOf(channelName) > -1)) {
|
|
266
|
-
return channel;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
return undefined;
|
|
270
|
-
}
|
|
271
|
-
getCachedChannels(profile, mode) {
|
|
272
|
-
const channels = [];
|
|
273
|
-
if (!mode) {
|
|
274
|
-
return channels;
|
|
275
|
-
}
|
|
276
|
-
for (const availableChannelName of Object.keys(profile.availableChannels)) {
|
|
277
|
-
const availableChannel = profile.availableChannels[availableChannelName];
|
|
278
|
-
for (const channel of mode.channels) {
|
|
279
|
-
// check for string channel. It can get creepy for matrix modes
|
|
280
|
-
if (typeof channel === 'string') {
|
|
281
|
-
const modeChannel = channel;
|
|
282
|
-
// don't check the fine channels. only add the coarse channel.
|
|
283
|
-
if (modeChannel === availableChannelName) {
|
|
284
|
-
const cachedFixtureChannel = new CachedFixtureChannel();
|
|
285
|
-
cachedFixtureChannel.channel = availableChannel;
|
|
286
|
-
cachedFixtureChannel.name = availableChannelName;
|
|
287
|
-
cachedFixtureChannel.capabilities = this.getCapabilitiesByChannel(cachedFixtureChannel.channel, availableChannelName, profile);
|
|
288
|
-
const defaultValue = this.getDefaultValueByChannel(cachedFixtureChannel.channel);
|
|
289
|
-
if (defaultValue) {
|
|
290
|
-
cachedFixtureChannel.defaultValue = defaultValue;
|
|
291
|
-
}
|
|
292
|
-
cachedFixtureChannel.maxValue = this.getMaxValueByChannel(cachedFixtureChannel.channel);
|
|
293
|
-
cachedFixtureChannel.colorWheel = this.getColorWheelByChannel(cachedFixtureChannel, profile);
|
|
294
|
-
channels.push(cachedFixtureChannel);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
else {
|
|
298
|
-
// null may be passed as a placeholder for an undefined channel
|
|
299
|
-
channels.push(new CachedFixtureChannel());
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
return channels;
|
|
304
|
-
}
|
|
305
|
-
updateCachedFixtures() {
|
|
306
|
-
// calculate some frequently used values as a cache to save cpu time
|
|
307
|
-
// afterwards
|
|
308
|
-
this.cachedFixtures = [];
|
|
309
|
-
for (const fixture of this.projectService.project.fixtures) {
|
|
310
|
-
const cachedFixture = new CachedFixture();
|
|
311
|
-
cachedFixture.fixture = fixture;
|
|
312
|
-
cachedFixture.profile = this.getProfileByUuid(fixture.profileUuid);
|
|
313
|
-
cachedFixture.mode = this.getModeByFixture(cachedFixture.profile, fixture);
|
|
314
|
-
cachedFixture.channels = this.getCachedChannels(cachedFixture.profile, cachedFixture.mode);
|
|
315
|
-
this.cachedFixtures.push(cachedFixture);
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
capabilitiesMatch(type1, type2, color1, color2, wheel1, wheel2, profileUuid1, profileUuid2) {
|
|
319
|
-
// checks, whether two provided capapabilities match
|
|
320
|
-
return (type1 === type2 &&
|
|
321
|
-
(!color1 || color1 === color2) &&
|
|
322
|
-
(!wheel1 || wheel1 === wheel2) &&
|
|
323
|
-
(!profileUuid1 || profileUuid1 === profileUuid2));
|
|
324
|
-
}
|
|
325
|
-
settingsFixtureIsSelected(fixture) {
|
|
326
|
-
for (const selectedFixture of this.selectedSettingsFixtures) {
|
|
327
|
-
if (selectedFixture === fixture) {
|
|
328
|
-
return true;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
return false;
|
|
332
|
-
}
|
|
333
|
-
switchSettingsFixtureSelection(fixture) {
|
|
334
|
-
if (this.settingsFixtureIsSelected(fixture)) {
|
|
335
|
-
this.selectedSettingsFixtures.splice(this.selectedSettingsFixtures.indexOf(fixture), 1);
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
this.selectedSettingsFixtures.push(fixture);
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
getFixtureIconClass(profile) {
|
|
342
|
-
if (!profile) {
|
|
343
|
-
return '';
|
|
344
|
-
}
|
|
345
|
-
if (profile.categories.length === 0) {
|
|
346
|
-
return '';
|
|
347
|
-
}
|
|
348
|
-
if (!profile.categories[0]) {
|
|
349
|
-
return '';
|
|
350
|
-
}
|
|
351
|
-
return profile.categories[0].replace(' ', '-').toLocaleLowerCase();
|
|
352
|
-
}
|
|
353
|
-
updateProfiles() {
|
|
354
|
-
return this.http.post('update-profiles', null);
|
|
355
|
-
}
|
|
356
|
-
getNextFreeDmxChannel(fixturePool, neededChannels) {
|
|
357
|
-
// get the next free space for this fixture
|
|
358
|
-
let freeChannels = 0;
|
|
359
|
-
for (let i = 0; i < 512; i++) {
|
|
360
|
-
let occupiedChannels = 0;
|
|
361
|
-
for (const fixture of fixturePool) {
|
|
362
|
-
const mode = this.getModeByFixture(this.getProfileByUuid(fixture.profileUuid), fixture);
|
|
363
|
-
if (i >= fixture.dmxFirstChannel && i < fixture.dmxFirstChannel + mode.channels.length) {
|
|
364
|
-
// this channel is already occupied by a fixture -> move forward to the end of the fixture
|
|
365
|
-
if (mode.channels.length > occupiedChannels) {
|
|
366
|
-
occupiedChannels = mode.channels.length - (i - fixture.dmxFirstChannel);
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
if (occupiedChannels > 0) {
|
|
371
|
-
i += occupiedChannels - 1;
|
|
372
|
-
freeChannels = 0;
|
|
373
|
-
}
|
|
374
|
-
else {
|
|
375
|
-
freeChannels++;
|
|
376
|
-
}
|
|
377
|
-
if (freeChannels === neededChannels) {
|
|
378
|
-
return i - freeChannels + 1;
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
// no free space left for the needed channels
|
|
382
|
-
return -1;
|
|
383
|
-
}
|
|
384
|
-
addFixture(profile, fixturePool) {
|
|
385
|
-
const fixture = new Fixture();
|
|
386
|
-
fixture.uuid = this.uuidService.getUuid();
|
|
387
|
-
fixture.profileUuid = profile.uuid;
|
|
388
|
-
fixture.name = profile.name;
|
|
389
|
-
if (profile.modes && profile.modes.length > 0) {
|
|
390
|
-
fixture.modeShortName = profile.modes[0].shortName;
|
|
391
|
-
}
|
|
392
|
-
// add the same mode as an existing fixture, if available
|
|
393
|
-
let existingModeShortName;
|
|
394
|
-
for (const existingFixture of fixturePool) {
|
|
395
|
-
const existingProfile = this.getProfileByUuid(existingFixture.profileUuid);
|
|
396
|
-
if (existingProfile === profile) {
|
|
397
|
-
existingModeShortName = existingFixture.modeShortName;
|
|
398
|
-
break;
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
if (existingModeShortName) {
|
|
402
|
-
fixture.modeShortName = existingModeShortName;
|
|
403
|
-
}
|
|
404
|
-
else {
|
|
405
|
-
fixture.modeShortName = profile.modes[0].shortName || profile.modes[0].name;
|
|
406
|
-
}
|
|
407
|
-
const mode = this.getModeByFixture(this.getProfileByUuid(fixture.profileUuid), fixture);
|
|
408
|
-
const firstChannel = this.getNextFreeDmxChannel(fixturePool, mode.channels.length);
|
|
409
|
-
if (firstChannel >= 0) {
|
|
410
|
-
fixture.dmxFirstChannel = firstChannel;
|
|
411
|
-
fixturePool.push(fixture);
|
|
412
|
-
return fixture;
|
|
413
|
-
}
|
|
414
|
-
else {
|
|
415
|
-
// no free space anymore
|
|
416
|
-
const msg = 'designer.fixture-pool.no-free-space';
|
|
417
|
-
const title = 'designer.fixture-pool.no-free-space-title';
|
|
418
|
-
this.translateService.get([msg, title]).subscribe((result) => {
|
|
419
|
-
this.toastrService.error(result[msg], result[title]);
|
|
420
|
-
});
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
};
|
|
424
|
-
FixtureService.ctorParameters = () => [
|
|
425
|
-
{ type: HttpClient },
|
|
426
|
-
{ type: ProjectService },
|
|
427
|
-
{ type: TranslateService },
|
|
428
|
-
{ type: ToastrService },
|
|
429
|
-
{ type: UuidService }
|
|
430
|
-
];
|
|
431
|
-
FixtureService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FixtureService_Factory() { return new FixtureService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.ProjectService), i0.ɵɵinject(i3.TranslateService), i0.ɵɵinject(i4.ToastrService), i0.ɵɵinject(i5.UuidService)); }, token: FixtureService, providedIn: "root" });
|
|
432
|
-
FixtureService = __decorate([
|
|
433
|
-
Injectable({
|
|
434
|
-
providedIn: 'root',
|
|
435
|
-
}),
|
|
436
|
-
__metadata("design:paramtypes", [HttpClient,
|
|
437
|
-
ProjectService,
|
|
438
|
-
TranslateService,
|
|
439
|
-
ToastrService,
|
|
440
|
-
UuidService])
|
|
441
|
-
], FixtureService);
|
|
442
|
-
export { FixtureService };
|
|
443
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHJvY2tldHNob3cvZGVzaWduZXIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUk1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFM0QsT0FBTyxFQUFvQixvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFLN0MsSUFBYSxjQUFjLEdBQTNCLE1BQWEsY0FBYztJQVF6QixZQUNVLElBQWdCLEVBQ2hCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxhQUE0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dCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlIH0gZnJvbSAnLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlJztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmVDYXBhYmlsaXR5IH0gZnJvbSAnLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZUNoYW5uZWwgfSBmcm9tICcuLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUtY2hhbm5lbCc7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uL21vZGVscy9jb2xvcic7XG5pbXBvcnQgeyBGaXh0dXJlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUnO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHksIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgRml4dHVyZUNoYW5uZWwgfSBmcm9tICcuLi9tb2RlbHMvZml4dHVyZS1jaGFubmVsJztcbmltcG9ydCB7IEZpeHR1cmVNb2RlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtbW9kZSc7XG5pbXBvcnQgeyBGaXh0dXJlUHJvZmlsZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLXByb2ZpbGUnO1xuaW1wb3J0IHsgRml4dHVyZVdoZWVsIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtd2hlZWwnO1xuaW1wb3J0IHsgRml4dHVyZVdoZWVsU2xvdCwgRml4dHVyZVdoZWVsU2xvdFR5cGUgfSBmcm9tICcuLi9tb2RlbHMvZml4dHVyZS13aGVlbC1zbG90JztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi9wcm9qZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXVpZFNlcnZpY2UgfSBmcm9tICcuL3V1aWQuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBGaXh0dXJlU2VydmljZSB7XG4gIGNhY2hlZEZpeHR1cmVzOiBDYWNoZWRGaXh0dXJlW10gPSBbXTtcblxuICAvLyBpcyB0aGUgc2lkZS10YWIgc2V0dGluZ3MgY3VycmVudGx5IHNlbGVjdGVkP1xuICBzZXR0aW5nc1NlbGVjdGlvbiA9IGZhbHNlO1xuXG4gIHNlbGVjdGVkU2V0dGluZ3NGaXh0dXJlczogRml4dHVyZVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1dWlkU2VydmljZTogVXVpZFNlcnZpY2VcbiAgKSB7fVxuXG4gIGdldEZpeHR1cmVCeVV1aWQodXVpZDogc3RyaW5nKTogRml4dHVyZSB7XG4gICAgZm9yIChjb25zdCBmaXh0dXJlIG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlcykge1xuICAgICAgaWYgKGZpeHR1cmUudXVpZCA9PT0gdXVpZCkge1xuICAgICAgICByZXR1cm4gZml4dHVyZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDYWNoZWRGaXh0dXJlQnlVdWlkKHV1aWQ6IHN0cmluZyk6IENhY2hlZEZpeHR1cmUge1xuICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiB0aGlzLmNhY2hlZEZpeHR1cmVzKSB7XG4gICAgICBpZiAoZml4dHVyZS5maXh0dXJlLnV1aWQgPT09IHV1aWQpIHtcbiAgICAgICAgcmV0dXJuIGZpeHR1cmU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0IGFsbCBwcm9maWxlcyB0byBzZWFyY2ggZm9yIChvbmx5IG1ldGFkYXRhKVxuICBnZXRTZWFyY2hQcm9maWxlcygpOiBPYnNlcnZhYmxlPEZpeHR1cmVQcm9maWxlW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCgnZml4dHVyZXMnKS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZTogb2JqZWN0W10pID0+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUHJvZmlsZXM6IEZpeHR1cmVQcm9maWxlW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb2ZpbGUgb2YgcmVzcG9uc2UpIHtcbiAgICAgICAgICBzZWFyY2hQcm9maWxlcy5wdXNoKG5ldyBGaXh0dXJlUHJvZmlsZShwcm9maWxlKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VhcmNoUHJvZmlsZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRQcm9maWxlQnlVdWlkKHV1aWQ6IHN0cmluZyk6IEZpeHR1cmVQcm9maWxlIHtcbiAgICBmb3IgKGNvbnN0IGZpeHR1cmVQcm9maWxlIG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlUHJvZmlsZXMpIHtcbiAgICAgIGlmIChmaXh0dXJlUHJvZmlsZS51dWlkID09PSB1dWlkKSB7XG4gICAgICAgIHJldHVybiBmaXh0dXJlUHJvZmlsZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsb2FkUHJvZmlsZUJ5VXVpZCh1dWlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2FkZWRQcm9maWxlID0gdGhpcy5nZXRQcm9maWxlQnlVdWlkKHV1aWQpO1xuXG4gICAgaWYgKGxvYWRlZFByb2ZpbGUpIHtcbiAgICAgIC8vIFRoaXMgcHJvZmlsZSBpcyBhbHJlYWR5IGxvYWRlZFxuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgLy8gTG9hZCB0aGUgbWV0YWRhdGEgYW5kIHRoZSBwcm9maWxlXG4gICAgcmV0dXJuIGZvcmtKb2luKFt0aGlzLmh0dHAuZ2V0KCdmaXh0dXJlcz91dWlkPScgKyBlbmNvZGVVUkkodXVpZCkpLCB0aGlzLmh0dHAuZ2V0KCdmaXh0dXJlP3V1aWQ9JyArIGVuY29kZVVSSSh1dWlkKSldKS5waXBlKFxuICAgICAgbWFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgY29uc3QgbWVyZ2VkRGF0YSA9IHsgLi4ucmVzdWx0WzBdWzBdLCAuLi5yZXN1bHRbMV0gfTtcbiAgICAgICAgY29uc3QgZml4dHVyZVByb2ZpbGUgPSBuZXcgRml4dHVyZVByb2ZpbGUobWVyZ2VkRGF0YSk7XG4gICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlUHJvZmlsZXMucHVzaChmaXh0dXJlUHJvZmlsZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRSb3RhdGlvbkFuZ2xlRGVnKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIC8vIGNvbnZlcnQgYSByb3RhdGlvbiBhbmdsZSB2YWx1ZSBpbnRvIGRlZ3JlZXNcbiAgICBpZiAodmFsdWUuZW5kc1dpdGgoJ2RlZycpKSB7XG4gICAgICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHZhbHVlLnJlcGxhY2UoJ2RlZycsICcnKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5lbmRzV2l0aCgnJScpKSB7XG4gICAgICBjb25zdCBwZXJjID0gTnVtYmVyLnBhcnNlSW50KHZhbHVlLnJlcGxhY2UoJyUnLCAnJykpO1xuICAgICAgcmV0dXJuIChwZXJjIC8gMTAwKSAqIDM2MDtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0V2hlZWxTbG90Q29sb3JzKHdoZWVsOiBGaXh0dXJlV2hlZWwsIHNsb3ROdW1iZXI6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgICBsZXQgY29sb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHdoZWVsU2xvdHMgPSB0aGlzLmdldFdoZWVsU2xvdHMod2hlZWwsIHNsb3ROdW1iZXIpO1xuXG4gICAgZm9yIChjb25zdCBzbG90IG9mIHdoZWVsU2xvdHMpIHtcbiAgICAgIGlmIChzbG90LmNvbG9ycyAmJiBzbG90LmNvbG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbG9ycyA9IGNvbG9ycy5jb25jYXQoc2xvdC5jb2xvcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb2xvcnM7XG4gIH1cblxuICBnZXRNaXhlZFdoZWVsU2xvdENvbG9yKHdoZWVsOiBGaXh0dXJlV2hlZWwsIHNsb3ROdW1iZXI6IG51bWJlcik6IENvbG9yIHtcbiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmdldFdoZWVsU2xvdENvbG9ycyh3aGVlbCwgc2xvdE51bWJlcik7XG4gICAgY29uc3QgY29sb3JzUmdiOiBDb2xvcltdID0gW107XG5cbiAgICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbG9yIG9mIGNvbG9ycykge1xuICAgICAgY29sb3JzUmdiLnB1c2godGhpcy5oZXhUb1JnYihjb2xvcikpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm1peENvbG9ycyhjb2xvcnNSZ2IpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRUb0hleChjOiBudW1iZXIpOiBhbnkge1xuICAgIGNvbnN0IGhleCA9IGMudG9TdHJpbmcoMTYpO1xuICAgIHJldHVybiBoZXgubGVuZ3RoID09PSAxID8gJzAnICsgaGV4IDogaGV4O1xuICB9XG5cbiAgcmdiVG9IZXgocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuICcjJyArIHRoaXMuY29tcG9uZW50VG9IZXgocikgKyB0aGlzLmNvbXBvbmVudFRvSGV4KGcpICsgdGhpcy5jb21wb25lbnRUb0hleChiKTtcbiAgfVxuXG4gIGhleFRvUmdiKGhleDogc3RyaW5nKTogQ29sb3Ige1xuICAgIC8vIGV4cGFuZCBzaG9ydGhhbmQgZm9ybSAoZS5nLiBcIjAzRlwiKSB0byBmdWxsIGZvcm0gKGUuZy4gXCIwMDMzRkZcIilcbiAgICBjb25zdCBzaG9ydGhhbmRSZWdleCA9IC9eIz8oW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2k7XG4gICAgaGV4ID0gaGV4LnJlcGxhY2Uoc2hvcnRoYW5kUmVnZXgsIChtLCByLCBnLCBiKSA9PiB7XG4gICAgICByZXR1cm4gciArIHIgKyBnICsgZyArIGIgKyBiO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gL14jPyhbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KSQvaS5leGVjKGhleCk7XG4gICAgcmV0dXJuIHJlc3VsdCA/IG5ldyBDb2xvcihwYXJzZUludChyZXN1bHRbMV0sIDE2KSwgcGFyc2VJbnQocmVzdWx0WzJdLCAxNiksIHBhcnNlSW50KHJlc3VsdFszXSwgMTYpKSA6IG51bGw7XG4gIH1cblxuICBtaXhDb2xvcnMoY29sb3JzOiBDb2xvcltdKTogQ29sb3Ige1xuICAgIC8vIG1peCBhbiBhcnJheSBvZiByZ2ItY29sb3JzIGNvbnRhaW5pbmcgciwgZywgYiB2YWx1ZXMgdG8gYSBuZXcgY29sb3JcbiAgICBsZXQgciA9IDA7XG4gICAgbGV0IGcgPSAwO1xuICAgIGxldCBiID0gMDtcblxuICAgIGZvciAoY29uc3QgY29sb3Igb2YgY29sb3JzKSB7XG4gICAgICByICs9IGNvbG9yLnJlZDtcbiAgICAgIGcgKz0gY29sb3IuZ3JlZW47XG4gICAgICBiICs9IGNvbG9yLmJsdWU7XG4gICAgfVxuXG4gICAgciAvPSBjb2xvcnMubGVuZ3RoO1xuICAgIGcgLz0gY29sb3JzLmxlbmd0aDtcbiAgICBiIC89IGNvbG9ycy5sZW5ndGg7XG5cbiAgICByZXR1cm4gbmV3IENvbG9yKHIsIGcsIGIpO1xuICB9XG5cbiAgd2hlZWxIYXNTbG90VHlwZSh3aGVlbDogRml4dHVyZVdoZWVsLCBzbG90VHlwZTogRml4dHVyZVdoZWVsU2xvdFR5cGUpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHNsb3Qgb2Ygd2hlZWwuc2xvdHMpIHtcbiAgICAgIGlmIChzbG90LnR5cGUgPT09IHNsb3RUeXBlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldFdoZWVsQnlOYW1lKHByb2ZpbGU6IEZpeHR1cmVQcm9maWxlLCB3aGVlbE5hbWU6IHN0cmluZyk6IEZpeHR1cmVXaGVlbCB7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBwcm9maWxlLndoZWVscykge1xuICAgICAgaWYgKHByb3BlcnR5ID09PSB3aGVlbE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHByb2ZpbGUud2hlZWxzW3Byb3BlcnR5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB3aGVlbCBub3QgZm91bmRcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRXaGVlbFNsb3RzKHdoZWVsOiBGaXh0dXJlV2hlZWwsIHNsb3ROdW1iZXI6IG51bWJlcik6IEZpeHR1cmVXaGVlbFNsb3RbXSB7XG4gICAgLy8gcmV0dXJuIG9uZSBzbG90IG9yIHR3byBzbG90cywgaWYgdGhleSBhcmUgbWl4ZWQgKGUuZy4gc2xvciBudW1iZXIgMi41IHJldHVybnMgdGhlIHNsb3RzIDIgYW5kIDMpXG4gICAgY29uc3Qgc2xvdHM6IEZpeHR1cmVXaGVlbFNsb3RbXSA9IFtdO1xuXG4gICAgaWYgKCF3aGVlbCkge1xuICAgICAgcmV0dXJuIHNsb3RzO1xuICAgIH1cblxuICAgIGlmIChzbG90TnVtYmVyIC0gTWF0aC5mbG9vcihzbG90TnVtYmVyKSA+IDApIHtcbiAgICAgIC8vIHR3byBzbG90cyBhcmUgc2V0XG4gICAgICBjb25zdCBudW1iZXIgPSBNYXRoLmZsb29yKHNsb3ROdW1iZXIpO1xuICAgICAgc2xvdHMucHVzaCh3aGVlbC5zbG90c1tudW1iZXIgLSAxXSk7XG4gICAgICBpZiAobnVtYmVyID49IDAgJiYgbnVtYmVyIDwgd2hlZWwuc2xvdHMubGVuZ3RoKSB7XG4gICAgICAgIHNsb3RzLnB1c2god2hlZWwuc2xvdHNbbnVtYmVyXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG9ubHkgb25lIHNsb3QgaXMgc2V0XG4gICAgICBzbG90cy5wdXNoKHdoZWVsLnNsb3RzW3Nsb3ROdW1iZXIgLSAxXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNsb3RzO1xuICB9XG5cbiAgZ2V0TW9kZUJ5Rml4dHVyZShwcm9maWxlOiBGaXh0dXJlUHJvZmlsZSwgZml4dHVyZTogRml4dHVyZSk6IEZpeHR1cmVNb2RlIHtcbiAgICBmb3IgKGNvbnN0IG1vZGUgb2YgcHJvZmlsZS5tb2Rlcykge1xuICAgICAgaWYgKG1vZGUuc2hvcnROYW1lKSB7XG4gICAgICAgIGlmIChtb2RlLnNob3J0TmFtZSA9PT0gZml4dHVyZS5tb2RlU2hvcnROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG1vZGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtb2RlLm5hbWUgPT09IGZpeHR1cmUubW9kZVNob3J0TmFtZSkge1xuICAgICAgICAgIHJldHVybiBtb2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaXh0dXJlQ2FwYWJpbGl0eShjYXBhYmlsaXR5OiBGaXh0dXJlQ2FwYWJpbGl0eSwgY2hhbm5lbE5hbWU6IHN0cmluZywgcHJvZmlsZTogRml4dHVyZVByb2ZpbGUpOiBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB7XG4gICAgY29uc3QgY2FjaGVkRml4dHVyZUNhcGFiaWxpdHkgPSBuZXcgQ2FjaGVkRml4dHVyZUNhcGFiaWxpdHkoKTtcbiAgICBjYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eS5jYXBhYmlsaXR5ID0gY2FwYWJpbGl0eTtcbiAgICBpZiAoY2FwYWJpbGl0eS5zbG90TnVtYmVyKSB7XG4gICAgICAvLyB0aGVyZSBpcyBhIHdoZWVsIGNvbm5lY3RlZCB0byB0aGlzIGNhcGFiaWxpdHlcbiAgICAgIGlmICh0eXBlb2YgY2FwYWJpbGl0eS53aGVlbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2FjaGVkRml4dHVyZUNhcGFiaWxpdHkud2hlZWxOYW1lID0gY2FwYWJpbGl0eS53aGVlbCBhcyBzdHJpbmc7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2FwYWJpbGl0eS53aGVlbCkpIHtcbiAgICAgICAgY2FjaGVkRml4dHVyZUNhcGFiaWxpdHkud2hlZWxOYW1lID0gY2FwYWJpbGl0eS53aGVlbFswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlZEZpeHR1cmVDYXBhYmlsaXR5LndoZWVsTmFtZSA9IGNoYW5uZWxOYW1lO1xuICAgICAgfVxuICAgICAgY2FjaGVkRml4dHVyZUNhcGFiaWxpdHkud2hlZWwgPSB0aGlzLmdldFdoZWVsQnlOYW1lKHByb2ZpbGUsIGNhY2hlZEZpeHR1cmVDYXBhYmlsaXR5LndoZWVsTmFtZSk7XG4gICAgICBjYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eS53aGVlbFNsb3RzID0gdGhpcy5nZXRXaGVlbFNsb3RzKGNhY2hlZEZpeHR1cmVDYXBhYmlsaXR5LndoZWVsLCBjYXBhYmlsaXR5LnNsb3ROdW1iZXIpO1xuICAgICAgY2FjaGVkRml4dHVyZUNhcGFiaWxpdHkud2hlZWxJc0NvbG9yID0gdGhpcy53aGVlbEhhc1Nsb3RUeXBlKGNhY2hlZEZpeHR1cmVDYXBhYmlsaXR5LndoZWVsLCBGaXh0dXJlV2hlZWxTbG90VHlwZS5Db2xvcik7XG4gICAgfVxuICAgIGlmIChjYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlICYmIGNhY2hlZEZpeHR1cmVDYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2UubGVuZ3RoID09PSAyKSB7XG4gICAgICBjYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eS5jZW50ZXJWYWx1ZSA9IE1hdGguZmxvb3IoXG4gICAgICAgIChjYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzBdICsgY2FjaGVkRml4dHVyZUNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVsxXSkgLyAyXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkRml4dHVyZUNhcGFiaWxpdHk7XG4gIH1cblxuICBwcml2YXRlIGdldENhcGFiaWxpdGllc0J5Q2hhbm5lbChcbiAgICBmaXh0dXJlQ2hhbm5lbDogRml4dHVyZUNoYW5uZWwsXG4gICAgY2hhbm5lbE5hbWU6IHN0cmluZyxcbiAgICBwcm9maWxlOiBGaXh0dXJlUHJvZmlsZVxuICApOiBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eVtdIHtcbiAgICBjb25zdCBjYXBhYmlsaXRlczogQ2FjaGVkRml4dHVyZUNhcGFiaWxpdHlbXSA9IFtdO1xuXG4gICAgaWYgKGZpeHR1cmVDaGFubmVsLmNhcGFiaWxpdHkpIHtcbiAgICAgIGNhcGFiaWxpdGVzLnB1c2godGhpcy5nZXRGaXh0dXJlQ2FwYWJpbGl0eShmaXh0dXJlQ2hhbm5lbC5jYXBhYmlsaXR5LCBjaGFubmVsTmFtZSwgcHJvZmlsZSkpO1xuICAgIH0gZWxzZSBpZiAoZml4dHVyZUNoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHkgb2YgZml4dHVyZUNoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgIGNhcGFiaWxpdGVzLnB1c2godGhpcy5nZXRGaXh0dXJlQ2FwYWJpbGl0eShjYXBhYmlsaXR5LCBjaGFubmVsTmFtZSwgcHJvZmlsZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjYXBhYmlsaXRlcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWF4VmFsdWVCeUNoYW5uZWwoZml4dHVyZUNoYW5uZWw6IEZpeHR1cmVDaGFubmVsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMjU2LCAxICsgZml4dHVyZUNoYW5uZWwuZmluZUNoYW5uZWxBbGlhc2VzLmxlbmd0aCkgLSAxO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0VmFsdWVCeUNoYW5uZWwoZml4dHVyZUNoYW5uZWw6IEZpeHR1cmVDaGFubmVsKTogbnVtYmVyIHtcbiAgICBpZiAoIWZpeHR1cmVDaGFubmVsLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4oZml4dHVyZUNoYW5uZWwuZGVmYXVsdFZhbHVlIGFzIGFueSkgJiYgKGZpeHR1cmVDaGFubmVsLmRlZmF1bHRWYWx1ZSBhcyBzdHJpbmcpLmVuZHNXaXRoKCclJykpIHtcbiAgICAgIC8vIHBlcmNlbnRhZ2UgdmFsdWVcbiAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBOdW1iZXIucGFyc2VJbnQoKGZpeHR1cmVDaGFubmVsLmRlZmF1bHRWYWx1ZSBhcyBzdHJpbmcpLnJlcGxhY2UoJyUnLCAnJykpO1xuICAgICAgY29uc3QgbWF4VmFsdWUgPSB0aGlzLmdldE1heFZhbHVlQnlDaGFubmVsKGZpeHR1cmVDaGFubmVsKTtcbiAgICAgIHJldHVybiAobWF4VmFsdWUgLyAxMDApICogcGVyY2VudGFnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRE1YIHZhbHVlXG4gICAgICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KGZpeHR1cmVDaGFubmVsLmRlZmF1bHRWYWx1ZSBhcyBhbnkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sb3JXaGVlbEJ5Q2hhbm5lbChjaGFubmVsOiBDYWNoZWRGaXh0dXJlQ2hhbm5lbCwgcHJvZmlsZTogRml4dHVyZVByb2ZpbGUpOiBGaXh0dXJlV2hlZWwge1xuICAgIGZvciAoY29uc3QgY2hhbm5lbENhcGFiaWxpdHkgb2YgY2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgIGlmIChjaGFubmVsQ2FwYWJpbGl0eS53aGVlbElzQ29sb3IpIHtcbiAgICAgICAgcmV0dXJuIGNoYW5uZWxDYXBhYmlsaXR5LndoZWVsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBwcml2YXRlIGNoYW5uZWxJbkxpc3QoY2hhbm5lbHM6IENhY2hlZEZpeHR1cmVDaGFubmVsW10sIG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyAgIGZvciAobGV0IGNoYW5uZWwgb2YgY2hhbm5lbHMpIHtcbiAgLy8gICAgIGlmIChjaGFubmVsLmNoYW5uZWxOYW1lID09PSBuYW1lKSB7XG4gIC8vICAgICAgIHJldHVybiB0cnVlO1xuICAvLyAgICAgfVxuICAvLyAgIH1cblxuICAvLyAgIHJldHVybiBmYWxzZTtcbiAgLy8gfVxuXG4gIGdldENoYW5uZWxCeU5hbWUoZml4dHVyZTogQ2FjaGVkRml4dHVyZSwgY2hhbm5lbE5hbWU6IHN0cmluZyk6IENhY2hlZEZpeHR1cmVDaGFubmVsIHtcbiAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgZml4dHVyZS5jaGFubmVscykge1xuICAgICAgaWYgKFxuICAgICAgICAoY2hhbm5lbC5uYW1lICYmIGNoYW5uZWwubmFtZSA9PT0gY2hhbm5lbE5hbWUpIHx8XG4gICAgICAgIChjaGFubmVsLmNoYW5uZWwgJiYgY2hhbm5lbC5jaGFubmVsLmZpbmVDaGFubmVsQWxpYXNlcy5pbmRleE9mKGNoYW5uZWxOYW1lKSA+IC0xKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBjaGFubmVsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRDYWNoZWRDaGFubmVscyhwcm9maWxlOiBGaXh0dXJlUHJvZmlsZSwgbW9kZTogRml4dHVyZU1vZGUpOiBDYWNoZWRGaXh0dXJlQ2hhbm5lbFtdIHtcbiAgICBjb25zdCBjaGFubmVsczogQ2FjaGVkRml4dHVyZUNoYW5uZWxbXSA9IFtdO1xuXG4gICAgaWYgKCFtb2RlKSB7XG4gICAgICByZXR1cm4gY2hhbm5lbHM7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhdmFpbGFibGVDaGFubmVsTmFtZSBvZiBPYmplY3Qua2V5cyhwcm9maWxlLmF2YWlsYWJsZUNoYW5uZWxzKSkge1xuICAgICAgY29uc3QgYXZhaWxhYmxlQ2hhbm5lbDogRml4dHVyZUNoYW5uZWwgPSBwcm9maWxlLmF2YWlsYWJsZUNoYW5uZWxzW2F2YWlsYWJsZUNoYW5uZWxOYW1lXTtcblxuICAgICAgZm9yIChjb25zdCBjaGFubmVsIG9mIG1vZGUuY2hhbm5lbHMpIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIHN0cmluZyBjaGFubmVsLiBJdCBjYW4gZ2V0IGNyZWVweSBmb3IgbWF0cml4IG1vZGVzXG4gICAgICAgIGlmICh0eXBlb2YgY2hhbm5lbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjb25zdCBtb2RlQ2hhbm5lbDogc3RyaW5nID0gY2hhbm5lbCBhcyBzdHJpbmc7XG5cbiAgICAgICAgICAvLyBkb24ndCBjaGVjayB0aGUgZmluZSBjaGFubmVscy4gb25seSBhZGQgdGhlIGNvYXJzZSBjaGFubmVsLlxuICAgICAgICAgIGlmIChtb2RlQ2hhbm5lbCA9PT0gYXZhaWxhYmxlQ2hhbm5lbE5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlZEZpeHR1cmVDaGFubmVsID0gbmV3IENhY2hlZEZpeHR1cmVDaGFubmVsKCk7XG4gICAgICAgICAgICBjYWNoZWRGaXh0dXJlQ2hhbm5lbC5jaGFubmVsID0gYXZhaWxhYmxlQ2hhbm5lbDtcbiAgICAgICAgICAgIGNhY2hlZEZpeHR1cmVDaGFubmVsLm5hbWUgPSBhdmFpbGFibGVDaGFubmVsTmFtZTtcbiAgICAgICAgICAgIGNhY2hlZEZpeHR1cmVDaGFubmVsLmNhcGFiaWxpdGllcyA9IHRoaXMuZ2V0Q2FwYWJpbGl0aWVzQnlDaGFubmVsKGNhY2hlZEZpeHR1cmVDaGFubmVsLmNoYW5uZWwsIGF2YWlsYWJsZUNoYW5uZWxOYW1lLCBwcm9maWxlKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlQnlDaGFubmVsKGNhY2hlZEZpeHR1cmVDaGFubmVsLmNoYW5uZWwpO1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICBjYWNoZWRGaXh0dXJlQ2hhbm5lbC5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWNoZWRGaXh0dXJlQ2hhbm5lbC5tYXhWYWx1ZSA9IHRoaXMuZ2V0TWF4VmFsdWVCeUNoYW5uZWwoY2FjaGVkRml4dHVyZUNoYW5uZWwuY2hhbm5lbCk7XG4gICAgICAgICAgICBjYWNoZWRGaXh0dXJlQ2hhbm5lbC5jb2xvcldoZWVsID0gdGhpcy5nZXRDb2xvcldoZWVsQnlDaGFubmVsKGNhY2hlZEZpeHR1cmVDaGFubmVsLCBwcm9maWxlKTtcbiAgICAgICAgICAgIGNoYW5uZWxzLnB1c2goY2FjaGVkRml4dHVyZUNoYW5uZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBudWxsIG1heSBiZSBwYXNzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgYW4gdW5kZWZpbmVkIGNoYW5uZWxcbiAgICAgICAgICBjaGFubmVscy5wdXNoKG5ldyBDYWNoZWRGaXh0dXJlQ2hhbm5lbCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGFubmVscztcbiAgfVxuXG4gIHVwZGF0ZUNhY2hlZEZpeHR1cmVzKCkge1xuICAgIC8vIGNhbGN1bGF0ZSBzb21lIGZyZXF1ZW50bHkgdXNlZCB2YWx1ZXMgYXMgYSBjYWNoZSB0byBzYXZlIGNwdSB0aW1lXG4gICAgLy8gYWZ0ZXJ3YXJkc1xuICAgIHRoaXMuY2FjaGVkRml4dHVyZXMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuZml4dHVyZXMpIHtcbiAgICAgIGNvbnN0IGNhY2hlZEZpeHR1cmUgPSBuZXcgQ2FjaGVkRml4dHVyZSgpO1xuXG4gICAgICBjYWNoZWRGaXh0dXJlLmZpeHR1cmUgPSBmaXh0dXJlO1xuICAgICAgY2FjaGVkRml4dHVyZS5wcm9maWxlID0gdGhpcy5nZXRQcm9maWxlQnlVdWlkKGZpeHR1cmUucHJvZmlsZVV1aWQpO1xuICAgICAgY2FjaGVkRml4dHVyZS5tb2RlID0gdGhpcy5nZXRNb2RlQnlGaXh0dXJlKGNhY2hlZEZpeHR1cmUucHJvZmlsZSwgZml4dHVyZSk7XG4gICAgICBjYWNoZWRGaXh0dXJlLmNoYW5uZWxzID0gdGhpcy5nZXRDYWNoZWRDaGFubmVscyhjYWNoZWRGaXh0dXJlLnByb2ZpbGUsIGNhY2hlZEZpeHR1cmUubW9kZSk7XG5cbiAgICAgIHRoaXMuY2FjaGVkRml4dHVyZXMucHVzaChjYWNoZWRGaXh0dXJlKTtcbiAgICB9XG4gIH1cblxuICBjYXBhYmlsaXRpZXNNYXRjaChcbiAgICB0eXBlMTogRml4dHVyZUNhcGFiaWxpdHlUeXBlLFxuICAgIHR5cGUyOiBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUsXG4gICAgY29sb3IxOiBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLFxuICAgIGNvbG9yMjogRml4dHVyZUNhcGFiaWxpdHlDb2xvcixcbiAgICB3aGVlbDE6IHN0cmluZyxcbiAgICB3aGVlbDI6IHN0cmluZyxcbiAgICBwcm9maWxlVXVpZDE6IHN0cmluZyxcbiAgICBwcm9maWxlVXVpZDI6IHN0cmluZ1xuICApOiBib29sZWFuIHtcbiAgICAvLyBjaGVja3MsIHdoZXRoZXIgdHdvIHByb3ZpZGVkIGNhcGFwYWJpbGl0aWVzIG1hdGNoXG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGUxID09PSB0eXBlMiAmJlxuICAgICAgKCFjb2xvcjEgfHwgY29sb3IxID09PSBjb2xvcjIpICYmXG4gICAgICAoIXdoZWVsMSB8fCB3aGVlbDEgPT09IHdoZWVsMikgJiZcbiAgICAgICghcHJvZmlsZVV1aWQxIHx8IHByb2ZpbGVVdWlkMSA9PT0gcHJvZmlsZVV1aWQyKVxuICAgICk7XG4gIH1cblxuICBzZXR0aW5nc0ZpeHR1cmVJc1NlbGVjdGVkKGZpeHR1cmU6IEZpeHR1cmUpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHNlbGVjdGVkRml4dHVyZSBvZiB0aGlzLnNlbGVjdGVkU2V0dGluZ3NGaXh0dXJlcykge1xuICAgICAgaWYgKHNlbGVjdGVkRml4dHVyZSA9PT0gZml4dHVyZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2hTZXR0aW5nc0ZpeHR1cmVTZWxlY3Rpb24oZml4dHVyZTogRml4dHVyZSkge1xuICAgIGlmICh0aGlzLnNldHRpbmdzRml4dHVyZUlzU2VsZWN0ZWQoZml4dHVyZSkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZXR0aW5nc0ZpeHR1cmVzLnNwbGljZSh0aGlzLnNlbGVjdGVkU2V0dGluZ3NGaXh0dXJlcy5pbmRleE9mKGZpeHR1cmUpLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFNldHRpbmdzRml4dHVyZXMucHVzaChmaXh0dXJlKTtcbiAgICB9XG4gIH1cblxuICBnZXRGaXh0dXJlSWNvbkNsYXNzKHByb2ZpbGU6IEZpeHR1cmVQcm9maWxlKTogc3RyaW5nIHtcbiAgICBpZiAoIXByb2ZpbGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHByb2ZpbGUuY2F0ZWdvcmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKCFwcm9maWxlLmNhdGVnb3JpZXNbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHByb2ZpbGUuY2F0ZWdvcmllc1swXS5yZXBsYWNlKCcgJywgJy0nKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICB9XG5cbiAgdXBkYXRlUHJvZmlsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KCd1cGRhdGUtcHJvZmlsZXMnLCBudWxsKTtcbiAgfVxuXG4gIGdldE5leHRGcmVlRG14Q2hhbm5lbChmaXh0dXJlUG9vbDogRml4dHVyZVtdLCBuZWVkZWRDaGFubmVsczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBnZXQgdGhlIG5leHQgZnJlZSBzcGFjZSBmb3IgdGhpcyBmaXh0dXJlXG4gICAgbGV0IGZyZWVDaGFubmVscyA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUxMjsgaSsrKSB7XG4gICAgICBsZXQgb2NjdXBpZWRDaGFubmVscyA9IDA7XG5cbiAgICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiBmaXh0dXJlUG9vbCkge1xuICAgICAgICBjb25zdCBtb2RlID0gdGhpcy5nZXRNb2RlQnlGaXh0dXJlKHRoaXMuZ2V0UHJvZmlsZUJ5VXVpZChmaXh0dXJlLnByb2ZpbGVVdWlkKSwgZml4dHVyZSk7XG5cbiAgICAgICAgaWYgKGkgPj0gZml4dHVyZS5kbXhGaXJzdENoYW5uZWwgJiYgaSA8IGZpeHR1cmUuZG14Rmlyc3RDaGFubmVsICsgbW9kZS5jaGFubmVscy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyB0aGlzIGNoYW5uZWwgaXMgYWxyZWFkeSBvY2N1cGllZCBieSBhIGZpeHR1cmUgLT4gbW92ZSBmb3J3YXJkIHRvIHRoZSBlbmQgb2YgdGhlIGZpeHR1cmVcbiAgICAgICAgICBpZiAobW9kZS5jaGFubmVscy5sZW5ndGggPiBvY2N1cGllZENoYW5uZWxzKSB7XG4gICAgICAgICAgICBvY2N1cGllZENoYW5uZWxzID0gbW9kZS5jaGFubmVscy5sZW5ndGggLSAoaSAtIGZpeHR1cmUuZG14Rmlyc3RDaGFubmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9jY3VwaWVkQ2hhbm5lbHMgPiAwKSB7XG4gICAgICAgIGkgKz0gb2NjdXBpZWRDaGFubmVscyAtIDE7XG4gICAgICAgIGZyZWVDaGFubmVscyA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmVlQ2hhbm5lbHMrKztcbiAgICAgIH1cblxuICAgICAgaWYgKGZyZWVDaGFubmVscyA9PT0gbmVlZGVkQ2hhbm5lbHMpIHtcbiAgICAgICAgcmV0dXJuIGkgLSBmcmVlQ2hhbm5lbHMgKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vIGZyZWUgc3BhY2UgbGVmdCBmb3IgdGhlIG5lZWRlZCBjaGFubmVsc1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIGFkZEZpeHR1cmUocHJvZmlsZTogRml4dHVyZVByb2ZpbGUsIGZpeHR1cmVQb29sOiBGaXh0dXJlW10pOiBGaXh0dXJlIHtcbiAgICBjb25zdCBmaXh0dXJlID0gbmV3IEZpeHR1cmUoKTtcblxuICAgIGZpeHR1cmUudXVpZCA9IHRoaXMudXVpZFNlcnZpY2UuZ2V0VXVpZCgpO1xuICAgIGZpeHR1cmUucHJvZmlsZVV1aWQgPSBwcm9maWxlLnV1aWQ7XG4gICAgZml4dHVyZS5uYW1lID0gcHJvZmlsZS5uYW1lO1xuXG4gICAgaWYgKHByb2ZpbGUubW9kZXMgJiYgcHJvZmlsZS5tb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmaXh0dXJlLm1vZGVTaG9ydE5hbWUgPSBwcm9maWxlLm1vZGVzWzBdLnNob3J0TmFtZTtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIHNhbWUgbW9kZSBhcyBhbiBleGlzdGluZyBmaXh0dXJlLCBpZiBhdmFpbGFibGVcbiAgICBsZXQgZXhpc3RpbmdNb2RlU2hvcnROYW1lOiBzdHJpbmc7XG4gICAgZm9yIChjb25zdCBleGlzdGluZ0ZpeHR1cmUgb2YgZml4dHVyZVBvb2wpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUHJvZmlsZSA9IHRoaXMuZ2V0UHJvZmlsZUJ5VXVpZChleGlzdGluZ0ZpeHR1cmUucHJvZmlsZVV1aWQpO1xuXG4gICAgICBpZiAoZXhpc3RpbmdQcm9maWxlID09PSBwcm9maWxlKSB7XG4gICAgICAgIGV4aXN0aW5nTW9kZVNob3J0TmFtZSA9IGV4aXN0aW5nRml4dHVyZS5tb2RlU2hvcnROYW1lO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXhpc3RpbmdNb2RlU2hvcnROYW1lKSB7XG4gICAgICBmaXh0dXJlLm1vZGVTaG9ydE5hbWUgPSBleGlzdGluZ01vZGVTaG9ydE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpeHR1cmUubW9kZVNob3J0TmFtZSA9IHByb2ZpbGUubW9kZXNbMF0uc2hvcnROYW1lIHx8IHByb2ZpbGUubW9kZXNbMF0ubmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlID0gdGhpcy5nZXRNb2RlQnlGaXh0dXJlKHRoaXMuZ2V0UHJvZmlsZUJ5VXVpZChmaXh0dXJlLnByb2ZpbGVVdWlkKSwgZml4dHVyZSk7XG4gICAgY29uc3QgZmlyc3RDaGFubmVsID0gdGhpcy5nZXROZXh0RnJlZURteENoYW5uZWwoZml4dHVyZVBvb2wsIG1vZGUuY2hhbm5lbHMubGVuZ3RoKTtcblxuICAgIGlmIChmaXJzdENoYW5uZWwgPj0gMCkge1xuICAgICAgZml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPSBmaXJzdENoYW5uZWw7XG4gICAgICBmaXh0dXJlUG9vbC5wdXNoKGZpeHR1cmUpO1xuICAgICAgcmV0dXJuIGZpeHR1cmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vIGZyZWUgc3BhY2UgYW55bW9yZVxuICAgICAgY29uc3QgbXNnID0gJ2Rlc2lnbmVyLmZpeHR1cmUtcG9vbC5uby1mcmVlLXNwYWNlJztcbiAgICAgIGNvbnN0IHRpdGxlID0gJ2Rlc2lnbmVyLmZpeHR1cmUtcG9vbC5uby1mcmVlLXNwYWNlLXRpdGxlJztcblxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChbbXNnLCB0aXRsZV0pLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5lcnJvcihyZXN1bHRbbXNnXSwgcmVzdWx0W3RpdGxlXSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
let HotkeyTargetExcludeService = class HotkeyTargetExcludeService {
|
|
5
|
-
constructor() {
|
|
6
|
-
}
|
|
7
|
-
exclude(event) {
|
|
8
|
-
// don't react on certain targets (e.g. the user is inside an input field)
|
|
9
|
-
if (!event.target) {
|
|
10
|
-
return false;
|
|
11
|
-
}
|
|
12
|
-
if (event.target.nodeName === 'INPUT') {
|
|
13
|
-
return true;
|
|
14
|
-
}
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
HotkeyTargetExcludeService.ɵprov = i0.ɵɵdefineInjectable({ factory: function HotkeyTargetExcludeService_Factory() { return new HotkeyTargetExcludeService(); }, token: HotkeyTargetExcludeService, providedIn: "root" });
|
|
19
|
-
HotkeyTargetExcludeService = __decorate([
|
|
20
|
-
Injectable({
|
|
21
|
-
providedIn: 'root',
|
|
22
|
-
}),
|
|
23
|
-
__metadata("design:paramtypes", [])
|
|
24
|
-
], HotkeyTargetExcludeService);
|
|
25
|
-
export { HotkeyTargetExcludeService };
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90a2V5LXRhcmdldC1leGNsdWRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Acm9ja2V0c2hvdy9kZXNpZ25lci8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9ob3RrZXktdGFyZ2V0LWV4Y2x1ZGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsSUFBYSwwQkFBMEIsR0FBdkMsTUFBYSwwQkFBMEI7SUFDckM7SUFBZSxDQUFDO0lBRWhCLE9BQU8sQ0FBQyxLQUFVO1FBQ2hCLDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNqQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGLENBQUE7O0FBZlksMEJBQTBCO0lBSHRDLFVBQVUsQ0FBQztRQUNWLFVBQVUsRUFBRSxNQUFNO0tBQ25CLENBQUM7O0dBQ1csMEJBQTBCLENBZXRDO1NBZlksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgSG90a2V5VGFyZ2V0RXhjbHVkZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgZXhjbHVkZShldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgLy8gZG9uJ3QgcmVhY3Qgb24gY2VydGFpbiB0YXJnZXRzIChlLmcuIHRoZSB1c2VyIGlzIGluc2lkZSBhbiBpbnB1dCBmaWVsZClcbiAgICBpZiAoIWV2ZW50LnRhcmdldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChldmVudC50YXJnZXQubm9kZU5hbWUgPT09ICdJTlBVVCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
|