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