@rocketshow/designer 1.67.0 → 1.68.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.
@@ -1 +1 @@
1
- {"version":3,"file":"rocketshow-designer.mjs","sources":["../../../projects/designer/src/lib/designer.service.ts","../../../projects/designer/src/lib/models/fixture-capability.ts","../../../projects/designer/src/lib/models/fixture-channel.ts","../../../projects/designer/src/lib/models/fixture-matrix-pixel-group-constraints.ts","../../../projects/designer/src/lib/models/fixture-matrix-pixel-group.ts","../../../projects/designer/src/lib/models/fixture-matrix.ts","../../../projects/designer/src/lib/models/fixture-mode-channel.ts","../../../projects/designer/src/lib/models/fixture-mode.ts","../../../projects/designer/src/lib/models/fixture-physical.ts","../../../projects/designer/src/lib/models/fixture-wheel-slot.ts","../../../projects/designer/src/lib/models/fixture-wheel.ts","../../../projects/designer/src/lib/models/fixture-profile.ts","../../../projects/designer/src/lib/models/cached-fixture.ts","../../../projects/designer/src/lib/models/cached-fixture-capability.ts","../../../projects/designer/src/lib/models/cached-fixture-channel.ts","../../../projects/designer/src/lib/models/color.ts","../../../projects/designer/src/lib/models/fixture.ts","../../../projects/designer/src/lib/models/scene-playback-region.ts","../../../projects/designer/src/lib/models/composition.ts","../../../projects/designer/src/lib/models/effect.ts","../../../projects/designer/src/lib/models/effect-curve-profile-channel.ts","../../../projects/designer/src/lib/models/effect-curve.ts","../../../projects/designer/src/lib/models/effect-pan-tilt.ts","../../../projects/designer/src/lib/models/fixture-capability-value.ts","../../../projects/designer/src/lib/models/fixture-channel-value.ts","../../../projects/designer/src/lib/models/preset-fixture.ts","../../../projects/designer/src/lib/models/preset.ts","../../../projects/designer/src/lib/models/scene.ts","../../../projects/designer/src/lib/models/project.ts","../../../projects/designer/src/lib/services/user.service.ts","../../../projects/designer/src/lib/services/project.service.ts","../../../projects/designer/src/lib/services/uuid.service.ts","../../../projects/designer/src/lib/models/cached-fixture-pixel.ts","../../../projects/designer/src/lib/services/fixture-pixel-group-resolve.service.ts","../../../projects/designer/src/lib/services/fixture.service.ts","../../../projects/designer/src/lib/services/preview-mesh.service.ts","../../../projects/designer/src/lib/models/preset-region-scene.ts","../../../projects/designer/src/lib/services/effect.service.ts","../../../projects/designer/src/lib/services/animation.service.ts","../../../projects/designer/src/lib/services/config.service.ts","../../../projects/designer/src/lib/services/timeline-state.service.ts","../../../projects/designer/src/lib/services/live-preview.service.ts","../../../projects/designer/src/lib/services/preset.service.ts","../../../projects/designer/src/lib/services/scene.service.ts","../../../projects/designer/src/lib/services/timeline.service.ts","../../../projects/designer/src/lib/services/preview.service.ts","../../../projects/designer/src/lib/preview/models/fixture-3d.ts","../../../projects/designer/src/lib/preview/models/color-changer-3d.ts","../../../projects/designer/src/lib/preview/models/moving-head-3d.ts","../../../projects/designer/src/lib/preview/preview.component.ts","../../../projects/designer/src/lib/preview/preview.component.html","../../../projects/designer/src/lib/wait-dialog/wait-dialog.component.ts","../../../projects/designer/src/lib/wait-dialog/wait-dialog.component.html","../../../projects/designer/src/lib/warning-dialog/warning-dialog.component.ts","../../../projects/designer/src/lib/warning-dialog/warning-dialog.component.html","../../../projects/designer/src/lib/services/warning-dialog.service.ts","../../../projects/designer/src/lib/services/project-load.service.ts","../../../projects/designer/src/lib/array-sort-pipe.ts","../../../projects/designer/src/lib/project/project-browser/project-browser.component.ts","../../../projects/designer/src/lib/project/project-browser/project-browser.component.html","../../../projects/designer/src/lib/project/project-import/project-import.component.ts","../../../projects/designer/src/lib/project/project-import/project-import.component.html","../../../projects/designer/src/lib/project/project-save/project-save.component.ts","../../../projects/designer/src/lib/project/project-save/project-save.component.html","../../../projects/designer/src/lib/project/project-share/project-share.component.ts","../../../projects/designer/src/lib/project/project-share/project-share.component.html","../../../projects/designer/src/lib/error-dialog/error-dialog.component.ts","../../../projects/designer/src/lib/error-dialog/error-dialog.component.html","../../../projects/designer/src/lib/services/error-dialog.service.ts","../../../projects/designer/src/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.ts","../../../projects/designer/src/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.html","../../../projects/designer/src/lib/sortablejs/sortablejs.directive.ts","../../../projects/designer/src/lib/fixture-pool/fixture-pool-edit-universes/fixture-pool-edit-universes.component.ts","../../../projects/designer/src/lib/fixture-pool/fixture-pool-edit-universes/fixture-pool-edit-universes.component.html","../../../projects/designer/src/lib/fixture-pool/fixture-pool.component.ts","../../../projects/designer/src/lib/fixture-pool/fixture-pool.component.html","../../../projects/designer/src/lib/services/fixture-pool.service.ts","../../../projects/designer/src/lib/services/hotkey-target-exclude.service.ts","../../../projects/designer/src/lib/services/intro.service.ts","../../../projects/designer/src/lib/user/user-login/user-login.component.ts","../../../projects/designer/src/lib/user/user-login/user-login.component.html","../../../projects/designer/src/lib/user/user-register/user-register.component.ts","../../../projects/designer/src/lib/user/user-register/user-register.component.html","../../../projects/designer/src/lib/services/user-ensure-login.service.ts","../../../projects/designer/src/lib/dropzone/dropzone.component.ts","../../../projects/designer/src/lib/dropzone/dropzone.component.html","../../../projects/designer/src/lib/timeline/composition-settings/composition-settings.component.ts","../../../projects/designer/src/lib/timeline/composition-settings/composition-settings.component.html","../../../projects/designer/src/lib/timeline/timeline-grid/timeline-grid.component.ts","../../../projects/designer/src/lib/timeline/timeline-grid/timeline-grid.component.html","../../../projects/designer/src/lib/timeline/timeline.component.ts","../../../projects/designer/src/lib/timeline/timeline.component.html","../../../projects/designer/src/lib/scene/scene-settings/scene-settings.component.ts","../../../projects/designer/src/lib/scene/scene-settings/scene-settings.component.html","../../../projects/designer/src/lib/scene/scene.component.ts","../../../projects/designer/src/lib/scene/scene.component.html","../../../projects/designer/src/lib/fixture/fixture.component.ts","../../../projects/designer/src/lib/fixture/fixture.component.html","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.ts","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.html","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.ts","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.html","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.ts","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.html","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.ts","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.html","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability.component.ts","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability.component.html","../../../projects/designer/src/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.ts","../../../projects/designer/src/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.html","../../../projects/designer/src/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.ts","../../../projects/designer/src/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.html","../../../projects/designer/src/lib/fixture/fixture-settings/fixture-settings.component.ts","../../../projects/designer/src/lib/fixture/fixture-settings/fixture-settings.component.html","../../../projects/designer/src/lib/effect/effect-curve/effect-curve.component.ts","../../../projects/designer/src/lib/effect/effect-curve/effect-curve.component.html","../../../projects/designer/src/lib/effect/effect-pan-tilt/effect-pan-tilt.component.ts","../../../projects/designer/src/lib/effect/effect-pan-tilt/effect-pan-tilt.component.html","../../../projects/designer/src/lib/effect/effect.component.ts","../../../projects/designer/src/lib/effect/effect.component.html","../../../projects/designer/src/lib/preset/preset-settings/preset-settings.component.ts","../../../projects/designer/src/lib/preset/preset-settings/preset-settings.component.html","../../../projects/designer/src/lib/preset/preset.component.ts","../../../projects/designer/src/lib/preset/preset.component.html","../../../projects/designer/src/lib/master-dimmer/master-dimmer.component.ts","../../../projects/designer/src/lib/master-dimmer/master-dimmer.component.html","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.ts","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.html","../../../projects/designer/src/lib/fixture/fixture-channel/fixture-channel.component.ts","../../../projects/designer/src/lib/fixture/fixture-channel/fixture-channel.component.html","../../../projects/designer/src/lib/intro/intro.component.ts","../../../projects/designer/src/lib/intro/intro.component.html","../../../projects/designer/src/lib/designer.component.ts","../../../projects/designer/src/lib/designer.component.html","../../../projects/designer/src/lib/tree/tree.component.ts","../../../projects/designer/src/lib/tree/tree.component.html","../../../projects/designer/src/lib/designer.module.ts","../../../projects/designer/src/public_api.ts","../../../projects/designer/src/rocketshow-designer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DesignerService {\n constructor() {}\n}\n","export enum FixtureCapabilityType {\n NoFunction = 'NoFunction',\n ShutterStrobe = 'ShutterStrobe',\n StrobeSpeed = 'StrobeSpeed',\n StrobeDuration = 'StrobeDuration',\n Intensity = 'Intensity',\n ColorIntensity = 'ColorIntensity',\n ColorPreset = 'ColorPreset',\n ColorTemperature = 'ColorTemperature',\n Pan = 'Pan',\n PanContinuous = 'PanContinuous',\n Tilt = 'Tilt',\n TiltContinuous = 'TiltContinuous',\n PanTiltSpeed = 'PanTiltSpeed',\n WheelSlot = 'WheelSlot',\n WheelShake = 'WheelShake',\n WheelSlotRotation = 'WheelSlotRotation',\n WheelRotation = 'WheelRotation',\n EffectSpeed = 'EffectSpeed',\n EffectDuration = 'EffectDuration',\n EffectParameter = 'EffectParameter',\n SoundSensitivity = 'SoundSensitivity',\n Focus = 'Focus',\n Zoom = 'Zoom',\n Iris = 'Iris',\n IrisEffect = 'IrisEffect',\n Frost = 'Frost',\n FrostEffect = 'FrostEffect',\n Prism = 'Prism',\n PrismRotation = 'PrismRotation',\n BladeInsertion = 'BladeInsertion',\n BladeRotation = 'BladeRotation',\n BladeSystemRotation = 'BladeSystemRotation',\n Fog = 'Fog',\n FogOutput = 'FogOutput',\n FogType = 'FogType',\n BeamAngle = 'BeamAngle',\n Rotation = 'Rotation',\n Speed = 'Speed',\n Time = 'Time',\n Maintenance = 'Maintenance',\n Generic = 'Generic',\n Effect = 'Effect',\n BeamPosition = 'BeamPosition',\n}\n\nexport enum FixtureCapabilityColor {\n Red = 'Red',\n Green = 'Green',\n Blue = 'Blue',\n Cyan = 'Cyan',\n Magenta = 'Magenta',\n Yellow = 'Yellow',\n Amber = 'Amber',\n White = 'White',\n 'Warm White' = 'Warm White',\n 'Cold White' = 'Cold White',\n UV = 'UV',\n Lime = 'Lime',\n Indigo = 'Indigo',\n}\n\nexport class FixtureCapability {\n type: FixtureCapabilityType;\n color: FixtureCapabilityColor;\n dmxRange: number[] = [];\n slotNumber: number;\n comment: string;\n soundControlled: boolean;\n shutterEffect: string;\n randomTiming: boolean;\n\n // may be empty. in this case, the channel name points to the wheel\n wheel: any;\n\n angle: string;\n angleStart: string;\n angleEnd: string;\n speed: string;\n speedStart: string;\n speedEnd: string;\n brightness: string;\n brightnessStart: string;\n brightnessEnd: string;\n duration: string;\n durationStart: string;\n durationEnd: string;\n colorTemperature: string;\n colorTemperatureStart: string;\n colorTemperatureEnd: string;\n soundSensitivity: string;\n soundSensitivityStart: string;\n soundSensitivityEnd: string;\n horizontalAngle: string;\n horizontalAngleStart: string;\n horizontalAngleEnd: string;\n verticalAngle: string;\n verticalAngleStart: string;\n verticalAngleEnd: string;\n distance: string;\n distanceStart: string;\n distanceEnd: string;\n openPercent: string;\n openPercentStart: string;\n openPercentEnd: string;\n frostIntensity: string;\n frostIntensityStart: string;\n frostIntensityEnd: string;\n fogOutput: string;\n fogOutputStart: string;\n fogOutputEnd: string;\n time: string;\n timeStart: string;\n timeEnd: string;\n insertion: string;\n insertionStart: string;\n insertionEnd: string;\n colors: string[];\n colorsStart: string[];\n colorsEnd: string[];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.type = FixtureCapabilityType[data.type as string];\n this.color = data.color;\n if (data.dmxRange) {\n this.dmxRange = data.dmxRange;\n }\n this.wheel = data.wheel;\n this.slotNumber = data.slotNumber;\n this.comment = data.comment;\n this.soundControlled = data.soundControlled;\n this.shutterEffect = data.shutterEffect;\n this.randomTiming = data.randomTiming;\n\n this.angle = data.angle;\n this.angleStart = data.angleStart;\n this.angleEnd = data.angleEnd;\n this.speed = data.speed;\n this.speedStart = data.speedStart;\n this.speedEnd = data.speedEnd;\n this.brightness = data.brightness;\n this.brightnessStart = data.brightnessStart;\n this.brightnessEnd = data.brightnessEnd;\n this.duration = data.duration;\n this.durationStart = data.durationStart;\n this.durationEnd = data.durationEnd;\n this.colorTemperature = data.colorTemperature;\n this.colorTemperatureStart = data.colorTemperatureStart;\n this.colorTemperatureEnd = data.colorTemperatureEnd;\n this.soundSensitivity = data.soundSensitivity;\n this.soundSensitivityStart = data.soundSensitivityStart;\n this.soundSensitivityEnd = data.soundSensitivityEnd;\n this.horizontalAngle = data.horizontalAngle;\n this.horizontalAngleStart = data.horizontalAngleStart;\n this.horizontalAngleEnd = data.horizontalAngleEnd;\n this.verticalAngle = data.verticalAngle;\n this.verticalAngleStart = data.verticalAngleStart;\n this.verticalAngleEnd = data.verticalAngleEnd;\n this.distance = data.distance;\n this.distanceStart = data.distanceStart;\n this.distanceEnd = data.distanceEnd;\n this.openPercent = data.openPercent;\n this.openPercentStart = data.openPercentStart;\n this.openPercentEnd = data.openPercentEnd;\n this.frostIntensity = data.frostIntensity;\n this.frostIntensityStart = data.frostIntensityStart;\n this.frostIntensityEnd = data.frostIntensityEnd;\n this.fogOutput = data.fogOutput;\n this.fogOutputStart = data.fogOutputStart;\n this.fogOutputEnd = data.fogOutputEnd;\n this.time = data.time;\n this.timeStart = data.timeStart;\n this.timeEnd = data.timeEnd;\n this.insertion = data.insertion;\n this.insertionStart = data.insertionStart;\n this.insertionEnd = data.insertionEnd;\n this.colors = data.colors;\n this.colorsStart = data.colorsStart;\n this.colorsEnd = data.colorsEnd;\n }\n}\n","import { FixtureCapability } from './fixture-capability';\n\nexport class FixtureChannel {\n fineChannelAliases: string[] = [];\n defaultValue: string | number;\n capability: FixtureCapability;\n capabilities: FixtureCapability[] = [];\n dmxValueResolution: string;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (data.fineChannelAliases) {\n this.fineChannelAliases = data.fineChannelAliases;\n }\n\n this.defaultValue = data.defaultValue;\n this.dmxValueResolution = data.dmxValueResolution;\n\n if (data.capability) {\n this.capability = new FixtureCapability(data.capability);\n } else if (data.capabilities) {\n for (const capability of data.capabilities) {\n this.capabilities.push(new FixtureCapability(capability));\n }\n }\n }\n}\n","export class FixtureMatrixPixelGroupConstraints {\n // constraint the pixel keys directly\n keys: string[] = [];\n\n // constraints by coordinates\n x: string[] = [];\n y: string[] = [];\n z: string[] = [];\n\n // a name regexp-constraint\n name: string[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (Array.isArray(data)) {\n // an array of pixel keys\n this.keys = data;\n } else {\n // an object of constraints\n this.x = data.x;\n this.y = data.y;\n this.z = data.z;\n this.name = data.name;\n }\n }\n}\n","import { FixtureMatrixPixelGroupConstraints } from './fixture-matrix-pixel-group-constraints';\n\nexport class FixtureMatrixPixelGroup {\n isAll: boolean = false;\n constraints: FixtureMatrixPixelGroupConstraints = null;\n\n constructor(isAll: boolean = false, constraints?: any) {\n this.isAll = isAll;\n if (constraints) {\n this.constraints = new FixtureMatrixPixelGroupConstraints(constraints);\n }\n }\n}\n","import { FixtureMatrixPixelGroup } from './fixture-matrix-pixel-group';\n\nexport class FixtureMatrix {\n pixelKeys: string[][];\n pixelCount: number[] = [];\n pixelGroups: any = {};\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (data.pixelKeys) {\n this.pixelKeys = data.pixelKeys;\n }\n if (data.pixelCount) {\n for (const pixelCountEntry of data.pixelCount) {\n this.pixelCount.push(pixelCountEntry);\n }\n }\n if (data.pixelGroups) {\n for (const property of Object.keys(data.pixelGroups)) {\n const pixelGroup = new FixtureMatrixPixelGroup(data.pixelGroups[property]);\n this.pixelGroups[property] = pixelGroup;\n }\n }\n }\n}\n","export class FixtureModeChannel {\n // direct reference to an available channel\n name: string;\n\n // a matrix channel\n insert: string;\n repeatFor: string[] = [];\n channelOrder: string;\n templateChannels: string[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (typeof data === 'string') {\n this.name = data;\n } else if (typeof data === 'object') {\n // after first saving the project, we have a FixtureModeChannel-object, even if it's just a direct channel with a name\n this.name = data.name;\n\n this.insert = data.insert;\n if (Array.isArray(data.repeatFor)) {\n this.repeatFor = data.repeatFor;\n } else {\n this.repeatFor.push(data.repeatFor);\n }\n this.channelOrder = data.channelOrder;\n this.templateChannels = data.templateChannels;\n }\n }\n}\n","import { FixtureModeChannel } from './fixture-mode-channel';\n\nexport class FixtureMode {\n name: string;\n shortName: string;\n channels: FixtureModeChannel[] = [];\n channelCount: number;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.name = data.name;\n this.shortName = data.shortName;\n\n if (data.channels) {\n for (const channel of data.channels) {\n this.channels.push(new FixtureModeChannel(channel));\n }\n }\n }\n}\n","export class FixturePhysical {\n dimensions: number[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (data.dimensions) {\n for (const dimension of data.dimensions) {\n this.dimensions.push(dimension);\n }\n }\n }\n}\n","export enum FixtureWheelSlotType {\n Open = 'Open',\n Closed = 'Closed',\n Color = 'Color',\n Gobo = 'Gobo',\n Prism = 'Prism',\n Iris = 'Iris',\n Frost = 'Frost',\n AnimationGoboStart = 'AnimationGoboStart',\n AnimationGoboEnd = 'AnimationGoboEnd',\n}\n\nexport class FixtureWheelSlot {\n type: FixtureWheelSlotType;\n name: string;\n colors: string[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.type = FixtureWheelSlotType[data.type as string];\n this.name = data.name;\n if (data.colors) {\n this.colors = data.colors;\n }\n }\n}\n","import { FixtureWheelSlot } from './fixture-wheel-slot';\n\nexport class FixtureWheel {\n slots: FixtureWheelSlot[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (data.slots) {\n for (const slot of data.slots) {\n this.slots.push(new FixtureWheelSlot(slot));\n }\n }\n }\n}\n","import { FixtureChannel } from './fixture-channel';\nimport { FixtureMatrix } from './fixture-matrix';\nimport { FixtureMode } from './fixture-mode';\nimport { FixturePhysical } from './fixture-physical';\nimport { FixtureWheel } from './fixture-wheel';\n\nexport enum FixtureCategory {\n Blinder = 'Blinder',\n 'Color Changer' = 'Color Changer',\n Dimmer = 'Dimmer',\n Effect = 'Effect',\n Fan = 'Fan',\n Flower = 'Flower',\n Hazer = 'Hazer',\n Laser = 'Laser',\n Matrix = 'Matrix',\n 'Moving Head' = 'Moving Head',\n 'Pixel Bar' = 'Pixel Bar',\n Scanner = 'Scanner',\n Smoke = 'Smoke',\n Stand = 'Stand',\n Strobe = 'Strobe',\n Other = 'Other',\n 'Barrel Scanner' = 'Barrel Scanner',\n}\n\nexport class FixtureProfile {\n uuid: string;\n name: string;\n\n // set to file, if the profile is not loaded from the backend\n source: string;\n createdFromFile = false;\n manufacturerShortName: string;\n manufacturerName: string;\n categories: FixtureCategory[] = [];\n physical: FixturePhysical;\n matrix: FixtureMatrix;\n availableChannels: any = {};\n templateChannels: any = {};\n shortName: string;\n wheels: any = {};\n\n // All available fixture modes\n modes: FixtureMode[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n // metadata\n this.uuid = data.uuid;\n this.name = data.name;\n this.manufacturerName = data.manufacturerName;\n this.manufacturerShortName = data.manufacturerShortName;\n\n if (data.categories) {\n for (const category of data.categories) {\n this.categories.push(FixtureCategory[category as string]);\n }\n } else if (data.mainCategory) {\n this.categories.push(FixtureCategory[data.mainCategory as string]);\n }\n if (data.physical) {\n this.physical = new FixturePhysical(data.physical);\n }\n if (data.matrix) {\n this.matrix = new FixtureMatrix(data.matrix);\n }\n if (data.wheels) {\n for (const property of Object.keys(data.wheels)) {\n const wheel = new FixtureWheel(data.wheels[property]);\n this.wheels[property] = wheel;\n }\n }\n if (data.modes) {\n for (const mode of data.modes) {\n this.modes.push(new FixtureMode(mode));\n }\n }\n if (data.availableChannels) {\n for (const property of Object.keys(data.availableChannels)) {\n const fixtureChannel = new FixtureChannel(data.availableChannels[property]);\n this.availableChannels[property] = fixtureChannel;\n }\n }\n if (data.templateChannels) {\n for (const property of Object.keys(data.templateChannels)) {\n const templateChannel = new FixtureChannel(data.templateChannels[property]);\n this.templateChannels[property] = templateChannel;\n }\n }\n if (data.createdFromFile) {\n this.createdFromFile = data.createdFromFile;\n }\n }\n}\n","import { CachedFixtureChannel } from './cached-fixture-channel';\nimport { CachedFixturePixel } from './cached-fixture-pixel';\nimport { Fixture } from './fixture';\nimport { FixtureMode } from './fixture-mode';\nimport { FixtureProfile } from './fixture-profile';\n\nexport class CachedFixture {\n fixture: Fixture;\n pixel: CachedFixturePixel;\n profile: FixtureProfile;\n mode: FixtureMode;\n channels: CachedFixtureChannel[] = [];\n}\n","import { FixtureCapability } from './fixture-capability';\nimport { FixtureWheel } from './fixture-wheel';\nimport { FixtureWheelSlot } from './fixture-wheel-slot';\n\nexport class CachedFixtureCapability {\n capability: FixtureCapability;\n\n // the wheel names, if available\n wheelName: string;\n\n // the wheel, if available\n wheel: FixtureWheel;\n\n // the wheel slots, if available\n wheelSlots: FixtureWheelSlot[] = [];\n\n // is this a color wheel?\n wheelIsColor = false;\n\n centerValue: number;\n}\n","import { CachedFixtureCapability } from './cached-fixture-capability';\nimport { FixtureChannel } from './fixture-channel';\nimport { FixtureWheel } from './fixture-wheel';\n\nexport class CachedFixtureChannel {\n // the corresponding channel\n channel: FixtureChannel;\n\n // the name of the channel\n name: string;\n\n // all channel capabilities\n capabilities: CachedFixtureCapability[] = [];\n\n // default value\n defaultValue: number;\n\n // maximum value\n maxValue: number;\n\n // a color wheel, if available\n colorWheel: FixtureWheel;\n}\n","export class Color {\n red: number;\n green: number;\n blue: number;\n\n constructor(red?: number, green?: number, blue?: number) {\n this.red = red;\n this.green = green;\n this.blue = blue;\n }\n}\n","export enum Positioning {\n topFront = 'topFront',\n topBack = 'topBack',\n bottomFront = 'bottomFront',\n bottomBack = 'bottomBack',\n manual = 'manual',\n}\n\nexport class Fixture {\n uuid: string;\n profileUuid: string;\n name: string;\n dmxUniverseUuid: string;\n dmxFirstChannel = 1;\n modeShortName: string;\n positioning: Positioning = Positioning.topFront;\n\n // Only relevant when positioning = manual\n // in CM\n positionX = 0;\n positionY = 0;\n positionZ = 0;\n\n // in DEG\n rotationX = 0;\n rotationY = 0;\n rotationZ = 0;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.profileUuid = data.profileUuid;\n this.name = data.name;\n this.dmxUniverseUuid = data.dmxUniverseUuid;\n this.dmxFirstChannel = data.dmxFirstChannel;\n this.modeShortName = data.modeShortName;\n this.positioning = data.positioning;\n this.positionX = data.positionX;\n this.positionY = data.positionY;\n this.positionZ = data.positionZ;\n this.rotationX = data.rotationX;\n this.rotationY = data.rotationY;\n this.rotationZ = data.rotationZ;\n }\n}\n","export class ScenePlaybackRegion {\n sceneUuid: string;\n startMillis: number;\n endMillis: number;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.sceneUuid = data.sceneUuid;\n this.startMillis = data.startMillis;\n this.endMillis = data.endMillis;\n }\n}\n","import { ScenePlaybackRegion } from './scene-playback-region';\n\nexport class Composition {\n public uuid: string;\n public name: string;\n\n // none or audio\n public syncType = 'audio';\n\n public audioFileName: string;\n public audioFileInLibrary = false;\n\n public beatsPerMinute = 120;\n public timeSignatureUpper = 4;\n public timeSignatureLower = 4;\n\n public snapToGrid = true;\n\n public tempoGuessed = false;\n\n // time based or musical\n public gridType = 'musical';\n public gridOffsetMillis = 0;\n\n // 1/1, 1/2, 1/4, 1/8, etc.\n public gridResolution = 1;\n\n // if no sync\n public durationMillis = 0;\n\n // Regions, where the scene will be played\n public scenePlaybackRegions: ScenePlaybackRegion[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.name = data.name;\n this.syncType = data.syncType;\n this.audioFileName = data.audioFileName;\n this.audioFileInLibrary = data.audioFileInLibrary;\n this.beatsPerMinute = data.beatsPerMinute;\n this.timeSignatureUpper = data.timeSignatureUpper;\n this.timeSignatureLower = data.timeSignatureLower;\n this.snapToGrid = data.snapToGrid;\n\n // never guess again (and overwrite), when a composition is loaded\n this.tempoGuessed = true;\n\n this.gridType = data.gridType;\n this.gridOffsetMillis = data.gridOffsetMillis;\n this.gridResolution = data.gridResolution;\n this.durationMillis = data.durationMillis;\n\n if (data.scenePlaybackRegions) {\n for (const scenePlaybackRegion of data.scenePlaybackRegions) {\n this.scenePlaybackRegions.push(new ScenePlaybackRegion(scenePlaybackRegion));\n }\n }\n }\n}\n","export abstract class Effect {\n type: string;\n uuid: string;\n visible = true;\n\n constructor(type: string, data?: any) {\n this.type = type;\n\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.visible = data.visible;\n }\n}\n","export class EffectCurveProfileChannels {\n profileUuid: string;\n channels: string[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.profileUuid = data.profileUuid;\n\n if (data.channels) {\n for (const channel of Object.keys(data.channels)) {\n this.channels.push(channel);\n }\n }\n }\n}\n","import { Effect } from './effect';\nimport { EffectCurveProfileChannels } from './effect-curve-profile-channel';\nimport { FixtureCapability } from './fixture-capability';\n\nexport class EffectCurve extends Effect {\n curveType = 'sine';\n\n capabilities: FixtureCapability[] = [];\n channels: EffectCurveProfileChannels[] = [];\n\n lengthMillis = 2500;\n phaseMillis = 0;\n amplitude = 1;\n position = 0.5;\n phasingMillis = 0;\n\n constructor(data?: any) {\n super('curve', data);\n\n if (!data) {\n return;\n }\n\n if (data.capabilities) {\n for (const capability of data.capabilities) {\n this.capabilities.push(new FixtureCapability(capability));\n }\n }\n\n if (data.channels) {\n for (const channel of data.channels) {\n this.channels.push(new EffectCurveProfileChannels(channel));\n }\n }\n\n this.lengthMillis = data.lengthMillis;\n this.phaseMillis = data.phaseMillis;\n this.amplitude = data.amplitude;\n this.position = data.position;\n this.phasingMillis = data.phasingMillis;\n this.curveType = data.curveType;\n }\n\n public getValueAtMillis(timeMillis: number, fixtureIndex?: number): number {\n // Calculate the offset for phasing\n let phasingIndex = 0;\n\n if (fixtureIndex) {\n phasingIndex = fixtureIndex;\n }\n\n const phase = this.phaseMillis + phasingIndex * this.phasingMillis;\n\n // Calculate the value between 0 and 1 according to the curve\n let value = 0;\n\n switch (this.curveType) {\n case 'sine':\n value = this.position + ((this.amplitude / 2) * Math.sin((2 * Math.PI * (timeMillis - phase)) / this.lengthMillis)) / 2;\n break;\n case 'square':\n if (Math.sign(Math.sin((2 * Math.PI * (timeMillis - phase)) / this.lengthMillis) / 2) === -1) {\n value = this.position + this.amplitude / 2;\n } else {\n value = this.position - this.amplitude / 2;\n }\n break;\n case 'triangle':\n // TODO check wikipedia formula\n break;\n case 'sawtooth':\n // TODO\n break;\n case 'reverse-sawtooth':\n // TODO\n break;\n }\n\n return Math.max(Math.min(value, 1), 0);\n }\n}\n","import { Effect } from './effect';\n\nexport class EffectPanTilt extends Effect {\n phasingMillis = 0;\n\n constructor(data?: any) {\n super('pan-tilt', data);\n }\n\n getValueAtMillis(timeMillis: number, fixtureIndex?: number): number {\n // Calculate the offset for phasing\n let phasingIndex = 0;\n\n if (fixtureIndex) {\n phasingIndex = fixtureIndex;\n }\n\n // let phase = this.phaseMillis + phasingIndex * this.phasingMillis;\n\n // Calculate the value according to the curve\n // TODO\n\n return 0;\n }\n}\n","import { FixtureCapabilityColor, FixtureCapabilityType } from './fixture-capability';\n\nexport class FixtureCapabilityValue {\n type: FixtureCapabilityType;\n profileUuid: string;\n\n // value between 0 and 1\n valuePercentage: number;\n\n color: FixtureCapabilityColor;\n wheel: string;\n slotNumber: number;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n this.type = FixtureCapabilityType[data.type as string];\n this.profileUuid = data.profileUuid;\n\n this.valuePercentage = data.valuePercentage;\n this.color = FixtureCapabilityColor[data.color as string];\n this.wheel = data.wheel;\n this.slotNumber = data.slotNumber;\n }\n}\n","export class FixtureChannelValue {\n channelName: string;\n profileUuid: string;\n value: number;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n this.channelName = data.channelName;\n this.profileUuid = data.profileUuid;\n this.value = data.value;\n }\n}\n","export class PresetFixture {\n public fixtureUuid: string;\n public pixelKey: string;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.fixtureUuid = data.fixtureUuid;\n this.pixelKey = data.pixelKey;\n }\n}\n","import { Effect } from './effect';\nimport { EffectCurve } from './effect-curve';\nimport { EffectPanTilt } from './effect-pan-tilt';\nimport { FixtureCapabilityValue } from './fixture-capability-value';\nimport { FixtureChannelValue } from './fixture-channel-value';\nimport { PresetFixture } from './preset-fixture';\n\nexport class Preset {\n uuid: string;\n name: string;\n\n // all related fixtures\n // OBSOLETE: replaced with fixtures\n fixtureUuids: string[] = [];\n fixtures: PresetFixture[] = [];\n\n // the selected values\n fixtureChannelValues: FixtureChannelValue[] = [];\n fixtureCapabilityValues: FixtureCapabilityValue[] = [];\n\n // all related effects\n effects: Effect[] = [];\n\n // position offset, relative to the scene start\n // (undefined = start/end of the scene itself)\n startMillis: number;\n endMillis: number;\n\n // fading times\n fadeInMillis = 0;\n fadeOutMillis = 0;\n\n // fade in/out outside the start/end times?\n fadeInPre = false;\n fadeOutPost = false;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.name = data.name;\n\n // OBSOLETE\n this.fixtureUuids = data.fixtureUuids;\n\n if (data.fixtures) {\n for (const fixture of data.fixtures) {\n this.fixtures.push(new PresetFixture(fixture));\n }\n }\n\n if (data.fixtureChannelValues) {\n for (const fixtureChannelValue of data.fixtureChannelValues) {\n this.fixtureChannelValues.push(new FixtureChannelValue(fixtureChannelValue));\n }\n }\n if (data.fixtureCapabilityValues) {\n for (const fixtureCapabilityValue of data.fixtureCapabilityValues) {\n this.fixtureCapabilityValues.push(new FixtureCapabilityValue(fixtureCapabilityValue));\n }\n }\n if (data.effects) {\n for (const effect of data.effects) {\n switch (effect.type) {\n case 'curve':\n this.effects.push(new EffectCurve(effect));\n break;\n case 'pan-tilt':\n this.effects.push(new EffectPanTilt(effect));\n break;\n }\n }\n }\n this.startMillis = data.startMillis;\n this.endMillis = data.endMillis;\n this.fadeInMillis = data.fadeInMillis;\n this.fadeOutMillis = data.fadeOutMillis;\n this.fadeInPre = data.fadeInPre;\n this.fadeOutPost = data.fadeOutPost;\n }\n}\n","import { ScenePlaybackRegion } from './scene-playback-region';\n\nexport class Scene {\n uuid: string;\n name: string;\n\n color = '#fff';\n\n // All contained presets\n presetUuids: string[] = [];\n\n // Fading times\n fadeInMillis = 0;\n fadeOutMillis = 0;\n\n // fade in/out outside the start/end times?\n fadeInPre = false;\n fadeOutPost = false;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.name = data.name;\n this.color = data.color;\n if (data.presetUuids) {\n this.presetUuids = data.presetUuids;\n }\n this.fadeInMillis = data.fadeInMillis;\n this.fadeOutMillis = data.fadeOutMillis;\n this.fadeInPre = data.fadeInPre;\n this.fadeOutPost = data.fadeOutPost;\n }\n}\n","import { Composition } from './composition';\nimport { Fixture } from './fixture';\nimport { FixtureProfile } from './fixture-profile';\nimport { Preset } from './preset';\nimport { PresetFixture } from './preset-fixture';\nimport { Scene } from './scene';\n\nexport class Project {\n public id: number;\n public version: number;\n public uuid: string;\n public name: string;\n public shareToken: string;\n\n public stageWidthCm = 600;\n public stageHeightCm = 350;\n public stageDepthCm = 600;\n\n public stageFloorHeightCm = 30;\n public stageCeilingHeightCm = 5;\n public stagePillarWidthCm = 20;\n\n public masterDimmerValue = 1;\n\n public selectedPresetUuid: string;\n public selectedSceneUuids: string[] = [];\n\n // true = show the preset, false = show the selected scene\n public previewPreset = true;\n\n public selectedCompositionUuid: string;\n\n public compositions: Composition[] = [];\n public fixtureProfiles: FixtureProfile[] = [];\n\n // fixtures added to the project in a DMX universe\n public fixtures: Fixture[] = [];\n\n // the fixtures and pixel keys in order to be selectable\n public presetFixtures: PresetFixture[] = [];\n\n public scenes: Scene[] = [];\n public presets: Preset[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.id = data.id;\n this.version = data.version;\n this.uuid = data.uuid;\n this.name = data.name;\n this.shareToken = data.shareToken;\n\n this.stageWidthCm = data.stageWidthCm;\n this.stageHeightCm = data.stageHeightCm;\n this.stageDepthCm = data.stageDepthCm;\n\n this.stageFloorHeightCm = data.stageFloorHeightCm;\n this.stageCeilingHeightCm = data.stageCeilingHeightCm;\n this.stagePillarWidthCm = data.stagePillarWidthCm;\n\n this.masterDimmerValue = data.masterDimmerValue;\n\n this.selectedPresetUuid = data.selectedPresetUuid;\n this.selectedSceneUuids = data.selectedSceneUuids;\n this.previewPreset = data.previewPreset;\n this.selectedCompositionUuid = data.selectedCompositionUuid;\n\n if (data.compositions) {\n for (const composition of data.compositions) {\n this.compositions.push(new Composition(composition));\n }\n }\n\n if (data.fixtureProfiles) {\n for (const fixtureProfile of data.fixtureProfiles) {\n this.fixtureProfiles.push(new FixtureProfile(fixtureProfile));\n }\n }\n\n if (data.fixtures) {\n for (const fixture of data.fixtures) {\n this.fixtures.push(new Fixture(fixture));\n }\n }\n\n if (data.presetFixtures) {\n for (const presetFixture of data.presetFixtures) {\n this.presetFixtures.push(new PresetFixture(presetFixture));\n }\n }\n\n if (data.scenes) {\n for (const scene of data.scenes) {\n this.scenes.push(new Scene(scene));\n }\n }\n\n if (data.presets) {\n for (const preset of data.presets) {\n this.presets.push(new Preset(preset));\n }\n }\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Project } from '../models/project';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserService {\n // the authentication token\n token: string;\n tokenExpiration: Date;\n username: string;\n\n constructor(private http: HttpClient) {\n this.loadFromLocalStorage();\n }\n\n private loadFromLocalStorage() {\n this.token = localStorage.getItem('token');\n this.tokenExpiration = undefined;\n if (localStorage.getItem('tokenExpiration')) {\n this.tokenExpiration = new Date(Date.parse(localStorage.getItem('tokenExpiration')));\n }\n this.username = localStorage.getItem('username');\n }\n\n // register a new user\n register(email: string, username: string, password: string): Observable<any> {\n return this.http.post('register?email=' + email + '&username=' + username + '&password=' + password, null);\n }\n\n // login a user in the api\n login(email: string, password: string): Observable<any> {\n return this.http.post('login?email=' + email + '&password=' + password, null).pipe(\n map((result: any) => {\n this.token = result.token;\n this.username = result.username;\n\n // the token expires one month from now\n this.tokenExpiration = new Date();\n this.tokenExpiration.setDate(this.tokenExpiration.getDate() + 30);\n\n // store to the local storage\n localStorage.setItem('token', this.token);\n localStorage.setItem('tokenExpiration', JSON.stringify(this.tokenExpiration));\n localStorage.setItem('username', this.username);\n\n this.loadFromLocalStorage();\n })\n );\n }\n\n logout() {\n localStorage.removeItem('token');\n localStorage.removeItem('tokenExpiration');\n localStorage.removeItem('username');\n\n this.loadFromLocalStorage();\n }\n\n isLoggedIn(): boolean {\n if (!this.token) {\n return false;\n }\n\n if (new Date() > this.tokenExpiration) {\n this.logout();\n return false;\n }\n\n return true;\n }\n\n getHeaders(): HttpHeaders {\n if (!this.isLoggedIn()) {\n return null;\n }\n\n let headers = new HttpHeaders();\n headers = headers.append('Authorization', this.token);\n return headers;\n }\n\n setAutoLoadProject(project: Project) {\n localStorage.setItem('projectName', project.name);\n if (project.id) {\n localStorage.setItem('projectId', project.id.toString());\n } else {\n localStorage.removeItem('projectId');\n }\n }\n\n getAutoLoadProjectId(): number {\n if (!localStorage.getItem('projectId')) {\n return null;\n }\n return Number.parseInt(localStorage.getItem('projectId'), 10);\n }\n\n getAutoLoadProjectName(): string {\n return localStorage.getItem('projectName');\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Project } from '../models/project';\nimport { UserService } from './user.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProjectService {\n // the current project\n public project: Project;\n\n // the project-file versions used in this version of the designer (older ones will be migrated, newer ones are not supported)\n public currentProjectVersion = 2;\n\n constructor(\n private http: HttpClient,\n private userService: UserService,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private translateService: TranslateService,\n private toastrService: ToastrService\n ) {}\n\n private saveApi(project: Project): Observable<object> {\n return this.http.post('project', JSON.stringify(project), { headers: this.userService.getHeaders() }).pipe(\n map((response: any) => {\n if (response) {\n project.id = response.id;\n if (response.shareToken) {\n project.shareToken = response.shareToken;\n }\n const queryParams: Params = {\n id: project.id,\n token: project.shareToken,\n };\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams,\n queryParamsHandling: 'merge', // remove to replace all query params by provided\n });\n }\n return null;\n })\n );\n }\n\n save(project: Project) {\n // tries to save the project and returns, whether it has been saved or not\n this.saveApi(project).subscribe(\n () => {\n const msg = 'designer.project.save-success';\n const title = 'designer.project.save-success-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.success(result[msg], result[title]);\n });\n\n this.userService.setAutoLoadProject(project);\n },\n (response) => {\n const msg = 'designer.project.save-error';\n const title = 'designer.project.save-error-title';\n const error = response && response.error ? response.error.error : 'unknown';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg] + ' (' + error + ')', result[title]);\n });\n }\n );\n }\n\n getAllProjects(): Observable<Project[]> {\n return this.http.get('projects', { headers: this.userService.getHeaders() }).pipe(\n map((response: any) => {\n const projects: Project[] = [];\n for (const project of response) {\n const projectObject = new Project(project);\n projects.push(projectObject);\n }\n return projects;\n })\n );\n }\n\n deleteProject(project: Project): Observable<any> {\n return this.http.delete('project?id=' + project.id + '&name=' + project.name, { headers: this.userService.getHeaders() });\n }\n\n getProject(id: number, name: string, shareToken?: string): Observable<Project> {\n return this.http.get('project?id=' + id + '&name=' + name + '&token=' + shareToken, { headers: this.userService.getHeaders() }).pipe(\n map((response: any) => {\n const project = new Project(response);\n project.id = id;\n\n return project;\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UuidService {\n constructor() {}\n\n getUuid(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n // tslint:disable-next-line:no-bitwise\n const r = (Math.random() * 16) | 0;\n\n // tslint:disable-next-line:no-bitwise\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n\n return v.toString(16);\n });\n }\n}\n","import { FixtureProfile } from './fixture-profile';\n\nexport class CachedFixturePixel {\n key: string;\n\n // index of the pixel for all dimensions\n x: number;\n y: number;\n z: number;\n\n // position of the beam\n positionX: number;\n positionY: number;\n positionZ: number;\n}\n","import { Injectable } from '@angular/core';\nimport { CachedFixturePixel } from '../models/cached-fixture-pixel';\nimport { FixtureProfile } from '../models/fixture-profile';\n\ntype Axis = 'x' | 'y' | 'z';\n\ntype GroupDef = 'all' | string[] | (Partial<Record<Axis, string[]>> & { name?: string[] });\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FixturePixelGroupResolveService {\n private matchNumberRule(value: number, ruleRaw: string): boolean {\n const rule = ruleRaw.trim().toLowerCase();\n\n // comparisons: <=5, >=5, =5\n const m = rule.match(/^(<=|>=|=)\\s*(-?\\d+)$/);\n if (m) {\n const op = m[1];\n const n = Number(m[2]);\n if (op === '<=') return value <= n;\n if (op === '>=') return value >= n;\n return value === n;\n }\n\n // even / odd\n if (rule === 'even') return value % 2 === 0;\n if (rule === 'odd') return Math.abs(value % 2) === 1;\n\n // 3n, 3n+1, 3n+2, etc.\n const mn = rule.match(/^(\\d+)n(?:\\+(\\d+))?$/);\n if (mn) {\n const base = Number(mn[1]); // e.g. 3\n const rem = Number(mn[2] ?? '0'); // e.g. 1\n // handle negative values reasonably too\n const mod = ((value % base) + base) % base;\n return mod === ((rem % base) + base) % base;\n }\n\n // If you want, you can treat a plain number as \"=number\"\n const asNum = Number(rule);\n if (!Number.isNaN(asNum)) return value === asNum;\n\n throw new Error(`Unknown numeric rule: \"${ruleRaw}\"`);\n }\n\n private matchesAllConstraints(p: CachedFixturePixel, def: Partial<Record<Axis, string[]>> & { name?: string[] }): boolean {\n // AND across present fields\n if (def.x && !def.x.every((rule) => this.matchNumberRule(p.x, rule))) return false;\n if (def.y && !def.y.every((rule) => this.matchNumberRule(p.y, rule))) return false;\n if (def.z && !def.z.every((rule) => this.matchNumberRule(p.z, rule))) return false;\n\n if (def.name) {\n // Interpret each entry as a regex; AND across them (change to \"some\" if you want OR)\n const ok = def.name.every((pattern) => {\n const re = new RegExp(pattern);\n return re.test(p.key);\n });\n if (!ok) return false;\n }\n\n return true;\n }\n\n public resolveGroupPixels(group: string, pixelGroups: Record<string, GroupDef>, allPixels: CachedFixturePixel[]): CachedFixturePixel[] {\n const def = pixelGroups[group];\n if (!def) return []; // unknown group\n\n // 1) \"all\"\n if (def === 'all') return allPixels.slice();\n\n // 2) explicit keys\n if (Array.isArray(def)) {\n const wanted = new Set(def);\n return allPixels.filter((p) => wanted.has(p.key));\n }\n\n // 3) constraints object\n return allPixels.filter((p) => this.matchesAllConstraints(p, def));\n }\n\n public getPixelsForKeyOrGroup(profile: FixtureProfile, allPixelKeys: CachedFixturePixel[], keyOrGroup: string): CachedFixturePixel[] {\n let result: CachedFixturePixel[] = [];\n\n // search for a key first\n const pixel = allPixelKeys.find((p) => p.key === keyOrGroup);\n if (pixel) return [pixel];\n\n // search for a group\n if (profile.matrix.pixelGroups[keyOrGroup]) {\n result.push(...this.resolveGroupPixels(keyOrGroup, profile.matrix.pixelGroups, allPixelKeys));\n }\n\n return result;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CachedFixture } from '../models/cached-fixture';\nimport { CachedFixtureCapability } from '../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../models/cached-fixture-channel';\nimport { Color } from '../models/color';\nimport { Fixture } from '../models/fixture';\nimport { FixtureCapability, FixtureCapabilityColor, FixtureCapabilityType } from '../models/fixture-capability';\nimport { FixtureChannel } from '../models/fixture-channel';\nimport { FixtureMode } from '../models/fixture-mode';\nimport { FixtureProfile } from '../models/fixture-profile';\nimport { FixtureWheel } from '../models/fixture-wheel';\nimport { FixtureWheelSlot, FixtureWheelSlotType } from '../models/fixture-wheel-slot';\nimport { ProjectService } from './project.service';\nimport { UuidService } from './uuid.service';\nimport { CachedFixturePixel } from '../models/cached-fixture-pixel';\nimport { FixturePixelGroupResolveService } from './fixture-pixel-group-resolve.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FixtureService {\n cachedFixtures: CachedFixture[] = [];\n\n // is the side-tab settings currently selected?\n settingsSelection = false;\n\n selectedSettingsFixtures: Fixture[] = [];\n\n constructor(\n private http: HttpClient,\n private projectService: ProjectService,\n private translateService: TranslateService,\n private toastrService: ToastrService,\n private uuidService: UuidService,\n private fixturePixelGroupResolveService: FixturePixelGroupResolveService\n ) {}\n\n getFixtureByUuid(uuid: string): Fixture {\n for (const fixture of this.projectService.project.fixtures) {\n if (fixture.uuid === uuid) {\n return fixture;\n }\n }\n }\n\n private fixtureUuidAndPixelKeyEquals(fixtureUuid1: string, fixtureUuid2: string, pixelKey1: string, pixelKey2: string): boolean {\n return fixtureUuid1 === fixtureUuid2 && ((pixelKey1 == null && pixelKey2 == null) || pixelKey1 === pixelKey2);\n }\n\n getCachedFixtureByUuid(uuid: string, pixelKey: string): CachedFixture {\n for (const fixture of this.cachedFixtures) {\n if (this.fixtureUuidAndPixelKeyEquals(fixture.fixture.uuid, uuid, fixture.pixel?.key, pixelKey)) {\n return fixture;\n }\n }\n\n // not yet found -> try searching the fixture without pixelKey for the general channels\n if (pixelKey) {\n return undefined;\n }\n\n for (const fixture of this.cachedFixtures) {\n if (!fixture.pixel && fixture.fixture.uuid === uuid) {\n return fixture;\n }\n }\n }\n\n // Get all profiles to search for (only metadata)\n getSearchProfiles(): Observable<FixtureProfile[]> {\n return this.http.get('fixtures').pipe(\n map((response: object[]) => {\n const searchProfiles: FixtureProfile[] = [];\n\n for (const profile of response) {\n searchProfiles.push(new FixtureProfile(profile));\n }\n\n return searchProfiles;\n })\n );\n }\n\n getProfileByUuid(uuid: string): FixtureProfile {\n for (const fixtureProfile of this.projectService.project.fixtureProfiles) {\n if (fixtureProfile.uuid === uuid) {\n return fixtureProfile;\n }\n }\n }\n\n loadProfileByUuid(uuid: string): Observable<void> {\n const loadedProfile = this.getProfileByUuid(uuid);\n\n if (loadedProfile) {\n // This profile is already loaded\n return of(undefined);\n }\n\n // Load the metadata and the profile\n return forkJoin([this.http.get('fixtures?uuid=' + encodeURI(uuid)), this.http.get('fixture?uuid=' + encodeURI(uuid))]).pipe(\n map((result) => {\n const mergedData = { ...result[0][0], ...result[1] };\n const fixtureProfile = new FixtureProfile(mergedData);\n this.projectService.project.fixtureProfiles.push(fixtureProfile);\n })\n );\n }\n\n getRotationAngleDeg(value: string): number {\n // convert a rotation angle value into degrees\n if (value.endsWith('deg')) {\n return Number.parseInt(value.replace('deg', ''), 10);\n } else if (value.endsWith('%')) {\n const perc = Number.parseInt(value.replace('%', ''), 10);\n return (perc / 100) * 360;\n }\n\n return undefined;\n }\n\n getWheelSlotColors(wheel: FixtureWheel, slotNumber: number): string[] {\n let colors: string[] = [];\n const wheelSlots = this.getWheelSlots(wheel, slotNumber);\n\n for (const slot of wheelSlots) {\n if (slot.colors && slot.colors.length > 0) {\n colors = colors.concat(slot.colors);\n }\n }\n\n return colors;\n }\n\n getMixedWheelSlotColor(wheel: FixtureWheel, slotNumber: number): Color {\n const colors = this.getWheelSlotColors(wheel, slotNumber);\n const colorsRgb: Color[] = [];\n\n if (colors.length === 0) {\n return undefined;\n }\n\n for (const color of colors) {\n colorsRgb.push(this.hexToRgb(color));\n }\n\n return this.mixColors(colorsRgb);\n }\n\n private componentToHex(c: number): any {\n const hex = c.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }\n\n rgbToHex(r: number, g: number, b: number): string {\n return '#' + this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b);\n }\n\n hexToRgb(hex: string): Color {\n // expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => {\n return r + r + g + g + b + b;\n });\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new Color(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : null;\n }\n\n mixColors(colors: Color[]): Color {\n // mix an array of rgb-colors containing r, g, b values to a new color\n let r = 0;\n let g = 0;\n let b = 0;\n\n for (const color of colors) {\n r += color.red;\n g += color.green;\n b += color.blue;\n }\n\n r /= colors.length;\n g /= colors.length;\n b /= colors.length;\n\n return new Color(r, g, b);\n }\n\n wheelHasSlotType(wheel: FixtureWheel, slotType: FixtureWheelSlotType): boolean {\n for (const slot of wheel.slots) {\n if (slot.type === slotType) {\n return true;\n }\n }\n\n return false;\n }\n\n getWheelByName(profile: FixtureProfile, wheelName: string): FixtureWheel {\n for (const property in profile.wheels) {\n if (property === wheelName) {\n return profile.wheels[property];\n }\n }\n\n // wheel not found\n return undefined;\n }\n\n private getWheelSlots(wheel: FixtureWheel, slotNumber: number): FixtureWheelSlot[] {\n // return one slot or two slots, if they are mixed (e.g. slor number 2.5 returns the slots 2 and 3)\n const slots: FixtureWheelSlot[] = [];\n\n if (!wheel) {\n return slots;\n }\n\n if (slotNumber - Math.floor(slotNumber) > 0) {\n // two slots are set\n const number = Math.floor(slotNumber);\n slots.push(wheel.slots[number - 1]);\n if (number >= 0 && number < wheel.slots.length) {\n slots.push(wheel.slots[number]);\n }\n } else {\n // only one slot is set\n slots.push(wheel.slots[slotNumber - 1]);\n }\n\n return slots;\n }\n\n getModeByFixture(profile: FixtureProfile, fixture: Fixture): FixtureMode {\n for (const mode of profile.modes) {\n if (mode.shortName) {\n if (mode.shortName === fixture.modeShortName) {\n return mode;\n }\n } else {\n if (mode.name === fixture.modeShortName) {\n return mode;\n }\n }\n }\n }\n\n private getFixtureCapability(capability: FixtureCapability, channelName: string, profile: FixtureProfile): CachedFixtureCapability {\n const cachedFixtureCapability = new CachedFixtureCapability();\n cachedFixtureCapability.capability = capability;\n if (capability.slotNumber) {\n // there is a wheel connected to this capability\n if (typeof capability.wheel === 'string') {\n cachedFixtureCapability.wheelName = capability.wheel as string;\n } else if (Array.isArray(capability.wheel)) {\n cachedFixtureCapability.wheelName = capability.wheel[0];\n } else {\n cachedFixtureCapability.wheelName = channelName;\n }\n cachedFixtureCapability.wheel = this.getWheelByName(profile, cachedFixtureCapability.wheelName);\n cachedFixtureCapability.wheelSlots = this.getWheelSlots(cachedFixtureCapability.wheel, capability.slotNumber);\n cachedFixtureCapability.wheelIsColor = this.wheelHasSlotType(cachedFixtureCapability.wheel, FixtureWheelSlotType.Color);\n }\n if (cachedFixtureCapability.capability.dmxRange && cachedFixtureCapability.capability.dmxRange.length === 2) {\n cachedFixtureCapability.centerValue = Math.floor(\n (cachedFixtureCapability.capability.dmxRange[0] + cachedFixtureCapability.capability.dmxRange[1]) / 2\n );\n }\n return cachedFixtureCapability;\n }\n\n private getCapabilitiesByChannel(\n fixtureChannel: FixtureChannel,\n channelName: string,\n profile: FixtureProfile\n ): CachedFixtureCapability[] {\n const capabilites: CachedFixtureCapability[] = [];\n\n if (fixtureChannel.capability) {\n capabilites.push(this.getFixtureCapability(fixtureChannel.capability, channelName, profile));\n } else if (fixtureChannel.capabilities) {\n for (const capability of fixtureChannel.capabilities) {\n capabilites.push(this.getFixtureCapability(capability, channelName, profile));\n }\n }\n\n return capabilites;\n }\n\n private getMaxValueByChannel(fixtureChannel: FixtureChannel): number {\n return Math.pow(256, 1 + fixtureChannel.fineChannelAliases.length) - 1;\n }\n\n private getDefaultValueByChannel(fixtureChannel: FixtureChannel): number {\n if (!fixtureChannel.defaultValue) {\n return undefined;\n }\n\n if (isNaN(fixtureChannel.defaultValue as any) && (fixtureChannel.defaultValue as string).endsWith('%')) {\n // percentage value\n const percentage = Number.parseInt((fixtureChannel.defaultValue as string).replace('%', ''), 10);\n const maxValue = this.getMaxValueByChannel(fixtureChannel);\n return (maxValue / 100) * percentage;\n } else {\n // DMX value\n return Number.parseInt(fixtureChannel.defaultValue as any, 10);\n }\n }\n\n private getColorWheelByChannel(channel: CachedFixtureChannel, profile: FixtureProfile): FixtureWheel {\n for (const channelCapability of channel.capabilities) {\n if (channelCapability.wheelIsColor) {\n return channelCapability.wheel;\n }\n }\n\n return undefined;\n }\n\n getChannelByName(fixture: CachedFixture, channelName: string): CachedFixtureChannel {\n for (const channel of fixture.channels) {\n if (\n (channel.name && channel.name === channelName) ||\n (channel.channel && channel.channel.fineChannelAliases.indexOf(channelName) > -1)\n ) {\n return channel;\n }\n }\n\n return undefined;\n }\n\n private getChannelNameWithPixelKey(templateChannelName: string, pixelKey: string) {\n return templateChannelName.replace('$pixelKey', pixelKey);\n }\n\n private addCachedChannel(\n channels: CachedFixtureChannel[],\n channel: FixtureChannel,\n templateChannelName: string,\n pixelKey: string,\n profile: FixtureProfile\n ) {\n const cachedFixtureChannel = new CachedFixtureChannel();\n const channelName = this.getChannelNameWithPixelKey(templateChannelName, pixelKey);\n\n cachedFixtureChannel.channel = channel;\n cachedFixtureChannel.name = channelName;\n cachedFixtureChannel.capabilities = this.getCapabilitiesByChannel(cachedFixtureChannel.channel, channelName, profile);\n const defaultValue = this.getDefaultValueByChannel(cachedFixtureChannel.channel);\n if (defaultValue) {\n cachedFixtureChannel.defaultValue = defaultValue;\n }\n cachedFixtureChannel.maxValue = this.getMaxValueByChannel(cachedFixtureChannel.channel);\n cachedFixtureChannel.colorWheel = this.getColorWheelByChannel(cachedFixtureChannel, profile);\n channels.push(cachedFixtureChannel);\n }\n\n private alphanumericSort(a: CachedFixturePixel, b: CachedFixturePixel): number {\n return a.key.localeCompare(b.key, undefined, { numeric: true, sensitivity: 'base' });\n }\n\n private evenlySpacedPosCm(index: number, count: number, size: number): number {\n if (count <= 0) return 0;\n if (index < 0 || index >= count) return 0;\n if (count === 1) return size / 2;\n\n const step = size / (count + 1); // equal edge margins\n const pos = (index + 1) * step; // center position\n return pos;\n }\n\n private createPixel(key: string, x: number, y: number, z: number, profile: FixtureProfile): CachedFixturePixel {\n let pixel = new CachedFixturePixel();\n\n if (key) {\n pixel.key = key;\n } else {\n // no key available. generate a unique one based on the dimensions\n pixel.key = 'Pixel ' + (x + 1) + '-' + (y + 1) + '-' + (z + 1);\n }\n\n pixel.x = x;\n pixel.y = y;\n pixel.z = z;\n\n // calculate the position of the beam, based on the physical dimensions\n\n // dimensions in mm\n const widthCm = profile.physical.dimensions[0] / 10;\n const heightCm = profile.physical.dimensions[1] / 10;\n const depthCm = profile.physical.dimensions[2] / 10;\n\n let maxX = 0;\n let maxY = 0;\n let maxZ = 0;\n\n if (profile.matrix.pixelCount) {\n maxX = profile.matrix.pixelCount[0];\n maxY = profile.matrix.pixelCount[1];\n maxZ = profile.matrix.pixelCount[2];\n } else {\n maxX = profile.matrix.pixelKeys.length;\n maxY = profile.matrix.pixelKeys[0].length;\n maxZ = profile.matrix.pixelKeys[0][0].length;\n }\n\n // distribute the pixels with even spacing\n pixel.positionX = this.evenlySpacedPosCm(x, maxX, widthCm) - widthCm / 2;\n pixel.positionY = this.evenlySpacedPosCm(y, maxY, heightCm) - heightCm / 2;\n pixel.positionZ = this.evenlySpacedPosCm(z, maxZ, depthCm) - depthCm / 2;\n\n return pixel;\n }\n\n private getAllPixelKeys(profile: FixtureProfile): CachedFixturePixel[] {\n let result: CachedFixturePixel[] = [];\n\n if (!profile.matrix || !profile.matrix.pixelKeys) {\n return result;\n }\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n for (let y = 0; y < profile.matrix.pixelKeys[x].length; y++) {\n for (let z = 0; z < profile.matrix.pixelKeys[x][y].length; z++) {\n const pixelKey = profile.matrix.pixelKeys[x][y][z];\n if (pixelKey) {\n result.push(this.createPixel(pixelKey, x, y, z, profile));\n }\n }\n }\n }\n\n return result;\n }\n\n private getAllPixelsInGroups(profile: FixtureProfile, allPixelKeys: CachedFixturePixel[]): CachedFixturePixel[] {\n let result: CachedFixturePixel[] = [];\n if (!profile.matrix || !profile.matrix.pixelGroups) {\n return result;\n }\n for (const property of Object.keys(profile.matrix.pixelGroups)) {\n result.concat(this.fixturePixelGroupResolveService.resolveGroupPixels(property, profile.matrix.pixelGroups, allPixelKeys));\n }\n return result;\n }\n\n // get pixels in order for a specific channel repeatFor\n private getPixelsInOrder(profile: FixtureProfile, repeatFor: string[]): CachedFixturePixel[] {\n let allPixelKeys = this.getAllPixelKeys(profile);\n let result: CachedFixturePixel[] = [];\n\n // could contain different things\n\n if (repeatFor.length > 1) {\n // an array of pixel keys or groups\n for (let entry of repeatFor) {\n result = result.concat(this.fixturePixelGroupResolveService.getPixelsForKeyOrGroup(profile, allPixelKeys, entry));\n }\n } else if (repeatFor.length === 0) {\n return result;\n } else if (repeatFor[0] === 'eachPixelABC') {\n // Gets computed into an alphanumerically sorted list of all pixelKeys\n if (profile.matrix.pixelKeys) {\n result = result.concat(allPixelKeys);\n result.sort(this.alphanumericSort);\n result.sort((a, b) => a.key.localeCompare(b.key, undefined, { numeric: true, sensitivity: 'base' }));\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n } else if (repeatFor[0] === 'eachPixelGroup') {\n // Gets computed into an array of all pixel group keys, ordered by appearance in the JSON file\n result = result.concat(this.getAllPixelsInGroups(profile, allPixelKeys));\n } else if (repeatFor[0] === 'eachPixelXYZ') {\n if (profile.matrix.pixelKeys) {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n for (let y = 0; y < profile.matrix.pixelKeys[x].length; y++) {\n for (let z = 0; z < profile.matrix.pixelKeys[x][y].length; z++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n result.push(this.createPixel(pixel, x, y, z, profile));\n }\n }\n }\n }\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n } else if (repeatFor[0] === 'eachPixelXZY') {\n if (profile.matrix.pixelKeys) {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n for (let z = 0; z < profile.matrix.pixelKeys[x][0].length; z++) {\n for (let y = 0; y < profile.matrix.pixelKeys[x].length; y++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n result.push(this.createPixel(pixel, x, y, z, profile));\n }\n }\n }\n }\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n } else if (repeatFor[0] === 'eachPixelYXZ') {\n if (profile.matrix.pixelKeys) {\n for (let y = 0; y < profile.matrix.pixelKeys[0].length; y++) {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n for (let z = 0; z < profile.matrix.pixelKeys[x][y].length; z++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n result.push(this.createPixel(pixel, x, y, z, profile));\n }\n }\n }\n }\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n } else if (repeatFor[0] === 'eachPixelYZX') {\n if (profile.matrix.pixelKeys) {\n for (let y = 0; y < profile.matrix.pixelKeys[0].length; y++) {\n for (let z = 0; z < profile.matrix.pixelKeys[0][y].length; z++) {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n result.push(this.createPixel(pixel, x, y, z, profile));\n }\n }\n }\n }\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n } else if (repeatFor[0] === 'eachPixelZXY') {\n if (profile.matrix.pixelKeys) {\n for (let z = 0; z < profile.matrix.pixelKeys[0][0].length; z++) {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n for (let y = 0; y < profile.matrix.pixelKeys[x].length; y++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n result.push(this.createPixel(pixel, x, y, z, profile));\n }\n }\n }\n }\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n } else if (repeatFor[0] === 'eachPixelZYX') {\n if (profile.matrix.pixelKeys) {\n for (let z = 0; z < profile.matrix.pixelKeys[0][0].length; z++) {\n for (let y = 0; y < profile.matrix.pixelKeys[0].length; y++) {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n result.push(this.createPixel(pixel, x, y, z, profile));\n }\n }\n }\n }\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n }\n\n return result;\n }\n\n getModeChannelCount(profile: FixtureProfile, mode: FixtureMode): number {\n let count: number = 0;\n\n // already calculated?\n if (mode.channelCount) {\n return mode.channelCount;\n }\n\n for (let channel of mode.channels) {\n if (channel.insert === 'matrixChannels') {\n if (channel.repeatFor.length > 1) {\n count += channel.repeatFor.length * channel.templateChannels.length;\n } else if (channel.repeatFor[0] === 'eachPixelGroup') {\n count += profile.matrix.pixelGroups.length * channel.templateChannels.length;\n } else if (channel.repeatFor[0].startsWith('eachPixel')) {\n if (profile.matrix.pixelCount.length === 3) {\n count +=\n profile.matrix.pixelCount[0] * profile.matrix.pixelCount[1] * profile.matrix.pixelCount[2] * channel.templateChannels.length;\n } else {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n for (let y = 0; y < profile.matrix.pixelKeys[x].length; y++) {\n for (let z = 0; z < profile.matrix.pixelKeys[x][y].length; z++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n count += channel.templateChannels.length;\n }\n }\n }\n }\n }\n }\n } else {\n count++;\n }\n }\n\n mode.channelCount = count;\n\n return mode.channelCount;\n }\n\n getCachedChannels(profile: FixtureProfile, mode: FixtureMode, pixelKey: string): CachedFixtureChannel[] {\n const channels: CachedFixtureChannel[] = [];\n const allPixelKeys = this.getAllPixelKeys(profile);\n const allPixelsInGroups = this.getAllPixelsInGroups(profile, allPixelKeys);\n\n if (!mode) {\n return channels;\n }\n\n for (const channel of mode.channels) {\n if (channel.name && !pixelKey) {\n // direct reference to a channel\n // don't check the fine channels. only add the coarse channel.\n let channelFound = false;\n\n for (const availableChannelName of Object.keys(profile.availableChannels)) {\n if (channel.name === availableChannelName) {\n const availableChannel: FixtureChannel = profile.availableChannels[availableChannelName];\n channelFound = true;\n this.addCachedChannel(channels, availableChannel, availableChannelName, null, profile);\n }\n }\n\n // check the template channels, if not found in the available channels\n if (!channelFound) {\n for (const templateChannelName of Object.keys(profile.templateChannels)) {\n let existingPixelKeys = allPixelKeys.concat(allPixelsInGroups);\n\n for (const existingPixelKey of existingPixelKeys) {\n const channelName = this.getChannelNameWithPixelKey(templateChannelName, existingPixelKey.key);\n\n if (channel.name === channelName) {\n const templateChannel: FixtureChannel = profile.templateChannels[templateChannelName];\n\n this.addCachedChannel(channels, templateChannel, channelName, existingPixelKey.key, profile);\n }\n }\n }\n }\n } else {\n // reference a channel through a pixel matrix\n const availablePixels = this.getPixelsInOrder(profile, channel.repeatFor);\n\n if (channel.channelOrder === 'perPixel') {\n // each channel for each pixel\n\n for (const availablePixel of availablePixels) {\n if (availablePixel.key === pixelKey) {\n for (const modeTemplateChannelName of channel.templateChannels) {\n for (const templateChannelName of Object.keys(profile.templateChannels)) {\n // don't check the fine channels. only add the coarse channel.\n if (modeTemplateChannelName === templateChannelName) {\n const templateChannel: FixtureChannel = profile.templateChannels[templateChannelName];\n\n this.addCachedChannel(channels, templateChannel, templateChannelName, availablePixel.key, profile);\n }\n }\n }\n }\n }\n } else if (channel.channelOrder === 'perChannel') {\n // each pixel for each channel\n\n for (const modeTemplateChannelName of channel.templateChannels) {\n for (const availablePixel of availablePixels) {\n if (availablePixel.key === pixelKey) {\n for (const templateChannelName of Object.keys(profile.templateChannels)) {\n // don't check the fine channels. only add the coarse channel.\n if (modeTemplateChannelName === templateChannelName) {\n const templateChannel: FixtureChannel = profile.templateChannels[templateChannelName];\n\n this.addCachedChannel(channels, templateChannel, templateChannelName, availablePixel.key, profile);\n }\n }\n }\n }\n }\n }\n }\n }\n\n return channels;\n }\n\n // get all used pixels for all channels in the currently used fixture mode\n fixtureGetUniquePixels(fixture: Fixture): CachedFixturePixel[] {\n let pixels: CachedFixturePixel[] = [];\n\n let profile = this.getProfileByUuid(fixture.profileUuid);\n let mode = this.getModeByFixture(profile, fixture);\n\n // add the unique pixel keys\n for (let channel of mode.channels) {\n this.getPixelsInOrder(profile, channel.repeatFor).forEach((pixel) => {\n if (pixels.filter((p) => p.key === pixel.key).length === 0) {\n pixels.push(pixel);\n }\n });\n }\n\n return pixels;\n }\n\n // does the fixture have a general channel without reference to specific pixel keys in the current mode?\n fixtureHasGeneralChannel(fixture: Fixture): boolean {\n let profile = this.getProfileByUuid(fixture.profileUuid);\n let mode = this.getModeByFixture(profile, fixture);\n\n // add the unique pixel keys\n for (let channel of mode.channels) {\n if (this.getPixelsInOrder(profile, channel.repeatFor).length === 0) {\n return true;\n }\n }\n\n return false;\n }\n\n updateCachedFixtures() {\n // calculate some frequently used values as a cache to save cpu time\n // afterwards\n this.cachedFixtures = [];\n\n for (const fixture of this.projectService.project.fixtures) {\n if (this.fixtureHasGeneralChannel(fixture)) {\n const cachedFixture = new CachedFixture();\n cachedFixture.fixture = fixture;\n cachedFixture.profile = this.getProfileByUuid(fixture.profileUuid);\n cachedFixture.mode = this.getModeByFixture(cachedFixture.profile, fixture);\n cachedFixture.channels = this.getCachedChannels(cachedFixture.profile, cachedFixture.mode, null);\n this.cachedFixtures.push(cachedFixture);\n }\n\n const pixels = this.fixtureGetUniquePixels(fixture);\n\n for (let pixel of pixels) {\n const cachedFixture = new CachedFixture();\n cachedFixture.fixture = fixture;\n cachedFixture.pixel = pixel;\n cachedFixture.profile = this.getProfileByUuid(fixture.profileUuid);\n cachedFixture.mode = this.getModeByFixture(cachedFixture.profile, fixture);\n cachedFixture.channels = this.getCachedChannels(cachedFixture.profile, cachedFixture.mode, pixel.key);\n this.cachedFixtures.push(cachedFixture);\n }\n }\n }\n\n capabilitiesMatch(\n type1: FixtureCapabilityType,\n type2: FixtureCapabilityType,\n color1: FixtureCapabilityColor,\n color2: FixtureCapabilityColor,\n wheel1: string,\n wheel2: string,\n profileUuid1: string,\n profileUuid2: string\n ): boolean {\n // checks, whether two provided capapabilities match\n return (\n type1 === type2 &&\n (!color1 || color1 === color2) &&\n (!wheel1 || wheel1 === wheel2) &&\n (!profileUuid1 || profileUuid1 === profileUuid2)\n );\n }\n\n settingsFixtureIsSelected(fixture: Fixture): boolean {\n for (const selectedFixture of this.selectedSettingsFixtures) {\n if (selectedFixture === fixture) {\n return true;\n }\n }\n\n return false;\n }\n\n switchSettingsFixtureSelection(fixture: Fixture) {\n if (this.settingsFixtureIsSelected(fixture)) {\n this.selectedSettingsFixtures.splice(this.selectedSettingsFixtures.indexOf(fixture), 1);\n } else {\n this.selectedSettingsFixtures.push(fixture);\n }\n }\n\n getFixtureIconClass(profile: FixtureProfile): string {\n if (!profile) {\n return '';\n }\n if (profile.categories.length === 0) {\n return '';\n }\n if (!profile.categories[0]) {\n return '';\n }\n return profile.categories[0].replace(' ', '-').toLocaleLowerCase();\n }\n\n updateProfiles() {\n return this.http.post('update-profiles', null);\n }\n\n getNextFreeDmxChannel(fixturePool: Fixture[], neededChannels: number): number {\n // get the next free space for this fixture\n let freeChannels = 0;\n\n for (let i = 0; i < 512; i++) {\n let occupiedChannels = 0;\n\n for (const fixture of fixturePool) {\n const profile = this.getProfileByUuid(fixture.profileUuid);\n const mode = this.getModeByFixture(this.getProfileByUuid(fixture.profileUuid), fixture);\n const channelCount = this.getModeChannelCount(profile, mode);\n\n if (i >= fixture.dmxFirstChannel && i < fixture.dmxFirstChannel + channelCount) {\n // this channel is already occupied by a fixture -> move forward to the end of the fixture\n if (channelCount > occupiedChannels) {\n occupiedChannels = channelCount - (i - fixture.dmxFirstChannel);\n }\n }\n }\n\n if (occupiedChannels > 0) {\n i += occupiedChannels - 1;\n freeChannels = 0;\n } else {\n freeChannels++;\n }\n\n if (freeChannels === neededChannels) {\n return i - freeChannels + 1;\n }\n }\n\n // no free space left for the needed channels\n return -1;\n }\n\n addFixture(profile: FixtureProfile, fixturePool: Fixture[], channelPool?: Fixture[]): Fixture {\n const fixture = new Fixture();\n\n fixture.uuid = this.uuidService.getUuid();\n fixture.profileUuid = profile.uuid;\n fixture.name = profile.name;\n\n if (profile.modes && profile.modes.length > 0) {\n fixture.modeShortName = profile.modes[0].shortName;\n }\n\n // add the same mode as an existing fixture, if available\n let existingModeShortName: string;\n for (const existingFixture of fixturePool) {\n const existingProfile = this.getProfileByUuid(existingFixture.profileUuid);\n\n if (existingProfile === profile) {\n existingModeShortName = existingFixture.modeShortName;\n break;\n }\n }\n\n if (existingModeShortName) {\n fixture.modeShortName = existingModeShortName;\n } else {\n fixture.modeShortName = profile.modes[0].shortName || profile.modes[0].name;\n }\n\n const mode = this.getModeByFixture(profile, fixture);\n const channelCount = this.getModeChannelCount(profile, mode);\n const firstChannel = this.getNextFreeDmxChannel(channelPool ?? fixturePool, channelCount);\n\n if (firstChannel >= 0) {\n fixture.dmxFirstChannel = firstChannel;\n fixturePool.push(fixture);\n return fixture;\n } else {\n // no free space anymore\n const msg = 'designer.fixture-pool.no-free-space';\n const title = 'designer.fixture-pool.no-free-space-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg], result[title]);\n });\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport * as THREE from 'three';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PreviewMeshService {\n private loader = new GLTFLoader();\n private cachedMeshes = new Map<string, THREE.Mesh>();\n\n // the observable, if the requested mesh is already being loaded currently\n private cachedObservables = new Map<string, Observable<THREE.Mesh>>();\n\n constructor() {}\n\n private loadScene(name: string): Observable<THREE.Scene> {\n return new Observable((observer) => {\n this.loader.load(\n './assets/designer/models/' + name + '.gltf',\n\n // Called when the resource is loaded\n (gltf: any) => {\n const model = gltf.scene.children[0];\n\n model.position.set(0, 0, 0);\n\n observer.next(gltf.scene);\n observer.complete();\n },\n\n // Called while loading is progressing\n (xhr: any) => {},\n\n // Called when loading has errors\n (error: any) => {\n observer.error(error);\n }\n );\n });\n }\n\n private loadMesh(name: string): Observable<THREE.Mesh> {\n const observable = this.loadScene(name).pipe(\n map((scene: any) => {\n const model = scene.children[0];\n\n model.position.set(0, 0, 0);\n\n this.cachedMeshes.set(name, model);\n this.cachedObservables.delete(name);\n\n return model.clone();\n })\n );\n\n this.cachedObservables.set(name, observable);\n\n return observable;\n }\n\n getMesh(name: string): Observable<THREE.Mesh> {\n if (this.cachedMeshes.get(name)) {\n return of(this.cachedMeshes.get(name).clone());\n }\n\n return this.cachedObservables.get(name) || this.loadMesh(name);\n }\n}\n","import { Preset } from './preset';\nimport { Scene } from './scene';\nimport { ScenePlaybackRegion } from './scene-playback-region';\n\nexport class PresetRegionScene {\n preset: Preset;\n region: ScenePlaybackRegion;\n scene: Scene;\n\n constructor(preset: Preset, region: ScenePlaybackRegion, scene: Scene) {\n this.preset = preset;\n this.region = region;\n this.scene = scene;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Effect } from './../models/effect';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EffectService {\n // The currently selected effect\n selectedEffect: Effect;\n\n // The effects are currently being edited\n effectsOpen: boolean = false;\n effectsOpenChanged: Subject<void> = new Subject<void>();\n\n constructor() {}\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AnimationService {\n timeMillis = 0;\n\n constructor() {}\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { UniverseConfig } from '../models/universe-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConfigService {\n public restUrl: string;\n public enableMediaLibrary = false;\n public loginAvailable = false;\n public shareAvailable = false;\n public menuHeightPx = 0;\n public languageSwitch = false;\n public livePreview = false;\n public localProfiles = false;\n public intro = false;\n public uniqueProjectNames = false;\n public dropzoneChunking = true;\n\n // List of universes (with name and uuid) the user can choose from\n // in the fixture pool. Typically supplied by the host application\n // (e.g. fetched from a backend).\n public universes: UniverseConfig[] = [];\n\n // When true, the user can freely add their own universes (only\n // names) in the fixture pool, without depending on a list provided\n // by the host application.\n public freeUniverseEdit = false;\n\n public menuHeightChanged: Subject<void> = new Subject<void>();\n\n constructor() {}\n}\n","import { Injectable } from '@angular/core';\nimport { Composition } from '../models/composition';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimelineStateService {\n public playState = 'paused';\n public selectedComposition: Composition;\n public selectedCompositionIndex: number;\n\n constructor() {}\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { AnimationService } from './animation.service';\nimport { ConfigService } from './config.service';\nimport { ProjectService } from './project.service';\nimport { TimelineStateService } from './timeline-state.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LivePreviewService {\n private livePreviewTimer: any;\n private liveChangePending = false;\n private livePreviewPendingPositionMillis: number;\n\n constructor(\n private configService: ConfigService,\n private http: HttpClient,\n private projectService: ProjectService,\n private animationService: AnimationService,\n private timelineStateService: TimelineStateService\n ) {}\n\n previewLive(compositionName: string = '', positionMillis?: number) {\n if (!this.configService.livePreview) {\n return;\n }\n\n if (!compositionName && this.timelineStateService.playState === 'playing' && this.timelineStateService.selectedComposition) {\n compositionName = this.timelineStateService.selectedComposition.name;\n }\n\n let position = positionMillis;\n\n if (position === undefined) {\n position = Math.round(this.animationService.timeMillis);\n }\n\n // collect all changes and delay them to not flood the backend\n // (except composition-bound updates. they need to be delivered always)\n if (this.livePreviewTimer && !compositionName) {\n this.livePreviewPendingPositionMillis = position;\n this.liveChangePending = true;\n return;\n }\n\n this.http\n .post('preview?positionMillis=' + position + '&compositionName=' + compositionName, JSON.stringify(this.projectService.project))\n .subscribe();\n\n this.liveChangePending = false;\n\n if (!compositionName) {\n this.livePreviewTimer = setTimeout(() => {\n this.livePreviewTimer = undefined;\n if (this.liveChangePending) {\n const pendingPosition = this.livePreviewPendingPositionMillis !== undefined ? this.livePreviewPendingPositionMillis : position;\n this.livePreviewPendingPositionMillis = undefined;\n\n this.http\n .post(\n 'preview?positionMillis=' + pendingPosition + '&compositionName=' + compositionName,\n JSON.stringify(this.projectService.project)\n )\n .subscribe();\n }\n }, 50);\n }\n }\n\n stopPreviewPlay() {\n if (!this.configService.livePreview) {\n return;\n }\n\n this.http.post('stop-preview-play', null).subscribe();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { CachedFixtureCapability } from '../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../models/cached-fixture-channel';\nimport { Fixture } from '../models/fixture';\nimport { FixtureCapabilityColor, FixtureCapabilityType } from '../models/fixture-capability';\nimport { FixtureCapabilityValue } from '../models/fixture-capability-value';\nimport { FixtureChannelValue } from '../models/fixture-channel-value';\nimport { FixtureProfile } from '../models/fixture-profile';\nimport { Preset } from '../models/preset';\nimport { EffectService } from './effect.service';\nimport { FixtureService } from './fixture.service';\nimport { ProjectService } from './project.service';\nimport { UuidService } from './uuid.service';\nimport { PresetFixture } from '../models/preset-fixture';\nimport { LivePreviewService } from './live-preview.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PresetService {\n selectedPreset: Preset;\n\n // fires, when the current preview element has changed (scene/preset)\n previewSelectionChanged: Subject<void> = new Subject<void>();\n\n // fires, when the fixture selection has changed\n fixtureSelectionChanged: Subject<void> = new Subject<void>();\n\n // fires, when the fixture selection has changed for settings\n fixtureSelectionSettingsChanged: Subject<void> = new Subject<void>();\n\n // fires, when the selected color has changed. This is required,\n // because detectChanges is not enough to trigger different components.\n fixtureColorChanged: Subject<void> = new Subject<void>();\n\n constructor(\n private effectService: EffectService,\n private uuidService: UuidService,\n private projectService: ProjectService,\n private fixtureService: FixtureService,\n private livePreviewService: LivePreviewService\n ) {}\n\n getPresetByUuid(uuid: string): Preset {\n for (const preset of this.projectService.project.presets) {\n if (preset.uuid === uuid) {\n return preset;\n }\n }\n }\n\n fixtureUuidAndPixelKeyEquals(fixtureUuid1: string, fixtureUuid2: string, pixelKey1: string, pixelKey2: string): boolean {\n return fixtureUuid1 === fixtureUuid2 && ((!pixelKey1 && !pixelKey2) || pixelKey1 === pixelKey2);\n }\n\n getPresetFixture(preset: Preset, fixtureUuid: string, pixelKey?: string): PresetFixture {\n for (const fixture of preset.fixtures) {\n if (this.fixtureUuidAndPixelKeyEquals(fixture.fixtureUuid, fixtureUuid, fixture.pixelKey, pixelKey)) {\n return fixture;\n }\n }\n\n return null;\n }\n\n fixtureIsSelected(fixture: Fixture, pixelKey: string, preset?: Preset): boolean {\n // is the passed fixture selected in the passed/currently selected preset?\n if (!preset) {\n if (this.selectedPreset) {\n preset = this.selectedPreset;\n } else {\n return false;\n }\n }\n\n const presetFixture = this.getPresetFixture(preset, fixture.uuid, pixelKey);\n\n if (presetFixture) {\n return true;\n }\n\n return false;\n }\n\n switchFixtureSelection(fixture: Fixture, pixelKey: string) {\n if (!this.selectedPreset) {\n return;\n }\n\n // select all fixtures at the specified start channel or unselect them,\n // if already selected\n if (this.fixtureIsSelected(fixture, pixelKey)) {\n for (let i = this.selectedPreset.fixtures.length - 1; i >= 0; i--) {\n const projectFixture = this.fixtureService.getFixtureByUuid(this.selectedPreset.fixtures[i].fixtureUuid);\n if (\n projectFixture.dmxFirstChannel === fixture.dmxFirstChannel &&\n projectFixture.dmxUniverseUuid === fixture.dmxUniverseUuid &&\n ((!this.selectedPreset.fixtures[i].pixelKey && !pixelKey) || this.selectedPreset.fixtures[i].pixelKey === pixelKey)\n ) {\n this.selectedPreset.fixtures.splice(i, 1);\n }\n }\n } else {\n for (const projectPresetFixture of this.projectService.project.presetFixtures) {\n if ((!projectPresetFixture.pixelKey && !pixelKey) || projectPresetFixture.pixelKey === pixelKey) {\n const projectFixture = this.fixtureService.getFixtureByUuid(projectPresetFixture.fixtureUuid);\n if (projectFixture.dmxFirstChannel === fixture.dmxFirstChannel && projectFixture.dmxUniverseUuid === fixture.dmxUniverseUuid) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = projectPresetFixture.fixtureUuid;\n presetFixture.pixelKey = pixelKey;\n this.selectedPreset.fixtures.push(presetFixture);\n }\n }\n }\n }\n }\n\n selectAllFixtures() {\n if (!this.selectedPreset) {\n return;\n }\n\n for (const fixture of this.projectService.project.fixtures) {\n if (this.fixtureService.fixtureHasGeneralChannel(fixture)) {\n if (!this.fixtureIsSelected(fixture, null)) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = fixture.uuid;\n this.selectedPreset.fixtures.push(presetFixture);\n }\n }\n\n const pixels = this.fixtureService.fixtureGetUniquePixels(fixture);\n\n for (const pixel of pixels) {\n if (!this.fixtureIsSelected(fixture, pixel.key)) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = fixture.uuid;\n presetFixture.pixelKey = pixel.key;\n this.selectedPreset.fixtures.push(presetFixture);\n }\n }\n }\n }\n\n selectNoFixtures() {\n if (!this.selectedPreset) {\n return;\n }\n\n this.selectedPreset.fixtures = [];\n }\n\n private presetFixtueEquals(fixture1: PresetFixture, fixture2: PresetFixture): boolean {\n return (\n fixture1.fixtureUuid === fixture2.fixtureUuid &&\n ((!fixture2.pixelKey && !fixture1.pixelKey) || fixture2.pixelKey === fixture1.pixelKey)\n );\n }\n\n public removeDeletedFixtures() {\n // after changing the configuration in the fixture pool, we might need to\n // delete some fixtures\n for (const preset of this.projectService.project.presets) {\n for (let i = preset.fixtures.length - 1; i >= 0; i--) {\n const presetFixture = preset.fixtures[i];\n\n let found = false;\n for (let projectFixture of this.projectService.project.presetFixtures) {\n if (this.presetFixtueEquals(presetFixture, projectFixture)) {\n found = true;\n break;\n }\n }\n if (!found) {\n preset.fixtures.splice(i, 1);\n }\n }\n }\n }\n\n public updateFixtureSelection() {\n // after changing the configuration in the fixture pool, we might need to\n // select some more fixtures on the same channel as already selected ones\n for (const preset of this.projectService.project.presets) {\n for (let presetFixture of preset.fixtures) {\n const fixture = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid);\n for (const projectFixture of this.projectService.project.fixtures) {\n if (\n projectFixture.dmxFirstChannel === fixture.dmxFirstChannel &&\n projectFixture.dmxUniverseUuid === fixture.dmxUniverseUuid &&\n !this.fixtureIsSelected(projectFixture, presetFixture.pixelKey, preset)\n ) {\n const newPresetFixture = new PresetFixture();\n newPresetFixture.fixtureUuid = projectFixture.uuid;\n newPresetFixture.pixelKey = presetFixture.pixelKey;\n preset.fixtures.push(newPresetFixture);\n }\n }\n }\n }\n }\n\n deleteCapabilityValue(\n preset: Preset,\n capabilityType: FixtureCapabilityType,\n color?: FixtureCapabilityColor,\n wheel?: string,\n profileUuid?: string\n ) {\n for (let i = 0; i < preset.fixtureCapabilityValues.length; i++) {\n if (\n this.fixtureService.capabilitiesMatch(\n preset.fixtureCapabilityValues[i].type,\n capabilityType,\n preset.fixtureCapabilityValues[i].color,\n color,\n preset.fixtureCapabilityValues[i].wheel,\n wheel,\n preset.fixtureCapabilityValues[i].profileUuid,\n profileUuid\n )\n ) {\n preset.fixtureCapabilityValues.splice(i, 1);\n return;\n }\n }\n }\n\n setCapabilityValue(\n preset: Preset,\n capabilityType: FixtureCapabilityType,\n valuePercentage: number,\n slotNumber?: number,\n color?: FixtureCapabilityColor,\n wheel?: string,\n profileUuid?: string\n ) {\n // Delete existant properties with this type and set the new value\n this.deleteCapabilityValue(preset, capabilityType, color, wheel, profileUuid);\n\n const fixtureCapabilityValue = new FixtureCapabilityValue();\n fixtureCapabilityValue.type = capabilityType;\n fixtureCapabilityValue.color = color;\n fixtureCapabilityValue.wheel = wheel;\n fixtureCapabilityValue.valuePercentage = valuePercentage;\n fixtureCapabilityValue.slotNumber = slotNumber;\n fixtureCapabilityValue.profileUuid = profileUuid;\n\n preset.fixtureCapabilityValues.push(fixtureCapabilityValue);\n }\n\n getCapabilityValue(\n preset: Preset,\n capabilityType: FixtureCapabilityType,\n color?: FixtureCapabilityColor,\n wheel?: string,\n profileUuid?: string\n ): FixtureCapabilityValue {\n for (const capabilityValue of preset.fixtureCapabilityValues) {\n if (\n this.fixtureService.capabilitiesMatch(\n capabilityValue.type,\n capabilityType,\n capabilityValue.color,\n color,\n capabilityValue.wheel,\n wheel,\n capabilityValue.profileUuid,\n profileUuid\n )\n ) {\n return capabilityValue;\n }\n }\n return undefined;\n }\n\n deleteChannelValue(channelName: string, profileUuid: string) {\n for (let i = 0; i < this.selectedPreset.fixtureChannelValues.length; i++) {\n if (\n this.selectedPreset.fixtureChannelValues[i].channelName === channelName &&\n this.selectedPreset.fixtureChannelValues[i].profileUuid === profileUuid\n ) {\n this.selectedPreset.fixtureChannelValues.splice(i, 1);\n return;\n }\n }\n }\n\n setChannelValue(channelName: string, profileUuid: string, value: number) {\n // Delete existant properties with this type and set the new value\n this.deleteChannelValue(channelName, profileUuid);\n\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = channelName;\n fixtureChannelValue.profileUuid = profileUuid;\n fixtureChannelValue.value = value;\n\n this.selectedPreset.fixtureChannelValues.push(fixtureChannelValue);\n }\n\n getChannelValue(channelName: string, profileUuid: string): number {\n for (const channelValue of this.selectedPreset.fixtureChannelValues) {\n if (channelValue.channelName === channelName && channelValue.profileUuid === profileUuid) {\n return channelValue.value;\n }\n }\n }\n\n getApproximatedColorWheelCapability(preset: Preset, cachedChannel: CachedFixtureChannel): CachedFixtureCapability {\n // return an approximated wheel slot channel capability, if a color or a slot on a different\n // wheel has been selected\n let colorRed: number;\n let colorGreen: number;\n let colorBlue: number;\n let lowestDiff = Number.MAX_VALUE;\n let lowestDiffCapability: CachedFixtureCapability;\n let capabilityValue: FixtureCapabilityValue;\n\n capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Red);\n if (capabilityValue) {\n colorRed = 255 * capabilityValue.valuePercentage;\n }\n capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Green);\n if (capabilityValue) {\n colorGreen = 255 * capabilityValue.valuePercentage;\n }\n capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Blue);\n if (capabilityValue) {\n colorBlue = 255 * capabilityValue.valuePercentage;\n }\n\n if (!colorRed && !colorGreen && !colorBlue) {\n // no color found -> search the first color wheel\n // TODO\n }\n\n if (colorRed !== undefined && colorGreen !== undefined && colorBlue !== undefined) {\n for (const capability of cachedChannel.capabilities) {\n if (capability.capability.slotNumber) {\n const mixedColor = this.fixtureService.getMixedWheelSlotColor(capability.wheel, capability.capability.slotNumber);\n if (mixedColor) {\n const diff =\n Math.abs(mixedColor.red - colorRed) + Math.abs(mixedColor.green - colorGreen) + Math.abs(mixedColor.blue - colorBlue);\n\n if (diff < lowestDiff) {\n lowestDiff = diff;\n lowestDiffCapability = capability;\n }\n }\n }\n }\n }\n\n return lowestDiffCapability;\n }\n\n private hasCapabilityType(type: FixtureCapabilityType): boolean {\n // there is at least one channel with at least one intensity capability\n for (const presetFixture of this.selectedPreset.fixtures) {\n const fixture = this.fixtureService.getCachedFixtureByUuid(presetFixture.fixtureUuid, presetFixture.pixelKey);\n for (const channel of fixture.channels) {\n if (channel.channel) {\n for (const capability of channel.capabilities) {\n if (capability.capability.type === type) {\n return true;\n }\n }\n }\n }\n }\n return false;\n }\n\n hasCapabilityDimmer(): boolean {\n return this.hasCapabilityType(FixtureCapabilityType.Intensity);\n }\n\n hasCapabilityColor(): boolean {\n // TODO optionally color temperature and color white (see stairville/mh-100)\n\n // one of the profiles has a color intensity\n if (this.hasCapabilityType(FixtureCapabilityType.ColorIntensity)) {\n return true;\n }\n\n return false;\n }\n\n hasCapabilityColorOrColorWheel(): boolean {\n // TODO optionally color temperature and color white (see stairville/mh-100)\n\n // one of the profiles has a color intensity\n if (this.hasCapabilityColor()) {\n return true;\n }\n\n // a color wheel is involved\n for (const projectFixture of this.selectedPreset.fixtures) {\n const fixture = this.fixtureService.getCachedFixtureByUuid(projectFixture.fixtureUuid, projectFixture.pixelKey);\n for (const channel of fixture.channels) {\n if (channel.colorWheel) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n hasCapabilityPanTilt(): boolean {\n let hasPan = false;\n let hasTilt = false;\n\n // there is at least one pan and one tilt channel\n if (this.hasCapabilityType(FixtureCapabilityType.Pan)) {\n hasPan = true;\n }\n\n if (this.hasCapabilityType(FixtureCapabilityType.Tilt)) {\n hasTilt = true;\n }\n\n if (hasPan && hasTilt) {\n return true;\n }\n\n return false;\n }\n\n selectPreset(index: number) {\n this.effectService.selectedEffect = undefined;\n this.selectedPreset = this.projectService.project.presets[index];\n this.projectService.project.selectedPresetUuid = this.projectService.project.presets[index].uuid;\n this.autoOpenFirstEffect();\n this.previewSelectionChanged.next();\n this.livePreviewService.previewLive();\n }\n\n autoOpenFirstEffect() {\n // open the first effect, if the preset only has one\n if (this.selectedPreset && this.selectedPreset.effects.length === 1) {\n this.effectService.selectedEffect = this.selectedPreset.effects[0];\n }\n }\n\n addPreset(name?: string): void {\n const preset: Preset = new Preset();\n preset.uuid = this.uuidService.getUuid();\n preset.name = name || 'New Preset';\n\n // Insert the new preset before the highest currently selected preset\n let highestSelectedPresetIndex = 0;\n\n for (let i = 0; i < this.projectService.project.presets.length; i++) {\n if (this.selectedPreset === this.projectService.project.presets[i]) {\n highestSelectedPresetIndex = i;\n break;\n }\n }\n\n this.projectService.project.presets.splice(highestSelectedPresetIndex, 0, preset);\n this.selectPreset(highestSelectedPresetIndex);\n }\n\n // return all fixture profiles used in the current preset selection\n getSelectedProfiles() {\n const profiles: FixtureProfile[] = [];\n\n if (!this.selectedPreset) {\n return profiles;\n }\n\n for (const presetFixture of this.selectedPreset.fixtures) {\n const fixture = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid);\n const profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n\n if (profiles.indexOf(profile) < 0) {\n profiles.push(profile);\n }\n }\n\n return profiles;\n }\n\n // given a list of fixture profiles, return all available channels based on the currently selected fixtures in the preset\n getSelectedProfileChannels(selectedProfiles: FixtureProfile[]) {\n const calculatedProfileModes = new Map<FixtureProfile, any[]>();\n const availableChannels: Map<FixtureProfile, CachedFixtureChannel[]> = new Map<FixtureProfile, CachedFixtureChannel[]>();\n\n // calculate all modes for each profile\n for (const profile of selectedProfiles) {\n const modeAndPixelKeys: any[] = [];\n\n // loop over the project fixtures to keep the order\n for (let projectFixture of this.projectService.project.presetFixtures) {\n for (const presetFixture of this.selectedPreset.fixtures) {\n if (this.presetFixtueEquals(presetFixture, projectFixture)) {\n const fixture = this.fixtureService.getCachedFixtureByUuid(presetFixture.fixtureUuid, presetFixture.pixelKey);\n if (fixture.profile.uuid === profile.uuid) {\n const exists = modeAndPixelKeys.some(\n (item) => (item.mode === fixture.mode && !item.pixelKey && !fixture.pixel?.key) || item.pixelKey === fixture.pixel?.key\n );\n if (!exists) {\n modeAndPixelKeys.push({\n mode: fixture.mode,\n pixelKey: presetFixture.pixelKey,\n });\n }\n }\n }\n }\n\n calculatedProfileModes.set(profile, modeAndPixelKeys);\n }\n }\n\n // calculate all channels from the modes\n calculatedProfileModes.forEach((modeAndPixelKeys: any[], profile: FixtureProfile) => {\n const profileChannels: CachedFixtureChannel[] = [];\n for (const modeAndPixelKey of modeAndPixelKeys) {\n const channels = this.fixtureService.getCachedChannels(profile, modeAndPixelKey.mode, modeAndPixelKey.pixelKey);\n for (const channel of channels) {\n // only add the channel, if no channel with the same name has already been added\n // (e.g. a fine channel)\n if (channel.channel && !profileChannels.find((c) => c.name === channel.name)) {\n profileChannels.push(channel);\n }\n }\n }\n availableChannels.set(profile, profileChannels);\n });\n\n return availableChannels;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Preset } from '../models/preset';\nimport { Scene } from '../models/scene';\nimport { EffectService } from './effect.service';\nimport { PresetService } from './preset.service';\nimport { ProjectService } from './project.service';\nimport { UuidService } from './uuid.service';\nimport { LivePreviewService } from './live-preview.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SceneService {\n selectedScenes: Scene[] = [];\n sceneColors: string[] = ['#945fda', '#61da5f', '#5fc3da', '#dad65f', '#da5f5f', '#246db7'];\n\n multipleSelection = false;\n\n sceneDeleted: Subject<void> = new Subject<void>();\n sceneSelected: Subject<void> = new Subject<void>();\n\n constructor(\n private uuidService: UuidService,\n private effectService: EffectService,\n private presetService: PresetService,\n private projectService: ProjectService,\n private livePreviewService: LivePreviewService\n ) {}\n\n sceneIsSelected(scene: Scene): boolean {\n for (const selectedScene of this.selectedScenes) {\n if (selectedScene.uuid === scene.uuid) {\n return true;\n }\n }\n\n return false;\n }\n\n presetIsSelected(preset: Preset): boolean {\n if (!this.selectedScenes || this.selectedScenes.length !== 1) {\n return false;\n }\n\n for (const uuid of this.selectedScenes[0].presetUuids) {\n if (preset.uuid === uuid) {\n return true;\n }\n }\n\n return false;\n }\n\n switchSceneSelection(scene: Scene) {\n // Select a scene if not yet selected or unselect it otherwise\n if (this.sceneIsSelected(scene)) {\n for (let i = 0; i < this.selectedScenes.length; i++) {\n if (this.selectedScenes[i].uuid === scene.uuid) {\n this.selectedScenes.splice(i, 1);\n return;\n }\n }\n } else {\n this.selectedScenes.push(scene);\n }\n\n this.sceneSelected.next();\n }\n\n selectPresetFromSelectedScene() {\n // select the first preset of the scene, if no preset of the current scene is already\n // selected to make sure, the user does not edit a preset which is not even\n // active in the current scene (and sees no change).\n\n let firstPresetUuid;\n\n // check, whether a preset of the current scene is already selected and do nothing\n // in this case\n for (const scene of this.selectedScenes) {\n for (const presetUuid of scene.presetUuids) {\n firstPresetUuid = presetUuid;\n\n if (presetUuid === this.presetService.selectedPreset.uuid) {\n // a preset of a currently selected scene is already selected -> do nothing\n return;\n }\n }\n }\n\n if (!firstPresetUuid) {\n return;\n }\n\n for (let i = 0; i < this.projectService.project.presets.length; i++) {\n if (this.projectService.project.presets[i].uuid === firstPresetUuid) {\n this.presetService.selectPreset(i);\n break;\n }\n }\n }\n\n selectScene(index: number) {\n this.effectService.selectedEffect = undefined;\n\n if (index >= this.projectService.project.scenes.length) {\n this.selectedScenes = [];\n } else {\n if (this.multipleSelection) {\n this.switchSceneSelection(this.projectService.project.scenes[index]);\n } else {\n this.selectedScenes = [];\n this.selectedScenes.push(this.projectService.project.scenes[index]);\n }\n }\n\n this.selectPresetFromSelectedScene();\n\n // preview the complete scene\n this.projectService.project.previewPreset = false;\n\n this.projectService.project.selectedSceneUuids = [];\n for (const scene of this.selectedScenes) {\n this.projectService.project.selectedSceneUuids.push(scene.uuid);\n }\n this.presetService.previewSelectionChanged.next();\n this.livePreviewService.previewLive();\n\n this.sceneSelected.next();\n }\n\n addScene(name?: string): void {\n const scene: Scene = new Scene();\n scene.uuid = this.uuidService.getUuid();\n scene.name = name || 'New Scene';\n\n if (this.projectService.project.scenes.length < this.sceneColors.length) {\n scene.color = this.sceneColors[this.projectService.project.scenes.length];\n } else {\n scene.color = '#' + Math.random().toString(16).slice(2, 8).toUpperCase();\n }\n\n // Insert the new scene before the highest currently selected scene\n let highestSelectedSceneIndex = 0;\n\n for (let i = 0; i < this.projectService.project.scenes.length; i++) {\n if (this.sceneIsSelected(this.projectService.project.scenes[i])) {\n highestSelectedSceneIndex = i;\n break;\n }\n }\n\n this.projectService.project.scenes.splice(highestSelectedSceneIndex, 0, scene);\n this.selectScene(highestSelectedSceneIndex);\n }\n\n removeScene(scene: Scene): void {\n // remove all playback regions\n for (const composition of this.projectService.project.compositions) {\n for (let i = composition.scenePlaybackRegions.length - 1; i >= 0; i--) {\n const compositionPlaybackRegion = composition.scenePlaybackRegions[i];\n if (compositionPlaybackRegion.sceneUuid === scene.uuid) {\n composition.scenePlaybackRegions.splice(i, 1);\n }\n }\n }\n\n // remove the scene\n this.projectService.project.scenes.splice(this.projectService.project.scenes.indexOf(scene), 1);\n if (this.projectService.project.scenes.length > 0) {\n this.selectScene(0);\n }\n\n this.sceneDeleted.next();\n }\n\n getSceneByUuid(uuid: string): Scene {\n for (const scene of this.projectService.project.scenes) {\n if (scene.uuid === uuid) {\n return scene;\n }\n }\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, NgZone } from '@angular/core';\nimport { Observable, Subject, Subscription, timer } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport WaveSurfer from 'wavesurfer.js';\nimport CursorPlugin from 'wavesurfer.js/dist/plugin/wavesurfer.cursor.min.js';\nimport RegionsPlugin from 'wavesurfer.js/dist/plugin/wavesurfer.regions.min.js';\nimport TimeLinePlugin from 'wavesurfer.js/dist/plugin/wavesurfer.timeline.min.js';\nimport { guess } from 'web-audio-beat-detector';\nimport { Composition } from '../models/composition';\nimport { Preset } from '../models/preset';\nimport { PresetRegionScene } from '../models/preset-region-scene';\nimport { Scene } from '../models/scene';\nimport { ScenePlaybackRegion } from '../models/scene-playback-region';\nimport { ConfigService } from './config.service';\nimport { PresetService } from './preset.service';\nimport { ProjectService } from './project.service';\nimport { SceneService } from './scene.service';\nimport { TimelineStateService } from './timeline-state.service';\nimport { LivePreviewService } from './live-preview.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimelineService {\n public waveSurfer: WaveSurfer;\n\n public zoom = 0;\n private timeUpdateSubscription: Subscription;\n public currentTime: string;\n private timelineClicking = false;\n public selectedPlaybackRegion: ScenePlaybackRegion;\n private intensity = 0.2;\n private intensitySelectedScene = 0.4;\n private intensityHighlighted = 0.8;\n public duration: string;\n public waveSurferReady: Subject<void> = new Subject();\n public detectChanges: Subject<void> = new Subject();\n\n // can we add new compositions based on an external pool and\n // should new compositions not available in this pool be added there?\n public externalCompositionsAvailable = false;\n\n public loadingAudioFile = false;\n\n constructor(\n private sceneService: SceneService,\n private presetService: PresetService,\n private projectService: ProjectService,\n private http: HttpClient,\n private configService: ConfigService,\n private ngZone: NgZone,\n private timelineStateService: TimelineStateService,\n private livePreviewService: LivePreviewService\n ) {\n this.presetService.previewSelectionChanged.subscribe(() => {\n this.selectedPlaybackRegion = undefined;\n this.updateRegionSelection();\n });\n this.sceneService.sceneDeleted.subscribe(() => {\n this.redrawAllRegions();\n });\n this.sceneService.sceneSelected.subscribe(() => {\n this.redrawAllRegions();\n });\n }\n\n get playState(): string {\n return this.timelineStateService.playState;\n }\n\n set playState(playState: string) {\n this.timelineStateService.playState = playState;\n }\n\n get selectedComposition(): Composition {\n return this.timelineStateService.selectedComposition;\n }\n\n set selectedComposition(selectedComposition: Composition) {\n this.timelineStateService.selectedComposition = selectedComposition;\n }\n\n get selectedCompositionIndex(): number {\n return this.timelineStateService.selectedCompositionIndex;\n }\n\n set selectedCompositionIndex(selectedCompositionIndex: number) {\n this.timelineStateService.selectedCompositionIndex = selectedCompositionIndex;\n }\n\n private redrawAllRegions() {\n // remove all regions from wavesurver\n if (this.waveSurfer) {\n for (const key of Object.keys(this.waveSurfer.regions.list)) {\n const region: any = this.waveSurfer.regions.list[key];\n region.remove();\n }\n }\n\n // draw all regions\n this.drawAllRegions();\n }\n\n private pad(num: number, size: number): string {\n if (!num) {\n num = 0;\n }\n\n let padded: string = num.toString();\n while (padded.length < size) {\n padded = '0' + padded;\n }\n\n return padded;\n }\n\n private msToTime(millis: number, includeMillis: boolean = true): string {\n const ms: number = Math.round(millis % 1000);\n const seconds: number = Math.floor(((millis % 360000) % 60000) / 1000);\n const minutes: number = Math.floor((millis % 3600000) / 60000);\n\n if (includeMillis) {\n return this.pad(minutes, 2) + ':' + this.pad(seconds, 2) + '.' + this.pad(ms, 3);\n } else {\n return this.pad(minutes, 2) + ':' + this.pad(seconds, 2);\n }\n }\n\n private updateCurrentTime() {\n if (!this.waveSurfer) {\n return;\n }\n\n // display the current time\n this.currentTime = this.msToTime(this.waveSurfer.getCurrentTime() * 1000);\n\n if (!this.waveSurfer.timeline.drawer) {\n return;\n }\n\n // draw the current cursor on the timeline\n // TODO redrawing the timeline each update is way to expensive.\n // maybe as a better solution use an element, like the cursor inside Wavesurfer to\n // display the progress?\n let x = 0;\n const duration: number = this.waveSurfer.backend.getDuration();\n const width: number =\n this.waveSurfer.params.fillParent && !this.waveSurfer.params.scrollParent\n ? this.waveSurfer.timeline.drawer.getWidth()\n : this.waveSurfer.timeline.drawer.wrapper.scrollWidth * this.waveSurfer.params.pixelRatio;\n\n x = (width / duration) * this.waveSurfer.getCurrentTime() - 2;\n\n // update the timeline canvas\n this.waveSurfer.timeline.render();\n\n // draw the cursor on the timeline\n this.waveSurfer.timeline.canvases.forEach((canvas, i) => {\n const leftOffset = i * this.waveSurfer.timeline.maxCanvasWidth;\n\n const ctx = canvas.getContext('2d');\n\n ctx.fillStyle = '#fd7e14';\n ctx.beginPath();\n ctx.moveTo(x - 12 - leftOffset, 20);\n ctx.lineTo(x + 12 - leftOffset, 20);\n ctx.lineTo(x - leftOffset, 45);\n ctx.fill();\n });\n }\n\n private startTimeUpdater() {\n this.stopTimeUpdater();\n\n // Avoid triggering change detection with each animation frame -> run outside zone\n this.ngZone.runOutsideAngular(() => {\n const timeUpdater = timer(0, 40);\n this.timeUpdateSubscription = timeUpdater.subscribe(() => {\n this.updateCurrentTime();\n });\n });\n }\n\n private stopTimeUpdater() {\n if (this.timeUpdateSubscription) {\n this.timeUpdateSubscription.unsubscribe();\n }\n }\n\n formatTimeCallback(seconds: number, pxPerSec: number) {\n if (this.selectedComposition.gridType === 'musical') {\n return Math.round(seconds / this.selectedComposition.timeSignatureUpper / (60 / this.selectedComposition.beatsPerMinute));\n } else {\n // calculate minutes and seconds from seconds count\n const minutes = parseInt((seconds / 60) as any, 10);\n seconds = parseInt((seconds % 60) as any, 10);\n\n // fill up seconds with zeroes\n const secondsStr = seconds < 10 ? '0' + seconds : seconds;\n return `${minutes}:${secondsStr}`;\n }\n }\n\n timeInterval(pxPerSec: number) {\n if (this.selectedComposition.gridType === 'musical') {\n const interval = 60 / this.selectedComposition.beatsPerMinute / this.selectedComposition.gridResolution;\n\n if (pxPerSec < 40) {\n return interval * 4;\n } else if (pxPerSec < 80) {\n return interval * 2;\n }\n\n return interval;\n } else {\n if (pxPerSec >= 25) {\n return 1;\n } else if (pxPerSec * 5 >= 25) {\n return 5;\n } else if (pxPerSec * 15 >= 25) {\n return 15;\n }\n\n return Math.ceil(0.5 / pxPerSec) * 60;\n }\n }\n\n primaryLabelInterval(pxPerSec: number) {\n if (this.selectedComposition.gridType === 'musical') {\n const interval = this.selectedComposition.timeSignatureUpper * this.selectedComposition.gridResolution;\n\n return interval;\n } else {\n if (pxPerSec >= 25) {\n return 10;\n } else if (pxPerSec * 5 >= 25) {\n return 6;\n } else if (pxPerSec * 15 >= 25) {\n return 4;\n }\n\n return 4;\n }\n }\n\n secondaryLabelInterval(pxPerSec: number) {\n if (this.selectedComposition.gridType === 'musical') {\n return 0;\n } else {\n if (pxPerSec >= 25) {\n return 5;\n } else if (pxPerSec * 5 >= 25) {\n return 2;\n } else if (pxPerSec * 15 >= 25) {\n return 2;\n }\n return 2;\n }\n }\n\n private seekWithTimeline(e: any) {\n // taken from wavesurfer -> drawer -> handleEvent\n const clientX = e.targetTouches ? e.targetTouches[0].clientX : e.clientX;\n const bbox = this.waveSurfer.timeline.wrapper.getBoundingClientRect();\n\n const nominalWidth = this.waveSurfer.timeline.drawer.width;\n const parentWidth = this.waveSurfer.timeline.drawer.getWidth();\n\n let progress: number;\n\n if (!this.waveSurfer.timeline.drawer.params.fillParent && nominalWidth < parentWidth) {\n progress =\n (this.waveSurfer.timeline.drawer.params.rtl ? bbox.right - clientX : clientX - bbox.left) *\n (this.waveSurfer.timeline.drawer.params.pixelRatio / nominalWidth) || 0;\n\n if (progress > 1) {\n progress = 1;\n }\n } else {\n progress =\n ((this.waveSurfer.timeline.drawer.params.rtl ? bbox.right - clientX : clientX - bbox.left) +\n this.waveSurfer.timeline.wrapper.scrollLeft) /\n this.waveSurfer.timeline.wrapper.scrollWidth || 0;\n }\n\n progress = Math.max(progress, 0);\n\n setTimeout(() => {\n this.waveSurfer.seekTo(progress);\n this.detectChanges.next();\n this.livePreviewService.previewLive(\n this.selectedComposition.name,\n Math.round(progress * this.waveSurfer.backend.getDuration() * 1000)\n );\n }, 0);\n }\n\n applyZoom(zoom: any) {\n if (zoom < 0 || zoom > 200) {\n return;\n }\n\n this.zoom = zoom;\n if (this.waveSurfer) {\n setTimeout(() => {\n this.waveSurfer.zoom(this.zoom);\n this.updateCurrentTime();\n }, 0);\n }\n }\n\n private isWaveSurferReady(): boolean {\n if (!this.waveSurfer) {\n return false;\n }\n\n if (!this.waveSurfer.isReady) {\n return false;\n }\n\n return true;\n }\n\n addRegion(waveSurferRegion?: any) {\n if (!this.isWaveSurferReady()) {\n return;\n }\n\n if (!this.sceneService.selectedScenes || this.sceneService.selectedScenes.length !== 1) {\n return;\n }\n\n if (!this.selectedComposition) {\n return;\n }\n\n const scenePlaybackRegion: ScenePlaybackRegion = new ScenePlaybackRegion();\n scenePlaybackRegion.sceneUuid = this.sceneService.selectedScenes[0].uuid;\n\n if (waveSurferRegion) {\n scenePlaybackRegion.startMillis = waveSurferRegion.start * 1000;\n scenePlaybackRegion.endMillis = waveSurferRegion.end * 1000;\n } else {\n scenePlaybackRegion.startMillis = (this.waveSurfer.getDuration() * 1000) / 3;\n scenePlaybackRegion.endMillis = ((this.waveSurfer.getDuration() * 1000) / 3) * 2;\n }\n\n this.selectedComposition.scenePlaybackRegions.push(scenePlaybackRegion);\n\n this.selectedPlaybackRegion = scenePlaybackRegion;\n\n if (waveSurferRegion) {\n waveSurferRegion.color =\n 'rgba(' +\n this.hexToRgb(this.sceneService.selectedScenes[0].color).r +\n ', ' +\n this.hexToRgb(this.sceneService.selectedScenes[0].color).g +\n ', ' +\n this.hexToRgb(this.sceneService.selectedScenes[0].color).b +\n ', ' +\n this.intensityHighlighted +\n ')';\n waveSurferRegion.attributes.selectable = true;\n this.connectRegion(waveSurferRegion, this.sceneService.selectedScenes[0], scenePlaybackRegion);\n this.updateRegionSelection();\n } else {\n this.drawRegion(scenePlaybackRegion, this.sceneService.selectedScenes[0]);\n }\n\n this.livePreviewService.previewLive();\n }\n\n private getSnapToGridInterval(): number {\n if (this.selectedComposition.snapToGrid) {\n return 60 / this.selectedComposition.beatsPerMinute / this.selectedComposition.gridResolution;\n }\n\n return undefined;\n }\n\n private getSnapToGridOffset(): number {\n return this.selectedComposition.gridOffsetMillis / 1000;\n }\n\n deleteSelectedComposition() {\n this.projectService.project.compositions.splice(this.selectedCompositionIndex, 1);\n this.selectedComposition = undefined;\n this.selectedCompositionIndex = undefined;\n this.destroyWaveSurfer();\n if (this.projectService.project.compositions.length > 0) {\n this.selectCompositionIndex(0);\n }\n }\n\n destroyWaveSurfer() {\n this.duration = undefined;\n this.loadingAudioFile = false;\n\n if (this.waveSurfer) {\n this.waveSurfer.destroy();\n this.waveSurfer = undefined;\n }\n }\n\n createWaveSurfer() {\n this.destroyWaveSurfer();\n\n if (!this.selectedComposition.audioFileName) {\n return;\n }\n\n this.loadingAudioFile = true;\n\n setTimeout(() => {\n this.waveSurfer = WaveSurfer.create({\n container: '#waveform',\n waveColor: 'white',\n progressColor: 'white',\n // barWidth: 2,\n height: 1,\n interact: false,\n xhr: {\n credentials: 'include',\n },\n // Use for timelines without sound. Wave will be displayed\n // wrong, but should work for a dummy audio without any waves.\n // duration: 400,\n plugins: [\n CursorPlugin.create({\n // showTime: true,\n opacity: 1,\n color: '#fd7e14',\n hideOnBlur: false /* don't show/hide the cursor on the wave (only on the timeline) */,\n }),\n RegionsPlugin.create({\n dragSelection: {\n slop: 5,\n },\n color: '#fff',\n snapToGridInterval: this.getSnapToGridInterval(),\n snapToGridOffset: this.getSnapToGridOffset(),\n }),\n TimeLinePlugin.create({\n container: '#waveform-timeline',\n primaryFontColor: '#fff',\n secondaryFontColor: '#fff',\n offset: this.getSnapToGridOffset(),\n formatTimeCallback: this.formatTimeCallback.bind(this),\n timeInterval: this.timeInterval.bind(this),\n primaryLabelInterval: this.primaryLabelInterval.bind(this),\n secondaryLabelInterval: this.secondaryLabelInterval.bind(this),\n }),\n ],\n });\n\n let audioFileName: string;\n\n if (this.configService.enableMediaLibrary) {\n // the file name is also used for the real file name\n audioFileName = 'file/get?name=' + this.selectedComposition.audioFileName + '&type=AUDIO';\n } else {\n // the composition uuid and extension is used as the file name\n audioFileName =\n 'composition-files/?file=' +\n this.selectedComposition.uuid +\n '.' +\n this.selectedComposition.audioFileName.substr(this.selectedComposition.audioFileName.lastIndexOf('.') + 1);\n }\n\n this.waveSurfer.load(this.configService.restUrl + audioFileName);\n\n this.waveSurfer.on('ready', () => {\n setTimeout(() => {\n // try guessing the bpm and offset from the file, if necessary\n if (this.selectedComposition.tempoGuessed) {\n // we already guessed the BPM of this file --> don't do it again\n this.loadingAudioFile = false;\n } else {\n // we have not yet guessed the BPM --> do it now\n this.selectedComposition.tempoGuessed = true;\n guess(this.waveSurfer.backend.buffer)\n .then(({ bpm, offset }) => {\n // the bpm and offset could be guessed\n this.selectedComposition.beatsPerMinute = bpm;\n this.selectedComposition.gridOffsetMillis = offset * 1000;\n this.loadingAudioFile = false;\n })\n .catch((err) => {\n // something went wrong\n console.error('Could not detect the BPM from the audio file', err);\n this.loadingAudioFile = false;\n });\n }\n\n this.duration = this.msToTime(this.waveSurfer.getDuration() * 1000);\n this.drawAllRegions();\n\n // scroll wavesurfer in sync with the timeline\n this.waveSurfer.timeline.wrapper.addEventListener('scroll', () => {\n this.waveSurfer.drawer.wrapper.scrollLeft = this.waveSurfer.timeline.wrapper.scrollLeft;\n\n // Set the scroll position of the timeline to the same position as the wavesurfer,\n // because the timeline is larger than wavesurfer and might get out of sync.\n // This way, if wavesurfer cannot scroll any further, we reset the position\n // of the timeline as well.\n this.waveSurfer.timeline.wrapper.scrollLeft = this.waveSurfer.drawer.wrapper.scrollLeft;\n });\n\n // display the cursor also on the timeline\n this.waveSurfer.timeline.wrapper.addEventListener('mouseenter', () => {\n this.waveSurfer.cursor.showCursor();\n });\n this.waveSurfer.timeline.wrapper.addEventListener('mouseleave', () => {\n this.waveSurfer.cursor.hideCursor();\n });\n this.waveSurfer.timeline.wrapper.addEventListener('mousemove', (e: any) => {\n const bbox = this.waveSurfer.container.getBoundingClientRect();\n const x = e.clientX - bbox.left;\n this.waveSurfer.cursor.updateCursorPosition(x, 0);\n });\n\n // hide the cursor on the wave initially. in combination with the param hideOnBlur = false,\n // it will never be displayed on the wave now. we handle it on the timeline only.\n this.waveSurfer.cursor.hideCursor();\n\n // seek on timeline-click\n this.waveSurfer.timeline.wrapper.addEventListener('mousedown', (e: any) => {\n this.timelineClicking = true;\n this.seekWithTimeline(e);\n });\n\n this.waveSurfer.timeline.wrapper.addEventListener('mousemove', (e: any) => {\n if (this.timelineClicking) {\n this.seekWithTimeline(e);\n }\n });\n\n this.waveSurfer.timeline.wrapper.addEventListener('mouseup', (e: any) => {\n this.timelineClicking = false;\n });\n\n this.updateCurrentTime();\n\n this.detectChanges.next();\n this.waveSurferReady.next();\n }, 0);\n });\n\n this.waveSurfer.on('error', (error: any) => {\n // could not load the composition --> delete it\n // (this may occur, when the composition has been deleted but the project is not saved afterwards)\n this.deleteSelectedComposition();\n });\n\n this.waveSurfer.on('seek', () => {\n this.updateCurrentTime();\n });\n\n this.waveSurfer.on('play', () => {\n this.startTimeUpdater();\n });\n\n this.waveSurfer.on('pause', () => {\n this.stopTimeUpdater();\n });\n\n this.waveSurfer.on('region-created', (region) => {\n // region created by selection or programmatically\n if (this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1) {\n if (!region.data.handled) {\n this.addRegion(region);\n }\n } else {\n if (!region.data.handled) {\n region.remove();\n }\n }\n });\n\n this.waveSurfer.on('region-updated', (region: any) => {\n this.detectChanges.next();\n this.livePreviewService.previewLive();\n });\n }, 0);\n }\n\n private hexToRgb(hex: string) {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null;\n }\n\n private updateRegionSelection() {\n if (!this.waveSurfer) {\n return;\n }\n\n for (const key of Object.keys(this.waveSurfer.regions.list)) {\n const region: any = this.waveSurfer.regions.list[key];\n\n // if no scene is set, the region is not valid (e.g. has been created, while\n // no scene has been selected and remove did not work properly)\n if (region.scene) {\n let intensity = this.intensity;\n\n region.drag = false;\n region.resize = false;\n region.attributes.selectable = false;\n\n if (this.sceneService.sceneIsSelected(region.scene)) {\n intensity = this.intensitySelectedScene;\n region.drag = true;\n region.resize = true;\n region.attributes.selectable = true;\n }\n\n region.attributes.selected = false;\n\n if (this.selectedPlaybackRegion && this.selectedPlaybackRegion === region.scenePlaybackRegion) {\n intensity = this.intensityHighlighted;\n region.attributes.selected = true;\n }\n\n region.color =\n 'rgba(' +\n this.hexToRgb(region.scene.color).r +\n ', ' +\n this.hexToRgb(region.scene.color).g +\n ', ' +\n this.hexToRgb(region.scene.color).b +\n ', ' +\n intensity +\n ')';\n region.updateRender();\n }\n }\n }\n\n updateSelectedRegion() {\n if (!this.waveSurfer) {\n return;\n }\n\n if (!this.selectedPlaybackRegion) {\n return;\n }\n\n for (const key of Object.keys(this.waveSurfer.regions.list)) {\n const region: any = this.waveSurfer.regions.list[key];\n\n if (this.selectedPlaybackRegion === region.scenePlaybackRegion) {\n region.start = this.selectedPlaybackRegion.startMillis / 1000;\n region.end = this.selectedPlaybackRegion.endMillis / 1000;\n region.updateRender();\n break;\n }\n }\n }\n\n private setSelectedRegion(scenePlaybackRegion?: ScenePlaybackRegion) {\n if (this.selectedPlaybackRegion && this.selectedPlaybackRegion === scenePlaybackRegion) {\n // No update required\n return;\n }\n\n if (scenePlaybackRegion) {\n this.selectedPlaybackRegion = scenePlaybackRegion;\n }\n\n this.updateRegionSelection();\n }\n\n private getRegionSnapToGridValue(value: number): number {\n // the regions should snap to a grid\n const offset = this.getSnapToGridOffset() || 0;\n const interval = this.getSnapToGridInterval() || 0;\n return Math.round((value - offset) / interval) * interval + offset;\n }\n\n private connectRegion(waveSurferRegion: any, scene: Scene, scenePlaybackRegion: ScenePlaybackRegion, preset?: Preset) {\n waveSurferRegion.scenePlaybackRegion = scenePlaybackRegion;\n waveSurferRegion.scene = scene;\n waveSurferRegion.preset = preset;\n\n waveSurferRegion.on('click', (event) => {\n if (this.sceneService.sceneIsSelected(scene)) {\n this.setSelectedRegion(scenePlaybackRegion);\n }\n });\n\n waveSurferRegion.on('update', () => {\n this.setSelectedRegion(scenePlaybackRegion);\n if (this.selectedComposition.snapToGrid) {\n // update the regions boundaries. they may not snap to grid, if it has been\n // disabled during creation of the region but activated afterwards.\n waveSurferRegion.start = this.getRegionSnapToGridValue(waveSurferRegion.start);\n waveSurferRegion.end = this.getRegionSnapToGridValue(waveSurferRegion.end);\n }\n scenePlaybackRegion.startMillis = Math.round(waveSurferRegion.start * 1000);\n scenePlaybackRegion.endMillis = Math.round(waveSurferRegion.end * 1000);\n });\n }\n\n private drawRegion(scenePlaybackRegion: ScenePlaybackRegion, scene: Scene) {\n // draw the regions of the currently selected scene\n if (!this.isWaveSurferReady()) {\n return;\n }\n\n // add the playback region\n const waveSurferRegion = this.waveSurfer.addRegion({\n start: scenePlaybackRegion.startMillis / 1000,\n end: scenePlaybackRegion.endMillis / 1000,\n color: '#fff',\n data: { handled: true },\n });\n this.connectRegion(waveSurferRegion, scene, scenePlaybackRegion);\n\n // TODO show the all presets\n // for (let presetUuid of scene.presetUuids) {\n // const preset = this.presetService.getPresetByUuid(presetUuid);\n\n // let waveSurferRegion = this.timelineService.waveSurfer.addRegion({\n // start: (scenePlaybackRegion.startMillis + (preset.startMillis ? preset.startMillis : 0)) / 1000,\n // end: (scenePlaybackRegion.startMillis\n // + (preset.endMillis ? preset.endMillis : scenePlaybackRegion.endMillis - scenePlaybackRegion.startMillis)) / 1000,\n // color: '#fff',\n // data: { handled: true },\n // // TODO\n // attributes: {\n // preset: true,\n // name: 'Preset 1'\n // }\n // });\n // this.connectRegion(waveSurferRegion, scene, scenePlaybackRegion, preset);\n // }\n\n this.updateRegionSelection();\n }\n\n removeRegion() {\n if (!this.selectedPlaybackRegion) {\n return;\n }\n\n if (this.sceneService.selectedScenes.length !== 1) {\n return;\n }\n\n for (let i = 0; i < this.selectedComposition.scenePlaybackRegions.length; i++) {\n if (this.selectedComposition.scenePlaybackRegions[i] === this.selectedPlaybackRegion) {\n // remove the region from wavesurfer\n for (const key of Object.keys(this.waveSurfer.regions.list)) {\n const region: any = this.waveSurfer.regions.list[key];\n\n if (region.scenePlaybackRegion === this.selectedPlaybackRegion) {\n region.remove();\n }\n }\n\n this.selectedPlaybackRegion = undefined;\n this.selectedComposition.scenePlaybackRegions.splice(i, 1);\n\n return;\n }\n }\n\n this.livePreviewService.previewLive();\n }\n\n getPresetsInTime(timeMillis: number): PresetRegionScene[] {\n // Return all presets which should be active during the specified time\n const activePresets: PresetRegionScene[] = [];\n\n for (let sceneIndex = this.projectService.project.scenes.length - 1; sceneIndex >= 0; sceneIndex--) {\n const scene = this.projectService.project.scenes[sceneIndex];\n\n for (const region of this.selectedComposition.scenePlaybackRegions) {\n if (region.sceneUuid === scene.uuid) {\n for (let presetIndex = this.projectService.project.presets.length - 1; presetIndex >= 0; presetIndex--) {\n for (const presetUuid of scene.presetUuids) {\n if (presetUuid === this.projectService.project.presets[presetIndex].uuid) {\n const preset = this.presetService.getPresetByUuid(presetUuid);\n\n if (preset) {\n let presetStartMillis = preset.startMillis === undefined ? region.startMillis : region.startMillis + preset.startMillis;\n let presetEndMillis = preset.endMillis === undefined ? region.endMillis : region.startMillis + preset.endMillis;\n\n // extend the running time, if fading is done outside the boundaries\n presetStartMillis -= preset.fadeInPre ? preset.fadeInMillis : 0;\n presetEndMillis += preset.fadeOutPost ? preset.fadeOutMillis : 0;\n\n if (presetStartMillis <= timeMillis && presetEndMillis >= timeMillis) {\n activePresets.push(new PresetRegionScene(preset, region, scene));\n }\n }\n }\n }\n }\n }\n }\n }\n\n return activePresets;\n }\n\n drawAllRegions() {\n if (!this.selectedComposition) {\n return;\n }\n\n // draw the regions in the same order as their corresponding scenes, but draw\n // the selected ones last, to make sure they're always clickable.\n for (let sceneIndex = this.projectService.project.scenes.length - 1; sceneIndex >= 0; sceneIndex--) {\n const scene = this.projectService.project.scenes[sceneIndex];\n if (!this.sceneService.sceneIsSelected(scene)) {\n for (const scenePlaybackRegion of this.selectedComposition.scenePlaybackRegions) {\n if (scenePlaybackRegion.sceneUuid === scene.uuid) {\n this.drawRegion(scenePlaybackRegion, scene);\n }\n }\n }\n }\n\n // draw all selected scenes afterwards\n for (let sceneIndex = this.projectService.project.scenes.length - 1; sceneIndex >= 0; sceneIndex--) {\n const scene = this.projectService.project.scenes[sceneIndex];\n\n if (this.sceneService.sceneIsSelected(scene)) {\n for (const scenePlaybackRegion of this.selectedComposition.scenePlaybackRegions) {\n if (scenePlaybackRegion.sceneUuid === scene.uuid) {\n this.drawRegion(scenePlaybackRegion, scene);\n }\n }\n }\n }\n }\n\n updateGrid() {\n if (this.waveSurferReady) {\n this.waveSurfer.timeline.params.offset = this.getSnapToGridOffset();\n\n this.waveSurfer.regions.params.snapToGridInterval = this.getSnapToGridInterval();\n this.waveSurfer.regions.params.snapToGridOffset = this.getSnapToGridOffset();\n }\n this.updateCurrentTime();\n }\n\n getExternalCompositionNames(): Observable<string[]> {\n // get available compositions from an external pool (e.g. Rocket Show)\n return this.http.get('composition/list').pipe(\n map((response: object[]) => {\n const compositionNames: string[] = [];\n\n for (const responseComposition of response) {\n compositionNames.push((responseComposition as any).name);\n }\n\n return compositionNames;\n })\n );\n }\n\n selectCompositionIndex(index: number) {\n this.selectedComposition = this.projectService.project.compositions[index];\n this.selectedCompositionIndex = index;\n this.projectService.project.selectedCompositionUuid = this.selectedComposition.uuid;\n this.createWaveSurfer();\n\n // required to trigger timeline.component.resize()\n this.waveSurferReady.next();\n\n this.applyZoom(0);\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport * as THREE from 'three';\nimport { CachedFixture } from '../models/cached-fixture';\nimport { EffectCurve } from '../models/effect-curve';\nimport { FixtureCapabilityType } from '../models/fixture-capability';\nimport { FixtureChannelValue } from '../models/fixture-channel-value';\nimport { Preset } from '../models/preset';\nimport { PresetRegionScene } from '../models/preset-region-scene';\nimport { FixtureService } from './fixture.service';\nimport { PresetService } from './preset.service';\nimport { ProjectService } from './project.service';\nimport { SceneService } from './scene.service';\nimport { TimelineService } from './timeline.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PreviewService implements OnDestroy {\n public doUpdateFixtureSetup: Subject<void> = new Subject();\n public doUpdateStageAndPositions: Subject<void> = new Subject();\n\n private updateStageAndPositionsSubscription: Subscription;\n public stageAndPositionsDirty: boolean = true;\n\n public scene: THREE.Scene;\n\n private stageMeshes: THREE.Mesh[] = [];\n private stageMaterial: THREE.MeshStandardMaterial;\n fixtureMaterial: THREE.MeshStandardMaterial;\n fixtureSelectedMaterial: THREE.MeshLambertMaterial;\n\n constructor(\n private presetService: PresetService,\n private fixtureService: FixtureService,\n private sceneService: SceneService,\n private timelineService: TimelineService,\n private projectService: ProjectService\n ) {\n this.stageMaterial = new THREE.MeshStandardMaterial({\n color: 0x0d0d0d,\n // roughness: 0.5,\n // metalness: 0.5,\n });\n this.fixtureMaterial = new THREE.MeshLambertMaterial({\n color: 0x0d0d0d,\n emissive: 0x0d0d0d,\n });\n this.fixtureSelectedMaterial = new THREE.MeshLambertMaterial({\n color: 0x660066,\n emissive: 0xaa00aa,\n emissiveIntensity: 0.000000000000000000001,\n });\n this.updateStageAndPositionsSubscription = this.doUpdateStageAndPositions.subscribe(() => {\n this.stageAndPositionsDirty = true;\n });\n }\n\n private getAlreadyCalculatedFixture(fixtures: CachedFixture[], fixtureIndex: number): CachedFixture {\n // Has this fixture already been calculated (same universe and dmx start address as a fixture before)\n // --> return it\n for (let i = 0; i < fixtureIndex; i++) {\n const calculatedFixture = fixtures[i];\n\n if (\n calculatedFixture.fixture.dmxUniverseUuid === fixtures[fixtureIndex].fixture.dmxUniverseUuid &&\n calculatedFixture.fixture.dmxFirstChannel === fixtures[fixtureIndex].fixture.dmxFirstChannel &&\n ((!calculatedFixture.pixel?.key && !fixtures[fixtureIndex].pixel?.key) ||\n calculatedFixture.pixel?.key === fixtures[fixtureIndex].pixel?.key)\n ) {\n return calculatedFixture;\n }\n }\n\n return undefined;\n }\n\n public getPresets(timeMillis: number): PresetRegionScene[] {\n // Get relevant presets in correct order to process with their corresponding scene, if available\n let presets: PresetRegionScene[] = [];\n\n if (this.timelineService.playState === 'playing') {\n // Only use active presets in current regions\n presets = this.timelineService.getPresetsInTime(timeMillis);\n } else {\n if (this.projectService.project.previewPreset) {\n // Only preview the selected preset\n if (this.presetService.selectedPreset) {\n presets.push(new PresetRegionScene(this.presetService.selectedPreset, undefined, undefined));\n }\n } else {\n // Preview the selected scenes\n for (let sceneIndex = this.projectService.project.scenes.length - 1; sceneIndex >= 0; sceneIndex--) {\n for (const scene of this.sceneService.selectedScenes) {\n if (scene.uuid === this.projectService.project.scenes[sceneIndex].uuid) {\n for (let presetIndex = this.projectService.project.presets.length - 1; presetIndex >= 0; presetIndex--) {\n for (const presetUuid of scene.presetUuids) {\n // Loop over the presets in the preset service to retain the preset order\n if (presetUuid === this.projectService.project.presets[presetIndex].uuid) {\n presets.push(new PresetRegionScene(this.projectService.project.presets[presetIndex], undefined, scene));\n break;\n }\n }\n }\n }\n }\n }\n }\n }\n\n return presets;\n }\n\n private mixChannelValue(\n existingChannelValues: FixtureChannelValue[],\n channelValue: FixtureChannelValue,\n intensityPercentage: number,\n defaultValue: number = 0\n ) {\n let newValue: number = channelValue.value;\n let existingValue: number = defaultValue;\n\n if (intensityPercentage < 1) {\n // We need to mix a possibly existing value (or the default value 0) with the new value (fading)\n\n // Get the existent value for this property\n for (const existingChannelValue of existingChannelValues) {\n if (\n existingChannelValue.channelName === channelValue.channelName &&\n existingChannelValue.profileUuid === channelValue.profileUuid\n ) {\n existingValue = existingChannelValue.value;\n break;\n }\n }\n\n // Mix the existing value with the new value\n newValue = existingValue * (1 - intensityPercentage) + newValue * intensityPercentage;\n }\n\n // Remove the existent value, if available\n for (let i = 0; i < existingChannelValues.length; i++) {\n if (\n existingChannelValues[i].channelName === channelValue.channelName &&\n existingChannelValues[i].profileUuid === channelValue.profileUuid\n ) {\n existingChannelValues.splice(i, 1);\n break;\n }\n }\n\n // Add the new value\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = channelValue.channelName;\n fixtureChannelValue.profileUuid = channelValue.profileUuid;\n fixtureChannelValue.value = newValue;\n existingChannelValues.push(fixtureChannelValue);\n }\n\n // Get the fixture index inside the passed preset (used for chasing)\n private getFixtureIndex(preset: Preset, fixtureUuid: string, pixelKey: string): number {\n let index = 0;\n const countedFirstDmxChannelPixelKey: any[] = [];\n\n if (!this.presetService.getPresetFixture(preset, fixtureUuid, pixelKey)) {\n // fixture is not in preset\n return undefined;\n }\n\n // Loop over the global fixtures to retain the order\n for (const projectFixture of this.projectService.project.presetFixtures) {\n for (const presetFixture of preset.fixtures) {\n if (\n this.presetService.fixtureUuidAndPixelKeyEquals(\n projectFixture.fixtureUuid,\n presetFixture.fixtureUuid,\n projectFixture.pixelKey,\n presetFixture.pixelKey\n )\n ) {\n if (this.presetService.fixtureUuidAndPixelKeyEquals(projectFixture.fixtureUuid, fixtureUuid, projectFixture.pixelKey, pixelKey)) {\n return index;\n }\n\n const fixture = this.fixtureService.getFixtureByUuid(projectFixture.fixtureUuid);\n const firstDmxChannelAndFixtureUuid = {\n firstDmxChannel: fixture.dmxFirstChannel,\n pixelKey: projectFixture.pixelKey,\n };\n\n const exists = countedFirstDmxChannelPixelKey.some(\n (item) =>\n item.firstDmxChannel === firstDmxChannelAndFixtureUuid.firstDmxChannel &&\n ((!item.pixelKey && !firstDmxChannelAndFixtureUuid.pixelKey) || item.pixelKey === firstDmxChannelAndFixtureUuid.pixelKey)\n );\n\n // don't count fixtures on the same channel as already counted ones\n if (!exists) {\n index++;\n countedFirstDmxChannelPixelKey.push(firstDmxChannelAndFixtureUuid);\n }\n\n break;\n }\n }\n }\n\n return undefined;\n }\n\n private getPresetIntensity(preset: PresetRegionScene, timeMillis: number): number {\n // When fading is in progress (on preset or scene-level), the current preset does not\n // fully cover underlying values.\n // -> 0 = no covering at all, 1 = fully cover (no fading)\n let intensityPercentageScene = 1;\n let intensityPercentagePreset = 1;\n let intensityPercentage = 1;\n\n if (preset.region && preset.scene) {\n // Fade out is stronger than fade in (if they overlap)\n\n // Take away intensity for scene fading\n const sceneStartMillis = preset.scene.fadeInPre ? preset.region.startMillis - preset.scene.fadeInMillis : preset.region.startMillis;\n const sceneEndMillis = preset.scene.fadeOutPost ? preset.region.endMillis + preset.scene.fadeOutMillis : preset.region.endMillis;\n\n if (timeMillis > sceneEndMillis - preset.scene.fadeOutMillis && timeMillis < sceneEndMillis) {\n // Scene fades out\n intensityPercentageScene = (sceneEndMillis - timeMillis) / preset.scene.fadeOutMillis;\n } else if (timeMillis < sceneStartMillis + preset.scene.fadeInMillis && timeMillis > sceneStartMillis) {\n // Scene fades in\n intensityPercentageScene = (timeMillis - sceneStartMillis) / preset.scene.fadeInMillis;\n }\n }\n\n if (preset.region && preset.preset) {\n // Take away intensity for preset fading\n let presetStartMillis =\n preset.preset.startMillis === undefined ? preset.region.startMillis : preset.region.startMillis + preset.preset.startMillis;\n\n let presetEndMillis =\n preset.preset.endMillis === undefined ? preset.region.endMillis : preset.region.startMillis + preset.preset.endMillis;\n\n // extend the running time, if fading is done outside the boundaries\n presetStartMillis -= preset.preset.fadeInPre ? preset.preset.fadeInMillis : 0;\n presetEndMillis += preset.preset.fadeOutPost ? preset.preset.fadeOutMillis : 0;\n\n if (timeMillis > presetEndMillis - preset.preset.fadeOutMillis && timeMillis < presetEndMillis) {\n // Preset fades out\n intensityPercentagePreset = (presetEndMillis - timeMillis) / preset.preset.fadeOutMillis;\n } else if (timeMillis < presetStartMillis + preset.preset.fadeInMillis && timeMillis > presetStartMillis) {\n // Preset fades in\n intensityPercentagePreset = (timeMillis - presetStartMillis) / preset.preset.fadeInMillis;\n }\n\n intensityPercentage = intensityPercentageScene * intensityPercentagePreset;\n }\n\n return intensityPercentage;\n }\n\n private mixCapabilityValues(\n preset: PresetRegionScene,\n cachedFixture: CachedFixture,\n values: FixtureChannelValue[],\n intensityPercentage: number\n ) {\n let hasColor = false;\n\n // mix the preset capability values\n for (const presetCapabilityValue of preset.preset.fixtureCapabilityValues) {\n for (const cachedChannel of cachedFixture.channels) {\n if (cachedChannel.channel) {\n for (const channelCapability of cachedChannel.capabilities) {\n if (\n this.fixtureService.capabilitiesMatch(\n presetCapabilityValue.type,\n channelCapability.capability.type,\n presetCapabilityValue.color,\n channelCapability.capability.color,\n presetCapabilityValue.wheel,\n channelCapability.wheelName,\n presetCapabilityValue.profileUuid,\n cachedFixture.profile.uuid\n )\n ) {\n // the capabilities match -> apply the value, if possible\n if (\n (presetCapabilityValue.type === FixtureCapabilityType.Intensity ||\n presetCapabilityValue.type === FixtureCapabilityType.ColorIntensity) &&\n presetCapabilityValue.valuePercentage >= 0\n ) {\n // intensity and colorIntensity (dimmer and color)\n const valuePercentage = presetCapabilityValue.valuePercentage;\n const defaultValue = 0;\n\n // brightness property\n if (cachedChannel.capabilities.length === 1) {\n // the only capability in this channel\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.maxValue * valuePercentage;\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage, defaultValue);\n\n if (presetCapabilityValue.type === FixtureCapabilityType.ColorIntensity) {\n hasColor = true;\n }\n } else {\n // more than one capability in the channel\n if (channelCapability.capability.brightness === 'off' && valuePercentage === 0) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = channelCapability.centerValue;\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage, defaultValue);\n\n if (presetCapabilityValue.type === FixtureCapabilityType.ColorIntensity) {\n hasColor = true;\n }\n } else if (\n (channelCapability.capability.brightnessStart === 'dark' || channelCapability.capability.brightnessStart === 'off') &&\n channelCapability.capability.brightnessEnd === 'bright'\n ) {\n const value =\n (channelCapability.capability.dmxRange[1] - channelCapability.capability.dmxRange[0]) * valuePercentage +\n channelCapability.capability.dmxRange[0];\n\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = value;\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage, defaultValue);\n\n if (presetCapabilityValue.type === FixtureCapabilityType.ColorIntensity) {\n hasColor = true;\n }\n }\n }\n } else if (\n (presetCapabilityValue.type === FixtureCapabilityType.Pan || presetCapabilityValue.type === FixtureCapabilityType.Tilt) &&\n presetCapabilityValue.valuePercentage >= 0\n ) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.maxValue * presetCapabilityValue.valuePercentage;\n this.mixChannelValue(values, fixtureChannelValue, 1);\n } else if (\n presetCapabilityValue.type === FixtureCapabilityType.WheelSlot &&\n channelCapability.capability.slotNumber === presetCapabilityValue.slotNumber\n ) {\n // wheel slot (color, gobo, etc.)\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = channelCapability.centerValue;\n this.mixChannelValue(values, fixtureChannelValue, 1);\n\n // check, whether we just set a color wheel value\n if (channelCapability.wheelIsColor) {\n hasColor = true;\n }\n }\n }\n }\n }\n\n // approximate the color from a color or a different color wheel, if necessary\n if (!hasColor && cachedChannel.colorWheel) {\n const capability = this.presetService.getApproximatedColorWheelCapability(preset.preset, cachedChannel);\n\n if (capability) {\n // we found an approximated color in the available wheel channel\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = capability.centerValue;\n this.mixChannelValue(values, fixtureChannelValue, 1);\n }\n }\n }\n }\n }\n\n private mixChannelValues(\n preset: PresetRegionScene,\n cachedFixture: CachedFixture,\n values: FixtureChannelValue[],\n intensityPercentage: number\n ) {\n // mix the preset channel values\n for (const cachedChannel of cachedFixture.channels) {\n if (cachedChannel.channel) {\n for (const channelValue of preset.preset.fixtureChannelValues) {\n if (cachedFixture.profile.uuid === channelValue.profileUuid && cachedChannel.name === channelValue.channelName) {\n this.mixChannelValue(values, channelValue, intensityPercentage);\n }\n }\n }\n }\n }\n\n private mixEffects(\n timeMillis: number,\n fixtureIndex: number,\n preset: PresetRegionScene,\n cachedFixture: CachedFixture,\n values: FixtureChannelValue[],\n intensityPercentage: number\n ) {\n let effectTimeMillis = timeMillis;\n\n if (preset.region) {\n effectTimeMillis = timeMillis - preset.region.startMillis;\n }\n\n for (const effect of preset.preset.effects) {\n if (effect.visible) {\n // EffectCurve\n if (effect instanceof EffectCurve) {\n const effectCurve = effect as EffectCurve;\n\n // capabilities\n for (const capability of effectCurve.capabilities) {\n for (const cachedChannel of cachedFixture.channels) {\n for (const channelCapability of cachedChannel.capabilities) {\n if (\n this.fixtureService.capabilitiesMatch(\n capability.type,\n channelCapability.capability.type,\n capability.color,\n channelCapability.capability.color,\n null,\n null,\n null,\n null\n )\n ) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.maxValue * effectCurve.getValueAtMillis(effectTimeMillis, fixtureIndex);\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage);\n }\n }\n }\n }\n\n // channels\n for (const channelProfile of effectCurve.channels) {\n if (channelProfile.profileUuid === cachedFixture.profile.uuid) {\n for (const channel of channelProfile.channels) {\n for (const cachedChannel of cachedFixture.channels) {\n if (cachedChannel.name === channel) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.maxValue * effectCurve.getValueAtMillis(effectTimeMillis, fixtureIndex);\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage);\n }\n }\n }\n\n break;\n }\n }\n }\n\n // TODO other effects (PanTilt, etc.)\n }\n }\n }\n\n // return all fixture uuids with their corresponding channel values\n public getChannelValues(timeMillis: number, presets: PresetRegionScene[]): Map<CachedFixture, FixtureChannelValue[]> {\n // Loop over all relevant presets and calc the property values from the presets (capabilities, channels and effects)\n const calculatedFixtures = new Map<CachedFixture, FixtureChannelValue[]>();\n\n for (let i = 0; i < this.fixtureService.cachedFixtures.length; i++) {\n const cachedFixture = this.fixtureService.cachedFixtures[i];\n\n // all values of the current fixture channels\n let values: FixtureChannelValue[] = [];\n\n const alreadyCalculatedFixture = this.getAlreadyCalculatedFixture(this.fixtureService.cachedFixtures, i);\n\n if (alreadyCalculatedFixture) {\n // only relevant for the preview --> reuse all calculated values\n values = Object.assign([], calculatedFixtures.get(alreadyCalculatedFixture));\n } else {\n // apply the default values\n for (const cachedChannel of cachedFixture.channels) {\n if (cachedChannel.channel) {\n if (cachedChannel.channel.defaultValue) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.defaultValue;\n this.mixChannelValue(values, fixtureChannelValue, 1);\n }\n }\n }\n\n for (const preset of presets) {\n // search for this fixture in the preset and get it's preset-specific index (for chasing effects)\n const fixtureIndex = this.getFixtureIndex(preset.preset, cachedFixture.fixture.uuid, cachedFixture.pixel?.key);\n\n if (fixtureIndex >= 0) {\n // this fixture is also in the preset -> mix the required values (overwrite existing values,\n // if set multiple times)\n const intensityPercentage = this.getPresetIntensity(preset, timeMillis);\n\n this.mixCapabilityValues(preset, cachedFixture, values, intensityPercentage);\n this.mixChannelValues(preset, cachedFixture, values, intensityPercentage);\n this.mixEffects(timeMillis, fixtureIndex, preset, cachedFixture, values, intensityPercentage);\n }\n }\n }\n\n // Store the calculated values for subsequent fixtures on the same DMX address\n calculatedFixtures.set(cachedFixture, values);\n }\n\n return calculatedFixtures;\n }\n\n public fixtureIsSelected(uuid: string, pixelKey: string, presets: PresetRegionScene[]): boolean {\n for (const preset of presets) {\n if (this.presetService.getPresetFixture(preset.preset, uuid, pixelKey)) {\n return true;\n }\n }\n\n return false;\n }\n\n public updateFixtureSetup() {\n this.stageAndPositionsDirty = true;\n this.doUpdateFixtureSetup.next();\n }\n\n private prepareStageMesh(mesh: THREE.Mesh) {\n mesh.receiveShadow = false;\n mesh.castShadow = false;\n }\n\n public updateStage() {\n if (!this.scene) {\n return;\n }\n\n let geometry: any;\n let mesh: any;\n\n // Remove old meshes from the scene\n for (const existingMesh of this.stageMeshes) {\n this.scene.remove(existingMesh);\n existingMesh.geometry.dispose();\n }\n this.stageMeshes = [];\n\n // Ground\n geometry = new THREE.PlaneGeometry(5000, 5000);\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(0, 0, 0);\n mesh.rotateX((Math.PI / 180) * -90);\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Floor\n geometry = new THREE.BoxGeometry(\n this.projectService.project.stageWidthCm,\n this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm\n );\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(0, this.projectService.project.stageFloorHeightCm / 2, 0);\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Pillar front left\n geometry = new THREE.BoxGeometry(\n this.projectService.project.stagePillarWidthCm,\n this.projectService.project.stageHeightCm,\n this.projectService.project.stagePillarWidthCm\n );\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(\n -this.projectService.project.stageWidthCm / 2 + this.projectService.project.stagePillarWidthCm / 2,\n this.projectService.project.stageHeightCm / 2 + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm / 2 - this.projectService.project.stagePillarWidthCm / 2\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Pillar front right\n geometry = new THREE.BoxGeometry(\n this.projectService.project.stagePillarWidthCm,\n this.projectService.project.stageHeightCm,\n this.projectService.project.stagePillarWidthCm\n );\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(\n this.projectService.project.stageWidthCm / 2 - this.projectService.project.stagePillarWidthCm / 2,\n this.projectService.project.stageHeightCm / 2 + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm / 2 - this.projectService.project.stagePillarWidthCm / 2\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Pillar back left\n geometry = new THREE.BoxGeometry(\n this.projectService.project.stagePillarWidthCm,\n this.projectService.project.stageHeightCm,\n this.projectService.project.stagePillarWidthCm\n );\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(\n -this.projectService.project.stageWidthCm / 2 + this.projectService.project.stagePillarWidthCm / 2,\n this.projectService.project.stageHeightCm / 2 + this.projectService.project.stageFloorHeightCm,\n -this.projectService.project.stageDepthCm / 2 + this.projectService.project.stagePillarWidthCm / 2\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Pillar back right\n geometry = new THREE.BoxGeometry(\n this.projectService.project.stagePillarWidthCm,\n this.projectService.project.stageHeightCm,\n this.projectService.project.stagePillarWidthCm\n );\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(\n this.projectService.project.stageWidthCm / 2 - this.projectService.project.stagePillarWidthCm / 2,\n this.projectService.project.stageHeightCm / 2 + this.projectService.project.stageFloorHeightCm,\n -this.projectService.project.stageDepthCm / 2 + this.projectService.project.stagePillarWidthCm / 2\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Ceiling\n geometry = new THREE.BoxGeometry(\n this.projectService.project.stageWidthCm,\n this.projectService.project.stageCeilingHeightCm,\n this.projectService.project.stageDepthCm\n );\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(\n 0,\n this.projectService.project.stageHeightCm +\n this.projectService.project.stageCeilingHeightCm / 2 +\n this.projectService.project.stageFloorHeightCm,\n 0\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n }\n\n ngOnDestroy() {\n this.fixtureMaterial.dispose();\n this.fixtureSelectedMaterial.dispose();\n }\n}\n","import * as THREE from 'three';\nimport { CachedFixture } from '../../models/cached-fixture';\nimport { CachedFixtureCapability } from '../../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../../models/cached-fixture-channel';\nimport { Positioning } from '../../models/fixture';\nimport { FixtureCapabilityColor, FixtureCapabilityType } from '../../models/fixture-capability';\nimport { FixtureChannelValue } from '../../models/fixture-channel-value';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PreviewService } from '../../services/preview.service';\n\nexport abstract class Fixture3d {\n private readonly pointLightMaxIntensity: number = 2;\n private readonly spotLightLightMaxIntensity: number = 10;\n\n protected scene: any;\n\n // group pixels of the same fixture into one group to be able to rotate properly\n protected fixtureGroup: THREE.Group;\n\n public fixture: CachedFixture;\n private fixtureHasDimmer = false;\n private fixtureHasColorWheel = false;\n private fixtureHasColor = false;\n\n private colorRed: number;\n private colorGreen: number;\n private colorBlue: number;\n private dimmer: number = 0;\n\n protected lastSelected: boolean;\n public isSelected = false;\n protected isLoaded = false;\n\n // spotlight\n protected hasSpotLight: boolean = false;\n protected spotLight: THREE.SpotLight;\n protected spotLightBeam: THREE.Mesh;\n protected spotlightGroup: THREE.Object3D;\n protected spotlightMaterial: THREE.ShaderMaterial;\n\n // glowing bulb\n private hasBulb: boolean = false;\n private bulbMaterial: THREE.MeshLambertMaterial;\n private bulbSphereRadius = 3;\n private bulbSphere: THREE.Mesh;\n private blackColor = new THREE.Color(0x000000);\n\n constructor(\n public fixtureService: FixtureService,\n public previewService: PreviewService,\n fixture: CachedFixture,\n scene: any,\n fixtureGroup: THREE.Group,\n hasSpotLight: boolean = false,\n hasBulb: boolean = false\n ) {\n this.fixture = fixture;\n this.scene = scene;\n this.fixtureGroup = fixtureGroup;\n this.hasSpotLight = hasSpotLight;\n this.hasBulb = hasBulb;\n\n // evaluate, various capabilities of this fixture\n for (const cachedChannel of this.fixture.channels) {\n if (cachedChannel.channel) {\n for (const capability of cachedChannel.capabilities) {\n switch (capability.capability.type) {\n case FixtureCapabilityType.Intensity:\n this.fixtureHasDimmer = true;\n break;\n case FixtureCapabilityType.ColorIntensity:\n this.fixtureHasColor = true;\n break;\n }\n }\n\n if (cachedChannel.colorWheel) {\n this.fixtureHasColorWheel = true;\n }\n }\n }\n }\n\n private createSpotlightMaterial() {\n const vertexShader = `\n varying vec3 vNormal;\n varying vec3 vWorldPosition;\n\n void main(){\n vNormal = normalize(normalMatrix * normal);\n\n vec4 worldPosition = modelMatrix * vec4(position, 1.0);\n vWorldPosition = worldPosition.xyz;\n\n gl_Position\t= projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`;\n const fragmentShader = `\n varying vec3 vNormal;\n varying vec3 vWorldPosition;\n\n uniform vec3 lightColor;\n uniform float\topacity;\n uniform vec3 spotPosition;\n uniform float attenuation;\n uniform float\tanglePower;\n\n void main(){\n float intensity;\n\n intensity\t= distance(vWorldPosition, spotPosition) / attenuation;\n intensity\t= 1.0 - clamp(intensity, 0.0, 1.0);\n\n vec3 normal\t= vec3(vNormal.x, vNormal.y, abs(vNormal.z));\n float angleIntensity\t= pow(dot(normal, vec3(0.0, 0.0, 1.0)), anglePower);\n intensity\t= intensity * angleIntensity * opacity;\n\n gl_FragColor\t= vec4(lightColor, intensity);\n }`;\n\n this.spotlightMaterial = new THREE.ShaderMaterial({\n uniforms: {\n attenuation: {\n type: 'f',\n value: 800.0,\n },\n anglePower: {\n type: 'f',\n value: 2,\n },\n spotPosition: {\n type: 'v3',\n value: new THREE.Vector3(0, 0, 0),\n },\n lightColor: {\n type: 'c',\n value: new THREE.Color('white'),\n },\n opacity: {\n type: 'f',\n value: 1.0,\n },\n },\n vertexShader,\n fragmentShader,\n transparent: true,\n depthWrite: false,\n });\n }\n\n protected createObjects() {\n if (this.hasSpotLight) {\n this.createSpotlightMaterial();\n\n this.spotLight = new THREE.SpotLight(0xffffff, 50000);\n this.spotLight.angle = 2;\n this.spotLight.penumbra = 1;\n this.spotLight.decay = 0.01;\n this.spotLight.distance = 0;\n this.spotLight.intensity = 1;\n\n const spotLightTarget = new THREE.Object3D();\n this.spotLight.target = spotLightTarget;\n\n this.spotlightGroup = new THREE.Object3D();\n this.spotlightGroup.add(this.spotLight);\n this.spotlightGroup.add(spotLightTarget);\n this.spotLight.position.set(0, -1.4, 0);\n spotLightTarget.position.set(0, -10, 0);\n this.createSpotLightBeam();\n }\n\n if (this.hasBulb) {\n const bulbGeo = new THREE.SphereGeometry(this.bulbSphereRadius * 1.12, 64, 64);\n this.bulbMaterial = new THREE.MeshLambertMaterial({\n color: 0xff00ff,\n emissive: 0xff00ff,\n });\n\n this.bulbSphere = new THREE.Mesh(bulbGeo, this.bulbMaterial);\n this.fixtureGroup.add(this.bulbSphere);\n }\n }\n\n protected getCapabilityInValue(channel: CachedFixtureChannel, value: number): CachedFixtureCapability {\n for (const capability of channel.capabilities) {\n if (\n capability.capability.dmxRange.length === 0 ||\n (value >= capability.capability.dmxRange[0] && value <= capability.capability.dmxRange[1])\n ) {\n return capability;\n }\n }\n\n return undefined;\n }\n\n updatePosition(object?: THREE.Object3D) {\n // the offset position (e.g. for single beams inside a fixture)\n if (object) {\n object.position.set(\n this.fixture.pixel ? this.fixture.pixel.positionX : 0,\n this.fixture.pixel ? this.fixture.pixel.positionY : 0,\n this.fixture.pixel ? this.fixture.pixel.positionZ : 0\n );\n }\n\n if (this.hasBulb) {\n this.bulbSphere.position.set(\n this.fixture.pixel ? this.fixture.pixel.positionX : 0,\n (this.fixture.pixel ? this.fixture.pixel.positionY : 0) - 15 + this.bulbSphereRadius / 2,\n this.fixture.pixel ? this.fixture.pixel.positionZ : 0\n );\n }\n\n switch (this.fixture.fixture.positioning) {\n case Positioning.topFront: {\n this.fixtureGroup.rotation.x = THREE.MathUtils.degToRad(0);\n this.fixtureGroup.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY - 13, this.fixture.fixture.positionZ);\n break;\n }\n case Positioning.bottomFront: {\n this.fixtureGroup.rotation.x = THREE.MathUtils.degToRad(180);\n this.fixtureGroup.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY + 13, this.fixture.fixture.positionZ);\n break;\n }\n case Positioning.topBack: {\n this.fixtureGroup.rotation.x = THREE.MathUtils.degToRad(0);\n this.fixtureGroup.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY - 13, this.fixture.fixture.positionZ);\n break;\n }\n case Positioning.bottomBack: {\n this.fixtureGroup.rotation.x = THREE.MathUtils.degToRad(180);\n this.fixtureGroup.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY + 13, this.fixture.fixture.positionZ);\n break;\n }\n case Positioning.manual: {\n this.fixtureGroup.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY, this.fixture.fixture.positionZ);\n\n this.fixtureGroup.rotation.x = THREE.MathUtils.degToRad(this.fixture.fixture.rotationX);\n this.fixtureGroup.rotation.y = THREE.MathUtils.degToRad(this.fixture.fixture.rotationY);\n this.fixtureGroup.rotation.z = THREE.MathUtils.degToRad(this.fixture.fixture.rotationZ);\n break;\n }\n }\n }\n\n // Apply the properties of the base fixture to the preview\n updatePreview(channelValues: FixtureChannelValue[], masterDimmerValue: number) {\n // Apply default settings\n if (this.fixtureHasDimmer) {\n this.dimmer = 0;\n } else {\n this.dimmer = 1;\n }\n\n this.colorRed = 255;\n this.colorGreen = 255;\n this.colorBlue = 255;\n\n if (!this.fixtureHasColorWheel && this.fixtureHasColor) {\n this.colorRed = 0;\n this.colorGreen = 0;\n this.colorBlue = 0;\n }\n\n for (const channelValue of channelValues) {\n const channel = this.fixtureService.getChannelByName(this.fixture, channelValue.channelName);\n const capability = this.getCapabilityInValue(channel, channelValue.value);\n\n if (capability) {\n switch (capability.capability.type) {\n case FixtureCapabilityType.Intensity: {\n let valuePercentage: number;\n if (capability.capability.dmxRange.length > 0) {\n valuePercentage =\n (channelValue.value - capability.capability.dmxRange[0]) /\n (capability.capability.dmxRange[1] - capability.capability.dmxRange[0]);\n } else {\n valuePercentage = channelValue.value / channel.maxValue;\n }\n this.dimmer = valuePercentage * masterDimmerValue;\n break;\n }\n case FixtureCapabilityType.ColorIntensity: {\n const valuePercentage = (255 * channelValue.value) / channel.maxValue;\n switch (capability.capability.color) {\n case FixtureCapabilityColor.Red:\n // Round needed for threejs\n this.colorRed = Math.round(valuePercentage);\n break;\n case FixtureCapabilityColor.Green:\n // Round needed for threejs\n this.colorGreen = Math.round(valuePercentage);\n break;\n case FixtureCapabilityColor.Blue:\n // Round needed for threejs\n this.colorBlue = Math.round(valuePercentage);\n break;\n }\n break;\n }\n case FixtureCapabilityType.WheelSlot: {\n const mixedColor = this.fixtureService.getMixedWheelSlotColor(capability.wheel, capability.capability.slotNumber);\n if (mixedColor) {\n this.colorRed = Math.round(mixedColor.red);\n this.colorGreen = Math.round(mixedColor.green);\n this.colorBlue = Math.round(mixedColor.blue);\n }\n break;\n }\n }\n }\n }\n\n // Apply the colors and intensities\n // Apply the dimmer value\n // Take the color into account for the beam (don't show a black beam)\n const color = new THREE.Color('rgb(' + this.colorRed + ', ' + this.colorGreen + ', ' + this.colorBlue + ')');\n const intensityColor = Math.max(this.colorRed, this.colorGreen, this.colorBlue);\n\n if (this.hasSpotLight) {\n this.spotLight.color = color;\n this.spotLightBeam.material.uniforms.lightColor.value = color;\n\n this.spotLightBeam.material.uniforms.opacity.value = Math.min(intensityColor, this.dimmer);\n this.spotLight.intensity = this.spotLightLightMaxIntensity * this.dimmer;\n this.spotLightBeam.material.uniforms.spotPosition.value = this.spotlightGroup.position;\n }\n\n if (this.hasBulb) {\n // Normalize 0–255 → 0–1\n const intensity = Math.max(this.colorRed, this.colorGreen, this.colorBlue) / 255;\n\n this.bulbMaterial.color.copy(color.clone().lerp(this.blackColor, intensity));\n this.bulbMaterial.emissive.copy(color.clone().lerp(this.blackColor, intensity));\n }\n }\n\n protected createSpotLightBeam() {\n // TODO set the correct angle from the profile\n const beamAngleDegrees = 14;\n const geometry = new THREE.CylinderGeometry(0.1, beamAngleDegrees * 1.2, 100, 64, 20, false);\n geometry.applyMatrix4(new THREE.Matrix4().makeTranslation(0, -geometry.parameters.height / 2, 0));\n geometry.applyMatrix4(new THREE.Matrix4().makeRotationX(-Math.PI / 2));\n\n this.spotLightBeam = new THREE.Mesh(geometry, this.spotlightMaterial);\n this.spotLightBeam.position.set(0, -0.02, 0);\n this.spotLightBeam.receiveShadow = false;\n this.spotLightBeam.castShadow = false;\n\n this.spotlightGroup.add(this.spotLightBeam);\n this.spotLightBeam.rotation.x = Math.PI / 2;\n }\n\n destroy() {\n if (this.hasSpotLight) {\n this.spotlightMaterial.dispose();\n }\n if (this.hasBulb) {\n this.bulbMaterial.dispose();\n }\n }\n}\n","import { forkJoin } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport * as THREE from 'three';\nimport { Mesh } from 'three';\nimport { CachedFixture } from '../../models/cached-fixture';\nimport { FixtureChannelValue } from '../../models/fixture-channel-value';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PreviewMeshService } from '../../services/preview-mesh.service';\nimport { Fixture3d } from './fixture-3d';\nimport { PreviewService } from '../../services/preview.service';\n\nexport class ColorChanger3d extends Fixture3d {\n private mesh: THREE.Mesh;\n private objectGroup: THREE.Object3D = new THREE.Object3D();\n private destroyed = false;\n\n constructor(\n public fixtureService: FixtureService,\n public previewService: PreviewService,\n previewMeshService: PreviewMeshService,\n fixture: CachedFixture,\n scene: any,\n fixtureGroup: THREE.Group,\n hasSpotLight: boolean = true,\n hasBulb: boolean = false\n ) {\n super(fixtureService, previewService, fixture, scene, fixtureGroup, hasSpotLight, hasBulb);\n\n forkJoin([previewMeshService.getMesh('color-changer')])\n .pipe(\n map(([colorChanger]) => {\n if (this.destroyed) {\n return;\n }\n\n this.mesh = colorChanger;\n this.createObjects();\n })\n )\n .subscribe();\n }\n\n protected createObjects() {\n if (this.destroyed) {\n return;\n }\n\n super.createObjects();\n\n this.mesh.material = this.previewService.fixtureMaterial;\n\n if (this.hasSpotLight) {\n this.objectGroup.add(this.spotlightGroup);\n }\n this.objectGroup.add(this.mesh);\n this.objectGroup.scale.multiplyScalar(9);\n this.fixtureGroup.add(this.objectGroup);\n\n this.isLoaded = true;\n this.updatePosition();\n }\n\n override updatePosition() {\n if (!this.isLoaded) {\n return;\n }\n\n super.updatePosition(this.objectGroup);\n }\n\n override updatePreview(channelValues: FixtureChannelValue[], masterDimmerValue: number): void {\n if (!this.isLoaded) {\n return;\n }\n\n super.updatePreview(channelValues, masterDimmerValue);\n\n // Update the material\n if (this.lastSelected !== this.isSelected) {\n if (this.isSelected) {\n for (const child of this.mesh.children) {\n (child as Mesh).material = this.previewService.fixtureSelectedMaterial;\n }\n } else {\n for (const child of this.mesh.children) {\n (child as Mesh).material = this.previewService.fixtureMaterial;\n }\n }\n\n this.lastSelected = this.isSelected;\n }\n }\n\n destroy() {\n this.destroyed = true;\n\n if (this.objectGroup.parent) {\n this.objectGroup.parent.remove(this.objectGroup);\n }\n }\n}\n","import { forkJoin } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport * as THREE from 'three';\nimport { CachedFixture } from '../../models/cached-fixture';\nimport { FixtureCapabilityType } from '../../models/fixture-capability';\nimport { FixtureChannelValue } from '../../models/fixture-channel-value';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PreviewMeshService } from '../../services/preview-mesh.service';\nimport { Fixture3d } from './fixture-3d';\nimport { PreviewService } from '../../services/preview.service';\n\nexport class MovingHead3d extends Fixture3d {\n private pan: number;\n private tilt: number;\n\n private socket: THREE.Mesh;\n private arm: THREE.Mesh;\n private head: THREE.Mesh;\n\n private headGroup: THREE.Object3D = new THREE.Object3D();\n private armGroup: THREE.Object3D = new THREE.Object3D();\n private objectGroup: THREE.Object3D = new THREE.Object3D();\n\n private lastBeamAngleDegrees: number;\n private destroyed = false;\n\n constructor(\n public fixtureService: FixtureService,\n public previewService: PreviewService,\n previewMeshService: PreviewMeshService,\n fixture: CachedFixture,\n scene: any,\n fixtureGroup: THREE.Group\n ) {\n super(fixtureService, previewService, fixture, scene, fixtureGroup, true, false);\n\n forkJoin([\n previewMeshService.getMesh('moving_head_socket'),\n previewMeshService.getMesh('moving_head_arm'),\n previewMeshService.getMesh('moving_head_head'),\n ])\n .pipe(\n map(([socket, arm, head]) => {\n if (this.destroyed) {\n return;\n }\n\n this.socket = socket;\n this.arm = arm;\n this.head = head;\n\n this.createObjects();\n })\n )\n .subscribe();\n }\n\n protected createObjects() {\n if (this.destroyed) {\n return;\n }\n\n super.createObjects();\n\n this.socket.material = this.previewService.fixtureMaterial;\n this.arm.material = this.previewService.fixtureMaterial;\n this.head.material = this.previewService.fixtureMaterial;\n\n // Add the head\n this.head.scale.multiplyScalar(0.9);\n this.head.position.set(-0.1, 0, 0);\n const headPivotGroup = new THREE.Object3D();\n headPivotGroup.add(this.head);\n this.headGroup.add(headPivotGroup);\n\n this.headGroup.add(this.spotlightGroup);\n\n // Add the arm\n this.armGroup.add(this.headGroup);\n this.headGroup.position.set(0, -0.6, 0);\n this.armGroup.add(this.arm);\n\n // Add the socket\n this.objectGroup.add(this.armGroup);\n this.objectGroup.add(this.socket);\n this.socket.position.set(0, 1.2, 0);\n\n // A moving head has about 32 cm in width\n this.objectGroup.scale.multiplyScalar(9);\n\n this.fixtureGroup.add(this.objectGroup);\n\n this.isLoaded = true;\n this.updatePosition();\n }\n\n override updatePosition() {\n if (!this.isLoaded) {\n return;\n }\n\n super.updatePosition(this.objectGroup);\n }\n\n override updatePreview(channelValues: FixtureChannelValue[], masterDimmerValue: number): void {\n if (!this.isLoaded) {\n return;\n }\n\n super.updatePreview(channelValues, masterDimmerValue);\n\n // Apply default settings\n let panStart = 0;\n let panEnd = 255;\n\n let tiltStart = 0;\n let tiltEnd = 255;\n\n this.pan = 0;\n this.tilt = 0;\n\n // Apply the known property values\n for (const channelValue of channelValues) {\n const channel = this.fixtureService.getChannelByName(this.fixture, channelValue.channelName);\n const capability = this.getCapabilityInValue(channel, channelValue.value);\n if (capability) {\n switch (capability.capability.type) {\n case FixtureCapabilityType.Pan: {\n panStart = this.fixtureService.getRotationAngleDeg(capability.capability.angleStart) || 0;\n panEnd = this.fixtureService.getRotationAngleDeg(capability.capability.angleEnd) || 540;\n this.pan = channelValue.value / channel.maxValue;\n break;\n }\n case FixtureCapabilityType.Tilt: {\n tiltStart = this.fixtureService.getRotationAngleDeg(capability.capability.angleStart) || 0;\n tiltEnd = this.fixtureService.getRotationAngleDeg(capability.capability.angleEnd) || 2700;\n this.tilt = channelValue.value / channel.maxValue;\n break;\n }\n }\n }\n }\n\n // calculate the y/x rotation in radiants based on pan/tilt (0-1) respecting the max pan/tilt\n this.armGroup.rotation.y = THREE.MathUtils.degToRad(panEnd * this.pan + panStart) - THREE.MathUtils.degToRad(panEnd / 2);\n this.headGroup.rotation.x = THREE.MathUtils.degToRad(tiltEnd * this.tilt + tiltStart) - THREE.MathUtils.degToRad(tiltEnd / 2);\n\n // Update the angle only on change, because it's expensive\n // TODO update the correct angle from the profile\n const beamAngleDregrees = 14;\n if (this.lastBeamAngleDegrees !== beamAngleDregrees) {\n this.spotLight.angle = THREE.MathUtils.degToRad(beamAngleDregrees);\n this.lastBeamAngleDegrees = beamAngleDregrees;\n }\n\n // Update the material\n if (this.lastSelected !== this.isSelected) {\n if (this.isSelected) {\n this.socket.material = this.previewService.fixtureSelectedMaterial;\n this.arm.material = this.previewService.fixtureSelectedMaterial;\n this.head.material = this.previewService.fixtureSelectedMaterial;\n } else {\n this.socket.material = this.previewService.fixtureMaterial;\n this.arm.material = this.previewService.fixtureMaterial;\n this.head.material = this.previewService.fixtureMaterial;\n }\n\n this.lastSelected = this.isSelected;\n }\n }\n\n destroy() {\n this.destroyed = true;\n\n if (this.objectGroup.parent) {\n this.objectGroup.parent.remove(this.objectGroup);\n }\n }\n}\n","import { AfterViewInit, Component, ElementRef, HostListener, NgZone, ViewChild } from '@angular/core';\nimport * as THREE from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport { FixtureCategory } from '../models/fixture-profile';\nimport { FixtureService } from '../services/fixture.service';\nimport { PreviewMeshService } from '../services/preview-mesh.service';\nimport { PreviewService } from '../services/preview.service';\nimport { ProjectService } from '../services/project.service';\nimport { TimelineService } from '../services/timeline.service';\nimport { Positioning } from './../models/fixture';\nimport { AnimationService } from './../services/animation.service';\nimport { ColorChanger3d } from './models/color-changer-3d';\nimport { Fixture3d } from './models/fixture-3d';\nimport { MovingHead3d } from './models/moving-head-3d';\n\n@Component({\n selector: 'lib-app-preview',\n templateUrl: './preview.component.html',\n styleUrls: ['./preview.component.css'],\n standalone: false,\n})\nexport class PreviewComponent implements AfterViewInit {\n private renderer: THREE.WebGLRenderer;\n private scene: THREE.Scene = new THREE.Scene();\n private camera: THREE.PerspectiveCamera;\n public controls: OrbitControls;\n\n private fixtures3d: Fixture3d[] = [];\n\n // grouping fixture (pixels) into the same fixture to being able to properly rotate around the center\n private fixtureGroups = new Map<string, THREE.Group>();\n\n @ViewChild('canvas')\n private canvasRef: ElementRef;\n\n constructor(\n private fixtureService: FixtureService,\n private previewMeshService: PreviewMeshService,\n private animationService: AnimationService,\n private previewService: PreviewService,\n private timelineService: TimelineService,\n private projectService: ProjectService,\n private ngZone: NgZone\n ) {\n this.previewService.doUpdateFixtureSetup.subscribe(() => {\n this.syncFixtures();\n });\n this.syncFixtures();\n }\n\n // synchronize the 3d-fixtures to the project fixtures\n private syncFixtures() {\n if (!this.previewService.scene) {\n return;\n }\n\n // remove all fixtures\n for (const fixture3d of this.fixtures3d) {\n fixture3d.destroy();\n }\n this.fixtures3d = [];\n\n // destroy all groups\n for (const fixtureGroup of this.fixtureGroups.values()) {\n this.scene.remove(fixtureGroup);\n }\n this.fixtureGroups.clear();\n\n // add all fixtures from the project\n const fixture3dMap = {\n [FixtureCategory['Moving Head']]: MovingHead3d,\n [FixtureCategory['Color Changer']]: ColorChanger3d,\n [FixtureCategory['Blinder']]: ColorChanger3d,\n };\n\n // TODO group fixtures of the same UUID but with differen pixels into the same fixture to ensure\n // rotation is aligned\n for (const fixture of this.fixtureService.cachedFixtures) {\n const category = fixture.profile.categories.find((c) => fixture3dMap[c]);\n const uuid = fixture.fixture.uuid;\n\n let fixtureGroup = this.fixtureGroups.get(uuid);\n\n if (!fixtureGroup) {\n fixtureGroup = new THREE.Group();\n fixtureGroup.name = `fixture-${uuid}`;\n\n this.scene.add(fixtureGroup);\n this.fixtureGroups.set(uuid, fixtureGroup);\n }\n\n if (category) {\n const Fixture3dClass = fixture3dMap[category];\n\n if (Fixture3dClass === ColorChanger3d) {\n const isPixelBar = fixture.profile.categories?.[0] === FixtureCategory['Pixel Bar'];\n\n const fixture3d = new ColorChanger3d(\n this.fixtureService,\n this.previewService,\n this.previewMeshService,\n fixture,\n this.scene,\n fixtureGroup,\n !isPixelBar,\n isPixelBar\n );\n\n this.fixtures3d.push(fixture3d);\n } else {\n const fixture3d = new Fixture3dClass(\n this.fixtureService,\n this.previewService,\n this.previewMeshService,\n fixture,\n this.scene,\n fixtureGroup\n );\n\n this.fixtures3d.push(fixture3d);\n }\n } else {\n console.warn(`No supported category found for fixture`);\n }\n }\n }\n\n private get canvas(): HTMLCanvasElement {\n return this.canvasRef.nativeElement;\n }\n\n private render() {\n this.renderer.render(this.scene, this.camera);\n }\n\n private updateStagePosition(\n positioning: Positioning,\n xMin: number,\n xMax: number,\n yMin: number,\n yMax: number,\n zMin: number,\n zMax: number\n ) {\n let positionCount = 0; // number of fixtures in the same position (only counting one pixel)\n let positionIndex = 0;\n let lastFixtureUuid = undefined; // skip new positioning if it's just a new pixel inside the same fixture\n\n this.projectService.project.presetFixtures.forEach((element, index) => {\n const fixture = this.fixtureService.getFixtureByUuid(element.fixtureUuid);\n if (fixture.positioning === positioning && element.fixtureUuid != lastFixtureUuid) {\n positionCount++;\n }\n lastFixtureUuid = element.fixtureUuid;\n });\n\n lastFixtureUuid = undefined;\n this.projectService.project.presetFixtures.forEach((element, index) => {\n const fixture = this.fixtureService.getFixtureByUuid(element.fixtureUuid);\n\n if (fixture.positioning === positioning) {\n if (element.fixtureUuid != lastFixtureUuid) {\n positionIndex++;\n }\n\n fixture.positionX = xMin + ((xMax - xMin) / (positionCount + 1)) * positionIndex;\n fixture.positionY = yMin + ((yMax - yMin) / (positionCount + 1)) * positionIndex;\n fixture.positionZ = zMin + ((zMax - zMin) / (positionCount + 1)) * positionIndex;\n }\n lastFixtureUuid = element.fixtureUuid;\n });\n }\n\n private animate(timeMillis: number) {\n if (this.timelineService.playState === 'playing') {\n // Overwrite the current time with the playing time, if we're in playback mode\n timeMillis = this.timelineService.waveSurfer.getCurrentTime() * 1000;\n }\n\n this.animationService.timeMillis = timeMillis;\n\n // Update the controls\n if (this.controls) {\n this.controls.update();\n }\n\n // Update the positions\n this.updateStagePosition(\n Positioning.topFront,\n -this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm / 2 - 70,\n this.projectService.project.stageDepthCm / 2 - 70\n );\n this.updateStagePosition(\n Positioning.bottomFront,\n -this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm / 2 - 70,\n this.projectService.project.stageDepthCm / 2 - 70\n );\n this.updateStagePosition(\n Positioning.topBack,\n -this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm,\n -this.projectService.project.stageDepthCm / 2 + 70,\n -this.projectService.project.stageDepthCm / 2 + 70\n );\n this.updateStagePosition(\n Positioning.bottomBack,\n -this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageFloorHeightCm,\n -this.projectService.project.stageDepthCm / 2 + 70,\n -this.projectService.project.stageDepthCm / 2 + 70\n );\n\n // Update all fixtures and apply the preview properties, if available\n // TODO Update the fixtures only e.g. 40 times per second according to the \"real\" refresh rate of the DMX interface?\n const presets = this.previewService.getPresets(timeMillis);\n\n const calculatedFixtures = this.previewService.getChannelValues(timeMillis, presets);\n\n for (const fixture3d of this.fixtures3d) {\n // Update the fixture positions\n if (this.previewService.stageAndPositionsDirty) {\n fixture3d.updatePosition();\n }\n\n // Update the fixture properties\n fixture3d.updatePreview(calculatedFixtures.get(fixture3d.fixture) || [], this.projectService.project.masterDimmerValue);\n\n // Select the fixture, if required\n if (this.fixtureService.settingsSelection) {\n fixture3d.isSelected = this.fixtureService.settingsFixtureIsSelected(fixture3d.fixture.fixture);\n } else {\n fixture3d.isSelected = this.previewService.fixtureIsSelected(fixture3d.fixture.fixture.uuid, fixture3d.fixture.pixel?.key, presets);\n }\n }\n\n // Render the scene\n this.render();\n\n this.previewService.stageAndPositionsDirty = false;\n\n requestAnimationFrame(this.animate.bind(this));\n }\n\n private getAspectRatio(): number {\n const height = this.canvas.clientHeight;\n\n if (height === 0) {\n return 0;\n }\n\n return this.canvas.clientWidth / this.canvas.clientHeight;\n }\n\n @HostListener('window:resize')\n public onResize() {\n this.camera.aspect = this.getAspectRatio();\n this.camera.updateProjectionMatrix();\n this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);\n }\n\n private setupRenderer() {\n this.renderer = new THREE.WebGLRenderer({ antialias: true });\n this.canvas.appendChild(this.renderer.domElement);\n this.renderer.setPixelRatio(devicePixelRatio);\n this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);\n // this.renderer.shadowMap.enabled = true;\n // this.renderer.gammaInput = true;\n // this.renderer.gammaOutput = true;\n }\n\n private setupCamera() {\n this.camera = new THREE.PerspectiveCamera(35, window.innerWidth / window.innerHeight, 1, 10000);\n this.camera.position.set(-600, 80, 700);\n }\n\n private setupControls() {\n this.controls = new OrbitControls(this.camera, this.renderer.domElement);\n this.controls.enableKeys = false;\n this.controls.rotateSpeed = 0.05;\n this.controls.zoomSpeed = 1.2;\n this.controls.enableDamping = true;\n this.controls.dampingFactor = 0.25;\n this.controls.screenSpacePanning = false;\n this.controls.minDistance = 700;\n // this.controls.zoom = 1000;\n this.controls.maxDistance = 2000;\n this.controls.maxPolarAngle = Math.PI / 2;\n this.controls.target = new THREE.Vector3(0, 200, 0);\n // this.controls.rotation = 100;\n }\n\n private setupScene() {\n // this.scene.background = new THREE.Color(0x080808);\n // this.scene.fog\t= new THREE.FogExp2( 0x000000, 0.1 );\n\n this.previewService.scene = this.scene;\n\n // Add a little bit of ambient light\n const ambient = new THREE.AmbientLight(0xffffff, 1.8);\n this.scene.add(ambient);\n\n // Create the stage dimensions\n this.previewService.updateStage();\n\n const lights = [];\n lights[0] = new THREE.PointLight(0xffffff, 2, 0, 0.1);\n lights[1] = new THREE.PointLight(0xffffff, 2, 0, 0.1);\n lights[2] = new THREE.PointLight(0xffffff, 2, 0, 0.1);\n\n lights[0].position.set(0, 2000, 0);\n lights[1].position.set(1000, 2000, 1000);\n lights[2].position.set(-1000, -2000, -1000);\n\n lights[0].castShadow = true;\n lights[1].castShadow = true;\n lights[2].castShadow = true;\n\n this.scene.add(lights[0]);\n this.scene.add(lights[1]);\n this.scene.add(lights[2]);\n\n this.previewService.updateFixtureSetup();\n }\n\n ngAfterViewInit(): void {\n this.setupRenderer();\n this.setupCamera();\n this.setupControls();\n this.setupScene();\n\n this.onResize();\n\n // Avoid triggering change detection with each animation frame -> run outside zone\n this.ngZone.runOutsideAngular(() => {\n this.animate(null);\n });\n }\n}\n","<div class=\"h-100\" #canvas style=\"overflow: hidden\"></div>\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-wait-dialog',\n templateUrl: './wait-dialog.component.html',\n styleUrls: ['./wait-dialog.component.css'],\n standalone: false,\n})\nexport class WaitDialogComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","<div class=\"card-modal\">\n <div class=\"card\">\n <div class=\"card-body\">\n <p class=\"card-text\">{{ 'designer.misc.please-wait' | translate }}</p>\n <div class=\"progress\">\n <div\n class=\"progress-bar progress-bar-striped progress-bar-animated\"\n role=\"progressbar\"\n style=\"width: 100%\"\n aria-valuenow=\"10\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n ></div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'lib-app-warning-dialog',\n templateUrl: './warning-dialog.component.html',\n styleUrls: ['./warning-dialog.component.scss'],\n standalone: false,\n})\nexport class WarningDialogComponent implements OnInit {\n onClose: Subject<number>;\n\n message: string;\n\n constructor(private bsModalRef: BsModalRef) {}\n\n ngOnInit() {\n this.onClose = new Subject();\n }\n\n public ok(): void {\n this.onClose.next(1);\n this.bsModalRef.hide();\n }\n\n public cancel(): void {\n this.onClose.next(2);\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"card-modal\">\n <div class=\"card\">\n <div class=\"card-header\">\n {{ 'designer.misc.warning' | translate }}\n </div>\n\n <div class=\"card-body\">\n <div class=\"row\">\n <div class=\"col-auto\">\n <h2 class=\"mb-0\">\n <i class=\"fa fa-exclamation-triangle text-primary\" aria-hidden=\"true\"></i>\n </h2>\n </div>\n <div class=\"col pl-0\">\n <p class=\"mb-0\">{{ message }}</p>\n </div>\n </div>\n </div>\n\n <div class=\"card-footer\">\n <div class=\"d-flex float-right\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok(); (false)\">\n {{ 'designer.misc.ok' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { WarningDialogComponent } from '../warning-dialog/warning-dialog.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WarningDialogService {\n constructor(private modalService: BsModalService, private translateService: TranslateService) {}\n\n // Show a warning dialog and return true, when the user clicked OK\n show(message: string): Observable<boolean> {\n return this.translateService.get(message).pipe(\n map((result) => {\n return result;\n }),\n mergeMap((result) => {\n const fileDialog = this.modalService.show(WarningDialogComponent, { keyboard: false, ignoreBackdropClick: true });\n (fileDialog.content as WarningDialogComponent).message = result;\n\n return (fileDialog.content as WarningDialogComponent).onClose.pipe(\n map((warningResult) => {\n if (warningResult === 1) {\n return true;\n }\n\n return false;\n })\n );\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable } from 'rxjs';\nimport { finalize, map } from 'rxjs/operators';\nimport { Preset } from '../models/preset';\nimport { Project } from '../models/project';\nimport { WaitDialogComponent } from '../wait-dialog/wait-dialog.component';\nimport { FixtureService } from './fixture.service';\nimport { PresetService } from './preset.service';\nimport { PreviewService } from './preview.service';\nimport { ProjectService } from './project.service';\nimport { SceneService } from './scene.service';\nimport { TimelineService } from './timeline.service';\nimport { UuidService } from './uuid.service';\nimport { PresetFixture } from '../models/preset-fixture';\nimport { WarningDialogService } from './warning-dialog.service';\nimport { LivePreviewService } from './live-preview.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProjectLoadService {\n constructor(\n private projectService: ProjectService,\n private previewService: PreviewService,\n private fixtureService: FixtureService,\n private presetService: PresetService,\n private sceneService: SceneService,\n private modalService: BsModalService,\n private uuidService: UuidService,\n private timelineService: TimelineService,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private warningDialogService: WarningDialogService,\n private livePreviewService: LivePreviewService\n ) {}\n\n private migrateToVersion2() {\n for (let fixture of this.projectService.project.fixtures) {\n if (this.fixtureService.fixtureHasGeneralChannel(fixture)) {\n const projectFixture = new PresetFixture();\n projectFixture.fixtureUuid = fixture.uuid;\n this.projectService.project.presetFixtures.push(projectFixture);\n }\n\n const pixels = this.fixtureService.fixtureGetUniquePixels(fixture);\n\n for (let pixelKey of pixels) {\n const projectFixture = new PresetFixture();\n projectFixture.fixtureUuid = fixture.uuid;\n projectFixture.pixelKey = pixelKey.key;\n this.projectService.project.presetFixtures.push(projectFixture);\n }\n }\n for (let preset of this.projectService.project.presets) {\n for (let fixtureUuid of preset.fixtureUuids) {\n const fixture = this.fixtureService.getFixtureByUuid(fixtureUuid);\n\n if (this.fixtureService.fixtureHasGeneralChannel(fixture)) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = fixtureUuid;\n preset.fixtures.push(presetFixture);\n }\n\n const pixels = this.fixtureService.fixtureGetUniquePixels(fixture);\n\n for (let pixel of pixels) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = fixtureUuid;\n presetFixture.pixelKey = pixel.key;\n preset.fixtures.push(presetFixture);\n }\n }\n preset.fixtureUuids = undefined;\n }\n this.projectService.project.version = 2;\n }\n\n private migrateFromOldProject() {\n let migrated = false;\n\n if (!this.projectService.project.version) {\n // Migrate from version 1\n this.migrateToVersion2();\n migrated = true;\n }\n\n if (migrated) {\n this.warningDialogService.show('designer.project.migrated').subscribe();\n }\n }\n\n private afterLoad() {\n this.migrateFromOldProject();\n this.fixtureService.updateCachedFixtures();\n this.presetService.removeDeletedFixtures();\n this.previewService.updateFixtureSetup();\n this.presetService.fixtureSelectionChanged.next();\n this.presetService.autoOpenFirstEffect();\n this.previewService.updateStage();\n this.livePreviewService.previewLive();\n this.sceneService.selectPresetFromSelectedScene();\n }\n\n private selectScenesPresetComposition() {\n this.presetService.selectedPreset = this.presetService.getPresetByUuid(this.projectService.project.selectedPresetUuid);\n this.sceneService.selectedScenes = [];\n if (this.projectService.project.selectedSceneUuids) {\n for (const uuid of this.projectService.project.selectedSceneUuids) {\n this.sceneService.selectedScenes.push(this.sceneService.getSceneByUuid(uuid));\n }\n }\n this.timelineService.selectedComposition = undefined;\n this.timelineService.selectedCompositionIndex = undefined;\n this.timelineService.destroyWaveSurfer();\n for (let i = 0; i < this.projectService.project.compositions.length; i++) {\n if (this.projectService.project.compositions[i].uuid === this.projectService.project.selectedCompositionUuid) {\n this.timelineService.selectCompositionIndex(i);\n break;\n }\n }\n }\n\n load(id: number, name: string, shareToken?: string): Observable<void> {\n const ref = this.modalService.show(WaitDialogComponent, { keyboard: false, ignoreBackdropClick: true });\n\n return this.projectService.getProject(id, name, shareToken).pipe(\n map((project) => {\n if (project.version > this.projectService.currentProjectVersion) {\n throw new Error(\n 'The project version ' +\n project.version +\n ' is created with a newer version of the designer. Please update your Rocket Show version to open this project.'\n );\n }\n this.projectService.project = project;\n this.selectScenesPresetComposition();\n this.afterLoad();\n\n const queryParams: Params = {\n id,\n token: project.shareToken,\n };\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams,\n queryParamsHandling: 'merge', // remove to replace all query params by provided\n });\n }),\n finalize(() => {\n // hide the modal again because of:\n // https://github.com/valor-software/ngx-bootstrap/issues/3711\n setTimeout(() => {\n ref.hide();\n }, 250);\n setTimeout(() => {\n ref.hide();\n }, 500);\n setTimeout(() => {\n ref.hide();\n }, 1500);\n })\n );\n }\n\n new() {\n // create an empty new project\n const project = new Project();\n project.uuid = this.uuidService.getUuid();\n project.version = this.projectService.currentProjectVersion;\n this.projectService.project = project;\n this.projectService.project.shareToken = this.uuidService.getUuid();\n\n // Add a default scene and preset\n const preset = new Preset();\n preset.uuid = this.uuidService.getUuid();\n preset.name = 'New Preset';\n this.projectService.project.presets.push(preset);\n this.presetService.selectPreset(0);\n\n this.sceneService.addScene();\n this.projectService.project.scenes[0].presetUuids.push(preset.uuid);\n\n this.projectService.project.previewPreset = true;\n\n this.sceneService.selectedScenes = [this.projectService.project.scenes[0]];\n this.presetService.selectedPreset = this.projectService.project.presets[0];\n\n this.timelineService.selectedComposition = undefined;\n this.timelineService.selectedCompositionIndex = undefined;\n this.timelineService.destroyWaveSurfer();\n\n this.afterLoad();\n\n const queryParams: Params = {\n id: '',\n token: '',\n };\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams,\n queryParamsHandling: 'merge', // remove to replace all query params by provided\n });\n }\n\n template() {\n // load the template project with id 1\n this.load(1, null).subscribe(() => {\n this.projectService.project.id = undefined;\n });\n }\n\n import(data: string) {\n // import a project from a string\n const project = new Project(JSON.parse(data));\n project.id = undefined;\n this.projectService.project = project;\n\n this.selectScenesPresetComposition();\n this.afterLoad();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'sort',\n standalone: false,\n})\nexport class ArraySortPipe implements PipeTransform {\n transform(array: any, field: string): any[] {\n if (!Array.isArray(array)) {\n return;\n }\n array.sort((a: any, b: any) => {\n if (a[field] < b[field]) {\n return -1;\n } else if (a[field] > b[field]) {\n return 1;\n } else {\n return 0;\n }\n });\n return array;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { map } from 'rxjs/operators';\nimport { Project } from '../../models/project';\nimport { ConfigService } from '../../services/config.service';\nimport { ProjectLoadService } from '../../services/project-load.service';\nimport { ProjectService } from '../../services/project.service';\nimport { UserService } from '../../services/user.service';\nimport { WarningDialogService } from '../../services/warning-dialog.service';\n\n@Component({\n selector: 'lib-project-browser',\n templateUrl: './project-browser.component.html',\n styleUrls: ['./project-browser.component.css'],\n standalone: false,\n})\nexport class ProjectBrowserComponent implements OnInit {\n projects: Project[] = [];\n loading = true;\n\n constructor(\n private bsModalRef: BsModalRef,\n private projectService: ProjectService,\n private projectLoadService: ProjectLoadService,\n private userService: UserService,\n private warningDialogService: WarningDialogService,\n private configService: ConfigService\n ) {\n this.loadProjects();\n }\n\n private loadProjects() {\n this.projectService.getAllProjects().subscribe((projects) => {\n this.projects = projects;\n this.loading = false;\n });\n }\n\n ngOnInit() {}\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n openProject(project: Project) {\n this.bsModalRef.hide();\n this.projectLoadService.load(project.id, project.name).subscribe(() => {\n this.userService.setAutoLoadProject(project);\n });\n }\n\n deleteProject(project: Project) {\n this.warningDialogService\n .show('designer.project.delete-warning')\n .pipe(\n map((result) => {\n if (result) {\n this.projectService.deleteProject(project).subscribe((projects) => {\n this.loadProjects();\n });\n }\n })\n )\n .subscribe();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.project.browser-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel(); (false)\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body p-0\">\n @if (loading) {\n <div class=\"m-2 d-flex w-100\">\n <p class=\"w-100\" style=\"text-align: center\"><i class=\"fa fa-spinner fa-pulse fa-fw\"></i></p>\n </div>\n } @if (projects.length == 0 && !loading) {\n <div class=\"m-2 d-flex w-100\">\n <p class=\"w-100\" style=\"text-align: center\">\n {{ 'designer.project.browser-empty' | translate }}\n </p>\n </div>\n } @if (!loading) {\n <div class=\"list-group list-group-flush\" style=\"max-height: 500px; overflow-y: scroll\">\n @for (project of projects | sort: 'name'; track project) {\n <div class=\"list-group-item\">\n <div class=\"row\">\n <div class=\"col-auto my-auto flex-grow\">\n <a href=\"#\" (click)=\"openProject(project); (false)\">\n <p class=\"mb-0 w-100\">{{ project.name }}</p>\n </a>\n </div>\n <div class=\"my-auto\">\n <div class=\"col-auto my-auto pl-0 text-danger float-right\" style=\"cursor: pointer\" (click)=\"deleteProject(project); (false)\">\n <i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button (click)=\"cancel(); (false)\" type=\"button\" class=\"btn btn-primary\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { DropzoneConfigInterface } from 'ngx-dropzone-wrapper';\nimport { ToastrService } from 'ngx-toastr';\nimport { map } from 'rxjs/operators';\nimport { ProjectLoadService } from '../../services/project-load.service';\n\n@Component({\n selector: 'lib-project-import',\n templateUrl: './project-import.component.html',\n styleUrls: ['./project-import.component.css'],\n standalone: false,\n})\nexport class ProjectImportComponent implements OnInit {\n public dropzoneConfig: DropzoneConfigInterface;\n public uploadMessage: string;\n\n constructor(\n public bsModalRef: BsModalRef,\n private translateService: TranslateService,\n private toastrService: ToastrService,\n private projectLoadService: ProjectLoadService\n ) {}\n\n ngOnInit() {\n this.dropzoneConfig = {\n url: 'dummy',\n addRemoveLinks: false,\n maxFilesize: 10 /* 10 MB */,\n acceptedFiles: '.rsd',\n timeout: 0,\n accept: (file: any, done: any) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', (event: any) => {\n this.projectLoadService.import(event.target.result);\n done('noerr');\n this.bsModalRef.hide();\n });\n reader.readAsText(file);\n },\n previewTemplate: `\n <div style=\"display: none;\">\n <!-- No preview -->\n </div>\n `,\n };\n\n this.translateService\n .get('designer.misc.dropzone-message')\n .pipe(\n map((result) => {\n this.uploadMessage = '<h3 class=\"mb-0\"><i class=\"fa fa-cloud-upload\"></i></h3>' + result;\n })\n )\n .subscribe();\n }\n\n public onUploadError(args: any) {\n if (args[1] === 'noerr') {\n // this error is set in the accept event listener -> everything OK\n return;\n }\n\n const msg = 'designer.misc.toast-upload-error';\n const title = 'designer.misc.toast-upload-error-title';\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg] + args[1], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });\n });\n }\n\n ok() {\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.project.import-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <!-- Dropzone -->\n <dropzone [config]=\"dropzoneConfig\" [useDropzoneClass]=\"'false'\" [message]=\"uploadMessage\" (error)=\"onUploadError($event)\"></dropzone>\n</div>\n<div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { map } from 'rxjs/operators';\nimport { Project } from '../../models/project';\nimport { ConfigService } from '../../services/config.service';\nimport { ProjectService } from '../../services/project.service';\nimport { WarningDialogService } from '../../services/warning-dialog.service';\n\n@Component({\n selector: 'lib-project-save',\n templateUrl: './project-save.component.html',\n styleUrls: ['./project-save.component.css'],\n standalone: false,\n})\nexport class ProjectSaveComponent implements OnInit {\n projects: Project[] = [];\n loading = true;\n projectName: string;\n\n constructor(\n private bsModalRef: BsModalRef,\n private projectService: ProjectService,\n private warningDialogService: WarningDialogService,\n private configService: ConfigService\n ) {\n this.loadProjects();\n if (this.projectService.project.name) {\n this.projectName = this.projectService.project.name;\n } else {\n this.projectName = 'New Project';\n }\n }\n\n ngOnInit() {}\n\n private loadProjects() {\n this.projectService.getAllProjects().subscribe((projects) => {\n this.projects = projects;\n this.loading = false;\n });\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n selectProject(project: Project) {\n this.projectService.project.name = project.name;\n }\n\n private existingProject(uuid: string, name: string) {\n for (const project of this.projects) {\n if (project.name === name && project.uuid !== uuid) {\n return true;\n }\n }\n return false;\n }\n\n private doSave() {\n this.projectService.project.name = this.projectName;\n this.projectService.save(this.projectService.project);\n this.bsModalRef.hide();\n }\n\n saveProject() {\n if (this.existingProject(this.projectService.project.uuid, this.projectName) && this.configService.uniqueProjectNames) {\n this.warningDialogService\n .show('designer.project.overwrite-warning')\n .pipe(\n map((result) => {\n if (result) {\n this.doSave();\n }\n })\n )\n .subscribe();\n } else {\n this.doSave();\n }\n }\n\n deleteProject(project: Project) {\n this.warningDialogService\n .show('designer.project.delete-warning')\n .pipe(\n map((result) => {\n if (result) {\n this.projectService.deleteProject(project).subscribe((projects) => {\n this.loadProjects();\n });\n }\n })\n )\n .subscribe();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.saveProject();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.project.save-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel(); (false)\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body p-0\">\n <!-- The name of the current project -->\n <div class=\"form-group row p-3 mb-0\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.project.name' | translate }}</label>\n <div class=\"col-lg-8\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"projectName\" (ngModelChange)=\"projectName = $event\" />\n </div>\n </div>\n\n <!-- List existing projects -->\n @if (loading) {\n <div class=\"m-2 d-flex w-100\">\n <p class=\"w-100\" style=\"text-align: center\"><i class=\"fa fa-spinner fa-pulse fa-fw\"></i></p>\n </div>\n } @if (!loading) {\n <div class=\"list-group list-group-flush\" style=\"max-height: 500px; overflow-y: scroll\">\n @for (project of projects | sort: 'name'; track project) {\n <div class=\"list-group-item\">\n <div class=\"row\">\n <div class=\"col-auto my-auto flex-grow\">\n <a href=\"#\" (click)=\"selectProject(project); (false)\">\n <p class=\"mb-0 w-100\">{{ project.name }}</p>\n </a>\n </div>\n <div class=\"my-auto\">\n <div class=\"col-auto my-auto pl-0 text-danger float-right\" style=\"cursor: pointer\" (click)=\"deleteProject(project); (false)\">\n <i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button [disabled]=\"loading || !projectName\" (click)=\"saveProject(); (false)\" type=\"button\" class=\"btn btn-primary\">\n {{ 'designer.misc.ok' | translate }}\n </button>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ProjectService } from '../../services/project.service';\n\n@Component({\n selector: 'lib-project-share',\n templateUrl: './project-share.component.html',\n styleUrls: ['./project-share.component.css'],\n standalone: false,\n})\nexport class ProjectShareComponent implements OnInit {\n shareLink: string;\n\n constructor(public bsModalRef: BsModalRef, private projectService: ProjectService) {}\n\n ngOnInit() {\n this.shareLink =\n window.location.host + '/designer/app?id=' + this.projectService.project.id + '&token=' + this.projectService.project.shareToken;\n }\n\n ok() {\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.project.share-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.project.share-link' | translate }}</label>\n <div class=\"col-lg-8 d-flex\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"shareLink\" readonly />\n </div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'lib-error-dialog',\n templateUrl: './error-dialog.component.html',\n styleUrls: ['./error-dialog.component.css'],\n standalone: false,\n})\nexport class ErrorDialogComponent implements OnInit {\n onClose: Subject<number>;\n\n message: string;\n details: string;\n\n constructor(private bsModalRef: BsModalRef) {}\n\n ngOnInit() {\n this.onClose = new Subject();\n }\n\n public ok(): void {\n this.onClose.next(1);\n this.bsModalRef.hide();\n }\n\n public cancel(): void {\n this.onClose.next(2);\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"card-modal\">\n <div class=\"card\">\n <div class=\"card-header\">\n {{ 'designer.misc.error' | translate }}\n </div>\n\n <div class=\"card-body\">\n <div class=\"row\">\n <div class=\"col-auto\">\n <h2 class=\"mb-0\">\n <i class=\"fa fa-exclamation-circle text-danger\" aria-hidden=\"true\"></i>\n </h2>\n </div>\n <div class=\"col pl-0\">\n <p class=\"mb-0\">{{ message }}</p>\n @if (details) {\n <p class=\"mt-1 mb-0\">({{ details }})</p>\n }\n </div>\n </div>\n </div>\n\n <div class=\"card-footer\">\n <div class=\"d-flex float-right\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok(); (false)\">\n {{ 'designer.misc.ok' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { ErrorDialogComponent } from '../error-dialog/error-dialog.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ErrorDialogService {\n constructor(private modalService: BsModalService, private translateService: TranslateService) {}\n\n // Show a warning dialog and return true, when the user clicked OK\n show(message: string, details?: string): Observable<boolean> {\n return this.translateService.get(message).pipe(\n map((result) => {\n return result;\n }),\n mergeMap((result) => {\n const fileDialog = this.modalService.show(ErrorDialogComponent, { keyboard: true, ignoreBackdropClick: false });\n (fileDialog.content as ErrorDialogComponent).message = result;\n (fileDialog.content as ErrorDialogComponent).details = details;\n\n return (fileDialog.content as ErrorDialogComponent).onClose.pipe(\n map((errorResult) => {\n if (errorResult === 1) {\n return true;\n }\n\n return false;\n })\n );\n })\n );\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { DropzoneConfigInterface } from 'ngx-dropzone-wrapper';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { FixtureProfile } from '../../models/fixture-profile';\nimport { FixtureService } from '../../services/fixture.service';\nimport { ProjectService } from '../../services/project.service';\n\n@Component({\n selector: 'lib-fixture-pool-create-from-file',\n templateUrl: './fixture-pool-create-from-file.component.html',\n styleUrls: ['./fixture-pool-create-from-file.component.css'],\n standalone: false,\n})\nexport class FixturePoolCreateFromFileComponent implements OnInit {\n public dropzoneConfig: DropzoneConfigInterface;\n public uploadMessage: string;\n public onClose: Subject<FixtureProfile> = new Subject();\n\n constructor(\n public bsModalRef: BsModalRef,\n private translateService: TranslateService,\n private toastrService: ToastrService,\n private fixtureService: FixtureService,\n private projectService: ProjectService\n ) {}\n\n ngOnInit() {\n this.dropzoneConfig = {\n url: 'dummy',\n addRemoveLinks: false,\n maxFilesize: 10 /* 10 MB */,\n acceptedFiles: '.json',\n timeout: 0,\n accept: (file: any, done: any) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', (event: any) => {\n // validate the file\n const text = event.target.result;\n const json = JSON.parse(text);\n if (\n json['$schema'].match(\n /open-fixture-library\\/(?:schema-(.*?)|master)\\/schemas\\/fixture\\.json/\n )\n ) {\n // create the metadata from the file. we don't have the corresponding\n // manufacturer-file, therefore we just assume the attributes from the\n // fixture-file.\n const manufacturerShortName = json['manufacturerKey'];\n const manufacturerName = manufacturerShortName;\n const uuid = manufacturerShortName + '/' + json['fixtureKey'];\n const profile = new FixtureProfile(json);\n\n profile.manufacturerShortName = manufacturerShortName;\n profile.manufacturerName = manufacturerName;\n profile.uuid = uuid;\n profile.createdFromFile = true;\n\n // add the profile to the project, if not already added\n const loadedProfile = this.fixtureService.getProfileByUuid(uuid);\n if (!loadedProfile) {\n this.projectService.project.fixtureProfiles.push(profile);\n }\n\n // add a new fixture from this profile\n this.onClose.next(profile);\n this.bsModalRef.hide();\n } else {\n // show an error toast\n const msg = 'designer.fixture-pool.invalid-fixture-profile-file';\n const title = 'designer.misc.toast-upload-error-title';\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });\n });\n }\n\n done('noerr');\n });\n reader.readAsText(file);\n },\n previewTemplate: `\n <div style=\"display: none;\">\n <!-- No preview -->\n </div>\n `,\n };\n\n this.translateService\n .get('designer.misc.dropzone-message')\n .pipe(\n map((result) => {\n this.uploadMessage = '<h3 class=\"mb-0\"><i class=\"fa fa-cloud-upload\"></i></h3>' + result;\n })\n )\n .subscribe();\n }\n\n public onUploadError(args: any) {\n if (args[1] === 'noerr') {\n // this error is set in the accept event listener -> everything OK\n return;\n }\n\n const msg = 'designer.misc.toast-upload-error';\n const title = 'designer.misc.toast-upload-error-title';\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg] + args[1], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });\n });\n }\n\n ok() {\n this.onClose.next(undefined);\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.onClose.next(undefined);\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.fixture-pool.create-fixture-from-profile-file-dialog-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <!-- Dropzone -->\n <dropzone [config]=\"dropzoneConfig\" [useDropzoneClass]=\"'false'\" [message]=\"uploadMessage\" (error)=\"onUploadError($event)\"></dropzone>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n </div>\n</div>\n","import { AfterViewInit, Directive, ElementRef, EventEmitter, Input, NgZone, OnDestroy, Output } from '@angular/core';\nimport Sortable from 'sortablejs';\nimport type { Options } from 'sortablejs';\n\ninterface SortableReorderEvent {\n item?: HTMLElement;\n oldIndex?: number | null;\n newIndex?: number | null;\n oldDraggableIndex?: number | null;\n newDraggableIndex?: number | null;\n}\n\nconst DEFAULT_OPTIONS: Options = {\n animation: 150,\n draggable: '>*:not(.no-sortjs)',\n filter: '.no-sortjs, .no-sortjs *',\n handle: '.list-sort-handle',\n preventOnFilter: false,\n};\n\n@Directive({\n selector: '[sortablejs]',\n standalone: false,\n})\nexport class SortablejsDirective implements AfterViewInit, OnDestroy {\n @Input() sortablejs: any[] | undefined | null;\n @Input() sortablejsContainer: string | undefined;\n @Input() sortablejsOptions: Options | undefined;\n @Output() sortablejsInit = new EventEmitter<any>();\n\n private sortableInstance: any;\n private createTimer: ReturnType<typeof setTimeout> | undefined;\n\n constructor(private element: ElementRef<HTMLElement>, private zone: NgZone) {}\n\n ngAfterViewInit(): void {\n const container = this.sortablejsContainer\n ? this.element.nativeElement.querySelector(this.sortablejsContainer)\n : this.element.nativeElement;\n\n if (!(container instanceof HTMLElement)) {\n return;\n }\n\n this.createTimer = setTimeout(() => {\n this.zone.runOutsideAngular(() => {\n this.sortableInstance = Sortable.create(container, this.options);\n });\n\n this.sortablejsInit.emit(this.sortableInstance);\n }, 0);\n }\n\n ngOnDestroy(): void {\n if (this.createTimer) {\n clearTimeout(this.createTimer);\n }\n\n this.sortableInstance?.destroy();\n }\n\n private get options(): Options {\n const { onMove: _onMove, ...userOptions } = this.sortablejsOptions || {};\n const userOnEnd = userOptions.onEnd;\n const userOnUpdate = userOptions.onUpdate;\n\n return {\n ...userOptions,\n ...DEFAULT_OPTIONS,\n onEnd: (event: SortableReorderEvent) => {\n if (userOnEnd) {\n this.zone.run(() => userOnEnd(event));\n }\n },\n onUpdate: (event: SortableReorderEvent) => {\n this.zone.run(() => {\n this.restoreDomOrder(event);\n this.reorder(event);\n userOnUpdate?.(event);\n });\n },\n };\n }\n\n private reorder(event: SortableReorderEvent): void {\n if (!this.sortablejs) {\n return;\n }\n\n const oldIndex = this.indexFromEvent(event, 'old');\n const newIndex = this.indexFromEvent(event, 'new');\n\n if (\n oldIndex === undefined ||\n oldIndex === null ||\n newIndex === undefined ||\n newIndex === null ||\n oldIndex === newIndex ||\n oldIndex < 0 ||\n newIndex < 0 ||\n oldIndex >= this.sortablejs.length ||\n newIndex >= this.sortablejs.length\n ) {\n return;\n }\n\n const [movedItem] = this.sortablejs.splice(oldIndex, 1);\n this.sortablejs.splice(newIndex, 0, movedItem);\n }\n\n private restoreDomOrder(event: SortableReorderEvent): void {\n const oldIndex = this.indexFromEvent(event, 'old');\n const item = event.item;\n const container = item?.parentElement;\n\n if (!item || !container || oldIndex === undefined || oldIndex === null || oldIndex < 0) {\n return;\n }\n\n const draggableChildren = Array.from(container.children).filter(\n (child): child is HTMLElement => child instanceof HTMLElement && child !== item && !child.classList.contains('no-sortjs')\n );\n const firstNoSortItem = Array.from(container.children).find(\n (child): child is HTMLElement => child instanceof HTMLElement && child.classList.contains('no-sortjs')\n );\n const referenceNode = draggableChildren[oldIndex] || firstNoSortItem || null;\n\n container.insertBefore(item, referenceNode);\n }\n\n private indexFromEvent(event: SortableReorderEvent, direction: 'old' | 'new'): number | null | undefined {\n const draggableIndex = direction === 'old' ? event.oldDraggableIndex : event.newDraggableIndex;\n const index = direction === 'old' ? event.oldIndex : event.newIndex;\n\n return draggableIndex ?? index;\n }\n}\n","import { Component, HostListener } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { UniverseConfig } from '../../models/universe-config';\nimport { UuidService } from '../../services/uuid.service';\n\n@Component({\n selector: 'lib-fixture-pool-edit-universes',\n templateUrl: './fixture-pool-edit-universes.component.html',\n styleUrls: ['./fixture-pool-edit-universes.component.css'],\n standalone: false,\n})\nexport class FixturePoolEditUniversesComponent {\n public universes: UniverseConfig[] = [];\n public newUniverseName = '';\n public onClose: Subject<UniverseConfig[] | undefined> = new Subject();\n\n constructor(public bsModalRef: BsModalRef, private uuidService: UuidService) {}\n\n addUniverse() {\n const name = (this.newUniverseName || '').trim();\n if (!name) return;\n this.universes.push({ uuid: this.uuidService.getUuid(), name });\n this.newUniverseName = '';\n }\n\n removeUniverse(universe: UniverseConfig) {\n const index = this.universes.findIndex((u) => u.uuid === universe.uuid);\n if (index >= 0) {\n this.universes.splice(index, 1);\n }\n }\n\n ok() {\n this.onClose.next(this.universes);\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.onClose.next(undefined);\n this.bsModalRef.hide();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.fixture-pool.edit-universes-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <!-- Add universe -->\n <div class=\"input-group mb-3\">\n <input\n type=\"text\"\n class=\"form-control\"\n maxlength=\"200\"\n [(ngModel)]=\"newUniverseName\"\n (keydown.enter)=\"addUniverse(); $event.stopPropagation(); $event.preventDefault()\"\n placeholder=\"{{ 'designer.fixture-pool.universe-name' | translate }}\"\n />\n <div class=\"input-group-append\">\n <button type=\"button\" class=\"btn btn-secondary\" [disabled]=\"!newUniverseName || !newUniverseName.trim()\" (click)=\"addUniverse()\">\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n\n <!-- Sortable universe list -->\n <ul class=\"list-group\" [sortablejs]=\"universes\">\n @for (universe of universes; track universe.uuid) {\n <li class=\"list-group-item d-flex align-items-center py-1\">\n <div class=\"list-sort-handle mr-2\" style=\"cursor: move; cursor: -webkit-grabbing\">\n <i class=\"fa fa-bars\" aria-hidden=\"true\"></i>\n </div>\n <span class=\"flex-grow-1\">{{ universe.name }}</span>\n <button class=\"btn btn-primary btn-sm\" type=\"button\" (click)=\"removeUniverse(universe)\">\n <i class=\"fa fa-minus\" aria-hidden=\"true\"></i>\n </button>\n </li>\n }\n </ul>\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subject } from 'rxjs';\nimport { catchError, finalize } from 'rxjs/operators';\nimport { Fixture } from '../models/fixture';\nimport { FixtureProfile } from '../models/fixture-profile';\nimport { ConfigService } from '../services/config.service';\nimport { FixtureService } from '../services/fixture.service';\nimport { PresetService } from '../services/preset.service';\nimport { PreviewService } from '../services/preview.service';\nimport { ProjectService } from '../services/project.service';\nimport { UuidService } from '../services/uuid.service';\nimport { FixturePoolCreateFromFileComponent } from './fixture-pool-create-from-file/fixture-pool-create-from-file.component';\nimport { FixturePoolEditUniversesComponent } from './fixture-pool-edit-universes/fixture-pool-edit-universes.component';\nimport { PresetFixture } from '../models/preset-fixture';\nimport { LivePreviewService } from '../services/live-preview.service';\nimport { UniverseConfig } from '../models/universe-config';\n\n@Component({\n selector: 'lib-app-fixture-pool',\n templateUrl: './fixture-pool.component.html',\n styleUrls: ['./fixture-pool.component.css'],\n standalone: false,\n})\nexport class FixturePoolComponent implements OnInit {\n private profiles: FixtureProfile[];\n public filteredProfiles: FixtureProfile[];\n public loadingProfiles = false;\n\n public fixturePool: Fixture[];\n\n public dmxChannels: number[] = [];\n public selectedFixture: Fixture;\n public selectedFixtureProfile: FixtureProfile;\n public showChannelNumbers = false;\n public channelDragFixture: Fixture;\n public channelDragOffset: number;\n\n public onClose: Subject<number> = new Subject();\n\n public searchExpression: string;\n\n public updatingProfiles: boolean;\n\n // Universes the user can choose from. In \"free edit\" mode the user can\n // extend this list at runtime; otherwise it is provided by the host\n // application through the ConfigService.\n public universes: UniverseConfig[] = [];\n\n // The currently active universe. The channel map and fixture list are\n // filtered to only show fixtures belonging to this universe.\n public selectedUniverse: UniverseConfig;\n\n constructor(\n public bsModalRef: BsModalRef,\n public fixtureService: FixtureService,\n private uuidService: UuidService,\n public projectService: ProjectService,\n private previewService: PreviewService,\n private translateService: TranslateService,\n private toastrService: ToastrService,\n private presetService: PresetService,\n public configService: ConfigService,\n private modalService: BsModalService,\n private livePreviewService: LivePreviewService\n ) {\n this.fixturePool = structuredClone(this.projectService.project.fixtures);\n\n // Initialise the universe list from the config. We keep a local copy so\n // edits done in free-edit mode don't bleed into the config until the user\n // confirms with OK (see `ok()` below).\n this.universes = structuredClone(this.configService.universes || []);\n\n if (this.universes.length === 0 && this.configService.freeUniverseEdit) {\n this.universes.push({ uuid: this.uuidService.getUuid(), name: 'Universe 1' });\n }\n\n if (this.universes.length > 0) {\n this.selectedUniverse = this.universes[0];\n }\n\n const firstVisible = this.currentUniverseFixtures[0] ?? this.fixturePool[0];\n if (firstVisible) {\n this.selectFixture(firstVisible);\n }\n }\n\n get freeUniverseEdit(): boolean {\n return this.configService.freeUniverseEdit;\n }\n\n /** Fixtures belonging to the currently selected universe. */\n get currentUniverseFixtures(): Fixture[] {\n if (!this.selectedUniverse) {\n return this.fixturePool;\n }\n return this.fixturePool.filter((f) => f.dmxUniverseUuid === this.selectedUniverse.uuid);\n }\n\n /** Fixtures used for channel-map calculations (same as currentUniverseFixtures). */\n private get channelFixtures(): Fixture[] {\n return this.currentUniverseFixtures;\n }\n\n selectUniverse(universe: UniverseConfig) {\n this.selectedUniverse = universe;\n // Deselect the current fixture if it doesn't belong to the new universe.\n if (this.selectedFixture && this.selectedFixture.dmxUniverseUuid !== universe?.uuid) {\n this.selectFixture(this.currentUniverseFixtures[0] ?? undefined);\n }\n }\n\n ngOnInit() {\n for (let i = 0; i < 512; i++) {\n this.dmxChannels.push(0);\n }\n\n this.loadProfiles();\n }\n\n private loadProfiles() {\n this.loadingProfiles = true;\n\n this.fixtureService.getSearchProfiles().subscribe((profiles) => {\n this.profiles = profiles;\n this.filterProfiles();\n this.loadingProfiles = false;\n });\n }\n\n selectFixture(fixture: Fixture) {\n this.selectedFixtureProfile = undefined;\n if (fixture) {\n this.selectedFixtureProfile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n }\n this.selectedFixture = fixture;\n }\n\n filterProfiles() {\n if (!this.searchExpression || !this.profiles) {\n this.filteredProfiles = this.profiles;\n return;\n }\n\n this.filteredProfiles = [];\n\n const keywords = this.searchExpression.split(' ');\n\n for (const profile of this.profiles) {\n let foundKeywords = 0;\n\n for (const keyword of keywords) {\n if (\n profile.uuid.toLowerCase().indexOf(keyword.toLowerCase()) !== -1 ||\n profile.name.toLowerCase().indexOf(keyword.toLowerCase()) !== -1 ||\n profile.manufacturerName.toLowerCase().indexOf(keyword.toLowerCase()) !== -1\n ) {\n foundKeywords++;\n }\n }\n\n if (foundKeywords === keywords.length) {\n this.filteredProfiles.push(profile);\n }\n }\n }\n\n addFixture(searchProfile: FixtureProfile) {\n // Load the profile details, if not already done. There is only a\n // minimal profile passed from the search.\n this.fixtureService.loadProfileByUuid(searchProfile.uuid).subscribe(() => {\n const profile = this.fixtureService.getProfileByUuid(searchProfile.uuid);\n const newFixture = this.fixtureService.addFixture(profile, this.fixturePool, this.currentUniverseFixtures);\n if (newFixture) {\n newFixture.dmxUniverseUuid = this.selectedUniverse?.uuid;\n this.selectFixture(newFixture);\n }\n });\n }\n\n addCopy(originalFixture: Fixture) {\n const fixture = new Fixture();\n\n fixture.uuid = this.uuidService.getUuid();\n fixture.profileUuid = originalFixture.profileUuid;\n fixture.name = originalFixture.name;\n fixture.modeShortName = originalFixture.modeShortName;\n fixture.dmxFirstChannel = originalFixture.dmxFirstChannel;\n fixture.dmxUniverseUuid = this.selectedUniverse?.uuid;\n\n this.fixturePool.push(fixture);\n this.selectFixture(fixture);\n }\n\n removeFixture(fixture: Fixture) {\n for (let i = 0; i < this.fixturePool.length; i++) {\n if (this.fixturePool[i].uuid === fixture.uuid) {\n if (this.selectedFixture === this.fixturePool[i]) {\n this.selectFixture(undefined);\n }\n this.fixturePool.splice(i, 1);\n break;\n }\n }\n\n if (!this.selectedFixture) {\n this.selectFixture(this.currentUniverseFixtures[0] ?? undefined);\n }\n\n // remove unused profiles\n for (let i = 0; i < this.projectService.project.fixtureProfiles.length; i++) {\n let profileUsed = false;\n\n for (const fixtureInPool of this.fixturePool) {\n if (fixtureInPool.profileUuid === this.projectService.project.fixtureProfiles[i].uuid) {\n profileUsed = true;\n break;\n }\n }\n\n if (!profileUsed) {\n this.projectService.project.fixtureProfiles.splice(i, 1);\n }\n }\n }\n\n channelOccupied(index: number): boolean {\n for (const fixture of this.channelFixtures) {\n const profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n const mode = this.fixtureService.getModeByFixture(profile, fixture);\n const channelCount = this.fixtureService.getModeChannelCount(profile, mode);\n\n if (index >= fixture.dmxFirstChannel && index < fixture.dmxFirstChannel + channelCount) {\n return true;\n }\n }\n\n return false;\n }\n\n channelOccupiedStart(index: number): boolean {\n for (const fixture of this.channelFixtures) {\n if (index === fixture.dmxFirstChannel) {\n return true;\n }\n }\n\n return false;\n }\n\n channelOccupiedEnd(index: number): boolean {\n for (const fixture of this.channelFixtures) {\n const profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n const mode = this.fixtureService.getModeByFixture(profile, fixture);\n const channelCount = this.fixtureService.getModeChannelCount(profile, mode);\n\n if (index === fixture.dmxFirstChannel + channelCount - 1) {\n return true;\n }\n }\n\n return false;\n }\n\n channelOverlapped(index: number): boolean {\n return this.channelOverlappedInFixtures(index, this.channelFixtures);\n }\n\n private channelOverlappedInFixtures(index: number, fixtures: Fixture[]): boolean {\n let occupiedFixture: Fixture;\n\n for (const fixture of fixtures) {\n const profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n const mode = this.fixtureService.getModeByFixture(profile, fixture);\n const channelCount = this.fixtureService.getModeChannelCount(profile, mode);\n\n if (index >= fixture.dmxFirstChannel && index < fixture.dmxFirstChannel + channelCount) {\n if (occupiedFixture) {\n if (\n occupiedFixture.dmxFirstChannel !== fixture.dmxFirstChannel ||\n occupiedFixture.modeShortName !== fixture.modeShortName ||\n occupiedFixture.dmxUniverseUuid !== fixture.dmxUniverseUuid\n ) {\n // fixtures are allowed to overlap, if they start at the same channel,\n // use the same mode and belong to the same universe. otherwise it's not allowed.\n return true;\n }\n } else {\n occupiedFixture = fixture;\n }\n }\n }\n\n return false;\n }\n\n channelMouseDown(event: any) {\n // start dragging\n const selectedIndex = event.target.dataset.index;\n let newSelectedFixture: Fixture;\n\n // find a dragging fixture and select it, but don't change the selection, if the\n // currently selected fixture might also be selected (on overlapped fixtures)\n for (const fixture of this.channelFixtures) {\n const profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n const mode = this.fixtureService.getModeByFixture(profile, fixture);\n const channelCount = this.fixtureService.getModeChannelCount(profile, mode);\n\n if (selectedIndex >= fixture.dmxFirstChannel && selectedIndex <= fixture.dmxFirstChannel + channelCount - 1) {\n if (this.selectedFixture === fixture) {\n newSelectedFixture = fixture;\n break;\n }\n\n if (!newSelectedFixture) {\n newSelectedFixture = fixture;\n }\n }\n }\n\n if (newSelectedFixture) {\n if (newSelectedFixture !== this.selectedFixture) {\n this.selectFixture(newSelectedFixture);\n }\n\n this.channelDragFixture = newSelectedFixture;\n this.channelDragOffset = selectedIndex - newSelectedFixture.dmxFirstChannel;\n }\n }\n\n channelSelected(index: number): boolean {\n if (!this.selectedFixture) {\n return false;\n }\n\n if (index >= this.selectedFixture.dmxFirstChannel) {\n const profile = this.fixtureService.getProfileByUuid(this.selectedFixture.profileUuid);\n const mode = this.fixtureService.getModeByFixture(profile, this.selectedFixture);\n const channelCount = this.fixtureService.getModeChannelCount(profile, mode);\n\n if (index < this.selectedFixture.dmxFirstChannel + channelCount) {\n return true;\n }\n }\n\n return false;\n }\n\n // register mouse up globally (e.g. also outside the DMX mapping)\n @HostListener('window:mouseup', ['$event'])\n mouseUp(event: any) {\n // finish dragging\n this.channelDragFixture = undefined;\n this.channelDragOffset = undefined;\n }\n\n channelMouseOver(event: any) {\n if (!this.channelDragFixture) {\n return;\n }\n\n // perform dragging\n const selectedIndex = event.target.dataset.index;\n const profile = this.fixtureService.getProfileByUuid(this.channelDragFixture.profileUuid);\n const mode = this.fixtureService.getModeByFixture(profile, this.selectedFixture);\n const channelCount = this.fixtureService.getModeChannelCount(profile, mode);\n\n if (selectedIndex - this.channelDragOffset >= 0 && selectedIndex - this.channelDragOffset + channelCount - 1 <= 511) {\n this.channelDragFixture.dmxFirstChannel = selectedIndex - this.channelDragOffset;\n }\n }\n\n ok() {\n // don't allow OK if overlapping fixtures exist within any universe\n for (const universe of this.universes) {\n const universeFixtures = this.fixturePool.filter((f) => f.dmxUniverseUuid === universe.uuid);\n for (let i = 0; i < this.dmxChannels.length; i++) {\n if (this.channelOverlappedInFixtures(i, universeFixtures)) {\n const msg = 'designer.fixture-pool.channel-occupied';\n const title = 'designer.fixture-pool.channel-occupied-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg], result[title]);\n });\n\n return;\n }\n }\n }\n\n // remove deleted fixtures/pixel keys from preset fixtures\n for (let i = this.projectService.project.presetFixtures.length - 1; i >= 0; i--) {\n let found = false;\n const presetFixture = this.projectService.project.presetFixtures[i];\n for (let fixture of this.fixturePool) {\n if (presetFixture.fixtureUuid === fixture.uuid) {\n found = true;\n break;\n }\n }\n if (!found) {\n this.projectService.project.presetFixtures.splice(i, 1);\n }\n }\n\n // If a mode is changed, we need to re-add the fixture to make sure, all pixel keys\n // are removed/added\n for (let projectFixture of this.projectService.project.fixtures) {\n for (let poolFixture of this.fixturePool) {\n if (poolFixture.profileUuid === projectFixture.profileUuid && poolFixture.modeShortName != projectFixture.modeShortName) {\n // the mode has changed -> remove it from the presetfixtures\n for (let i = this.projectService.project.presetFixtures.length - 1; i >= 0; i--) {\n const presetFixture = this.projectService.project.presetFixtures[i];\n if (presetFixture.fixtureUuid === poolFixture.uuid) {\n this.projectService.project.presetFixtures.splice(i, 1);\n }\n }\n }\n }\n }\n\n // add the new fixtures/pixel keys to the preset fixtures\n for (let fixture of this.fixturePool) {\n let found = false;\n for (let presetFixture of this.projectService.project.presetFixtures) {\n if (presetFixture.fixtureUuid === fixture.uuid) {\n found = true;\n break;\n }\n }\n if (!found) {\n if (this.fixtureService.fixtureHasGeneralChannel(fixture)) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = fixture.uuid;\n this.projectService.project.presetFixtures.push(presetFixture);\n }\n\n const pixels = this.fixtureService.fixtureGetUniquePixels(fixture);\n\n for (let pixel of pixels) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = fixture.uuid;\n presetFixture.pixelKey = pixel.key;\n this.projectService.project.presetFixtures.push(presetFixture);\n }\n }\n }\n this.projectService.project.fixtures = this.fixturePool;\n\n // Persist any locally edited universes back to the config when the\n // host application has opted in to free editing.\n if (this.configService.freeUniverseEdit) {\n this.configService.universes = this.universes;\n }\n\n this.fixtureService.updateCachedFixtures();\n this.presetService.removeDeletedFixtures();\n this.previewService.updateFixtureSetup();\n this.presetService.updateFixtureSelection();\n this.presetService.fixtureSelectionChanged.next();\n this.livePreviewService.previewLive();\n\n this.onClose.next(1);\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.onClose.next(2);\n this.bsModalRef.hide();\n }\n\n updateProfiles() {\n this.updatingProfiles = true;\n\n // TODO\n this.fixtureService\n .updateProfiles()\n .pipe(\n finalize(() => {\n this.updatingProfiles = false;\n }),\n catchError(() => {\n const msg = 'designer.fixture-pool.profiles-update-error';\n const title = 'designer.fixture-pool.profiles-update-error-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg], result[title]);\n });\n\n return undefined;\n })\n )\n .subscribe(() => {\n this.loadProfiles();\n\n const msg = 'designer.fixture-pool.profiles-updated';\n const title = 'designer.fixture-pool.profiles-updated-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.success(result[msg], result[title]);\n });\n });\n }\n\n openEditUniverses() {\n const ref = this.modalService.show(FixturePoolEditUniversesComponent, {\n keyboard: true,\n ignoreBackdropClick: false,\n initialState: { universes: structuredClone(this.universes) },\n });\n (ref.content as FixturePoolEditUniversesComponent).onClose.subscribe((result) => {\n if (!result) return;\n\n // Clear fixture universe assignments for any removed universe\n for (const universe of this.universes) {\n if (!result.find((u) => u.uuid === universe.uuid)) {\n for (const fixture of this.fixturePool) {\n if (fixture.dmxUniverseUuid === universe.uuid) {\n fixture.dmxUniverseUuid = undefined;\n }\n }\n }\n }\n\n this.universes = result;\n\n // Re-anchor selectedUniverse to the new object reference from result.\n // The modal works on a structuredClone, so all objects have new references.\n const stillSelected = this.universes.find((u) => u.uuid === this.selectedUniverse?.uuid);\n if (stillSelected) {\n this.selectedUniverse = stillSelected;\n } else {\n this.selectedUniverse = this.universes[0] ?? undefined;\n this.selectFixture(this.currentUniverseFixtures[0] ?? undefined);\n }\n });\n }\n\n createFixtureFromProfileFile() {\n const bsModalRef = this.modalService.show(FixturePoolCreateFromFileComponent, { keyboard: true, ignoreBackdropClick: false });\n (bsModalRef.content as FixturePoolCreateFromFileComponent).onClose.subscribe((profile: FixtureProfile) => {\n const newFixture = this.fixtureService.addFixture(profile, this.fixturePool, this.currentUniverseFixtures);\n if (newFixture) {\n newFixture.dmxUniverseUuid = this.selectedUniverse?.uuid;\n }\n this.selectFixture(newFixture);\n });\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.fixture-pool.title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel(); (false)\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"row\">\n <div class=\"col-6\">\n <!-- Search for profiles -->\n <input\n type=\"text\"\n class=\"form-control input-block mb-3\"\n id=\"searchSet\"\n placeholder=\"{{ 'designer.fixture-pool.search-profiles' | translate }}\"\n (input)=\"searchExpression = $event.target.value; filterProfiles()\"\n />\n\n <!-- Profiles -->\n <div class=\"card border-secondary w-100\" style=\"height: 200px\">\n <div class=\"card-body p-0 w-100\">\n <div class=\"list-group list-group-flush w-100\">\n @if (loadingProfiles) {\n <a class=\"list-group-item flex-column align-items-start d-flex\">\n <p class=\"mb-0 mx-auto\">\n <i class=\"fa fa-spinner fa-pulse fa-fw\"></i>\n </p>\n </a>\n } @for (profile of filteredProfiles | sort : 'uuid'; track profile) {\n <div class=\"list-group-item\">\n <div class=\"row\">\n <div class=\"col-10 col-auto my-auto pl-2\">\n <p class=\"mb-0\">\n <span class=\"icon-{{ fixtureService.getFixtureIconClass(profile) }} mr-1\"></span> {{ profile.manufacturerName }} -\n {{ profile.name }}\n </p>\n </div>\n <div class=\"col-2 my-auto\">\n <a class=\"btn btn-primary btn-sm float-right\" href=\"#\" role=\"button\" (click)=\"addFixture(profile); (false)\">\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\n </a>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n <div>\n <p class=\"d-inline-block mb-0 mt-2\">\n Powered by the <a href=\"https://open-fixture-library.org/\" target=\"_blank\">Open Fixture Library</a>\n </p>\n <a\n class=\"mt-2 btn btn-secondary btn-sm float-right\"\n href=\"https://open-fixture-library.org/fixture-editor\"\n target=\"_blank\"\n role=\"button\"\n >\n <i class=\"fa fa-file-o\" aria-hidden=\"true\"></i> {{ 'designer.fixture-pool.add-profile' | translate }}\n </a>\n @if (configService.localProfiles) {\n <button\n type=\"button\"\n class=\"mr-2 mt-2 btn btn-secondary btn-sm float-right\"\n (click)=\"updateProfiles(); (false)\"\n [disabled]=\"updatingProfiles\"\n role=\"button\"\n >\n @if (updatingProfiles) {\n <i class=\"fa fa-spinner fa-pulse fa-fw\" aria-hidden=\"true\"></i>\n } @if (!updatingProfiles) {\n <i class=\"fa fa-download fa-fw\" aria-hidden=\"true\"></i>\n }\n {{ 'designer.fixture-pool.update-profiles' | translate }}\n </button>\n }\n </div>\n </div>\n <div class=\"col-6\">\n <div class=\"row\">\n <!-- Add fixture from local profile -->\n <div class=\"col-6\">\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"createFixtureFromProfileFile()\" role=\"button\">\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i> {{ 'designer.fixture-pool.create-fixture-from-profile-file' | translate }}\n </button>\n </div>\n\n <!-- Universe -->\n <div class=\"col-6\">\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.fixture-pool.universe' | translate }}</label>\n <div class=\"col-lg-8\">\n <div class=\"input-group\">\n <select\n class=\"custom-select\"\n [disabled]=\"universes.length === 0\"\n [ngModel]=\"selectedUniverse\"\n (ngModelChange)=\"selectUniverse($event)\"\n >\n @for (universe of universes; track universe.uuid) {\n <option [ngValue]=\"universe\">{{ universe.name }}</option>\n }\n </select>\n @if (freeUniverseEdit) {\n <div class=\"input-group-append\">\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"openEditUniverses()\">\n <i class=\"fa fa-pencil\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Fixtures -->\n <div class=\"card border-secondary\" style=\"height: 235px\">\n <div class=\"card-body p-0\">\n <div class=\"list-group list-group-flush\" [sortablejs]=\"fixturePool\">\n @for (fixture of currentUniverseFixtures; track fixture) {\n <div\n class=\"list-group-item\"\n [class.active]=\"fixture == selectedFixture\"\n (click)=\"selectFixture(fixture)\"\n style=\"cursor: pointer\"\n >\n <div class=\"row\">\n <div class=\"col-auto list-sort-handle my-auto\" style=\"cursor: move; cursor: -webkit-grabbing\">\n <i class=\"fa fa-bars\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"col-auto flex-grow pl-0 my-auto\">\n <p class=\"mb-0\">\n <span class=\"icon-{{ fixtureService.getFixtureIconClass(fixtureService.getProfileByUuid(fixture.profileUuid)) }} mr-1\">\n </span\n >{{ fixture.name }}\n </p>\n </div>\n <div class=\"col-auto my-auto\">\n <a class=\"btn btn-primary btn-sm float-right\" href=\"#\" role=\"button\" (click)=\"removeFixture(fixture); (false)\">\n <i class=\"fa fa-minus\" aria-hidden=\"true\"></i>\n </a>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row mt-3\">\n <div class=\"col\">\n <!-- Tab navigation -->\n <ul class=\"nav nav-tabs mb-4\" id=\"myTab\" role=\"tablist\">\n <li class=\"nav-item\">\n <a class=\"nav-link active\" id=\"sets-tab\" data-toggle=\"tab\" href=\"#dmx\" role=\"tab\">\n <i class=\"icon-ola\" aria-hidden=\"true\"></i> {{ 'designer.fixture-pool.dmx' | translate }}\n </a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" id=\"compositions-tab\" data-toggle=\"tab\" href=\"#settings\" role=\"tab\">\n <i class=\"fa fa-cog\" aria-hidden=\"true\"></i> {{ 'designer.fixture-pool.settings' | translate }}\n </a>\n </li>\n </ul>\n\n <!-- Tab content -->\n <div class=\"tab-content\" id=\"myTabContent\">\n <!-- DMX universe overview-->\n <div class=\"tab-pane show active\" id=\"dmx\" role=\"tabpanel\">\n <!-- Show all channel numbers -->\n <!-- <div class=\"form-group row\">\n <div class=\"col-auto flex-grow\"></div>\n <div class=\"col-lg-3 d-flex\">\n <div class=\"form-check my-auto ml-auto\">\n <input type=\"checkbox\" class=\"form-check-input\" id=\"showChannelNumbers\" [ngModel]=\"showChannelNumbers\"\n (ngModelChange)=\"showChannelNumbers = $event\">\n <label class=\"form-check-label\" for=\"showChannelNumbers\">Show channels</label>\n </div>\n </div>\n </div> -->\n\n <!-- List of DMX channels -->\n <div>\n @for (channel of dmxChannels; track $index; let i = $index) {\n <div\n class=\"dmx-channel\"\n [class.dmx-channel-occupied]=\"channelOccupied(i)\"\n [class.dmx-channel-occupied-start]=\"channelOccupiedStart(i)\"\n [class.dmx-channel-occupied-end]=\"channelOccupiedEnd(i)\"\n [class.dmx-channel-selected]=\"channelSelected(i)\"\n [class.dmx-channel-overlapped]=\"channelOverlapped(i)\"\n (mousedown)=\"channelMouseDown($event)\"\n (mouseover)=\"channelMouseOver($event)\"\n [attr.data-index]=\"i\"\n popover=\"{{ i + 1 }}\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n >\n <div class=\"d-flex w-100 dmx-channel-text\" [attr.data-index]=\"i\" [class.dmx-channel-text-visible]=\"showChannelNumbers\">\n <div class=\"m-auto\" style=\"font-size: 11px\" [attr.data-index]=\"i\"><small [attr.data-index]=\"i\">&nbsp;</small></div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Fixture settings -->\n <div class=\"tab-pane\" id=\"settings\" role=\"tabpanel\">\n @if (selectedFixture && selectedFixtureProfile) {\n <div>\n <div class=\"form-group row\">\n <label class=\"col-lg-3 col-form-label\" for=\"fixtureName\">{{ 'designer.fixture-pool.fixture-name' | translate }}</label>\n <div class=\"col-lg-9\">\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"selectedFixture.name\" maxlength=\"200\" id=\"fixtureName\" />\n </div>\n </div>\n <div class=\"form-group row\">\n <label class=\"col-lg-3 col-form-label\">{{ 'designer.fixture-pool.mode' | translate }}</label>\n <div class=\"col-lg-9\">\n <select\n class=\"custom-select\"\n [ngModel]=\"selectedFixture.modeShortName\"\n (ngModelChange)=\"selectedFixture.modeShortName = $event\"\n >\n @for (mode of selectedFixtureProfile.modes; track mode) {\n <option [ngValue]=\"mode.shortName || mode.name\">\n {{ mode.name }}\n - {{ fixtureService.getModeChannelCount(selectedFixtureProfile, mode) }}\n {{ 'designer.fixture-pool.channels' | translate }}\n </option>\n }\n </select>\n </div>\n </div>\n <div class=\"form-group row\">\n <label class=\"col-lg-3 col-form-label\">{{ 'designer.fixture-pool.universe' | translate }}</label>\n <div class=\"col-lg-9\">\n <select\n class=\"custom-select\"\n [disabled]=\"universes.length === 0\"\n [ngModel]=\"selectedFixture.dmxUniverseUuid\"\n (ngModelChange)=\"selectedFixture.dmxUniverseUuid = $event\"\n >\n @for (universe of universes; track universe.uuid) {\n <option [ngValue]=\"universe.uuid\">{{ universe.name }}</option>\n }\n </select>\n </div>\n </div>\n <div class=\"form-group row\">\n <label class=\"col-lg-3 col-form-label\">{{ 'designer.fixture-pool.first-channel' | translate }}</label>\n <div class=\"col-lg-9\">\n <select\n class=\"custom-select\"\n [ngModel]=\"selectedFixture.dmxFirstChannel\"\n (ngModelChange)=\"selectedFixture.dmxFirstChannel = $event\"\n >\n @for (channel of dmxChannels; track $index; let i = $index) {\n <option [ngValue]=\"i\">\n {{ i + 1 }}\n </option>\n }\n </select>\n </div>\n </div>\n <div class=\"form-group row\">\n <label class=\"col-lg-3 col-form-label\"></label>\n <div class=\"col-lg-9\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"addCopy(selectedFixture)\">\n {{ 'designer.fixture.add-copy' | translate }}\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { FixturePoolComponent } from '../fixture-pool/fixture-pool.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FixturePoolService {\n private fixturePoolOpened = false;\n\n constructor(private modalService: BsModalService) {}\n\n open() {\n if (this.fixturePoolOpened) {\n return;\n }\n\n this.fixturePoolOpened = true;\n const bsModalRef = this.modalService.show(FixturePoolComponent, { keyboard: false, ignoreBackdropClick: true, class: 'modal-full' });\n (bsModalRef.content as FixturePoolComponent).onClose.subscribe((result) => {\n this.fixturePoolOpened = false;\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HotkeyTargetExcludeService {\n constructor() {}\n\n exclude(event: any): boolean {\n // don't react on certain targets (e.g. the user is inside an input field)\n if (!event.target) {\n return false;\n }\n\n if (event.target.nodeName === 'INPUT') {\n return true;\n }\n\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ConfigService } from './config.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IntroService {\n showIntro = false;\n activeStep = 'start';\n positionTopPercentage = 50;\n positionLeftPercentage = 50;\n stylePosition = 'top: calc(50% - 150px); left: calc(50% - 200px);';\n stepChanged: Subject<void> = new Subject<void>();\n\n constructor(private configService: ConfigService) {}\n\n refresh() {\n // called, as soon as the config has been updated\n if (this.configService.intro) {\n if (localStorage.getItem('showIntro')) {\n this.showIntro = localStorage.getItem('showIntro') === 'true';\n } else {\n this.showIntro = true;\n }\n }\n }\n\n setShowIntro(value: boolean) {\n this.showIntro = value;\n if (value) {\n localStorage.setItem('showIntro', 'true');\n } else {\n localStorage.setItem('showIntro', 'false');\n }\n this.stepChanged.next();\n }\n\n reset() {\n this.activeStep = 'start';\n this.setShowIntro(true);\n this.stepChanged.next();\n }\n\n showStep(step: string): boolean {\n if (!this.showIntro) {\n return false;\n }\n\n if (this.activeStep !== step) {\n return false;\n }\n\n return true;\n }\n\n next() {\n switch (this.activeStep) {\n case 'start':\n this.activeStep = 'preview';\n this.positionTopPercentage = 60;\n this.positionLeftPercentage = 40;\n break;\n case 'preview':\n this.activeStep = 'fixtures';\n this.positionTopPercentage = 40;\n this.positionLeftPercentage = 30;\n break;\n case 'fixtures':\n this.activeStep = 'presets';\n this.positionTopPercentage = 30;\n this.positionLeftPercentage = 50;\n break;\n case 'presets':\n this.activeStep = 'capabilities';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 60;\n break;\n case 'capabilities':\n this.activeStep = 'scenes';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 40;\n break;\n case 'scenes':\n this.activeStep = 'timeline';\n this.positionTopPercentage = 40;\n this.positionLeftPercentage = 50;\n break;\n case 'timeline':\n this.activeStep = 'finish';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 50;\n break;\n }\n\n this.stepChanged.next();\n }\n\n back() {\n switch (this.activeStep) {\n case 'preview':\n this.activeStep = 'start';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 50;\n break;\n case 'fixtures':\n this.activeStep = 'preview';\n this.positionTopPercentage = 60;\n this.positionLeftPercentage = 40;\n break;\n case 'presets':\n this.activeStep = 'fixtures';\n this.positionTopPercentage = 30;\n this.positionLeftPercentage = 50;\n break;\n case 'capabilities':\n this.activeStep = 'presets';\n this.positionTopPercentage = 40;\n this.positionLeftPercentage = 30;\n break;\n case 'scenes':\n this.activeStep = 'capabilities';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 60;\n break;\n case 'timeline':\n this.activeStep = 'scenes';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 40;\n break;\n case 'finish':\n this.activeStep = 'timeline';\n this.positionTopPercentage = 40;\n this.positionLeftPercentage = 50;\n break;\n }\n\n this.stepChanged.next();\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { UserService } from '../../services/user.service';\n\n@Component({\n selector: 'lib-user-login',\n templateUrl: './user-login.component.html',\n styleUrls: ['./user-login.component.css'],\n standalone: false,\n})\nexport class UserLoginComponent implements OnInit {\n error = '';\n loggingIn = false;\n\n email = '';\n password = '';\n\n // emits, when logged in\n subject: Subject<void>;\n\n constructor(private bsModalRef: BsModalRef, private userService: UserService) {}\n\n ngOnInit() {}\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n login() {\n this.loggingIn = true;\n this.error = '';\n\n if (!this.email || !this.password) {\n this.error = 'fill-all-fields';\n this.loggingIn = false;\n return;\n }\n\n this.userService.login(this.email, this.password).subscribe(\n () => {\n this.bsModalRef.hide();\n if (this.subject) {\n this.subject.next();\n }\n },\n (response) => {\n if (response.error && response.error.error) {\n this.error = response.error.error;\n } else {\n this.error = 'internal';\n }\n this.loggingIn = false;\n }\n );\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.login();\n }\n}\n","<form (ngSubmit)=\"login()\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.user.login-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel(); (false)\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"form-group row\">\n <label for=\"email\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.email' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-envelope-o\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"loggingIn\"\n name=\"email\"\n [(ngModel)]=\"email\"\n type=\"email\"\n class=\"form-control\"\n id=\"email\"\n placeholder=\"email@example.com\"\n />\n </div>\n </div>\n </div>\n <div class=\"form-group row\">\n <label for=\"password\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.password' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-lock\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"loggingIn\"\n name=\"password\"\n [(ngModel)]=\"password\"\n type=\"password\"\n class=\"form-control\"\n id=\"password\"\n placeholder=\"{{ 'designer.user.password' | translate }}\"\n />\n </div>\n </div>\n </div>\n @if (error) {\n <div class=\"alert alert-primary\" role=\"alert\">\n {{ 'designer.user.error.' + error | translate }}\n </div>\n }\n </div>\n <div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button [disabled]=\"loggingIn\" type=\"submit\" class=\"btn btn-primary\">\n @if (loggingIn) {\n <i class=\"fa fa-spinner fa-pulse fa-fw\"></i>\n } {{ 'designer.user.login' | translate }}\n </button>\n </div>\n</form>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { UserService } from '../../services/user.service';\nimport { UserLoginComponent } from '../user-login/user-login.component';\n\n@Component({\n selector: 'lib-user-register',\n templateUrl: './user-register.component.html',\n styleUrls: ['./user-register.component.css'],\n standalone: false,\n})\nexport class UserRegisterComponent implements OnInit {\n error = '';\n registering = false;\n\n username = '';\n email = '';\n password = '';\n passwordRepeat = '';\n\n // emits, when logged in\n subject: Subject<void>;\n\n constructor(private bsModalRef: BsModalRef, private modalService: BsModalService, private userService: UserService) {}\n\n ngOnInit() {}\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n login() {\n this.bsModalRef.hide();\n this.modalService.show(UserLoginComponent, { keyboard: true, ignoreBackdropClick: false, initialState: { subject: this.subject } });\n }\n\n private emailIsValid(email: string): boolean {\n // tslint:disable-next-line:max-line-length\n const re =\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(String(email).toLowerCase());\n }\n\n register() {\n this.registering = true;\n this.error = '';\n\n if (!this.username || !this.email || !this.password || !this.passwordRepeat) {\n this.error = 'fill-all-fields';\n this.registering = false;\n return;\n }\n\n if (!this.emailIsValid(this.email)) {\n this.error = 'email-valid';\n this.registering = false;\n return;\n }\n\n if (this.password !== this.passwordRepeat) {\n this.error = 'password-mismatch';\n this.registering = false;\n return;\n }\n\n this.userService.register(this.email, this.username, this.password).subscribe(\n () => {\n // automatically login after registering\n this.userService.login(this.email, this.password).subscribe(() => {\n this.registering = false;\n this.bsModalRef.hide();\n });\n },\n (response) => {\n if (response.error && response.error.error) {\n this.error = response.error.error;\n } else {\n this.error = 'internal';\n }\n this.registering = false;\n }\n );\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.register();\n }\n}\n","<form (ngSubmit)=\"register()\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.user.register-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel(); (false)\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n @if (subject) {\n <div class=\"alert alert-success\" role=\"alert\">\n {{ 'designer.user.login-required' | translate }}\n </div>\n }\n <div class=\"form-group row\">\n <label for=\"username\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.username' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-user\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"registering\"\n name=\"username\"\n [(ngModel)]=\"username\"\n type=\"text\"\n class=\"form-control\"\n id=\"username\"\n placeholder=\"John Doe\"\n />\n </div>\n </div>\n </div>\n <div class=\"form-group row\">\n <label for=\"email\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.email' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-envelope-o\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"registering\"\n name=\"email\"\n [(ngModel)]=\"email\"\n type=\"email\"\n class=\"form-control\"\n id=\"email\"\n placeholder=\"email@example.com\"\n />\n </div>\n </div>\n </div>\n <div class=\"form-group row\">\n <label for=\"password\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.password' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-lock\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"registering\"\n name=\"password\"\n [(ngModel)]=\"password\"\n type=\"password\"\n class=\"form-control\"\n id=\"password\"\n placeholder=\"{{ 'designer.user.password' | translate }}\"\n />\n </div>\n </div>\n </div>\n <div class=\"form-group row\">\n <label for=\"passwordRepeat\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.password-repeat' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-lock\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"registering\"\n name=\"passwordRepeat\"\n [(ngModel)]=\"passwordRepeat\"\n type=\"password\"\n class=\"form-control\"\n id=\"passwordRepeat\"\n placeholder=\"{{ 'designer.user.password' | translate }}\"\n />\n </div>\n </div>\n </div>\n @if (error) {\n <div class=\"alert alert-primary\" role=\"alert\">\n {{ 'designer.user.error.' + error | translate }}\n </div>\n }\n <a href=\"#\" (click)=\"login(); (false)\">\n <p class=\"mt-3 mb-0\" style=\"text-align: center\">{{ 'designer.user.already-have-account' | translate }}</p>\n </a>\n </div>\n <div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button [disabled]=\"registering\" type=\"submit\" class=\"btn btn-primary\">\n @if (registering) {\n <i class=\"fa fa-spinner fa-pulse fa-fw\"> </i>\n }{{ 'designer.user.register' | translate }}\n </button>\n </div>\n</form>\n","import { Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable, of, Subject } from 'rxjs';\nimport { UserRegisterComponent } from '../user/user-register/user-register.component';\nimport { ConfigService } from './config.service';\nimport { UserService } from './user.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserEnsureLoginService {\n constructor(private userService: UserService, private modalService: BsModalService, private configService: ConfigService) {}\n\n // show the login form and log a user in, if required\n login(): Observable<void> {\n if (this.userService.isLoggedIn()) {\n return of(null);\n }\n\n if (!this.configService.loginAvailable) {\n return of(null);\n }\n\n const subject = new Subject<void>();\n this.modalService.show(UserRegisterComponent, { keyboard: true, ignoreBackdropClick: false, initialState: { subject } });\n return subject;\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DropzoneConfigInterface } from 'ngx-dropzone-wrapper';\nimport { map } from 'rxjs/operators';\nimport { ConfigService } from '../services/config.service';\n\n@Component({\n selector: 'app-dropzone',\n templateUrl: './dropzone.component.html',\n styleUrl: './dropzone.component.css',\n standalone: false,\n})\nexport class DropzoneComponent {\n @Output() error = new EventEmitter();\n @Output() success = new EventEmitter();\n @Output() addedFile = new EventEmitter();\n\n private _url: string;\n private _acceptedFiles: string;\n private _maxFiles: number = undefined;\n\n @Input()\n set url(value: string) {\n this._url = value;\n this.updateConfig();\n }\n @Input()\n set acceptedFiles(value: string) {\n this._acceptedFiles = value;\n this.updateConfig();\n }\n @Input()\n set maxFiles(value: number) {\n this._maxFiles = value;\n this.updateConfig();\n }\n\n dropzoneConfig: DropzoneConfigInterface;\n uploadMessage: string;\n\n constructor(private translateService: TranslateService, private configService: ConfigService) {\n this.translateService\n .get('designer.misc.dropzone-message')\n .pipe(\n map((result) => {\n this.uploadMessage = '<h3 class=\"mb-0\"><i class=\"fa fa-cloud-upload\"></i></h3>' + result;\n })\n )\n .subscribe();\n\n this.updateConfig();\n }\n\n updateConfig() {\n this.dropzoneConfig = {\n url: this.configService.restUrl + this._url,\n paramName: 'file',\n addRemoveLinks: false,\n maxFilesize: null /* unlimited */,\n acceptedFiles: this._acceptedFiles,\n timeout: 0,\n chunking: this.configService.dropzoneChunking,\n forceChunking: this.configService.dropzoneChunking,\n parallelUploads: 1,\n maxFiles: this._maxFiles,\n withCredentials: true,\n chunkSize: 2 * 1024 * 1024, // 2 MB\n previewTemplate: `\n <div class=\"dz-preview dz-file-preview\">\n <!-- The attachment details -->\n <div class=\"dz-details\" style=\"text-align: left\">\n <i class=\"fa fa-file-o\"></i> <span data-dz-name></span> <small><span class=\"label label-default file-size\" data-dz-size></span></small>\n </div>\n\n <!--div class=\"mt-5\">\n <span data-dz-errormessage></span>\n </div-->\n\n <div class=\"progress mt-4 mb-1\" style=\"height: 10px\">\n <div class=\"progress-bar progress-bar-striped progress-bar-animated\" role=\"progressbar\" style=\"width:0%;\" data-dz-uploadprogress></div>\n </div>\n </div>\n `,\n };\n }\n}\n","<dropzone\n [config]=\"dropzoneConfig\"\n [useDropzoneClass]=\"'false'\"\n [message]=\"uploadMessage\"\n (error)=\"error.emit($event)\"\n (success)=\"success.emit($event)\"\n (addedFile)=\"addedFile.emit($event)\"\n></dropzone>\n","import { HttpClient } from '@angular/common/http';\nimport { Component, HostListener, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { DropzoneConfigInterface } from 'ngx-dropzone-wrapper';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Composition } from '../../models/composition';\nimport { ConfigService } from '../../services/config.service';\nimport { ProjectService } from '../../services/project.service';\nimport { TimelineService } from '../../services/timeline.service';\nimport { WarningDialogService } from '../../services/warning-dialog.service';\n\n@Component({\n selector: 'lib-app-composition-settings',\n templateUrl: './composition-settings.component.html',\n styleUrls: ['./composition-settings.component.css'],\n standalone: false,\n})\nexport class CompositionSettingsComponent implements OnInit {\n composition: Composition;\n existingCompositionNames: string[] = [];\n\n public onClose: Subject<number> = new Subject();\n\n public dropzoneConfig: DropzoneConfigInterface;\n public uploadMessage: string;\n\n public existingFiles: string[] = [];\n public filteredExistingFiles: string[] = [];\n\n public uploading = false;\n\n constructor(\n public bsModalRef: BsModalRef,\n private timelineService: TimelineService,\n public configService: ConfigService,\n private translateService: TranslateService,\n private http: HttpClient,\n private warningDialogService: WarningDialogService,\n private toastrService: ToastrService,\n public projectService: ProjectService\n ) {}\n\n ngOnInit() {\n this.loadFiles();\n\n if (this.timelineService.externalCompositionsAvailable) {\n this.timelineService.getExternalCompositionNames().subscribe((compositionNames) => {\n this.existingCompositionNames = compositionNames;\n });\n }\n }\n\n getDropzoneUrl() {\n const projectId = this.projectService.project.id ? this.projectService.project.id : '';\n return 'file/upload?compositionUuid=' + this.composition.uuid + '&projectId=' + projectId;\n }\n\n ok() {\n this.onClose.next(1);\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.onClose.next(2);\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n\n private getNameFromFile(data: any): string {\n return data.name;\n }\n\n private loadFiles() {\n if (!this.configService.enableMediaLibrary) {\n return;\n }\n\n this.http\n .get('file/list')\n .pipe(\n map((response: object[]) => {\n this.existingFiles = [];\n\n for (const file of response) {\n // only load audio files\n if ((file as any).audioFile) {\n this.existingFiles.push(this.getNameFromFile((file as any).audioFile));\n }\n }\n\n this.filterExistingFiles();\n })\n )\n .subscribe();\n }\n\n public onUploadError(args: any) {\n const msg = 'designer.misc.toast-upload-error';\n const title = 'designer.misc.toast-upload-error-title';\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg] + args[1], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });\n // Hide the preview element\n args[0].previewElement.hidden = true;\n });\n }\n\n public onUploadSuccess(args: any) {\n this.loadFiles();\n\n // allow to guess the bpm of the newly uploaded file\n this.composition.tempoGuessed = false;\n\n // hide the preview element\n args[0].previewElement.hidden = true;\n\n // select this file\n this.composition.audioFileName = args[0].name;\n\n if (this.configService.enableMediaLibrary) {\n // the file has been uploaded to the media library\n this.composition.audioFileInLibrary = true;\n }\n }\n\n public onQueueComplete(args: any) {\n this.uploading = false;\n }\n\n public onAddedFile(args: any) {\n this.uploading = true;\n }\n\n // Filter the existing files\n filterExistingFiles(searchValue?: string) {\n if (!searchValue) {\n this.filteredExistingFiles = this.existingFiles;\n return;\n }\n\n this.filteredExistingFiles = [];\n\n for (const file of this.existingFiles) {\n if (file.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1) {\n this.filteredExistingFiles.push(file);\n }\n }\n }\n\n selectExistingFile(existingFile: string) {\n this.composition.audioFileName = existingFile;\n\n // the file has been selected from the media library\n this.composition.audioFileInLibrary = true;\n }\n\n deleteFile(existingFile: string) {\n this.warningDialogService\n .show('designer.timeline.warning-delete-file')\n .pipe(\n map((result) => {\n if (result) {\n this.http\n .post('file/delete?name=' + existingFile + '&type=AUDIO', undefined)\n .pipe(\n map((response: Response) => {\n this.loadFiles();\n })\n )\n .subscribe();\n }\n })\n )\n .subscribe();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ composition.name }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.composition-name' | translate }}</label>\n <div class=\"col-lg-8 d-flex\">\n <input\n type=\"text\"\n class=\"form-control\"\n [ngModel]=\"composition.name\"\n (ngModelChange)=\"composition.name = $event\"\n [typeahead]=\"existingCompositionNames\"\n />\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.composition-sync-type' | translate }}</label>\n <div class=\"col-lg-8 d-flex\">\n <select class=\"custom-select\" [ngModel]=\"composition.syncType\" (ngModelChange)=\"composition.syncType = $event\">\n <!-- TODO -->\n <!-- <option value=\"none\">{{ 'designer.timeline.composition-sync-type-none' | translate }}</option> -->\n <option value=\"audio\">{{ 'designer.timeline.composition-sync-type-audio' | translate }}</option>\n </select>\n </div>\n </div>\n\n @if (composition.syncType == 'audio') {\n <div class=\"row\">\n <div class=\"px-3 w-100\">\n <!-- Selected file -->\n <div class=\"card border-secondary mb-3\">\n <div class=\"card-body\">\n <!-- No file selected -->\n @if (!composition.audioFileName) {\n <div>\n {{ 'designer.timeline.composition-no-file-selected' | translate }}\n </div>\n }\n <!-- A file is selected -->\n @if (composition.audioFileName) {\n <div>\n {{ composition.audioFileName }}\n </div>\n }\n </div>\n </div>\n <!-- Choose file -->\n @if (configService.enableMediaLibrary) {\n <ul class=\"nav nav-tabs mb-3\" id=\"myTab\" role=\"tablist\">\n <li class=\"nav-item\">\n <a class=\"nav-link active\" id=\"upload-tab\" data-toggle=\"tab\" href=\"#upload\" role=\"tab\">\n <i class=\"fa fa-upload\" aria-hidden=\"true\"></i>\n {{ 'designer.timeline.composition-file-upload' | translate }}\n </a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" id=\"media-library-tab\" data-toggle=\"tab\" href=\"#media-library\" role=\"tab\">\n <i class=\"fa fa-folder-o\" aria-hidden=\"true\"></i>\n {{ 'designer.timeline.composition-file-library' | translate }}\n </a>\n </li>\n </ul>\n }\n <div class=\"tab-content\" id=\"myTabContent\">\n <!-- Upload -->\n <div class=\"tab-pane fade show active\" id=\"upload\" role=\"tabpanel\">\n <app-dropzone\n [url]=\"getDropzoneUrl()\"\n [acceptedFiles]=\"'audio/*'\"\n (error)=\"onUploadError($event)\"\n (success)=\"onUploadSuccess($event)\"\n (queuecomplete)=\"onQueueComplete($event)\"\n (addedfile)=\"onAddedFile($event)\"\n ></app-dropzone>\n </div>\n <!-- Media library -->\n <div class=\"tab-pane fade\" id=\"media-library\" role=\"tabpanel\">\n <input\n type=\"text\"\n class=\"form-control input-block mb-3\"\n id=\"searchFileList\"\n placeholder=\"{{ 'designer.misc.search' | translate }}\"\n (input)=\"filterExistingFiles($event.target.value)\"\n />\n <div class=\"card border-secondary\" style=\"height: 200px; overflow-y: scroll\">\n <div class=\"card-body p-0\">\n <div class=\"list-group list-group-flush\">\n @for (existingFile of filteredExistingFiles | sort : 'name'; track existingFile) {\n <a\n class=\"list-group-item\"\n [class.active]=\"composition.audioFileName == existingFile\"\n href=\"#\"\n (click)=\"selectExistingFile(existingFile); (false)\"\n >\n <div class=\"row\">\n <div class=\"col-auto my-auto flex-grow text-break-word\">\n {{ existingFile }}\n </div>\n <div class=\"col-auto my-auto pl-0 text-danger float-right\" (click)=\"deleteFile(existingFile); (false)\">\n <i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </div>\n </div>\n </a>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button [disabled]=\"uploading\" type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { TimelineService } from '../../services/timeline.service';\n\n@Component({\n selector: 'lib-app-timeline-grid',\n templateUrl: './timeline-grid.component.html',\n styleUrls: ['./timeline-grid.component.css'],\n standalone: false,\n})\nexport class TimelineGridComponent implements OnInit {\n public gridType: string;\n public beatsPerMinute: number;\n public timeSignatureUpper: number;\n public timeSignatureLower: number;\n public snapToGrid: boolean;\n public gridOffsetMillis: number;\n public gridResolution: number;\n\n constructor(public bsModalRef: BsModalRef, public timelineService: TimelineService) {\n this.gridType = timelineService.selectedComposition.gridType;\n this.beatsPerMinute = timelineService.selectedComposition.beatsPerMinute;\n this.timeSignatureUpper = timelineService.selectedComposition.timeSignatureUpper;\n this.timeSignatureLower = timelineService.selectedComposition.timeSignatureLower;\n this.snapToGrid = timelineService.selectedComposition.snapToGrid;\n this.gridOffsetMillis = timelineService.selectedComposition.gridOffsetMillis;\n this.gridResolution = timelineService.selectedComposition.gridResolution;\n }\n\n ngOnInit() {}\n\n ok() {\n this.timelineService.selectedComposition.gridType = this.gridType;\n this.timelineService.selectedComposition.beatsPerMinute = this.beatsPerMinute;\n this.timelineService.selectedComposition.timeSignatureUpper = this.timeSignatureUpper;\n this.timelineService.selectedComposition.timeSignatureLower = this.timeSignatureLower;\n this.timelineService.selectedComposition.snapToGrid = this.snapToGrid;\n this.timelineService.selectedComposition.gridOffsetMillis = this.gridOffsetMillis;\n this.timelineService.selectedComposition.gridResolution = this.gridResolution;\n\n this.timelineService.updateGrid();\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.timeline.grid' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.grid-type' | translate }}</label>\n <div class=\"col-lg-8\">\n <select class=\"custom-select\" [ngModel]=\"gridType\" (ngModelChange)=\"gridType = $event\">\n <option value=\"time\">{{ 'designer.timeline.grid-type-time-based' | translate }}</option>\n <option value=\"musical\">{{ 'designer.timeline.grid-type-musical' | translate }}</option>\n </select>\n </div>\n </div>\n\n @if (gridType == 'musical') {\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.beats-per-minute' | translate }}</label>\n <div class=\"col-lg-8\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"beatsPerMinute\" (ngModelChange)=\"beatsPerMinute = $event\" />\n </div>\n </div>\n } @if (gridType == 'musical') {\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.time-signature' | translate }}</label>\n <div class=\"col-lg-8\">\n <input\n type=\"text\"\n class=\"form-control\"\n [ngModel]=\"timeSignatureUpper\"\n (ngModelChange)=\"timeSignatureUpper = $event\"\n style=\"float: left; width: 40px\"\n />\n <div class=\"d-flex px-2 h-100\" style=\"float: left\">\n <div class=\"m-auto\">/</div>\n </div>\n <input\n type=\"text\"\n class=\"form-control\"\n [ngModel]=\"timeSignatureLower\"\n (ngModelChange)=\"timeSignatureLower = $event\"\n style=\"width: 40px\"\n />\n </div>\n </div>\n } @if (gridType == 'musical') {\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.grid-resolution' | translate }}</label>\n <div class=\"col-lg-8\">\n <select class=\"custom-select\" [ngModel]=\"gridResolution\" (ngModelChange)=\"gridResolution = $event\">\n <option value=\"1\">1/1</option>\n <option value=\"2\">1/2</option>\n <option value=\"4\">1/4</option>\n <option value=\"8\">1/8</option>\n <option value=\"16\">1/16</option>\n <option value=\"32\">1/32</option>\n <option value=\"64\">1/64</option>\n </select>\n </div>\n </div>\n } @if (gridType == 'musical') {\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.grid-offset' | translate }}</label>\n <div class=\"col-lg-8\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"gridOffsetMillis\" (ngModelChange)=\"gridOffsetMillis = $event\" />\n </div>\n </div>\n }\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\"></label>\n <div class=\"col-lg-8\">\n <div class=\"form-check\">\n <input type=\"checkbox\" [ngModel]=\"snapToGrid\" (ngModelChange)=\"snapToGrid = $event\" class=\"form-check-input\" id=\"snapToGrid\" />\n\n <label class=\"form-check-label\" for=\"snapToGrid\">\n {{ 'designer.timeline.snap-to-grid' | translate }}\n </label>\n </div>\n </div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { HttpClient } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { map } from 'rxjs/operators';\nimport { Composition } from '../models/composition';\nimport { ConfigService } from '../services/config.service';\nimport { HotkeyTargetExcludeService } from '../services/hotkey-target-exclude.service';\nimport { IntroService } from '../services/intro.service';\nimport { ProjectService } from '../services/project.service';\nimport { TimelineService } from '../services/timeline.service';\nimport { UuidService } from '../services/uuid.service';\nimport { WarningDialogService } from '../services/warning-dialog.service';\nimport { CompositionSettingsComponent } from './composition-settings/composition-settings.component';\nimport { TimelineGridComponent } from './timeline-grid/timeline-grid.component';\nimport { LivePreviewService } from '../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-timeline',\n templateUrl: './timeline.component.html',\n styleUrls: ['./timeline.component.css'],\n standalone: false,\n})\nexport class TimelineComponent implements OnInit, AfterViewInit {\n @ViewChild('waveWrapper')\n waveWrapper: ElementRef;\n\n @ViewChild('waveElement')\n waveElement: ElementRef;\n\n private lastHeight: number;\n private lastWidth: number;\n\n constructor(\n public timelineService: TimelineService,\n private changeDetectorRef: ChangeDetectorRef,\n private modalService: BsModalService,\n private uuidService: UuidService,\n public projectService: ProjectService,\n private hotkeyTargetExcludeService: HotkeyTargetExcludeService,\n private warningDialogService: WarningDialogService,\n private http: HttpClient,\n private configService: ConfigService,\n public introService: IntroService,\n private livePreviewService: LivePreviewService\n ) {\n this.timelineService.waveSurferReady.subscribe(() => {\n this.onResize();\n });\n this.timelineService.detectChanges.subscribe(() => {\n this.changeDetectorRef.detectChanges();\n });\n }\n\n ngOnInit() {}\n\n ngAfterViewInit() {}\n\n @HostListener('window:resize')\n public onResize() {\n if (!this.waveElement) {\n return;\n }\n\n // Hide wavesurfer to calculate the height, because it will grow infinitely\n // otherwise\n this.waveElement.nativeElement.style.display = 'none';\n const height = this.waveWrapper.nativeElement.clientHeight;\n this.waveElement.nativeElement.style.display = 'block';\n\n const width = this.waveWrapper.nativeElement.clientWidth;\n\n if (!this.lastHeight || this.lastHeight !== height || !this.lastWidth || this.lastWidth !== width) {\n // Set height and redraw\n if (this.timelineService.waveSurfer) {\n this.timelineService.waveSurfer.setHeight(height);\n }\n\n this.lastHeight = height;\n this.lastWidth = width;\n }\n }\n\n play() {\n this.timelineService.playState = 'playing';\n this.livePreviewService.previewLive(\n this.timelineService.selectedComposition.name,\n Math.round(this.timelineService.waveSurfer.getCurrentTime() * 1000)\n );\n this.timelineService.waveSurfer.play();\n }\n\n pause() {\n this.timelineService.playState = 'paused';\n this.livePreviewService.stopPreviewPlay();\n this.timelineService.waveSurfer.pause();\n }\n\n rewind() {\n this.timelineService.playState = 'paused';\n this.pause();\n this.timelineService.waveSurfer.seekTo(0);\n }\n\n addRegion(waveSurferRegion?: any) {\n this.timelineService.addRegion(waveSurferRegion);\n }\n\n removeRegion() {\n this.timelineService.removeRegion();\n }\n\n openGridSettings() {\n const bsModalRef = this.modalService.show(TimelineGridComponent, { keyboard: true, ignoreBackdropClick: false, class: '' });\n }\n\n private afterDeleteFile() {\n this.timelineService.deleteSelectedComposition();\n }\n\n removeComposition() {\n this.warningDialogService\n .show('designer.timeline.warning-delete-composition')\n .pipe(\n map((result) => {\n if (result) {\n if (this.configService.enableMediaLibrary) {\n // don't delete the file from the library\n this.afterDeleteFile();\n } else {\n // the composition uuid and extension is used as the file name\n this.http\n .post('file/delete?compositionUuid=' + this.timelineService.selectedComposition.uuid, undefined)\n .pipe(\n map((response: Response) => {\n this.afterDeleteFile();\n })\n )\n .subscribe();\n }\n }\n })\n )\n .subscribe();\n }\n\n private openCompositionSettings(compositionIndex?: number, newComposition?: Composition) {\n const editComposition: Composition =\n newComposition || JSON.parse(JSON.stringify(this.projectService.project.compositions[compositionIndex]));\n\n const bsModalRef = this.modalService.show(CompositionSettingsComponent, {\n keyboard: false,\n ignoreBackdropClick: true,\n class: '',\n initialState: { composition: editComposition },\n });\n\n (bsModalRef.content as CompositionSettingsComponent).onClose.subscribe((result) => {\n if (result === 1) {\n // OK has been pressed -> save\n if (newComposition) {\n this.projectService.project.compositions.push(editComposition);\n this.timelineService.selectedCompositionIndex = this.projectService.project.compositions.length - 1;\n\n // create the composition, if externally necessary\n if (this.timelineService.externalCompositionsAvailable) {\n // TODO check, if this composition already exists externally and create it, if not\n // maybe not needed and even confusing?\n }\n } else {\n this.projectService.project.compositions[compositionIndex] = editComposition;\n }\n\n this.selectComposition(this.timelineService.selectedCompositionIndex);\n }\n });\n }\n\n compositionSettings() {\n this.openCompositionSettings(this.timelineService.selectedCompositionIndex);\n }\n\n addComposition() {\n // create a new composition\n const composition = new Composition();\n composition.uuid = this.uuidService.getUuid();\n composition.name = 'New Composition';\n\n this.openCompositionSettings(undefined, composition);\n }\n\n selectComposition(index: number) {\n this.timelineService.selectCompositionIndex(index);\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeyboardEvent(event: KeyboardEvent) {\n if (this.hotkeyTargetExcludeService.exclude(event)) {\n return;\n }\n\n if (!this.timelineService.selectedComposition) {\n return;\n }\n\n if (event.key === ' ') {\n if (this.timelineService.playState === 'paused') {\n this.play();\n } else {\n this.pause();\n }\n\n // prevent checkboxes being toggled, if in focus e.g.\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n setRegionStartMillis(value: any) {\n if (!this.timelineService.selectedPlaybackRegion) {\n return;\n }\n\n if (isNaN(value) || value < 0) {\n return;\n }\n\n this.timelineService.selectedPlaybackRegion.startMillis = +value;\n this.timelineService.updateSelectedRegion();\n }\n\n setRegionEndMillis(value: any) {\n if (!this.timelineService.selectedPlaybackRegion) {\n return;\n }\n\n if (isNaN(value) || value < 0) {\n return;\n }\n\n this.timelineService.selectedPlaybackRegion.endMillis = +value;\n this.timelineService.updateSelectedRegion();\n }\n}\n","<div class=\"card border-secondary h-100\" [class.card-intro-active]=\"introService.showStep('timeline')\">\n <div class=\"card-body h-100 d-flex\" style=\"flex-flow: column; overflow: unset\">\n <div class=\"d-flex pb-3\">\n <div class=\"btn-group mr-3 my-auto\" role=\"group\" style=\"float: left\">\n <a href=\"#\" class=\"btn btn-primary m-0 p-1 mr-3\" (click)=\"addComposition(); (false)\"\n ><i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i\n ></a>\n\n @if (projectService.project.compositions.length > 0) {\n <select\n class=\"mr-3\"\n [ngModel]=\"timelineService.selectedCompositionIndex\"\n (ngModelChange)=\"selectComposition($event)\"\n style=\"width: 150px; height: 30px\"\n >\n @for (composition of projectService.project.compositions; track composition; let i = $index) {\n <option [value]=\"i\">\n {{ composition.name }}\n </option>\n }\n </select>\n } @if (timelineService.selectedComposition) {\n <div class=\"d-flex\">\n <a href=\"#\" class=\"btn btn-primary m-0 p-1\" (click)=\"rewind(); (false)\"\n ><i class=\"fa fa-step-backward fa-fw\" aria-hidden=\"true\"></i\n ></a>\n @if (timelineService.playState == 'paused') {\n <a href=\"#\" class=\"btn btn-primary m-0 p-1\" (click)=\"play(); (false)\"><i class=\"fa fa-play fa-fw\" aria-hidden=\"true\"></i></a>\n } @if (timelineService.playState == 'playing') {\n <a href=\"#\" class=\"btn btn-primary m-0 p-1\" (click)=\"pause(); (false)\"><i class=\"fa fa-pause fa-fw\" aria-hidden=\"true\"></i></a>\n }\n </div>\n }\n </div>\n\n @if (timelineService.selectedComposition) {\n <div class=\"d-flex w-100\">\n @if (timelineService.duration) {\n <div class=\"my-auto mr-3\">\n <span style=\"width: 78px; text-align: left; display: inline-block; margin-left: 5px\">{{ timelineService.currentTime }}</span>\n <span style=\"display: inline-block\"></span>- {{ timelineService.duration }}\n </div>\n }\n <div class=\"my-auto mr-3 ml-auto\" style=\"float: left\">\n <i (click)=\"timelineService.applyZoom(timelineService.zoom - 20)\" class=\"fa fa-search-minus mr-3\" aria-hidden=\"true\"></i>\n <mv-slider\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [value]=\"timelineService.zoom\"\n [min]=\"0\"\n [max]=\"200\"\n [step]=\"20\"\n (change)=\"timelineService.applyZoom($event.newValue)\"\n ></mv-slider>\n <i (click)=\"timelineService.applyZoom(timelineService.zoom + 20)\" class=\"fa fa-search-plus ml-3\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"my-auto mr-3\">\n <input\n type=\"text\"\n [ngModel]=\"timelineService.selectedPlaybackRegion?.startMillis\"\n (ngModelChange)=\"setRegionStartMillis($event)\"\n />\n - <input type=\"text\" [ngModel]=\"timelineService.selectedPlaybackRegion?.endMillis\" (ngModelChange)=\"setRegionEndMillis($event)\" />\n </div>\n <a\n href=\"#\"\n class=\"btn btn-secondary m-0 py-1 mr-3\"\n (click)=\"openGridSettings(); (false)\"\n popover=\"{{ 'designer.timeline.grid' | translate }}\"\n container=\"body\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n ><i class=\"fa fa-th\" aria-hidden=\"true\"></i\n ></a>\n <a\n href=\"#\"\n class=\"btn btn-secondary m-0 py-1 mr-3\"\n (click)=\"removeRegion(); (false)\"\n popover=\"{{ 'designer.timeline.remove-region' | translate }}\"\n container=\"body\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n ><i class=\"fa fa-minus-circle\" aria-hidden=\"true\"></i\n ></a>\n <a\n href=\"#\"\n class=\"btn btn-secondary m-0 py-1 mr-3\"\n (click)=\"addRegion(); (false)\"\n popover=\"{{ 'designer.timeline.add-region' | translate }}\"\n container=\"body\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n ><i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i\n ></a>\n <a\n href=\"#\"\n class=\"btn btn-secondary m-0 py-1 mr-3\"\n (click)=\"removeComposition(); (false)\"\n popover=\"{{ 'designer.timeline.remove-composition' | translate }}\"\n container=\"body\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n ><i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i\n ></a>\n <a\n href=\"#\"\n class=\"btn btn-secondary m-0 py-1\"\n (click)=\"compositionSettings(); (false)\"\n popover=\"{{ 'designer.timeline.composition-settings' | translate }}\"\n container=\"body\"\n placement=\"left\"\n triggers=\"mouseenter:mouseleave\"\n ><i class=\"fa fa-cog\" aria-hidden=\"true\"></i\n ></a>\n </div>\n }\n </div>\n\n @if (timelineService.loadingAudioFile) {\n <div class=\"w-100 d-flex\">\n <i class=\"fa fa-circle-o-notch fa-spin m-auto\" style=\"margin-top: -30px\"></i>\n </div>\n } @if (timelineService.selectedComposition) {\n <div>\n <div id=\"waveform-timeline\"></div>\n </div>\n } @if (timelineService.selectedComposition) {\n <div #waveWrapper class=\"h-100\" style=\"flex: 2; position: relative\">\n <div #waveElement id=\"waveform\"></div>\n </div>\n } @if (projectService.project.compositions.length == 0) {\n <div class=\"w-100 d-flex\">\n <a href=\"#\" class=\"m-auto\" (click)=\"addComposition(); (false)\"\n ><i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i> {{ 'designer.timeline.no-compositions' | translate }}</a\n >\n </div>\n }\n </div>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Scene } from '../../models/scene';\n\n@Component({\n selector: 'lib-scene-settings',\n templateUrl: './scene-settings.component.html',\n styleUrls: ['./scene-settings.component.css'],\n standalone: false,\n})\nexport class SceneSettingsComponent implements OnInit {\n scene: Scene;\n\n name: string;\n fadeInMillis: number;\n fadeOutMillis: number;\n fadeInPre: boolean;\n fadeOutPost: boolean;\n\n constructor(public bsModalRef: BsModalRef) {}\n\n ngOnInit() {\n this.name = this.scene.name;\n this.fadeInMillis = this.scene.fadeInMillis;\n this.fadeOutMillis = this.scene.fadeOutMillis;\n this.fadeInPre = this.scene.fadeInPre;\n this.fadeOutPost = this.scene.fadeOutPost;\n }\n\n ok() {\n this.scene.name = this.name;\n\n if (!isNaN(this.fadeInMillis) && this.fadeInMillis >= 0) {\n this.scene.fadeInMillis = +this.fadeInMillis;\n }\n if (!isNaN(this.fadeOutMillis) && this.fadeOutMillis >= 0) {\n this.scene.fadeOutMillis = +this.fadeOutMillis;\n }\n\n this.scene.fadeInPre = this.fadeInPre;\n this.scene.fadeOutPost = this.fadeOutPost;\n\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ name }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.preset.settings-name' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"name\" (ngModelChange)=\"name = $event\" />\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.scene.settings-fade-in' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"fadeInMillis\" (ngModelChange)=\"fadeInMillis = $event\" />\n </div>\n <div class=\"col-lg-1 d-flex p-0\">\n <div class=\"my-auto\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\"></label>\n <div class=\"col-lg-8 d-flex\">\n <div class=\"form-check my-auto\">\n <input type=\"checkbox\" [ngModel]=\"fadeInPre\" (ngModelChange)=\"fadeInPre = $event\" class=\"form-check-input\" id=\"fadeInPre\" />\n\n <label class=\"form-check-label\" for=\"fadeInPre\">\n {{ 'designer.scene.settings-fade-in-pre' | translate }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.scene.settings-fade-out' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"fadeOutMillis\" (ngModelChange)=\"fadeOutMillis = $event\" />\n </div>\n <div class=\"col-lg-1 d-flex p-0\">\n <div class=\"my-auto\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\"></label>\n <div class=\"col-lg-8 d-flex\">\n <div class=\"form-check my-auto\">\n <input type=\"checkbox\" [ngModel]=\"fadeOutPost\" (ngModelChange)=\"fadeOutPost = $event\" class=\"form-check-input\" id=\"fadeOutPost\" />\n\n <label class=\"form-check-label\" for=\"fadeOutPost\">\n {{ 'designer.scene.settings-fade-out-post' | translate }}\n </label>\n </div>\n </div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Scene } from '../models/scene';\nimport { IntroService } from '../services/intro.service';\nimport { PresetService } from '../services/preset.service';\nimport { ProjectService } from '../services/project.service';\nimport { SceneService } from '../services/scene.service';\nimport { SceneSettingsComponent } from './scene-settings/scene-settings.component';\n\n@Component({\n selector: 'lib-app-scene',\n templateUrl: './scene.component.html',\n styleUrls: ['./scene.component.css'],\n standalone: false,\n})\nexport class SceneComponent implements OnInit {\n constructor(\n public sceneService: SceneService,\n public presetService: PresetService,\n public projectService: ProjectService,\n private modalService: BsModalService,\n public introService: IntroService\n ) {}\n\n ngOnInit() {}\n\n selectScene(event: any, index: number) {\n this.sceneService.selectScene(index);\n }\n\n removeScene() {\n if (this.sceneService.selectedScenes.length === 0) {\n return;\n }\n\n this.sceneService.removeScene(this.sceneService.selectedScenes[0]);\n }\n\n openSettings(scene: Scene) {\n const bsModalRef = this.modalService.show(SceneSettingsComponent, {\n keyboard: true,\n ignoreBackdropClick: false,\n class: '',\n initialState: { scene },\n });\n }\n}\n","<div class=\"card border-secondary panel h-100\" [class.card-intro-active]=\"introService.showStep('scenes')\">\n <div class=\"card-header d-flex\">\n <div>\n {{ 'designer.scene.title' | translate }}\n </div>\n <div class=\"ml-auto\">\n <a\n href=\"#\"\n class=\"d-none d-md-inline-block btn btn-secondary m-0 p-0\"\n [class.text-primary]=\"sceneService.multipleSelection == true\"\n (click)=\"sceneService.multipleSelection = !sceneService.multipleSelection; (false)\"\n ><i class=\"fa fa-object-group fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"d-none d-md-inline-block btn btn-secondary m-0 p-0\" (click)=\"removeScene(); (false)\"\n ><i class=\"fa fa-minus-circle fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"d-none d-md-inline-block btn btn-secondary m-0 p-0\" (click)=\"sceneService.addScene(); (false)\"\n ><i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i\n ></a>\n </div>\n </div>\n <div class=\"card-body border-secondary p-0\">\n <!-- List of scenes -->\n <div class=\"list-group\" [sortablejs]=\"projectService.project.scenes\">\n @for (scene of projectService.project.scenes; track scene; let i = $index) {\n <div\n class=\"list-group-item\"\n [class.active-light]=\"projectService.project.previewPreset && sceneService.sceneIsSelected(scene)\"\n [class.active]=\"!projectService.project.previewPreset && sceneService.sceneIsSelected(scene)\"\n >\n <div class=\"row d-flex\" (click)=\"selectScene($event, i)\" style=\"cursor: pointer\">\n <div class=\"d-none d-md-block col-auto list-sort-handle my-auto\" style=\"cursor: move; cursor: -webkit-grabbing\">\n <i class=\"fa fa-bars\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"my-auto\">\n {{ scene.name }}\n </div>\n <div class=\"my-auto ml-auto mr-2 d-flex\">\n <svg class=\"my-auto\" height=\"20\" width=\"20\">\n <circle cx=\"10\" cy=\"10\" r=\"9\" stroke=\"white\" stroke-width=\"1\" [attr.fill]=\"scene.color\" />\n </svg>\n </div>\n <div class=\"d-none d-md-flex my-auto mr-2\">\n <button type=\"button\" class=\"btn btn-secondary btn-sm py-0 px-1\" (click)=\"openSettings(scene); (false)\">...</button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { Fixture } from '../models/fixture';\nimport { FixturePoolService } from '../services/fixture-pool.service';\nimport { FixtureService } from '../services/fixture.service';\nimport { IntroService } from '../services/intro.service';\nimport { PresetService } from '../services/preset.service';\nimport { ProjectService } from '../services/project.service';\nimport { PresetFixture } from '../models/preset-fixture';\nimport type { Options } from 'sortablejs';\nimport { LivePreviewService } from '../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-fixture',\n templateUrl: './fixture.component.html',\n styleUrls: ['./fixture.component.css'],\n standalone: false,\n})\nexport class FixtureComponent implements OnInit {\n fixtureSortableOptions: Options = {\n onUpdate: () => this.fixtureListReordered(),\n };\n\n constructor(\n public projectService: ProjectService,\n public presetService: PresetService,\n private fixturePoolService: FixturePoolService,\n public fixtureService: FixtureService,\n public introService: IntroService,\n private livePreviewService: LivePreviewService\n ) {}\n\n ngOnInit() {}\n\n fixtureName(presetFixture: PresetFixture) {\n let name: string;\n name = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid).name;\n if (presetFixture.pixelKey) {\n name += ' - ' + presetFixture.pixelKey;\n }\n return name;\n }\n\n fixtureIsSelected(presetFixture: PresetFixture): boolean {\n const fixture = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid);\n if (this.fixtureService.settingsSelection) {\n return this.fixtureService.settingsFixtureIsSelected(fixture);\n } else {\n return this.presetService.fixtureIsSelected(fixture, presetFixture.pixelKey);\n }\n }\n\n selectFixture(event: any, presetFixture: PresetFixture) {\n const fixture = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid);\n if (this.fixtureService.settingsSelection) {\n // select fixtures for the settings\n this.fixtureService.switchSettingsFixtureSelection(fixture);\n this.presetService.fixtureSelectionSettingsChanged.next();\n } else {\n // select fixtures for the current preset\n this.presetService.switchFixtureSelection(fixture, presetFixture.pixelKey);\n this.presetService.fixtureSelectionChanged.next();\n this.livePreviewService.previewLive();\n }\n }\n\n selectAll() {\n this.presetService.selectAllFixtures();\n this.presetService.fixtureSelectionChanged.next();\n }\n\n selectNone() {\n this.presetService.selectNoFixtures();\n this.presetService.fixtureSelectionChanged.next();\n }\n\n fixtureListReordered() {\n this.livePreviewService.previewLive();\n }\n\n openFixturePool() {\n this.fixturePoolService.open();\n }\n}\n","<div class=\"card border-secondary h-100 panel\" [class.card-intro-active]=\"introService.showStep('fixtures')\">\n <div class=\"card-header d-flex\">\n <div>Fixtures</div>\n <div class=\"ml-auto\">\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"selectNone(); (false)\"\n ><i class=\"fa fa-square-o fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"selectAll(); (false)\"\n ><i class=\"fa fa-check-square-o fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"openFixturePool(); (false)\"\n ><i class=\"fa fa-cog fa-fw\" aria-hidden=\"true\"></i\n ></a>\n </div>\n </div>\n\n <div class=\"card-body h-100 p-0\">\n <!-- List of fixtures -->\n @if (presetService.selectedPreset) {\n <div class=\"list-group\" [sortablejs]=\"projectService.project.presetFixtures\" [sortablejsOptions]=\"fixtureSortableOptions\">\n @for (presetFixture of projectService.project.presetFixtures; track presetFixture) {\n <div class=\"list-group-item\" [class.inactive-list-item]=\"!fixtureIsSelected(presetFixture)\">\n <div class=\"row d-flex\" (click)=\"selectFixture($event, presetFixture)\" style=\"cursor: pointer\">\n <div class=\"col-auto list-sort-handle my-auto\" style=\"cursor: move; cursor: -webkit-grabbing\">\n <i class=\"fa fa-bars\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"form-check\">\n <input type=\"checkbox\" class=\"form-check-input\" id=\"active\" [ngModel]=\"fixtureIsSelected(presetFixture)\" />\n </div>\n <div>\n <span\n class=\"icon-{{\n fixtureService.getFixtureIconClass(\n fixtureService.getProfileByUuid(fixtureService.getFixtureByUuid(presetFixture.fixtureUuid).profileUuid)\n )\n }} mr-1\"\n ></span>\n {{ fixtureName(presetFixture) }}\n </div>\n </div>\n </div>\n }\n </div>\n } @if (projectService.project.presetFixtures.length == 0) {\n <div class=\"w-100 h-100 d-flex p-3 text-center\">\n <a href=\"#\" class=\"m-auto\" (click)=\"openFixturePool(); (false)\"\n ><i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i> {{ 'designer.fixture.no-fixtures' | translate }}</a\n >\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { FixtureCapabilityColor, FixtureCapabilityType } from '../../../models/fixture-capability';\nimport { FixtureCapabilityValue } from '../../../models/fixture-capability-value';\nimport { FixtureService } from '../../../services/fixture.service';\nimport { PresetService } from '../../../services/preset.service';\nimport { LivePreviewService } from '../../../services/live-preview.service';\n\ndeclare var iro: any;\n\n@Component({\n selector: 'lib-app-fixture-capability-color',\n templateUrl: './fixture-capability-color.component.html',\n styleUrls: ['./fixture-capability-color.component.css'],\n standalone: false,\n})\nexport class FixtureCapabilityColorComponent implements OnInit, OnDestroy {\n color = '#ffffff';\n colorPicker: any;\n active = false;\n private colorPickerMounted = false;\n\n // avoid internal updating events\n private updatingColor = false;\n\n private updateSubscription: Subscription;\n\n constructor(\n private presetService: PresetService,\n private fixtureService: FixtureService,\n private changeDetectorRef: ChangeDetectorRef,\n private livePreviewService: LivePreviewService\n ) {\n this.updateSubscription = this.presetService.previewSelectionChanged.subscribe(() => {\n this.update();\n this.changeDetectorRef.detectChanges();\n });\n this.update();\n }\n\n private update() {\n let red: number;\n let green: number;\n let blue: number;\n let capabilityValue: FixtureCapabilityValue;\n capabilityValue = this.presetService.getCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Red\n );\n if (capabilityValue) {\n red = 255 * capabilityValue.valuePercentage;\n }\n capabilityValue = this.presetService.getCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Green\n );\n if (capabilityValue) {\n green = 255 * capabilityValue.valuePercentage;\n }\n capabilityValue = this.presetService.getCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Blue\n );\n if (capabilityValue) {\n blue = 255 * capabilityValue.valuePercentage;\n }\n if (red !== undefined && green !== undefined && blue !== undefined) {\n this.active = true;\n } else {\n this.active = false;\n red = 255;\n green = 255;\n blue = 255;\n }\n this.color = this.fixtureService.rgbToHex(red, green, blue);\n this.setPickerColor(red, green, blue);\n }\n\n private setPickerColor(red: number, green: number, blue: number) {\n this.updatingColor = true;\n if (this.colorPicker) {\n this.colorPicker.color.rgb = { r: red, g: green, b: blue };\n }\n this.updatingColor = false;\n }\n\n ngOnDestroy() {\n this.updateSubscription.unsubscribe();\n }\n\n ngOnInit() {\n this.colorPicker = new iro.ColorPicker('#color-picker-container', {\n width: 180,\n color: this.color,\n borderWidth: 1,\n borderColor: '#ffffff',\n sliderMargin: 20,\n });\n\n this.colorPicker.on('color:change', this.changeColor.bind(this));\n\n // mounted may be called, before this callback has been added. use input:start therefore\n this.colorPicker.on('input:start', this.mount.bind(this));\n }\n\n mount() {\n this.colorPickerMounted = true;\n }\n\n private updateFixtureColor(color: any) {\n if (this.presetService.selectedPreset) {\n if (color) {\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n color.rgb.r / 255,\n undefined,\n FixtureCapabilityColor.Red\n );\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n color.rgb.g / 255,\n undefined,\n FixtureCapabilityColor.Green\n );\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n color.rgb.b / 255,\n undefined,\n FixtureCapabilityColor.Blue\n );\n } else {\n this.presetService.deleteCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Red\n );\n this.presetService.deleteCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Green\n );\n this.presetService.deleteCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Blue\n );\n }\n this.changeDetectorRef.detectChanges();\n this.presetService.fixtureColorChanged.next();\n this.livePreviewService.previewLive();\n }\n }\n\n changeActive(active: boolean) {\n this.active = active;\n\n if (active) {\n this.updateFixtureColor(this.colorPicker.color);\n } else {\n this.updateFixtureColor(undefined);\n this.setPickerColor(255, 255, 255);\n this.color = '#ffffff';\n }\n this.livePreviewService.previewLive();\n }\n\n changeColor(color: any) {\n if (!this.colorPickerMounted || this.updatingColor) {\n return;\n }\n\n this.active = true;\n this.color = color.hexString;\n this.updateFixtureColor(color);\n }\n}\n","<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"!active\">\n <div class=\"card-header\">\n <div class=\"my-auto\" style=\"float: left\">\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityColorActive\"\n [ngModel]=\"active\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityColorActive\">{{ 'designer.fixture.capability-color' | translate }}</label>\n </div>\n </div>\n <div class=\"pull-right\">\n <input type=\"text\" [(ngModel)]=\"color\" style=\"width: 58px; text-align: center; font-size: 12px; font-family: monospace\" />\n </div>\n </div>\n\n <div class=\"card-body h-100\">\n <div id=\"color-picker-container\"></div>\n </div>\n</div>\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { FixtureCapabilityType } from '../../../models/fixture-capability';\nimport { PresetService } from '../../../services/preset.service';\nimport { LivePreviewService } from '../../../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-fixture-capability-dimmer',\n templateUrl: './fixture-capability-dimmer.component.html',\n styleUrls: ['./fixture-capability-dimmer.component.css'],\n standalone: false,\n})\nexport class FixtureCapabilityDimmerComponent implements OnInit {\n constructor(\n private presetService: PresetService,\n private changeDetectorRef: ChangeDetectorRef,\n private livePreviewService: LivePreviewService\n ) {}\n\n ngOnInit() {}\n\n getValue(): number {\n const capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Intensity);\n if (capabilityValue) {\n return capabilityValue.valuePercentage;\n }\n return undefined;\n }\n\n getValueText(): number {\n const value = this.getValue();\n if (value >= 0) {\n return Math.round(value * 100 * 100) / 100;\n }\n return undefined;\n }\n\n setValue(value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (value < 0 || value > 1) {\n return;\n }\n\n this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Intensity, value);\n this.changeDetectorRef.detectChanges();\n this.livePreviewService.previewLive();\n }\n\n changeActive(active: boolean) {\n if (active) {\n this.setValue(1);\n } else {\n this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Intensity);\n this.changeDetectorRef.detectChanges();\n }\n this.livePreviewService.previewLive();\n }\n}\n","<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"getValue() == undefined\" style=\"min-height: 200px\">\n <div class=\"card-header\">\n <div class=\"my-auto\">\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityDimmerActive\"\n [ngModel]=\"getValue() != undefined\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityDimmerActive\">\n <i class=\"icon-dimmer\"></i>\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"card-body h-100 d-flex\" style=\"flex-direction: column\">\n <div class=\"mb-4 w-100 d-flex\">\n <input\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"getValueText() >= 0 ? getValueText() : 0\"\n (ngModelChange)=\"setValue($event / 100)\"\n style=\"width: 42px; height: 20px; text-align: center; font-size: 12px; font-family: monospace\"\n />\n </div>\n\n <div class=\"h-100 w-100 d-flex\">\n <mv-slider\n class=\"mx-auto\"\n [value]=\"getValue() >= 0 ? getValue() : 0\"\n (change)=\"setValue($event.newValue)\"\n [orientation]=\"'vertical'\"\n [reversed]=\"true\"\n style=\"height: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"0\"\n [max]=\"1\"\n [step]=\"0.001\"\n ></mv-slider>\n </div>\n </div>\n</div>\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { FixtureCapabilityType } from '../../../models/fixture-capability';\nimport { PresetService } from '../../../services/preset.service';\nimport { LivePreviewService } from '../../../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-fixture-capability-pan-tilt',\n templateUrl: './fixture-capability-pan-tilt.component.html',\n styleUrls: ['./fixture-capability-pan-tilt.component.css'],\n standalone: false,\n})\nexport class FixtureCapabilityPanTiltComponent implements OnInit {\n constructor(\n private presetService: PresetService,\n private changeDetectorRef: ChangeDetectorRef,\n private livePreviewService: LivePreviewService\n ) {}\n\n ngOnInit() {}\n\n getValuePan(): number {\n const capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Pan);\n if (capabilityValue) {\n return capabilityValue.valuePercentage;\n }\n return undefined;\n }\n\n getValueTextPan(): number {\n const value = this.getValuePan();\n if (value >= 0) {\n return Math.round(value * 100 * 100) / 100;\n }\n return undefined;\n }\n\n setValuePan(value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (value < 0 || value > 1) {\n return;\n }\n\n this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Pan, value);\n this.changeDetectorRef.detectChanges();\n this.livePreviewService.previewLive();\n }\n\n getValueTilt(): number {\n const capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Tilt);\n if (capabilityValue) {\n return capabilityValue.valuePercentage;\n }\n return undefined;\n }\n\n getValueTextTilt(): number {\n const value = this.getValueTilt();\n if (value >= 0) {\n return Math.round(value * 100 * 100) / 100;\n }\n return undefined;\n }\n\n setValueTilt(value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (value < 0 || value > 1) {\n return;\n }\n\n this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Tilt, value);\n this.changeDetectorRef.detectChanges();\n this.livePreviewService.previewLive();\n }\n\n changeActive(active: boolean) {\n if (active) {\n this.setValuePan(0.5);\n this.setValueTilt(0.5);\n } else {\n this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Pan);\n this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Tilt);\n this.changeDetectorRef.detectChanges();\n }\n this.livePreviewService.previewLive();\n }\n}\n","<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"getValuePan() == undefined && getValueTilt() == undefined\">\n <div class=\"card-header\">\n <div class=\"my-auto\">\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityColorWheelActive\"\n [ngModel]=\"getValuePan() != undefined || getValueTilt() != undefined\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityColorWheelActive\">{{ 'designer.fixture.capability-pan-tilt' | translate }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"card-body h-100 d-flex\" style=\"flex-direction: row\">\n <div class=\"d-flex h-100 mr-3\" style=\"flex-direction: column\">\n <div class=\"mb-4 w-100 d-flex\">\n <input\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"getValueTextPan() >= 0 ? getValueTextPan() : 0\"\n (ngModelChange)=\"setValuePan($event / 100)\"\n style=\"width: 42px; height: 20px; text-align: center; font-size: 12px; font-family: monospace\"\n />\n </div>\n\n <div class=\"h-100 w-100 d-flex\">\n <mv-slider\n class=\"mx-auto\"\n [value]=\"getValuePan() >= 0 ? getValuePan() : 0\"\n (change)=\"setValuePan($event.newValue)\"\n [orientation]=\"'vertical'\"\n [reversed]=\"true\"\n style=\"height: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"0\"\n [max]=\"1\"\n [step]=\"0.001\"\n ></mv-slider>\n </div>\n </div>\n\n <div class=\"d-flex h-100\" style=\"flex-direction: column\">\n <div class=\"mb-4 w-100 d-flex\">\n <input\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"getValueTextTilt() >= 0 ? getValueTextTilt() : 0\"\n (ngModelChange)=\"setValueTilt($event / 100)\"\n style=\"width: 42px; height: 20px; text-align: center; font-size: 12px; font-family: monospace\"\n />\n </div>\n\n <div class=\"h-100 w-100 d-flex\">\n <mv-slider\n class=\"mx-auto\"\n [value]=\"getValueTilt() >= 0 ? getValueTilt() : 0\"\n (change)=\"setValueTilt($event.newValue)\"\n [orientation]=\"'vertical'\"\n [reversed]=\"true\"\n style=\"height: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"0\"\n [max]=\"1\"\n [step]=\"0.001\"\n ></mv-slider>\n </div>\n </div>\n </div>\n</div>\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CachedFixtureCapability } from '../../../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../../../models/cached-fixture-channel';\nimport { FixtureCapabilityType } from '../../../models/fixture-capability';\nimport { FixtureProfile } from '../../../models/fixture-profile';\nimport { FixtureWheel } from '../../../models/fixture-wheel';\nimport { FixtureService } from '../../../services/fixture.service';\nimport { PresetService } from '../../../services/preset.service';\nimport { LivePreviewService } from '../../../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-fixture-capability-color-wheel',\n templateUrl: './fixture-capability-color-wheel.component.html',\n styleUrls: ['./fixture-capability-color-wheel.component.css'],\n standalone: false,\n})\nexport class FixtureCapabilityColorWheelComponent implements OnInit, OnDestroy {\n _fixtureProfile: FixtureProfile;\n _channel: CachedFixtureChannel;\n wheelName: string;\n wheel: FixtureWheel;\n slotCapabilities: CachedFixtureCapability[];\n\n private colorChangeSubscription: Subscription;\n\n @Input()\n set profile(value: FixtureProfile) {\n this._fixtureProfile = value;\n this.update();\n }\n\n @Input()\n set channel(value: CachedFixtureChannel) {\n this._channel = value;\n this.update();\n }\n\n @Input()\n wheelIndex: number;\n\n @Input()\n showContainer = false;\n\n constructor(\n public presetService: PresetService,\n private changeDetectorRef: ChangeDetectorRef,\n private fixtureService: FixtureService,\n private livePreviewService: LivePreviewService\n ) {}\n\n ngOnInit() {\n this.colorChangeSubscription = this.presetService.fixtureColorChanged.subscribe(() => {\n this.changeDetectorRef.detectChanges();\n });\n }\n\n ngOnDestroy() {\n this.colorChangeSubscription.unsubscribe();\n }\n\n private update() {\n if (this._fixtureProfile && this._channel) {\n this.wheelName = undefined;\n this.slotCapabilities = [];\n\n // get the wheel name\n for (const capability of this._channel.capabilities) {\n if (capability.wheel) {\n this.wheelName = capability.wheelName;\n break;\n }\n }\n if (!this.wheelName) {\n this.wheelName = this._channel.name;\n }\n\n this.wheel = this.fixtureService.getWheelByName(this._fixtureProfile, this.wheelName);\n\n // calculate all available slots\n for (const capability of this._channel.capabilities) {\n if (capability.capability.type === FixtureCapabilityType.WheelSlot) {\n this.slotCapabilities.push(capability);\n }\n }\n }\n\n this.changeDetectorRef.detectChanges();\n }\n\n getCapabilityColorStyle(capability: CachedFixtureCapability): any {\n let property = 'background-color';\n let value = 'black';\n let colors: string[] = [];\n\n if (capability.wheelSlots) {\n for (const slot of capability.wheelSlots) {\n // calculate the color based on the color wheel slot\n if (slot.colors.length > 0) {\n colors = colors.concat(slot.colors);\n }\n }\n }\n\n if (colors.length > 1) {\n // mixed colors -> gradient\n let colorString: string;\n for (const color of colors) {\n if (colorString) {\n colorString += ', ';\n } else {\n colorString = '';\n }\n colorString += color;\n }\n property = 'background-image';\n value = 'linear-gradient(to bottom right, ' + colorString + ')';\n } else if (colors.length === 1) {\n value = colors[0];\n } else {\n value = '#fff';\n }\n\n const style = {};\n style[property] = value;\n return style;\n }\n\n getCurrentSlotNumber(): number {\n const capabilityValue = this.presetService.getCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.WheelSlot,\n undefined,\n this.wheelName,\n this._fixtureProfile.uuid\n );\n\n if (capabilityValue) {\n return capabilityValue.slotNumber;\n }\n return undefined;\n }\n\n slotCapabilityIsSelected(slotNumber: number): boolean {\n const selectedSlotNumber = this.getCurrentSlotNumber();\n\n if (selectedSlotNumber >= 0) {\n // a slot is selected\n return selectedSlotNumber === slotNumber;\n } else {\n // no slot is selected and the capability is inactive\n // -> show the approx. color, if a color or a similar slot from a different wheel has been selected\n const approximatedCapability = this.presetService.getApproximatedColorWheelCapability(\n this.presetService.selectedPreset,\n this._channel\n );\n\n if (approximatedCapability) {\n return slotNumber === approximatedCapability.capability.slotNumber;\n } else {\n return false;\n }\n }\n }\n\n changeActive(active: boolean) {\n if (active) {\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.WheelSlot,\n undefined,\n 1,\n undefined,\n this.wheelName,\n this._fixtureProfile.uuid\n );\n } else {\n this.presetService.deleteCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.WheelSlot,\n undefined,\n this.wheelName,\n this._fixtureProfile.uuid\n );\n }\n\n this.livePreviewService.previewLive();\n }\n\n selectSlotNumber(slotNumber: number) {\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.WheelSlot,\n undefined,\n slotNumber,\n undefined,\n this.wheelName,\n this._fixtureProfile.uuid\n );\n this.livePreviewService.previewLive();\n }\n}\n","<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"getCurrentSlotNumber() == undefined\" style=\"min-height: 200px\">\n <div class=\"card-header\">\n <div class=\"my-auto\">\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityColorWheel{{ wheelIndex }}Active\"\n [ngModel]=\"getCurrentSlotNumber() != undefined\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityColorWheel{{ wheelIndex }}Active\">\n {{ 'designer.fixture.capability-color' | translate }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"card-body h-100\">\n @if (showContainer) {\n <div>{{ _fixtureProfile.name }} - {{ _channel.name }}</div>\n } @if (wheel) {\n <div class=\"d-flex\" style=\"max-width: 240px; flex-wrap: wrap\">\n @for (slot of slotCapabilities; track $index; let i = $index) {\n <div\n (click)=\"selectSlotNumber(slot.capability.slotNumber)\"\n class=\"m-1 color\"\n [class.color-selected]=\"slotCapabilityIsSelected(slot.capability.slotNumber)\"\n [ngStyle]=\"getCapabilityColorStyle(slot)\"\n >\n @if (slotCapabilityIsSelected(slot.capability.slotNumber)) {\n <div (click)=\"selectSlotNumber(slot.capability.slotNumber)\" class=\"color-selected-inner\"></div>\n }\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CachedFixtureChannel } from '../../models/cached-fixture-channel';\nimport { FixtureProfile } from '../../models/fixture-profile';\nimport { FixtureWheelSlotType } from '../../models/fixture-wheel-slot';\nimport { FixtureService } from '../../services/fixture.service';\nimport { IntroService } from '../../services/intro.service';\nimport { PresetService } from '../../services/preset.service';\nimport { ProjectService } from '../../services/project.service';\n\n@Component({\n selector: 'lib-app-fixture-capability',\n templateUrl: './fixture-capability.component.html',\n styleUrls: ['./fixture-capability.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class FixtureCapabilityComponent implements OnInit, OnDestroy {\n private fixtureSelectionChangedSubscription: Subscription;\n private previewSelectionChangedSubscription: Subscription;\n\n // map containing the profile and the channel name containing the wheel\n colorWheelChannels: Map<FixtureProfile, CachedFixtureChannel> = new Map<FixtureProfile, CachedFixtureChannel>();\n hasCapabilityDimmer: boolean = false;\n hasCapabilityColorOrColorWheel: boolean = false;\n hasCapabilityPanTilt: boolean = false;\n\n constructor(\n public presetService: PresetService,\n private fixtureService: FixtureService,\n private changeDetectorRef: ChangeDetectorRef,\n public projectService: ProjectService,\n public introService: IntroService\n ) {\n this.fixtureSelectionChangedSubscription = this.presetService.fixtureSelectionChanged.subscribe(() => {\n this.update();\n });\n\n this.previewSelectionChangedSubscription = this.presetService.previewSelectionChanged.subscribe(() => {\n this.update();\n });\n\n this.introService.stepChanged.subscribe(() => {\n this.changeDetectorRef.detectChanges();\n });\n }\n\n ngOnInit() {\n this.update();\n }\n\n ngOnDestroy() {\n this.fixtureSelectionChangedSubscription.unsubscribe();\n this.previewSelectionChangedSubscription.unsubscribe();\n }\n\n private wheelInList(wheels: Map<FixtureProfile, CachedFixtureChannel>, profile: FixtureProfile, channel: CachedFixtureChannel) {\n wheels.forEach((existingChannel: CachedFixtureChannel, existingProfile: FixtureProfile) => {\n if (existingProfile.uuid === profile.uuid && existingChannel.name === channel.name) {\n return true;\n }\n });\n\n return false;\n }\n\n private updateColorWheels() {\n this.colorWheelChannels = new Map<FixtureProfile, CachedFixtureChannel>();\n\n if (!this.presetService.selectedPreset) {\n return;\n }\n\n for (const preserFixture of this.presetService.selectedPreset.fixtures) {\n const fixture = this.fixtureService.getCachedFixtureByUuid(preserFixture.fixtureUuid, preserFixture.pixelKey);\n for (const channel of fixture.channels) {\n for (const capability of channel.capabilities) {\n if (capability.wheel && capability.wheelSlots && capability.wheelSlots.length > 0) {\n if (this.fixtureService.wheelHasSlotType(capability.wheel, FixtureWheelSlotType.Color)) {\n // color wheel\n if (!this.wheelInList(this.colorWheelChannels, fixture.profile, channel)) {\n this.colorWheelChannels.set(fixture.profile, channel);\n }\n } else if (this.fixtureService.wheelHasSlotType(capability.wheel, FixtureWheelSlotType.Gobo)) {\n // gobo wheel\n // TODO\n }\n }\n }\n }\n }\n }\n\n private updateCapabilities() {\n this.hasCapabilityDimmer = this.presetService.hasCapabilityDimmer();\n this.hasCapabilityColorOrColorWheel = this.presetService.hasCapabilityColorOrColorWheel();\n this.hasCapabilityPanTilt = this.presetService.hasCapabilityPanTilt();\n }\n\n private update() {\n this.updateColorWheels();\n this.updateCapabilities();\n this.changeDetectorRef.detectChanges();\n }\n\n isChrome(): boolean {\n if (navigator.appVersion.indexOf('Chrome/') !== -1) {\n return true;\n }\n return false;\n }\n}\n","<div class=\"card border-secondary panel h-100\" [class.card-intro-active]=\"introService.showStep('capabilities')\">\n <div class=\"card-body capability-container d-flex h-100\" style=\"overflow-y: hidden\">\n <!-- h-100 needs to be applied in chrome to avoid performance issues with many layouts (reflows)\n during sliding. But the class must not be applied e.g. in Safari, because the bottom margin is not correct\n anymore afterwards. -->\n @if (presetService.selectedPreset) {\n <div class=\"row m-0 pl-3\" [class.h-100]=\"isChrome()\">\n <!-- Dimmer -->\n <!-- the height attribute is required to avoid performance issues with many layouts (reflows)\n in Chrome during sliding -->\n @if (hasCapabilityDimmer) {\n <div class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-dimmer></lib-app-fixture-capability-dimmer>\n </div>\n }\n <!-- Color -->\n <!-- Also show for color wheel fixtures to approx. the color -->\n @if (hasCapabilityColorOrColorWheel) {\n <div class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-color></lib-app-fixture-capability-color>\n </div>\n }\n <!-- Color wheels -->\n @for (entry of colorWheelChannels | keyvalue; track $index; let i = $index) {\n <div class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-color-wheel\n [profile]=\"entry.key\"\n [channel]=\"entry.value\"\n [wheelIndex]=\"i\"\n [showContainer]=\"colorWheelChannels.size > 1\"\n ></lib-app-fixture-capability-color-wheel>\n </div>\n }\n <!-- Pan/Tilt -->\n @if (hasCapabilityPanTilt) {\n <div class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-pan-tilt></lib-app-fixture-capability-pan-tilt>\n </div>\n }\n <!-- Fix spacing at the end -->\n <div class=\"col col-auto p-0 my-3 mr-3\">&nbsp;</div>\n </div>\n } @if (projectService.project.fixtures.length == 0) {\n <div class=\"m-auto\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures' | translate }}</p>\n </div>\n } @if ( projectService.project.fixtures.length > 0 && presetService.selectedPreset && presetService.selectedPreset.fixtures.length == 0\n ) {\n <div class=\"m-auto\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures-selected' | translate }}</p>\n </div>\n } @if ( projectService.project.fixtures.length > 0 && presetService.selectedPreset && presetService.selectedPreset.fixtures.length > 0\n && !hasCapabilityColorOrColorWheel && !hasCapabilityPanTilt ) {\n <div class=\"m-auto\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-capabilities-available' | translate }}</p>\n </div>\n }\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { Positioning } from '../../../models/fixture';\nimport { FixtureService } from '../../../services/fixture.service';\nimport { PresetService } from '../../../services/preset.service';\nimport { PreviewService } from '../../../services/preview.service';\n\n@Component({\n selector: 'lib-app-fixture-settings-position',\n templateUrl: './fixture-settings-position.component.html',\n styleUrls: ['./fixture-settings-position.component.css'],\n standalone: false,\n})\nexport class FixtureSettingsPositionComponent implements OnInit {\n selectUndefinedOptionValue: any = undefined;\n\n selectedPositioning: string = undefined;\n\n positionX = 0;\n positionY = 0;\n positionZ = 0;\n\n positionXMin = -400;\n positionXMax = 400;\n positionYMin = 0;\n positionYMax = 400;\n positionZMin = -400;\n positionZMax = 400;\n\n rotationX = 0;\n rotationY = 0;\n rotationZ = 0;\n\n rotationMin = 0;\n rotationMax = 360;\n\n constructor(public fixtureService: FixtureService, private presetService: PresetService, private previewService: PreviewService) {\n this.presetService.fixtureSelectionSettingsChanged.subscribe(() => {\n this.updateSelection();\n });\n }\n\n ngOnInit() {}\n\n private updated() {\n this.previewService.doUpdateStageAndPositions.next();\n }\n\n private updateSelection() {\n // get all display values for the selected settings fixtures\n this.selectedPositioning = undefined;\n\n this.positionX = undefined;\n this.positionY = undefined;\n this.positionZ = undefined;\n\n this.rotationX = undefined;\n this.rotationY = undefined;\n this.rotationZ = undefined;\n\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.selectedPositioning) {\n if (this.selectedPositioning !== fixture.positioning) {\n this.selectedPositioning = undefined;\n break;\n }\n } else {\n this.selectedPositioning = fixture.positioning;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.positionX) {\n if (this.positionX !== fixture.positionX) {\n this.positionX = undefined;\n break;\n }\n } else {\n this.positionX = fixture.positionX;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.positionY) {\n if (this.positionY !== fixture.positionY) {\n this.positionY = undefined;\n break;\n }\n } else {\n this.positionY = fixture.positionY;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.positionZ) {\n if (this.positionZ !== fixture.positionZ) {\n this.positionZ = undefined;\n break;\n }\n } else {\n this.positionZ = fixture.positionZ;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.rotationX) {\n if (this.rotationX !== fixture.rotationX) {\n this.rotationX = undefined;\n break;\n }\n } else {\n this.rotationX = fixture.rotationX;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.rotationY) {\n if (this.rotationY !== fixture.rotationY) {\n this.rotationY = undefined;\n break;\n }\n } else {\n this.rotationY = fixture.rotationY;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.rotationZ) {\n if (this.rotationZ !== fixture.rotationZ) {\n this.rotationZ = undefined;\n break;\n }\n } else {\n this.rotationZ = fixture.rotationZ;\n }\n }\n }\n\n changePosition(positioningStr: string) {\n const positioning: Positioning = Positioning[positioningStr];\n\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n fixture.positioning = positioning;\n }\n\n this.updated();\n }\n\n changePositionManual(position: string, value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (position === 'x') {\n if (value >= this.positionXMin && value <= this.positionXMax) {\n this.positionX = +value;\n }\n } else if (position === 'y') {\n if (value >= this.positionYMin && value <= this.positionYMax) {\n this.positionY = +value;\n }\n } else if (position === 'z') {\n if (value >= this.positionZMin && value <= this.positionZMax) {\n this.positionZ = +value;\n }\n }\n\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (position === 'x') {\n if (value >= this.positionXMin && value <= this.positionXMax) {\n fixture.positionX = +value;\n }\n } else if (position === 'y') {\n if (value >= this.positionYMin && value <= this.positionYMax) {\n fixture.positionY = +value;\n }\n } else if (position === 'z') {\n if (value >= this.positionZMin && value <= this.positionZMax) {\n fixture.positionZ = +value;\n }\n }\n }\n\n this.updated();\n }\n\n changeRotationManual(rotation: string, value: any) {\n if (isNaN(value) || value < this.rotationMin || value > this.rotationMax) {\n return;\n }\n\n if (rotation === 'x') {\n this.rotationX = +value;\n } else if (rotation === 'y') {\n this.rotationY = +value;\n } else if (rotation === 'z') {\n this.rotationZ = +value;\n }\n\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (rotation === 'x') {\n fixture.rotationX = +value;\n } else if (rotation === 'y') {\n fixture.rotationY = +value;\n } else if (rotation === 'z') {\n fixture.rotationZ = +value;\n }\n }\n\n this.updated();\n }\n}\n","<div class=\"card border-secondary h-100\">\n <div class=\"card-header\">\n {{ 'designer.fixture.setting-position-title' | translate }}\n </div>\n\n @if (fixtureService.selectedSettingsFixtures.length > 0) {\n <div class=\"card-body h-100\">\n <div>\n <select class=\"mb-2\" style=\"width: 140px\" [(ngModel)]=\"selectedPositioning\" (change)=\"changePosition($event.target.value)\">\n <option [ngValue]=\"selectUndefinedOptionValue\"></option>\n <option value=\"topFront\">{{ 'designer.fixture.setting-position-front-top' | translate }}</option>\n <option value=\"bottomFront\">{{ 'designer.fixture.setting-position-front-bottom' | translate }}</option>\n <option value=\"topBack\">{{ 'designer.fixture.setting-position-back-top' | translate }}</option>\n <option value=\"bottomBack\">{{ 'designer.fixture.setting-position-back-bottom' | translate }}</option>\n <option value=\"manual\">{{ 'designer.fixture.setting-position-manual' | translate }}</option>\n </select>\n </div>\n @if (selectedPositioning == 'manual') {\n <div>\n <div>{{ 'designer.fixture.setting-position' | translate }}</div>\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 20px; float: left\">X</div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [value]=\"positionX ? positionX : (positionXMax + positionXMin) / 2\"\n [min]=\"positionXMin\"\n [max]=\"positionXMax\"\n [step]=\"1\"\n (change)=\"changePositionManual('x', $event.newValue)\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input [ngModel]=\"positionX\" (ngModelChange)=\"changePositionManual('x', $event)\" type=\"text\" class=\"slider-input\" />\n </div>\n </div>\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 20px; float: left\">Y</div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 80px; height: 18px\"\n [tooltip]=\"'hide'\"\n [value]=\"positionZ ? positionZ : (positionZMax + positionZMin) / 2\"\n [min]=\"positionZMin\"\n [max]=\"positionZMax\"\n [step]=\"1\"\n (change)=\"changePositionManual('z', $event.newValue)\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input [ngModel]=\"positionZ\" (ngModelChange)=\"changePositionManual('z', $event)\" type=\"text\" class=\"slider-input\" />\n </div>\n </div>\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 20px; float: left\">Z</div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [value]=\"positionY ? positionY : (positionYMax + positionYMin) / 2\"\n [min]=\"positionYMin\"\n [max]=\"positionYMax\"\n [step]=\"1\"\n (change)=\"changePositionManual('y', $event.newValue)\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input [ngModel]=\"positionY\" (ngModelChange)=\"changePositionManual('y', $event)\" type=\"text\" class=\"slider-input\" />\n </div>\n </div>\n <div class=\"mt-2\">{{ 'designer.fixture.setting-rotation' | translate }}</div>\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 20px; float: left\">X</div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [value]=\"rotationX ? rotationX : 0\"\n [min]=\"rotationMin\"\n [max]=\"rotationMax\"\n [step]=\"1\"\n (change)=\"changeRotationManual('x', $event.newValue)\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input [ngModel]=\"rotationX\" (ngModelChange)=\"changeRotationManual('x', $event)\" type=\"text\" class=\"slider-input\" />\n </div>\n </div>\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 20px; float: left\">Y</div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [value]=\"rotationY ? rotationY : 0\"\n [min]=\"rotationMin\"\n [max]=\"rotationMax\"\n [step]=\"1\"\n (change)=\"changeRotationManual('y', $event.newValue)\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input [ngModel]=\"rotationY\" (ngModelChange)=\"changeRotationManual('y', $event)\" type=\"text\" class=\"slider-input\" />\n </div>\n </div>\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 20px; float: left\">Z</div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 80px; height: 18px\"\n [tooltip]=\"'hide'\"\n [value]=\"rotationZ ? rotationZ : 0\"\n [min]=\"rotationMin\"\n [max]=\"rotationMax\"\n [step]=\"1\"\n (change)=\"changeRotationManual('z', $event.newValue)\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input [ngModel]=\"rotationZ\" (ngModelChange)=\"changeRotationManual('z', $event)\" type=\"text\" class=\"slider-input\" />\n </div>\n </div>\n </div>\n }\n </div>\n } @if (fixtureService.selectedSettingsFixtures.length == 0) {\n <div class=\"card-body h-100 d-flex\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures-settings-selected' | translate }}</p>\n </div>\n }\n</div>\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { PreviewService } from '../../../services/preview.service';\nimport { ProjectService } from '../../../services/project.service';\n\n@Component({\n selector: 'lib-app-fixture-settings-stage',\n templateUrl: './fixture-settings-stage.component.html',\n styleUrls: ['./fixture-settings-stage.component.css'],\n standalone: false,\n})\nexport class FixtureSettingsStageComponent implements OnInit {\n constructor(public projectService: ProjectService, public previewService: PreviewService, private changeDetectorRef: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n update() {\n this.previewService.updateStage();\n this.changeDetectorRef.detectChanges();\n\n this.previewService.doUpdateStageAndPositions.next();\n }\n}\n","<div class=\"card border-secondary h-100\">\n <div class=\"card-header\">\n {{ 'designer.fixture.setting-stage' | translate }}\n </div>\n\n <div class=\"card-body h-100\">\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-width' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageWidthCm\"\n [min]=\"100\"\n [max]=\"2000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageWidthCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageWidthCm\"\n (ngModelChange)=\"projectService.project.stageWidthCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-height' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageHeightCm\"\n [min]=\"100\"\n [max]=\"2000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageHeightCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageHeightCm\"\n (ngModelChange)=\"projectService.project.stageHeightCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-depth' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageDepthCm\"\n [min]=\"100\"\n [max]=\"2000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageDepthCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageDepthCm\"\n (ngModelChange)=\"projectService.project.stageDepthCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-floor-height' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageFloorHeightCm\"\n [min]=\"1\"\n [max]=\"1000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageFloorHeightCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageFloorHeightCm\"\n (ngModelChange)=\"projectService.project.stageFloorHeightCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-ceiling-height' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageCeilingHeightCm\"\n [min]=\"1\"\n [max]=\"1000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageCeilingHeightCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageCeilingHeightCm\"\n (ngModelChange)=\"projectService.project.stageCeilingHeightCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-pillar-width' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stagePillarWidthCm\"\n [min]=\"1\"\n [max]=\"200\"\n [step]=\"5\"\n (change)=\"projectService.project.stagePillarWidthCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stagePillarWidthCm\"\n (ngModelChange)=\"projectService.project.stagePillarWidthCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PresetService } from '../../services/preset.service';\n\n@Component({\n selector: 'lib-app-fixture-settings',\n templateUrl: './fixture-settings.component.html',\n styleUrls: ['./fixture-settings.component.css'],\n standalone: false,\n})\nexport class FixtureSettingsComponent implements OnInit {\n dmxChannels: number[] = [];\n\n constructor(private fixtureService: FixtureService, public presetService: PresetService) {\n for (let i = 0; i < 512; i++) {\n this.dmxChannels.push(0);\n }\n }\n\n ngOnInit() {}\n\n isChrome(): boolean {\n if (navigator.appVersion.indexOf('Chrome/') !== -1) {\n return true;\n }\n return false;\n }\n}\n","<div class=\"card border-secondary panel h-100\">\n <div class=\"card-body capability-container d-flex h-100\" style=\"overflow-y: hidden\">\n <!-- h-100 needs to be applied in chrome to avoid performance issues with many layouts (reflows)\n during sliding. But the class must not be applied e.g. in Safari, because the bottom margin is not correct\n anymore afterwards. -->\n <div class=\"row m-0 pl-3\" [class.h-100]=\"isChrome()\">\n <!-- Position -->\n <div class=\"col col-auto p-0 my-3 mr-3\">\n <lib-app-fixture-settings-position></lib-app-fixture-settings-position>\n </div>\n\n <!-- Stage -->\n <div class=\"col col-auto p-0 my-3 mr-3\">\n <lib-app-fixture-settings-stage></lib-app-fixture-settings-stage>\n </div>\n\n <!-- Fix spacing at the end -->\n <div class=\"col col-auto p-0 my-3 mr-3\">&nbsp;</div>\n </div>\n </div>\n</div>\n","import { Component, ElementRef, Input, NgZone, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, Subscription, timer } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CachedFixtureChannel } from '../../models/cached-fixture-channel';\nimport { EffectCurveProfileChannels } from '../../models/effect-curve-profile-channel';\nimport { FixtureCapability, FixtureCapabilityColor, FixtureCapabilityType } from '../../models/fixture-capability';\nimport { FixtureProfile } from '../../models/fixture-profile';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PresetService } from '../../services/preset.service';\nimport { EffectCurve } from './../../models/effect-curve';\nimport { AnimationService } from './../../services/animation.service';\nimport { EffectService } from '../../services/effect.service';\nimport { LivePreviewService } from '../../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-effect-curve',\n templateUrl: './effect-curve.component.html',\n styleUrls: ['./effect-curve.component.css'],\n standalone: false,\n})\nexport class EffectCurveComponent implements OnInit, OnDestroy {\n private gridUpdateSubscription: Subscription;\n private ctx: any;\n private maxWidth: number;\n private maxHeight: number;\n\n public lengthMillisMin = 20;\n public lengthMillisMax = 8000;\n public amplitudeMin = 0;\n public amplitudeMax = 4;\n public percentageMin = 0;\n public percentageMax = 1;\n public phaseMillisMin = -1000;\n public phaseMillisMax = 1000;\n public phasingMillisMin = 0;\n public phasingMillisMax = 1000;\n\n // the selected capabilities\n public availableCapabilities: FixtureCapability[] = [];\n\n // the selected channels\n public availableChannels: Map<FixtureProfile, CachedFixtureChannel[]> = new Map<FixtureProfile, CachedFixtureChannel[]>();\n public availableProfiles: FixtureProfile[] = [];\n public selectedProfiles: FixtureProfile[] = [];\n\n private effectsOpenChangedSubscription: Subscription;\n\n @Input() curve: EffectCurve;\n\n // whether the effect is currently being edited (open) or not\n @Input()\n set isSelected(value: boolean) {\n if (value) {\n this.startUpdateTimer();\n } else {\n this.stopUpdateTimer();\n }\n }\n\n @ViewChild('curveGrid', { static: true }) curveGrid: ElementRef;\n\n constructor(\n public presetService: PresetService,\n private animationService: AnimationService,\n private fixtureService: FixtureService,\n private translate: TranslateService,\n private effectService: EffectService,\n private ngZone: NgZone,\n public livePreviewService: LivePreviewService\n ) {\n this.presetService.fixtureSelectionChanged.subscribe(() => {\n this.updateCapabilitiesAndChannels();\n });\n\n this.updateCapabilitiesAndChannels();\n\n this.effectsOpenChangedSubscription = this.effectService.effectsOpenChanged.subscribe(() => {\n if (this.effectService.effectsOpen) {\n this.startUpdateTimer();\n } else {\n this.stopUpdateTimer();\n }\n });\n if (this.effectService.effectsOpen) {\n this.startUpdateTimer();\n }\n }\n\n ngOnInit() {\n const canvas = this.curveGrid.nativeElement;\n this.ctx = canvas.getContext('2d');\n this.maxWidth = canvas.width;\n this.maxHeight = canvas.height;\n\n this.redraw();\n }\n\n ngOnDestroy() {\n this.stopUpdateTimer();\n this.effectsOpenChangedSubscription.unsubscribe();\n }\n\n private startUpdateTimer() {\n if (!this.gridUpdateSubscription) {\n // Avoid triggering change detection with each animation frame -> run outside zone\n this.ngZone.runOutsideAngular(() => {\n this.gridUpdateSubscription = timer(0, 15).subscribe(() => {\n this.redraw();\n });\n });\n }\n }\n\n private stopUpdateTimer() {\n if (this.gridUpdateSubscription) {\n this.gridUpdateSubscription.unsubscribe();\n this.gridUpdateSubscription = undefined;\n }\n }\n\n private drawCurrentValue(currMillis: number, radius: number, lineWidth: number, durationMillis: number, maxHeight: number) {\n const currVal = 1 - this.curve.getValueAtMillis(currMillis);\n\n const x = (this.maxWidth * (currMillis % durationMillis)) / durationMillis;\n const y = maxHeight * currVal + lineWidth;\n\n this.ctx.beginPath();\n this.ctx.arc(x, y, radius, 0, 2 * Math.PI, false);\n this.ctx.fillStyle = '#fff';\n this.ctx.fill();\n this.ctx.lineWidth = 1;\n this.ctx.strokeStyle = '#000';\n this.ctx.stroke();\n }\n\n private getPhasingCount(): number {\n let count = 0;\n const countedFirstDmxChannelPixelKey: any[] = [];\n\n for (const presetFixture of this.presetService.selectedPreset.fixtures) {\n const fixture = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid);\n const firstDmxChannelAndFixtureUuid = {\n firstDmxChannel: fixture.dmxFirstChannel,\n pixelKey: presetFixture.pixelKey,\n };\n\n const exists = countedFirstDmxChannelPixelKey.some(\n (item) =>\n item.firstDmxChannel === firstDmxChannelAndFixtureUuid.firstDmxChannel &&\n ((!item.pixelKey && !firstDmxChannelAndFixtureUuid.pixelKey) || item.pixelKey === firstDmxChannelAndFixtureUuid.pixelKey)\n );\n\n // don't count it, if it has the same DMX address and pixel key (if available),\n // as an already counted one\n if (!exists) {\n count++;\n countedFirstDmxChannelPixelKey.push(firstDmxChannelAndFixtureUuid);\n }\n }\n\n return count;\n }\n\n redraw() {\n this.ctx.clearRect(0, 0, this.maxWidth, this.maxHeight);\n this.ctx.fillStyle = '#fff';\n this.ctx.strokeStyle = '#fff';\n\n // the width of the lines\n const width = 3;\n\n this.ctx.lineWidth = width;\n\n let oldX: number;\n let oldY: number;\n\n let step = 50;\n\n if (length < 500) {\n step = 5;\n }\n\n const durationMillis = this.curve.lengthMillis * Math.max(Math.round(4 - this.curve.lengthMillis / 1000), 1);\n const maxHeight = this.maxHeight - width * 2;\n\n // draw the curve\n for (let i = -step * 2; i < durationMillis + step * 2; i += step) {\n const val = 1 - this.curve.getValueAtMillis(i);\n\n // Scale the values to the grid dimensions\n const x = (this.maxWidth * i) / durationMillis;\n const y = maxHeight * val + width;\n\n if (oldY) {\n this.ctx.beginPath();\n this.ctx.moveTo(oldX, oldY);\n this.ctx.lineTo(x, y);\n this.ctx.stroke();\n }\n\n oldX = x;\n oldY = y;\n }\n\n // draw the current value\n this.drawCurrentValue(this.animationService.timeMillis % durationMillis, 5, width, durationMillis, maxHeight);\n\n // draw the phasing values (chase), if required\n let phasingCount = 0;\n\n if (this.curve.phasingMillis > 0 && this.presetService.selectedPreset) {\n phasingCount = this.getPhasingCount();\n }\n\n for (let i = 1; i < phasingCount; i++) {\n this.drawCurrentValue(\n (this.animationService.timeMillis - i * this.curve.phasingMillis) % durationMillis,\n 3,\n width,\n durationMillis,\n maxHeight\n );\n }\n }\n\n private calculateChannelCapabilities() {\n this.availableChannels = this.presetService.getSelectedProfileChannels(this.selectedProfiles);\n }\n\n changeProfileSelection($event: any, profile: FixtureProfile) {\n if (this.selectedProfiles.indexOf(profile) >= 0) {\n this.selectedProfiles.splice(this.selectedProfiles.indexOf(profile), 1);\n } else {\n this.selectedProfiles.push(profile);\n }\n\n this.calculateChannelCapabilities();\n }\n\n private updateCapabilitiesAndChannels() {\n // capabilities\n this.availableCapabilities = [];\n\n if (this.presetService.hasCapabilityDimmer()) {\n const capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.Intensity;\n this.availableCapabilities.push(capability);\n }\n\n if (this.presetService.hasCapabilityColor()) {\n let capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.ColorIntensity;\n capability.color = FixtureCapabilityColor.Red;\n this.availableCapabilities.push(capability);\n\n capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.ColorIntensity;\n capability.color = FixtureCapabilityColor.Green;\n this.availableCapabilities.push(capability);\n\n capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.ColorIntensity;\n capability.color = FixtureCapabilityColor.Blue;\n this.availableCapabilities.push(capability);\n }\n\n if (this.presetService.hasCapabilityPanTilt()) {\n let capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.Pan;\n this.availableCapabilities.push(capability);\n\n capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.Tilt;\n this.availableCapabilities.push(capability);\n }\n\n // calculate all profiles\n this.availableProfiles = this.presetService.getSelectedProfiles();\n\n // select all profiles by default\n this.selectedProfiles = [...this.availableProfiles];\n\n // calculate all channels\n this.calculateChannelCapabilities();\n }\n\n getCapabilityName(capability: FixtureCapability): Observable<string> {\n return this.translate\n .get(['designer.fixtureCapabilityType.' + capability.type, 'designer.fixtureCapabilityColor.' + capability.color])\n .pipe(\n map((result: string) => {\n let name = '';\n name += result['designer.fixtureCapabilityType.' + capability.type];\n\n if (capability.color) {\n name += ', ' + result['designer.fixtureCapabilityColor.' + capability.color];\n } else {\n return name;\n }\n\n return name;\n })\n );\n }\n\n capabilityChecked(capability: FixtureCapability): boolean {\n for (const existingCapability of this.curve.capabilities) {\n if (\n this.fixtureService.capabilitiesMatch(\n existingCapability.type,\n capability.type,\n existingCapability.color,\n capability.color,\n null,\n null,\n null,\n null\n )\n ) {\n return true;\n }\n }\n return false;\n }\n\n toggleCapability(event: any, capability: FixtureCapability) {\n if (event.currentTarget.checked) {\n // add the capability\n this.curve.capabilities.push(capability);\n } else {\n // Remove the channel\n for (let i = 0; i < this.curve.capabilities.length; i++) {\n const existingCapability = this.curve.capabilities[i];\n if (\n this.fixtureService.capabilitiesMatch(\n existingCapability.type,\n capability.type,\n existingCapability.color,\n capability.color,\n null,\n null,\n null,\n null\n )\n ) {\n this.curve.capabilities.splice(i, 1);\n }\n }\n }\n\n this.livePreviewService.previewLive();\n }\n\n getChannelName(profileName: string, channelName: string) {\n if (this.availableProfiles.length > 1) {\n return profileName + ' - ' + channelName;\n }\n\n return channelName;\n }\n\n channelChecked(profile: FixtureProfile, channel: CachedFixtureChannel): boolean {\n for (const profileChannels of this.curve.channels) {\n if (profileChannels.profileUuid === profile.uuid) {\n if (profileChannels.channels.includes(channel.name)) {\n return true;\n }\n\n break;\n }\n }\n\n return false;\n }\n\n toggleChannel(event: any, profile: FixtureProfile, channel: CachedFixtureChannel) {\n // add the profile, if necessary\n let profileContained = false;\n for (const profileChannels of this.curve.channels) {\n if (profileChannels.profileUuid === profile.uuid) {\n profileContained = true;\n break;\n }\n }\n\n if (!profileContained) {\n const profileChannels = new EffectCurveProfileChannels();\n profileChannels.profileUuid = profile.uuid;\n this.curve.channels.push(profileChannels);\n }\n\n // add or delete the channel\n for (const profileChannels of this.curve.channels) {\n if (profileChannels.profileUuid === profile.uuid) {\n const index = profileChannels.channels.indexOf(channel.name);\n\n if (index >= 0) {\n profileChannels.channels.splice(index, 1);\n } else {\n profileChannels.channels.push(channel.name);\n }\n\n break;\n }\n }\n\n this.livePreviewService.previewLive();\n }\n\n setLengthMillis(value: any) {\n if (!isNaN(value) && value >= this.lengthMillisMin && value <= this.lengthMillisMax) {\n this.curve.lengthMillis = +value;\n this.livePreviewService.previewLive();\n }\n }\n\n setAmplitude(value: any) {\n if (!isNaN(value) && value >= this.amplitudeMin && value <= this.amplitudeMax) {\n this.curve.amplitude = +value;\n this.livePreviewService.previewLive();\n }\n }\n\n setPosition(value: any) {\n if (!isNaN(value) && value >= this.percentageMin && value <= this.percentageMax) {\n this.curve.position = +value;\n this.livePreviewService.previewLive();\n }\n }\n\n setPhaseMillis(value: any) {\n if (!isNaN(value) && value >= this.phaseMillisMin && value <= this.phaseMillisMax) {\n this.curve.phaseMillis = +value;\n this.livePreviewService.previewLive();\n }\n }\n\n setPhasingMillis(value: any) {\n if (!isNaN(value) && value >= this.phasingMillisMin && value <= this.phasingMillisMax) {\n this.curve.phasingMillis = +value;\n this.livePreviewService.previewLive();\n }\n }\n}\n","<div class=\"mr-3\" style=\"float: left\">\n <div class=\"mb-2\">\n <select\n [ngModel]=\"curve.curveType\"\n (ngModelChange)=\"curve.curveType = $event; livePreviewService.previewLive()\"\n style=\"width: 200px; height: 20px\"\n >\n <option [value]=\"'sine'\">\n {{ 'designer.effect.curve-sine' | translate }}\n </option>\n <option [value]=\"'square'\">\n {{ 'designer.effect.curve-square' | translate }}\n </option>\n <!-- <option [value]=\"'triangle'\">\n {{ 'designer.effect.curve-triangle' | translate }}</option>\n <option [value]=\"'sawtooth'\">\n {{ 'designer.effect.curve-sawtooth' | translate }}</option>\n <option [value]=\"'reverse-sawtooth'\">\n {{ 'designer.effect.curve-reverse-sawtooth' | translate }}</option> -->\n </select>\n </div>\n <div>\n <canvas #curveGrid class=\"curve-grid\" width=\"200\" height=\"100\" viewBox=\"150 -75 4850 5150\" preserveAspectRatio=\"none\"></canvas>\n </div>\n</div>\n\n<div class=\"mr-4\" style=\"float: left\">\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 100px; float: left\">\n {{ 'designer.effect.curve-length' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n (change)=\"redraw(); livePreviewService.previewLive()\"\n [(value)]=\"curve.lengthMillis\"\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [value]=\"0\"\n [min]=\"lengthMillisMin\"\n [max]=\"lengthMillisMax\"\n [step]=\"1\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input type=\"text\" class=\"slider-input\" [ngModel]=\"curve.lengthMillis\" (ngModelChange)=\"setLengthMillis($event); redraw()\" />\n </div>\n <div class=\"my-auto ml-1\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 100px; float: left\">\n {{ 'designer.effect.curve-amplitude' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n (change)=\"redraw(); livePreviewService.previewLive()\"\n [(value)]=\"curve.amplitude\"\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [min]=\"amplitudeMin\"\n [max]=\"amplitudeMax\"\n [step]=\"0.01\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input type=\"text\" class=\"slider-input\" [ngModel]=\"curve.amplitude\" (ngModelChange)=\"setAmplitude($event); redraw()\" />\n </div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 100px; float: left\">\n {{ 'designer.effect.curve-position' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n (change)=\"redraw(); livePreviewService.previewLive()\"\n [(value)]=\"curve.position\"\n style=\"width: 80px; height: 18px\"\n [tooltip]=\"'hide'\"\n [min]=\"percentageMin\"\n [max]=\"percentageMax\"\n [step]=\"0.01\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input type=\"text\" class=\"slider-input\" [ngModel]=\"curve.position\" (ngModelChange)=\"setPosition($event); redraw()\" />\n </div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 100px; float: left\">\n {{ 'designer.effect.curve-phase' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n (change)=\"redraw(); livePreviewService.previewLive()\"\n [(value)]=\"curve.phaseMillis\"\n style=\"width: 80px; height: 18px\"\n [tooltip]=\"'hide'\"\n [min]=\"phaseMillisMin\"\n [max]=\"phaseMillisMax\"\n [step]=\"1\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input type=\"text\" class=\"slider-input\" [ngModel]=\"curve.phaseMillis\" (ngModelChange)=\"setPhaseMillis($event); redraw()\" />\n </div>\n <div class=\"my-auto ml-1\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 100px; float: left\">\n {{ 'designer.effect.curve-chase' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n (change)=\"redraw(); livePreviewService.previewLive()\"\n [(value)]=\"curve.phasingMillis\"\n style=\"width: 80px; height: 18px\"\n [tooltip]=\"'hide'\"\n [min]=\"phasingMillisMin\"\n [max]=\"phasingMillisMax\"\n [step]=\"1\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input type=\"text\" class=\"slider-input\" [ngModel]=\"curve.phasingMillis\" (ngModelChange)=\"setPhasingMillis($event); redraw()\" />\n </div>\n <div class=\"my-auto ml-1\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n</div>\n\n<!-- Menu for the capabilities and channels-->\n<div class=\"col col-auto p-0\" style=\"margin-right: 1px; width: 50px; float: left\">\n <div class=\"nav flex-column nav-pills\" id=\"v-pills-tab\" role=\"tablist\" aria-orientation=\"vertical\">\n <a\n class=\"nav-link px-3 active\"\n id=\"v-pills-effect-capabilities-tab\"\n popover=\"{{ 'designer.misc.capabilities' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-effect-capabilities-{{ curve?.uuid }}\"\n role=\"tab\"\n aria-controls=\"v-pills-capabilities\"\n aria-selected=\"true\"\n >\n <i class=\"fa fa-bolt fa-fw\" aria-hidden=\"true\"></i>\n </a>\n <a\n class=\"nav-link px-3\"\n id=\"v-pills-effect-channels-tab\"\n popover=\"{{ 'designer.misc.channels' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-effect-channels-{{ curve?.uuid }}\"\n role=\"tab\"\n aria-controls=\"v-pills-channels\"\n aria-selected=\"false\"\n >\n <i class=\"fa fa-sliders fa-fw\" aria-hidden=\"true\"></i>\n </a>\n </div>\n</div>\n\n<div class=\"h-100\" class=\"applying-to\">\n <div class=\"tab-content h-100\" id=\"v-pills-tabContent\">\n <div class=\"tab-pane h-100 show active\" id=\"v-pills-effect-capabilities-{{ curve?.uuid }}\" role=\"tabpanel\">\n <!-- Capabilities-->\n @for (capability of availableCapabilities; track $index; let i = $index) {\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capability_{{ curve?.uuid + '_' + i }}\"\n [ngModel]=\"capabilityChecked(capability)\"\n (change)=\"toggleCapability($event, capability)\"\n />\n <label class=\"form-check-label\" for=\"capability_{{ curve?.uuid + '_' + i }}\">{{ getCapabilityName(capability) | async }}</label>\n </div>\n }\n </div>\n <div class=\"tab-pane h-100 show\" id=\"v-pills-effect-channels-{{ curve?.uuid }}\" role=\"tabpanel\">\n <!-- channels -->\n\n <!-- profile selection -->\n @if (availableProfiles.length > 1) {\n <div>\n @for (profile of availableProfiles; track profile; let i = $index) {\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"channel_profile_{{ curve?.uuid }}_{{ profile.uuid }}\"\n [ngModel]=\"selectedProfiles.indexOf(profile) >= 0\"\n (change)=\"changeProfileSelection($event, profile)\"\n />\n <label class=\"form-check-label\" for=\"channel_profile_{{ curve?.uuid }}_{{ profile.uuid }}\">{{ profile.name }}</label>\n </div>\n }\n <hr class=\"my-1\" style=\"border-color: white\" />\n </div>\n }\n\n <!-- channels -->\n @for (entry of availableChannels | keyvalue; track entry; let i = $index) { @for (channel of entry.value; track channel; let j =\n $index) {\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"channel_{{ curve?.uuid }}_{{ i }}_{{ j }}\"\n [ngModel]=\"channelChecked(entry.key, channel)\"\n (change)=\"toggleChannel($event, entry.key, channel)\"\n />\n <label class=\"form-check-label\" for=\"channel_{{ curve?.uuid }}_{{ i }}_{{ j }}\">{{\n getChannelName(entry.key.name, channel.name)\n }}</label>\n </div>\n } }\n </div>\n </div>\n</div>\n","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'lib-app-effect-pan-tilt',\n templateUrl: './effect-pan-tilt.component.html',\n styleUrls: ['./effect-pan-tilt.component.css'],\n standalone: false,\n})\nexport class EffectPanTiltComponent implements OnInit {\n @ViewChild('panTiltGrid') panTiltGrid: ElementRef;\n\n // private line = d3.line();\n private svg;\n private path;\n\n private points = [\n [0, 500],\n [500, 0],\n [1000, 500],\n [500, 1000],\n ];\n\n private dragged = null;\n private selected = this.points[0];\n\n constructor() {}\n\n private redraw() {}\n\n ngOnInit() {}\n}\n","<svg #panTiltGrid class=\"pan-tilt-grid\" width=\"150\" height=\"150\" viewBox=\"-100 -100 1200 1200\" style=\"border: 1px solid white\"></svg>\n","import { Component, OnInit } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { Effect } from '../models/effect';\nimport { EffectCurve } from '../models/effect-curve';\nimport { EffectPanTilt } from '../models/effect-pan-tilt';\nimport { EffectService } from '../services/effect.service';\nimport { PresetService } from '../services/preset.service';\nimport { UuidService } from '../services/uuid.service';\nimport { WarningDialogService } from '../services/warning-dialog.service';\nimport { LivePreviewService } from '../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-effect',\n templateUrl: './effect.component.html',\n styleUrls: ['./effect.component.css'],\n standalone: false,\n})\nexport class EffectComponent implements OnInit {\n constructor(\n private uuidService: UuidService,\n public presetService: PresetService,\n public effectService: EffectService,\n private warningDialogService: WarningDialogService,\n public livePreviewService: LivePreviewService\n ) {}\n\n ngOnInit() {}\n\n private addEffect(effect: Effect) {\n this.effectService.selectedEffect = effect;\n\n if (this.presetService.selectedPreset) {\n this.presetService.selectedPreset.effects.push(effect);\n }\n }\n\n addCurveEffect() {\n const effect = new EffectCurve();\n effect.uuid = this.uuidService.getUuid();\n this.addEffect(effect);\n this.livePreviewService.previewLive();\n }\n\n addPanTiltEffect() {\n this.addEffect(new EffectPanTilt());\n }\n\n openEffect(effect: Effect, event: any) {\n if (event) {\n this.effectService.selectedEffect = effect;\n } else {\n if (this.effectService.selectedEffect === effect) {\n this.effectService.selectedEffect = undefined;\n }\n }\n }\n\n deleteEffect(effect: Effect) {\n this.warningDialogService\n .show('designer.effect.delete-warning')\n .pipe(\n map((result) => {\n if (result) {\n this.presetService.selectedPreset.effects.splice(this.presetService.selectedPreset.effects.indexOf(effect), 1);\n this.livePreviewService.previewLive();\n }\n })\n )\n .subscribe();\n }\n}\n","<div class=\"card border-secondary panel h-100\">\n @if (presetService.selectedPreset) {\n <div class=\"card-body capability-container\">\n <div class=\"m-3\">\n <accordion [closeOthers]=\"true\">\n @for (item of presetService.selectedPreset.effects; track item; let i = $index) {\n <accordion-group [isOpen]=\"effectService.selectedEffect == item\" (isOpenChange)=\"openEffect(item, $event)\" style=\"margin-top: 1px\">\n <button class=\"btn btn-link btn-block clearfix\" accordion-heading>\n <div class=\"pull-left float-left d-flex w-100\">\n @if (item.type == 'curve') {\n <i class=\"fa fa-area-chart fa-fw my-auto\" aria-hidden=\"true\"></i>\n } @if (item.type == 'pan-tilt') {\n <i class=\"fa fa-arrows-alt fa-fw my-auto\" aria-hidden=\"true\"></i>\n }\n <span class=\"ml-2\">{{ 'designer.effect.type-' + item.type | translate }}</span>\n <div class=\"ml-auto mr-2\">\n <i\n (click)=\"item.visible = !item.visible; livePreviewService.previewLive(); $event.stopPropagation()\"\n class=\"fa fa-eye fa-fw\"\n [class.text-primary]=\"item.visible\"\n aria-hidden=\"true\"\n ></i>\n </div>\n <div class=\"mr-2\">\n <i (click)=\"this.deleteEffect(item); $event.stopPropagation()\" class=\"fa fa-trash fa-fw\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"mr-2\">\n @if (item == effectService.selectedEffect) {\n <i class=\"fa fa-caret-down fa-fw\" aria-hidden=\"true\"></i>\n } @if (item != effectService.selectedEffect) {\n <i class=\"fa fa-caret-right fa-fw\" aria-hidden=\"true\"></i>\n }\n </div>\n </div>\n </button>\n @if (item.type == 'curve') {\n <div style=\"min-width: 670px\">\n <lib-app-effect-curve [curve]=\"item\" [isSelected]=\"item == effectService.selectedEffect\"></lib-app-effect-curve>\n </div>\n } @if (item.type == 'pan-tilt') {\n <div style=\"min-width: 500px\">\n <lib-app-effect-pan-tilt></lib-app-effect-pan-tilt>\n </div>\n }\n </accordion-group>\n }\n </accordion>\n <div class=\"d-flex mx-auto mt-3\">\n <div class=\"dropdown d-flex\">\n <a\n class=\"btn btn-secondary dropdown-toggle\"\n href=\"#\"\n role=\"button\"\n id=\"dropdownMenuLink\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i> {{ 'designer.effect.add-new' | translate }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuLink\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"addCurveEffect(); (false)\">\n <i class=\"fa fa-area-chart fa-fw\" aria-hidden=\"true\"></i> {{ 'designer.effect.curve' | translate }}</a\n >\n <!-- <a class=\"dropdown-item\" href=\"#\" (click)=\"addPanTiltEffect()\">\n <i class=\"fa fa-arrows-alt fa-fw\" aria-hidden=\"true\"></i> Pan/Tilt</a> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Preset } from '../../models/preset';\n\n@Component({\n selector: 'lib-preset-settings',\n templateUrl: './preset-settings.component.html',\n styleUrls: ['./preset-settings.component.css'],\n standalone: false,\n})\nexport class PresetSettingsComponent implements OnInit {\n preset: Preset;\n\n name: string;\n startMillis: number;\n endMillis: number;\n fadeInMillis: number;\n fadeOutMillis: number;\n fadeInPre: boolean;\n fadeOutPost: boolean;\n\n constructor(public bsModalRef: BsModalRef) {}\n\n ngOnInit() {\n this.name = this.preset.name;\n this.startMillis = this.preset.startMillis;\n this.endMillis = this.preset.endMillis;\n this.fadeInMillis = this.preset.fadeInMillis;\n this.fadeOutMillis = this.preset.fadeOutMillis;\n this.fadeInPre = this.preset.fadeInPre;\n this.fadeOutPost = this.preset.fadeOutPost;\n }\n\n ok() {\n this.preset.name = this.name;\n\n if (this.startMillis === undefined || this.startMillis === null || (this.startMillis as any) === '') {\n this.preset.startMillis = undefined;\n } else if (!isNaN(this.startMillis) && this.startMillis >= 0) {\n this.preset.startMillis = +this.startMillis;\n }\n if (this.endMillis === undefined || this.endMillis === null || (this.endMillis as any) === '') {\n this.preset.endMillis = undefined;\n } else if (!isNaN(this.endMillis) && this.endMillis >= 0) {\n this.preset.endMillis = +this.endMillis;\n }\n if (!isNaN(this.fadeInMillis) && this.fadeInMillis >= 0) {\n this.preset.fadeInMillis = +this.fadeInMillis;\n }\n if (!isNaN(this.fadeOutMillis) && this.fadeOutMillis >= 0) {\n this.preset.fadeOutMillis = +this.fadeOutMillis;\n }\n\n this.preset.fadeInPre = this.fadeInPre;\n this.preset.fadeOutPost = this.fadeOutPost;\n\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ name }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.preset.settings-name' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"name\" (ngModelChange)=\"name = $event\" />\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.preset.settings-start' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"startMillis\" (ngModelChange)=\"startMillis = $event\" />\n </div>\n <div class=\"col-lg-1 d-flex p-0\">\n <div class=\"my-auto\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.preset.settings-end' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"endMillis\" (ngModelChange)=\"endMillis = $event\" />\n </div>\n <div class=\"col-lg-1 d-flex p-0\">\n <div class=\"my-auto\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.preset.settings-fade-in' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"fadeInMillis\" (ngModelChange)=\"fadeInMillis = $event\" />\n </div>\n <div class=\"col-lg-1 d-flex p-0\">\n <div class=\"my-auto\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\"></label>\n <div class=\"col-lg-8 d-flex\">\n <div class=\"form-check my-auto\">\n <input type=\"checkbox\" [ngModel]=\"fadeInPre\" (ngModelChange)=\"fadeInPre = $event\" class=\"form-check-input\" id=\"fadeInPre\" />\n\n <label class=\"form-check-label\" for=\"fadeInPre\">\n {{ 'designer.preset.settings-fade-in-pre' | translate }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.preset.settings-fade-out' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"fadeOutMillis\" (ngModelChange)=\"fadeOutMillis = $event\" />\n </div>\n <div class=\"col-lg-1 d-flex p-0\">\n <div class=\"my-auto\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\"></label>\n <div class=\"col-lg-8 d-flex\">\n <div class=\"form-check my-auto\">\n <input type=\"checkbox\" [ngModel]=\"fadeOutPost\" (ngModelChange)=\"fadeOutPost = $event\" class=\"form-check-input\" id=\"fadeOutPost\" />\n\n <label class=\"form-check-label\" for=\"fadeOutPost\">\n {{ 'designer.preset.settings-fade-out-post' | translate }}\n </label>\n </div>\n </div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Preset } from '../models/preset';\nimport { IntroService } from '../services/intro.service';\nimport { PresetService } from '../services/preset.service';\nimport { ProjectService } from '../services/project.service';\nimport { SceneService } from '../services/scene.service';\nimport { PresetSettingsComponent } from './preset-settings/preset-settings.component';\nimport { TreeNode } from '../tree/tree.component';\n\n@Component({\n selector: 'lib-app-preset',\n templateUrl: './preset.component.html',\n styleUrls: ['./preset.component.css'],\n standalone: false,\n})\nexport class PresetComponent implements OnInit {\n treeNodes: TreeNode[] = [\n {\n id: 1,\n name: 'root1',\n isFolder: true,\n children: [\n { id: 2, name: 'child1', isFolder: false },\n { id: 3, name: 'child2', isFolder: false },\n ],\n },\n {\n id: 4,\n name: 'root2',\n isFolder: true,\n children: [\n { id: 5, name: 'child1', isFolder: false },\n { id: 6, name: 'child2', isFolder: false },\n ],\n },\n ];\n\n constructor(\n public presetService: PresetService,\n public sceneService: SceneService,\n public projectService: ProjectService,\n public introService: IntroService,\n private modalService: BsModalService\n ) {}\n\n ngOnInit() {}\n\n onActivate(node: TreeNode) {\n console.log(node);\n }\n\n selectPreset(index: number) {\n this.projectService.project.previewPreset = true;\n this.presetService.selectPreset(index);\n }\n\n enableCheckbox(): boolean {\n return this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1;\n }\n\n activatePreset(active: boolean, index: number) {\n if (this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1) {\n const uuid = this.projectService.project.presets[index].uuid;\n\n if (active) {\n // Activate a new uuid\n this.sceneService.selectedScenes[0].presetUuids.push(uuid);\n } else {\n // Remove the uuid\n for (let i = 0; i < this.sceneService.selectedScenes[0].presetUuids.length; i++) {\n if (this.sceneService.selectedScenes[0].presetUuids[i] === uuid) {\n this.sceneService.selectedScenes[0].presetUuids.splice(i, 1);\n return;\n }\n }\n }\n }\n }\n\n addPreset() {\n this.presetService.addPreset();\n\n if (this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1) {\n this.sceneService.selectedScenes[0].presetUuids.push(this.presetService.selectedPreset.uuid);\n }\n }\n\n removePreset() {\n if (!this.presetService.selectedPreset) {\n return;\n }\n\n this.projectService.project.presets.splice(this.projectService.project.presets.indexOf(this.presetService.selectedPreset), 1);\n this.presetService.selectPreset(0);\n }\n\n openSettings(preset: Preset) {\n const bsModalRef = this.modalService.show(PresetSettingsComponent, {\n keyboard: true,\n ignoreBackdropClick: false,\n class: '',\n initialState: { preset },\n });\n }\n}\n","<div\n class=\"card border-secondary h-100 panel card-intro-preset card-intro-active\"\n [class.card-intro-active]=\"introService.showStep('presets')\"\n>\n <div class=\"card-header d-flex\">\n <div>\n {{ 'designer.preset.title' | translate }}\n </div>\n <div class=\"ml-auto\">\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"removePreset(); (false)\"\n ><i class=\"fa fa-minus-circle fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"addPreset(); (false)\"\n ><i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i\n ></a>\n </div>\n </div>\n\n <div class=\"card-body h-100 p-0\">\n <!-- List of presets -->\n <!-- <lib-tree [nodes]=\"treeNodes\" (activate)=\"onActivate($event)\">\n <ng-template #nodeTemplate let-node>\n <span>{{ node.name }}</span>\n </ng-template>\n </lib-tree> -->\n\n <div class=\"list-group\" [sortablejs]=\"projectService.project.presets\">\n @for (item of projectService.project.presets; track item; let i = $index) {\n <div\n class=\"list-group-item\"\n (click)=\"selectPreset(i)\"\n [class.active-light]=\"!projectService.project.previewPreset && item == presetService.selectedPreset\"\n [class.active]=\"projectService.project.previewPreset && item == presetService.selectedPreset\"\n [class.inactive-list-item]=\"!sceneService.presetIsSelected(item)\"\n >\n <div class=\"row d-flex\" style=\"cursor: pointer\">\n <div class=\"col-auto list-sort-handle my-auto\" style=\"cursor: move; cursor: -webkit-grabbing\">\n <i class=\"fa fa-bars\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n [disabled]=\"!enableCheckbox()\"\n class=\"form-check-input\"\n id=\"active\"\n [ngModel]=\"sceneService.presetIsSelected(item)\"\n (ngModelChange)=\"activatePreset($event, i)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n <div>\n {{ item.name }}\n </div>\n <div class=\"my-auto ml-auto mr-2 d-flex\">\n <button type=\"button\" class=\"btn btn-secondary btn-sm py-0 px-1\" (click)=\"openSettings(item); (false)\">...</button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { ProjectService } from '../services/project.service';\nimport { LivePreviewService } from '../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-master-dimmer',\n templateUrl: './master-dimmer.component.html',\n styleUrls: ['./master-dimmer.component.css'],\n standalone: false,\n})\nexport class MasterDimmerComponent implements OnInit {\n constructor(\n public projectService: ProjectService,\n private changeDetectorRef: ChangeDetectorRef,\n private livePreviewService: LivePreviewService\n ) {}\n\n ngOnInit() {}\n\n setValue(value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (value < 0 || value > 1) {\n return;\n }\n\n this.projectService.project.masterDimmerValue = value;\n this.changeDetectorRef.detectChanges();\n this.livePreviewService.previewLive();\n }\n\n getValue(): number {\n return Math.round(this.projectService.project.masterDimmerValue * 100 * 100) / 100;\n }\n}\n","<div class=\"card border-secondary h-100\">\n <!-- For larger screens vertically -->\n <div class=\"d-none d-md-flex card-body h-100\" style=\"flex-direction: column\">\n <div class=\"mb-3 w-100 d-flex\">\n <i class=\"icon-dimmer m-auto\" style=\"font-size: 2em\"></i>\n </div>\n\n <div class=\"mb-4 w-100 d-flex\">\n <input\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"getValue()\"\n (ngModelChange)=\"setValue($event / 100)\"\n style=\"width: 42px; height: 23px; text-align: center; font-size: 12px; font-family: monospace\"\n />\n </div>\n\n <div class=\"h-100 w-100 d-flex\">\n <mv-slider\n class=\"mx-auto\"\n [value]=\"projectService?.project?.masterDimmerValue\"\n (change)=\"setValue($event.newValue)\"\n [orientation]=\"'vertical'\"\n [reversed]=\"true\"\n style=\"height: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"0\"\n [max]=\"1\"\n [step]=\"0.001\"\n ></mv-slider>\n </div>\n </div>\n\n <!-- For smaller screens horizontally -->\n <div class=\"d-flex d-md-none card-body h-100\">\n <div class=\"mb-3 d-flex my-auto\">\n <i class=\"icon-dimmer m-auto\" style=\"font-size: 2em\"></i>\n </div>\n\n <div class=\"h-100 w-100 d-flex my-auto mx-3\">\n <mv-slider\n class=\"mx-auto\"\n [value]=\"projectService?.project?.masterDimmerValue\"\n (change)=\"setValue($event.newValue)\"\n [orientation]=\"'horizontal'\"\n style=\"width: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"0\"\n [max]=\"1\"\n [step]=\"0.001\"\n ></mv-slider>\n </div>\n\n <div class=\"mb-4 d-flex my-auto\">\n <input\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"getValue()\"\n (ngModelChange)=\"setValue($event / 100)\"\n style=\"width: 42px; height: 23px; text-align: center; font-size: 12px; font-family: monospace\"\n />\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { CachedFixtureCapability } from '../../../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../../../models/cached-fixture-channel';\nimport { FixtureProfile } from '../../../models/fixture-profile';\nimport { PresetService } from '../../../services/preset.service';\nimport { LivePreviewService } from '../../../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-fixture-capability-channel',\n templateUrl: './fixture-capability-channel.component.html',\n styleUrls: ['./fixture-capability-channel.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class FixtureCapabilityChannelComponent implements OnInit {\n @ViewChild('sliderValue', { static: false }) sliderValue: ElementRef;\n\n selectedCapability: CachedFixtureCapability;\n _channel: CachedFixtureChannel;\n\n defaultValue = 0;\n value = 0;\n templateValue = 0;\n description: string;\n\n hasRange = false;\n rangeMin = 0;\n rangeMax = 0;\n descriptionStart: string;\n descriptionEnd: string;\n\n valueSetTimer: any;\n\n @Input()\n profile: FixtureProfile;\n\n @Input()\n set channel(value: CachedFixtureChannel) {\n this._channel = value;\n this.updateChannel();\n }\n\n @Input()\n capabilityIndex: number;\n\n constructor(private presetService: PresetService, private livePreviewService: LivePreviewService) {}\n\n private updateChannel() {\n this.selectedCapability = this._channel.capabilities[0];\n\n this.value = this.presetService.getChannelValue(this._channel.name, this.profile.uuid);\n this.calculateTemplateValue();\n\n if (this.value >= 0) {\n for (const capability of this._channel.capabilities) {\n if (\n capability.capability.dmxRange.length > 0 &&\n capability.capability.dmxRange[0] <= this.value &&\n this.value <= capability.capability.dmxRange[1]\n ) {\n this.selectedCapability = capability;\n break;\n }\n }\n }\n\n this.defaultValue = this.getDefaultValue();\n this.description = this.getDescription(this.selectedCapability);\n\n this.hasRange = this.capabilityHasRange();\n this.rangeMin = this.getRangeMin();\n this.rangeMax = this.getRangeMax();\n this.descriptionStart = this.getDescriptionStart(this.selectedCapability);\n this.descriptionEnd = this.getDescriptionEnd(this.selectedCapability);\n }\n\n capabilityHasRange(): boolean {\n if (this._channel?.capabilities?.length === 1) {\n // TODO does this work in all cases? if we have no option, it's always a range?\n return true;\n }\n\n if (\n this.selectedCapability?.capability.angleStart ||\n this.selectedCapability?.capability.speedStart ||\n this.selectedCapability?.capability.brightnessStart ||\n this.selectedCapability?.capability.durationStart ||\n this.selectedCapability?.capability.colorTemperatureStart ||\n this.selectedCapability?.capability.soundSensitivityStart ||\n this.selectedCapability?.capability.horizontalAngleStart ||\n this.selectedCapability?.capability.verticalAngleStart ||\n this.selectedCapability?.capability.distanceStart ||\n this.selectedCapability?.capability.openPercentStart ||\n this.selectedCapability?.capability.frostIntensityStart ||\n this.selectedCapability?.capability.fogOutputStart ||\n this.selectedCapability?.capability.timeStart ||\n this.selectedCapability?.capability.insertionStart ||\n this.selectedCapability?.capability.colorsStart\n ) {\n return true;\n }\n\n return false;\n }\n\n getDescriptionStart(capability: CachedFixtureCapability) {\n if (!capability || !capability.capability) {\n return '';\n }\n return (\n capability.capability.angleStart ||\n capability.capability.speedStart ||\n capability.capability.brightnessStart ||\n capability.capability.durationStart ||\n capability.capability.colorTemperatureStart ||\n capability.capability.soundSensitivityStart ||\n capability.capability.horizontalAngleStart ||\n capability.capability.verticalAngleStart ||\n capability.capability.distanceStart ||\n capability.capability.openPercentStart ||\n capability.capability.frostIntensityStart ||\n capability.capability.fogOutputStart ||\n capability.capability.timeStart ||\n capability.capability.insertionStart ||\n capability.capability.colorsStart\n )?.toString();\n }\n\n getDescriptionEnd(capability: CachedFixtureCapability) {\n if (!capability || !capability.capability) {\n return '';\n }\n return (\n capability.capability.angleEnd ||\n capability.capability.speedEnd ||\n capability.capability.brightnessEnd ||\n capability.capability.durationEnd ||\n capability.capability.colorTemperatureEnd ||\n capability.capability.soundSensitivityEnd ||\n capability.capability.horizontalAngleEnd ||\n capability.capability.verticalAngleEnd ||\n capability.capability.distanceEnd ||\n capability.capability.openPercentEnd ||\n capability.capability.frostIntensityEnd ||\n capability.capability.fogOutputEnd ||\n capability.capability.timeEnd ||\n capability.capability.insertionEnd ||\n capability.capability.colorsEnd\n )?.toString();\n }\n\n getDescription(capability: CachedFixtureCapability) {\n if (!capability || !capability.capability) {\n return '';\n }\n return (\n capability.capability.slotNumber ||\n capability.capability.shutterEffect ||\n capability.capability.angle ||\n capability.capability.speed ||\n capability.capability.brightness ||\n capability.capability.duration ||\n capability.capability.colorTemperature ||\n capability.capability.soundSensitivity ||\n capability.capability.horizontalAngle ||\n capability.capability.verticalAngle ||\n capability.capability.distance ||\n capability.capability.openPercent ||\n capability.capability.frostIntensity ||\n capability.capability.fogOutput ||\n capability.capability.time ||\n capability.capability.insertion\n )?.toString();\n }\n\n private getRangeMin(): number {\n if (this.selectedCapability.capability.dmxRange.length > 0) {\n return this.selectedCapability.capability.dmxRange[0];\n }\n\n return 0;\n }\n\n private getRangeMax(): number {\n if (this.selectedCapability.capability.dmxRange.length > 0) {\n return this.selectedCapability.capability.dmxRange[1];\n }\n\n return this._channel.maxValue;\n }\n\n ngOnInit() {}\n\n setValue(value: any, ignoreCapabilityRange: boolean = false) {\n if (isNaN(value)) {\n return;\n }\n\n if (!ignoreCapabilityRange && (value < this.rangeMin || value > this.rangeMax)) {\n return;\n }\n\n this.value = value;\n this.calculateTemplateValue();\n\n this.presetService.setChannelValue(this._channel.name, this.profile.uuid, value);\n if (this.sliderValue) {\n // update the value without change detector for performance reasons and only in a specific\n // interval. each value set will trigger a layout/reflow event and slow down the performance\n // TODO use the same technique in the dimmer/pan/tilt/color sliders\n if (!this.valueSetTimer) {\n this.valueSetTimer = setTimeout(() => {\n if (this.sliderValue) {\n this.sliderValue.nativeElement.value = this.value;\n }\n this.valueSetTimer = undefined;\n }, 30);\n }\n }\n this.livePreviewService.previewLive();\n }\n\n private calculateTemplateValue() {\n this.templateValue = this.value ? this.value : this.getDefaultValue();\n }\n\n private getDefaultValue(): number {\n if (this._channel.defaultValue) {\n return this._channel.defaultValue;\n }\n\n return 0;\n }\n\n changeActive(active: boolean) {\n if (active) {\n this.setValue(this.getDefaultValue(), true);\n } else {\n this.presetService.deleteChannelValue(this._channel.name, this.profile.uuid);\n this.selectedCapability = this._channel.capabilities[0];\n this.value = undefined;\n this.calculateTemplateValue();\n }\n this.livePreviewService.previewLive();\n }\n\n capabilitySelected() {\n // select the center value of the selected capability\n if (this.capabilityHasRange()) {\n this.setValue(this.selectedCapability.capability.dmxRange[0], true);\n } else {\n this.setValue(this.selectedCapability.centerValue, true);\n }\n this.updateChannel();\n }\n}\n","<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"value == undefined\" style=\"min-height: 200px\">\n <div class=\"card-header\">\n <div class=\"my-auto\">\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityGeneric{{ capabilityIndex }}Active\"\n [ngModel]=\"value != undefined\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityGeneric{{ capabilityIndex }}Active\">\n {{ _channel?.name }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"card-body h-100 d-flex\" style=\"flex-direction: column; overflow: hidden\">\n <div class=\"row h-100\">\n <!-- display all options, if there is more than one -->\n @if (_channel.capabilities?.length > 1) {\n <div class=\"col mr-3\" style=\"overflow-y: auto\">\n @for (capability of _channel.capabilities; track capability; let i = $index) {\n <div class=\"form-check\">\n <input\n [(ngModel)]=\"selectedCapability\"\n (change)=\"capabilitySelected()\"\n class=\"form-check-input\"\n type=\"radio\"\n name=\"capabilityGeneric{{ capabilityIndex }}Option\"\n id=\"capabilityGeneric{{ capabilityIndex }}Option{{ i }}\"\n [value]=\"capability\"\n />\n <label style=\"max-width: 200px\" class=\"form-check-label\" for=\"capabilityGeneric{{ capabilityIndex }}Option{{ i }}\">\n {{ 'designer.fixtureCapabilityType.' + capability.capability.type | translate }}@if (getDescription(capability)) {\n <span> ({{ getDescription(capability) }})</span>\n }<small\n >@for (color of capability.capability.colors; track color) {\n <div class=\"color\" [style.background-color]=\"color\"></div>\n } @if (getDescriptionStart(capability)) {\n <small> ({{ getDescriptionStart(capability) }} to {{ getDescriptionEnd(capability) }})</small>\n } @if (capability.capability.comment) {\n <span> - </span>\n } {{ capability.capability.comment }}</small\n >\n @if (capability.capability.soundControlled) {\n <i\n class=\"fa fa-microphone pl-1\"\n popover=\"{{ 'designer.fixture.capability-sound-controlled' | translate }}\"\n container=\"body\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n aria-hidden=\"true\"\n ></i>\n } @if (capability.capability.randomTiming) {\n <i\n class=\"fa fa-random pl-1\"\n popover=\"{{ 'designer.fixture.capability-random-timing' | translate }}\"\n container=\"body\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n aria-hidden=\"true\"\n ></i>\n }\n </label>\n </div>\n }\n </div>\n }\n\n <!-- display a slider to select the value for the currently selected capability, if it has a range -->\n @if (hasRange) {\n <div class=\"col col-auto d-flex mx-auto\" [class.pl-0]=\"_channel.capabilities?.length > 1\" style=\"flex-direction: column\">\n <div class=\"mb-2 w-100 d-flex\">\n <input\n #sliderValue\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"templateValue\"\n (ngModelChange)=\"setValue($event)\"\n style=\"width: 45px; height: 20px; text-align: center; font-size: 12px; font-family: monospace\"\n />\n </div>\n <div class=\"mx-auto mb-2\">{{ descriptionEnd }}</div>\n <div class=\"h-100 w-100 d-flex\">\n <mv-slider\n #slider\n class=\"mx-auto\"\n [value]=\"templateValue\"\n (change)=\"setValue($event.newValue)\"\n [orientation]=\"'vertical'\"\n [reversed]=\"true\"\n style=\"height: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"rangeMin\"\n [max]=\"rangeMax\"\n [step]=\"1\"\n ></mv-slider>\n </div>\n <div class=\"mx-auto mt-2\">{{ descriptionStart }}</div>\n </div>\n }\n </div>\n </div>\n</div>\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CachedFixtureChannel } from '../../models/cached-fixture-channel';\nimport { FixtureProfile } from '../../models/fixture-profile';\nimport { PresetService } from '../../services/preset.service';\nimport { ProjectService } from '../../services/project.service';\n\n@Component({\n selector: 'lib-app-fixture-channel',\n templateUrl: './fixture-channel.component.html',\n styleUrls: ['./fixture-channel.component.css'],\n standalone: false,\n})\nexport class FixtureChannelComponent implements OnInit, OnDestroy {\n public channelCapabilities: Map<FixtureProfile, CachedFixtureChannel[]> = new Map<FixtureProfile, CachedFixtureChannel[]>();\n public profiles: FixtureProfile[] = [];\n public selectedProfiles: FixtureProfile[] = [];\n\n private fixtureSelectionChangedSubscription: Subscription;\n private previewSelectionChangedSubscription: Subscription;\n\n constructor(public presetService: PresetService, private changeDetectorRef: ChangeDetectorRef, public projectService: ProjectService) {\n this.fixtureSelectionChangedSubscription = this.presetService.fixtureSelectionChanged.subscribe(() => {\n this.calculateProfiles();\n });\n\n this.previewSelectionChangedSubscription = this.presetService.previewSelectionChanged.subscribe(() => {\n this.calculateProfiles();\n });\n }\n\n ngOnInit() {\n this.calculateProfiles();\n }\n\n ngOnDestroy() {\n this.fixtureSelectionChangedSubscription.unsubscribe();\n this.previewSelectionChangedSubscription.unsubscribe();\n }\n\n private calculateChannelCapabilities() {\n this.channelCapabilities = this.presetService.getSelectedProfileChannels(this.selectedProfiles);\n\n this.changeDetectorRef.detectChanges();\n }\n\n private calculateProfiles() {\n // calculate all profiels\n this.profiles = this.presetService.getSelectedProfiles();\n\n // select all profiles by default\n this.selectedProfiles = [...this.profiles];\n\n this.calculateChannelCapabilities();\n }\n\n changeProfileSelection($event: any, profile: FixtureProfile) {\n if (this.selectedProfiles.indexOf(profile) >= 0) {\n this.selectedProfiles.splice(this.selectedProfiles.indexOf(profile), 1);\n } else {\n this.selectedProfiles.push(profile);\n }\n\n this.calculateChannelCapabilities();\n }\n\n isChrome(): boolean {\n if (navigator.appVersion.indexOf('Chrome/') !== -1) {\n return true;\n }\n return false;\n }\n}\n","<div class=\"card border-secondary panel h-100\">\n <div class=\"card-body capability-container d-flex h-100\" style=\"overflow-y: hidden\">\n <!-- h-100 needs to be applied in chrome to avoid performance issues with many layouts (reflows)\n during sliding. But the class must not be applied e.g. in Safari, because the bottom margin is not correct\n anymore afterwards. -->\n @if (presetService.selectedPreset) {\n <div class=\"row m-0 pl-3\" [class.h-100]=\"isChrome()\">\n <!-- profile selection -->\n @if (profiles.length > 1) {\n <div class=\"col col-auto p-3 my-3 mr-3\" style=\"height: calc(100% - 2rem); border: solid 1px #444; border-right: none\">\n @for (profile of profiles; track profile; let i = $index) {\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityFilter{{ i }}\"\n [ngModel]=\"selectedProfiles.indexOf(profile) >= 0\"\n (ngModelChange)=\"changeProfileSelection($event, profile)\"\n />\n <label class=\"form-check-label\" for=\"capabilityFilter{{ i }}\">\n {{ profile.name }}\n </label>\n </div>\n }\n </div>\n }\n <!-- all channel capabilities -->\n @for (entry of channelCapabilities | keyvalue; track entry; let i = $index) { @for (capability of entry.value; track capability; let j\n = $index) {\n <div class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-channel [profile]=\"entry.key\" [channel]=\"capability\" [capabilityIndex]=\"i * 10000 + j\">\n </lib-app-fixture-capability-channel>\n </div>\n } }\n <!-- fix spacing at the end -->\n <div class=\"col col-auto p-0 my-3 mr-3\">&nbsp;</div>\n </div>\n } @if (projectService.project.fixtures.length == 0) {\n <div class=\"m-auto\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures' | translate }}</p>\n </div>\n } @if ( projectService.project.fixtures.length > 0 && presetService.selectedPreset && presetService.selectedPreset.fixtures.length == 0\n ) {\n <div class=\"m-auto\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures-selected' | translate }}</p>\n </div>\n }\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { IntroService } from '../services/intro.service';\n\n@Component({\n selector: 'lib-app-intro',\n templateUrl: './intro.component.html',\n styleUrls: ['./intro.component.css'],\n standalone: false,\n})\nexport class IntroComponent implements OnInit {\n constructor(public introService: IntroService) {}\n\n ngOnInit() {}\n\n close() {\n this.introService.setShowIntro(false);\n }\n}\n","@if (introService.showIntro) {\n<div\n class=\"card border-secondary h-100 panel card-intro-active\"\n [ngStyle]=\"{\n top: 'calc(' + introService.positionTopPercentage + '% - 150px)',\n left: 'calc(' + introService.positionLeftPercentage + '% - 200px)'\n }\"\n>\n <div class=\"card-header d-flex\">\n <div>\n <i class=\"fa fa-info-circle mr-1\" aria-hidden=\"true\"></i>\n {{ 'designer.intro.title-' + introService.activeStep | translate }}\n </div>\n <div class=\"ml-auto\">\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"close(); (false)\"><i class=\"fa fa-times\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n <div class=\"card-body h-100\">\n <p>{{ 'designer.intro.step-' + introService.activeStep | translate }}</p>\n </div>\n <div class=\"card-footer\">\n @if (introService.activeStep != 'start') {\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"introService.back()\">\n <i class=\"fa fa-chevron-left\" aria-hidden=\"true\"></i> {{ 'designer.intro.back' | translate }}\n </button>\n } @if (introService.activeStep != 'finish') {\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"introService.next()\">\n {{ 'designer.intro.next' | translate }} <i class=\"fa fa-chevron-right\" aria-hidden=\"true\"></i>\n </button>\n } @if (introService.activeStep == 'finish') {\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"close()\">\n {{ 'designer.intro.close' | translate }}\n </button>\n }\n </div>\n</div>\n}\n","import { AfterViewInit, Component, HostListener, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { map } from 'rxjs/operators';\nimport Split from 'split.js';\nimport { PreviewComponent } from './preview/preview.component';\nimport { ProjectBrowserComponent } from './project/project-browser/project-browser.component';\nimport { ProjectImportComponent } from './project/project-import/project-import.component';\nimport { ProjectSaveComponent } from './project/project-save/project-save.component';\nimport { ProjectShareComponent } from './project/project-share/project-share.component';\nimport { ConfigService } from './services/config.service';\nimport { ErrorDialogService } from './services/error-dialog.service';\nimport { FixturePoolService } from './services/fixture-pool.service';\nimport { FixtureService } from './services/fixture.service';\nimport { HotkeyTargetExcludeService } from './services/hotkey-target-exclude.service';\nimport { IntroService } from './services/intro.service';\nimport { ProjectLoadService } from './services/project-load.service';\nimport { ProjectService } from './services/project.service';\nimport { TimelineService } from './services/timeline.service';\nimport { UserEnsureLoginService } from './services/user-ensure-login.service';\nimport { UserService } from './services/user.service';\nimport { WarningDialogService } from './services/warning-dialog.service';\nimport { TimelineComponent } from './timeline/timeline.component';\nimport { UserRegisterComponent } from './user/user-register/user-register.component';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { EffectService } from './services/effect.service';\nimport { UniverseConfig } from './models/universe-config';\n\n@Component({\n selector: 'lib-designer',\n templateUrl: './designer.component.html',\n styleUrls: ['./designer.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class DesignerComponent implements OnInit, AfterViewInit {\n @Input()\n set menuHeightPx(value: number) {\n this.configService.menuHeightPx = value;\n this.configService.menuHeightChanged.next();\n }\n\n @Input()\n set externalCompositionsAvailable(value: boolean) {\n this.timelineService.externalCompositionsAvailable = value;\n }\n\n @Input()\n set restUrl(value: string) {\n this.configService.restUrl = value;\n }\n\n @Input()\n set enableMediaLibrary(value: boolean) {\n this.configService.enableMediaLibrary = value;\n }\n\n @Input()\n set loginAvailable(value: boolean) {\n this.configService.loginAvailable = value;\n }\n\n @Input()\n set shareAvailable(value: boolean) {\n this.configService.shareAvailable = value;\n }\n\n @Input()\n set languageSwitch(value: boolean) {\n this.configService.languageSwitch = value;\n }\n\n @Input()\n set livePreview(value: boolean) {\n this.configService.livePreview = value;\n }\n\n @Input()\n set localProfiles(value: boolean) {\n this.configService.localProfiles = value;\n }\n\n @Input()\n set intro(value: boolean) {\n this.configService.intro = value;\n this.introService.refresh();\n }\n\n @Input()\n set uniqueProjectNames(value: boolean) {\n this.configService.uniqueProjectNames = value;\n }\n\n @Input()\n set dropzoneChunking(value: boolean) {\n this.configService.dropzoneChunking = value;\n }\n\n @Input()\n set universes(value: UniverseConfig[]) {\n this.configService.universes = value || [];\n }\n\n @Input()\n set freeUniverseEdit(value: boolean) {\n this.configService.freeUniverseEdit = value;\n }\n\n // the size of the menu used in the designer\n private designerMenuSizePx = 20;\n\n private splitGutterSizePx = 13;\n\n public totalMenuHeightPx = 0;\n\n currentTab = 'properties';\n\n @ViewChild(PreviewComponent)\n previewComponent: PreviewComponent;\n\n @ViewChild(TimelineComponent)\n timelineComponent: TimelineComponent;\n\n constructor(\n private translateService: TranslateService,\n public projectService: ProjectService,\n public configService: ConfigService,\n private fixturePoolService: FixturePoolService,\n private hotkeyTargetExcludeService: HotkeyTargetExcludeService,\n private modalService: BsModalService,\n public userService: UserService,\n private userEnsureLoginService: UserEnsureLoginService,\n private projectLoadService: ProjectLoadService,\n private warningDialogService: WarningDialogService,\n private errorDialogService: ErrorDialogService,\n private fixtureService: FixtureService,\n private timelineService: TimelineService,\n public introService: IntroService,\n private effectService: EffectService\n ) {\n this.configService.menuHeightChanged.subscribe(() => {\n this.calcTotalMenuHeight();\n });\n }\n\n private loadError(response: any) {\n console.error(response);\n let msg = 'designer.project.open-error';\n let error: string;\n if (response instanceof HttpErrorResponse) {\n error = response && response.error ? response.error.error : 'unknown';\n if (error === 'no-permission') {\n msg = 'designer.project.open-no-permission-error';\n error = undefined;\n } else {\n msg = 'designer.project.open-error';\n }\n } else {\n error = response && response.message ? response.message : 'unknown';\n }\n this.errorDialogService.show(msg, error).subscribe(() => {\n this.projectLoadService.new();\n });\n }\n\n ngOnInit() {\n if (localStorage.getItem('language')) {\n this.translateService.use(localStorage.getItem('language'));\n } else {\n this.translateService.use('en');\n }\n\n this.calcTotalMenuHeight();\n\n const urlParams = new URLSearchParams(window.location.search);\n const projectId = urlParams.get('id');\n const projectName = urlParams.get('name');\n let shareToken = urlParams.get('token');\n\n if (projectId) {\n // load a project by query param ID\n if (!shareToken) {\n shareToken = '';\n }\n\n this.projectLoadService.load(Number.parseInt(projectId, 10), projectName, shareToken).subscribe(\n () => {},\n (response) => {\n this.loadError(response);\n }\n );\n } else if (\n (this.userService.isLoggedIn() || !this.configService.loginAvailable) &&\n (this.userService.getAutoLoadProjectId() || this.userService.getAutoLoadProjectName())\n ) {\n // restore the last saved project\n this.projectLoadService.load(this.userService.getAutoLoadProjectId(), this.userService.getAutoLoadProjectName()).subscribe(\n () => {},\n (response) => {\n this.loadError(response);\n }\n );\n } else {\n // load the new project template\n this.projectLoadService.template();\n }\n }\n\n private calcTotalMenuHeight() {\n this.totalMenuHeightPx = this.designerMenuSizePx + this.splitGutterSizePx + this.configService.menuHeightPx;\n }\n\n private onResize() {\n if (this.previewComponent) {\n this.previewComponent.onResize();\n }\n\n if (this.timelineComponent) {\n this.timelineComponent.onResize();\n }\n }\n\n ngAfterViewInit(): void {\n // Set up the splitter\n setTimeout(() => {\n Split(['#row1', '#row2', '#row3'], {\n sizes: [42, 40, 18],\n direction: 'vertical',\n cursor: 'row-resize',\n snapOffset: 0,\n gutterSize: this.splitGutterSizePx,\n onDrag: this.onResize.bind(this),\n });\n\n Split(['#scenes', '#presets', '#preview'], {\n sizes: [20, 20, 60],\n snapOffset: 0,\n gutterSize: this.splitGutterSizePx,\n onDrag: this.onResize.bind(this),\n });\n\n Split(['#capabilities', '#fixtures', '#masterDimmer'], {\n sizes: [70, 24, 6],\n snapOffset: 0,\n gutterSize: this.splitGutterSizePx,\n onDrag: this.onResize.bind(this),\n minSize: 50,\n });\n\n this.onResize();\n });\n }\n\n openTab(tab: string) {\n // open a side tab (e.g. effects, channels, settings, etc.)\n\n if (tab === 'settings') {\n this.fixtureService.settingsSelection = true;\n } else {\n this.fixtureService.settingsSelection = false;\n }\n\n if (tab === 'effects') {\n this.effectService.effectsOpen = true;\n } else {\n this.effectService.effectsOpen = false;\n }\n this.effectService.effectsOpenChanged.next();\n\n this.currentTab = tab;\n }\n\n openFixturePool() {\n this.fixturePoolService.open();\n }\n\n projectNew() {\n this.warningDialogService\n .show('designer.misc.warning-proceed-unsaved')\n .pipe(\n map((result) => {\n if (result) {\n this.projectLoadService.new();\n }\n })\n )\n .subscribe();\n }\n\n projectOpen() {\n this.warningDialogService\n .show('designer.misc.warning-proceed-unsaved')\n .pipe(\n map((result) => {\n if (result) {\n this.userEnsureLoginService.login().subscribe(() => {\n this.modalService.show(ProjectBrowserComponent, { keyboard: true, ignoreBackdropClick: false });\n });\n }\n })\n )\n .subscribe();\n }\n\n projectSave() {\n this.userEnsureLoginService.login().subscribe(() => {\n if (this.projectService.project.name) {\n // this project has been saved before -> just save it again\n this.projectService.save(this.projectService.project);\n } else {\n // this project has not yet been saved -> show the save as-dialog\n this.modalService.show(ProjectSaveComponent, { keyboard: true, ignoreBackdropClick: false });\n }\n });\n }\n\n projectSaveAs() {\n this.userEnsureLoginService.login().subscribe(() => {\n this.modalService.show(ProjectSaveComponent, { keyboard: true, ignoreBackdropClick: false });\n });\n }\n\n userRegister() {\n this.modalService.show(UserRegisterComponent, { keyboard: true, ignoreBackdropClick: false });\n }\n\n projectImport() {\n this.warningDialogService\n .show('designer.misc.warning-proceed-unsaved')\n .pipe(\n map((result) => {\n if (result) {\n this.modalService.show(ProjectImportComponent, { keyboard: true, ignoreBackdropClick: false });\n }\n })\n )\n .subscribe();\n }\n\n projectExport() {\n const json = JSON.stringify(this.projectService.project, null, 2);\n const element = document.createElement('a');\n element.setAttribute('href', 'data:text/json;charset=UTF-8,' + encodeURIComponent(json));\n element.setAttribute('download', this.projectService.project.name + '.rsd');\n element.style.display = 'none';\n document.body.appendChild(element);\n element.click();\n document.body.removeChild(element);\n }\n\n projectShare() {\n if (!this.projectService.project.id) {\n // a save is required first\n this.errorDialogService.show('designer.project.share-no-save').subscribe();\n return;\n }\n\n // ignore backdrop click, because selecting the link text will also close the modal\n this.modalService.show(ProjectShareComponent, { keyboard: true, ignoreBackdropClick: true });\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeyboardEvent(event: any) {\n if (this.hotkeyTargetExcludeService.exclude(event)) {\n return;\n }\n\n if (event.key === 'p') {\n this.openFixturePool();\n\n // prevent checkboxes being toggled, if in focus e.g.\n event.stopPropagation();\n event.preventDefault();\n }\n\n if ((event.ctrlKey || event.metaKey) && event.key === 'n') {\n this.projectNew();\n event.stopPropagation();\n event.preventDefault();\n }\n\n if ((event.ctrlKey || event.metaKey) && event.key === 's') {\n this.projectSave();\n event.stopPropagation();\n event.preventDefault();\n }\n\n if ((event.ctrlKey || event.metaKey) && event.key === 'o') {\n this.projectOpen();\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n switchLanguage(language: string) {\n this.translateService.use(language);\n localStorage.setItem('language', language);\n }\n}\n","<!-- Wrap the whole component inside a div to encapsulate the CSS -->\n\n<!-- 100 % height minus the menu bar above and the gutter size of 13 px -->\n<!-- <div style=\"height: calc(100% - 33px)\"> -->\n<div id=\"designer\" [ngStyle]=\"{ height: 'calc(100% - ' + totalMenuHeightPx + 'px)' }\">\n <!-- Navigation -->\n <nav\n class=\"navbar navbar-expand-lg navbar-light bg-light border-secondary\"\n style=\"border-bottom: 1px solid #444; height: 20px; z-index: 9999\"\n >\n <!-- Menu buttons -->\n <ul class=\"navbar-nav mr-auto\">\n <li class=\"nav-item dropdown\">\n <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"fileDropdown\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n {{ 'designer.navigation.project' | translate }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"fileDropdown\">\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectNew(); (false)\"\n ><i class=\"fa fa-fw fa-file-o\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-new' | translate }}</a\n >\n <a class=\"dropdown-item\" href=\"#\" (click)=\"projectOpen(); (false)\"\n ><i class=\"fa fa-fw fa-folder-open-o\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-open' | translate }}</a\n >\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectSave(); (false)\"\n ><i class=\"fa fa-fw fa-floppy-o\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-save' | translate }}</a\n >\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectSaveAs(); (false)\"\n ><i class=\"fa fa-fw fa-floppy-o\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-save-as' | translate }}</a\n >\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectImport(); (false)\"\n ><i class=\"fa fa-fw fa-download\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-import' | translate }}</a\n >\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectExport(); (false)\"\n ><i class=\"fa fa-fw fa-external-link\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-export' | translate }}</a\n >\n </div>\n </li>\n <li class=\"nav-item dropdown d-none d-md-block\">\n <a\n class=\"nav-link dropdown-toggle\"\n href=\"#\"\n id=\"settingsDropdown\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n {{ 'designer.navigation.settings' | translate }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"settingsDropdown\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"openFixturePool(); (false)\">{{ 'designer.navigation.fixture-pool' | translate }}</a>\n <!-- <a class=\"dropdown-item\" href=\"#\">{{ 'designer.navigation.stage' | translate }}</a> -->\n </div>\n </li>\n <li class=\"nav-item dropdown d-none d-md-block\">\n <a\n class=\"nav-link dropdown-toggle\"\n href=\"#\"\n id=\"settingsDropdown\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n {{ 'designer.navigation.help' | translate }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"settingsDropdown\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"introService.reset(); (false)\">{{ 'designer.navigation.reset-intro' | translate }}</a>\n <a class=\"dropdown-item\" href=\"https://rocketshow.net/support/\" target=\"_blank\">{{\n 'designer.navigation.support' | translate\n }}</a>\n </div>\n </li>\n </ul>\n\n <ul class=\"navbar-nav\">\n @if (configService.shareAvailable) {\n <li class=\"nav-item d-none d-md-flex\" data-toggle=\"collapse\">\n <a class=\"nav-link text-primary\" (click)=\"projectShare(); (false)\" routerLinkActive=\"active\"\n ><i class=\"fa fa-share-alt\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-share' | translate }}</a\n >\n </li>\n } @if (configService.languageSwitch) {\n <li class=\"nav-item dropdown\">\n <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"settingsDropdown\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"\n ><i class=\"fa fa-globe\" aria-hidden=\"true\"></i>\n {{ 'designer.misc.language' | translate }}\n </a>\n <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"settingsDropdown\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('de'); (false)\" target=\"_blank\">Deutsch</a>\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('en'); (false)\" target=\"_blank\">English</a>\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('es'); (false)\" target=\"_blank\">Español</a>\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('fr'); (false)\" target=\"_blank\">Français</a>\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('it'); (false)\" target=\"_blank\">Italiano</a>\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('pt'); (false)\" target=\"_blank\">Português</a>\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('zh'); (false)\" target=\"_blank\">中文</a>\n </div>\n </li>\n } @if (configService.loginAvailable && !userService.isLoggedIn()) {\n <li class=\"nav-item\" data-toggle=\"collapse\">\n <a class=\"nav-link\" (click)=\"userRegister(); (false)\" routerLinkActive=\"active\"\n ><i class=\"fa fa-user\" aria-hidden=\"true\"></i> {{ 'designer.navigation.login' | translate }}</a\n >\n </li>\n } @if (configService.loginAvailable && userService.isLoggedIn()) {\n <li class=\"nav-item dropdown\">\n <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"settingsDropdown\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"\n ><i class=\"fa fa-user\" aria-hidden=\"true\"></i>\n {{ userService.username }}\n </a>\n <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"settingsDropdown\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"userService.logout(); (false)\" target=\"_blank\"\n ><i class=\"fa fa-sign-out\" aria-hidden=\"true\"></i> {{ 'designer.navigation.logout' | translate }}</a\n >\n </div>\n </li>\n }\n </ul>\n </nav>\n\n <!-- The main content for larger screens -->\n <div class=\"h-100 d-none d-md-block\">\n <div id=\"row1\" class=\"split split-vertical clearfix pt-3 pl-3\">\n <!-- Scenes -->\n <div id=\"scenes\" class=\"split split-horizontal h-100\">\n @if (projectService.project) {\n <lib-app-scene></lib-app-scene>\n }\n </div>\n\n <!-- Presets -->\n <div id=\"presets\" class=\"split split-horizontal h-100\">\n @if (projectService.project) {\n <lib-app-preset></lib-app-preset>\n }\n </div>\n\n <!-- 3D preview -->\n <div id=\"preview\" class=\"split split-horizontal h-100 pr-3\">\n @if (projectService.project) {\n <div class=\"card border-secondary h-100\" [class.card-intro-active]=\"introService.showStep('preview')\">\n <div class=\"card-body p-0 h-100\">\n <lib-app-preview class=\"h-100\"></lib-app-preview>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div id=\"row2\" class=\"split split-vertical clearfix px-3 d-flex\" style=\"flex-direction: row\">\n <!-- Menu for the capabilities, channels, effects and settings -->\n @if (projectService.project) {\n <div class=\"col col-auto p-0\" style=\"margin-right: -1px\">\n <div class=\"nav flex-column nav-pills\" id=\"v-pills-tab\" role=\"tablist\" aria-orientation=\"vertical\">\n <a\n class=\"nav-link px-3 active\"\n (click)=\"openTab('capabilities')\"\n id=\"v-pills-capabilities-tab\"\n popover=\"{{ 'designer.misc.capabilities' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-capabilities\"\n role=\"tab\"\n aria-controls=\"v-pills-capabilities\"\n aria-selected=\"true\"\n >\n <i class=\"fa fa-bolt fa-fw\" aria-hidden=\"true\"></i>\n </a>\n <a\n class=\"nav-link px-3\"\n (click)=\"openTab('channels')\"\n id=\"v-pills-channels-tab\"\n popover=\"{{ 'designer.misc.channels' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-channels\"\n role=\"tab\"\n aria-controls=\"v-pills-channels\"\n aria-selected=\"false\"\n >\n <i class=\"fa fa-sliders fa-fw\" aria-hidden=\"true\"></i>\n </a>\n <a\n class=\"nav-link px-3\"\n (click)=\"openTab('effects')\"\n id=\"v-pills-effects-tab\"\n popover=\"{{ 'designer.misc.effects' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-effects\"\n role=\"tab\"\n aria-controls=\"v-pills-effects\"\n aria-selected=\"false\"\n >\n <i class=\"fa fa-magic fa-fw\" aria-hidden=\"true\"></i>\n </a>\n <a\n class=\"nav-link px-3\"\n (click)=\"openTab('settings')\"\n id=\"v-pills-settings-tab\"\n popover=\"{{ 'designer.misc.settings' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-settings\"\n role=\"tab\"\n aria-controls=\"v-pills-settings\"\n aria-selected=\"false\"\n style=\"border-top: 1px solid #444\"\n >\n <i class=\"fa fa-cog fa-fw\" aria-hidden=\"true\"></i>\n </a>\n </div>\n </div>\n }\n\n <div id=\"capabilities\" class=\"split split-horizontal h-100\" style=\"padding-left: 1rem\">\n @if (projectService.project) {\n <div class=\"row h-100\">\n <!-- Content for the capabilities, channels, effects and settings -->\n <div class=\"col pl-0 h-100\">\n <div class=\"tab-content h-100\" id=\"v-pills-tabContent\">\n <div class=\"tab-pane h-100 show active\" id=\"v-pills-capabilities\" role=\"tabpanel\">\n <lib-app-fixture-capability></lib-app-fixture-capability>\n </div>\n <div class=\"tab-pane h-100 show\" id=\"v-pills-channels\" role=\"tabpanel\">\n <lib-app-fixture-channel></lib-app-fixture-channel>\n </div>\n <div class=\"tab-pane h-100\" id=\"v-pills-effects\" role=\"tabpanel\" aria-labelledby=\"v-pills-profile-tab\">\n <lib-app-effect></lib-app-effect>\n </div>\n <div class=\"tab-pane h-100\" id=\"v-pills-settings\" role=\"tabpanel\" aria-labelledby=\"v-pills-home-tab\">\n <lib-app-fixture-settings></lib-app-fixture-settings>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Fixtures -->\n <div id=\"fixtures\" class=\"split split-horizontal h-100\">\n @if (projectService.project) {\n <lib-app-fixture></lib-app-fixture>\n }\n </div>\n\n <!-- Master dimmer -->\n <div id=\"masterDimmer\" class=\"split split-horizontal h-100\">\n @if (projectService.project) {\n <lib-app-master-dimmer></lib-app-master-dimmer>\n }\n </div>\n </div>\n\n <!-- Timeline -->\n <div id=\"row3\" class=\"split split-vertical clearfix px-3 pb-3\" style=\"padding-bottom: 20px\">\n @if (projectService.project) {\n <lib-app-timeline></lib-app-timeline>\n }\n </div>\n </div>\n\n <!-- The components for small screens -->\n <div class=\"d-md-none p-3\">\n <div>\n @if (projectService.project) {\n <lib-app-master-dimmer></lib-app-master-dimmer>\n }\n </div>\n\n <div class=\"mt-3\">\n @if (projectService.project) {\n <lib-app-scene></lib-app-scene>\n }\n </div>\n </div>\n</div>\n\n<lib-app-intro class=\"d-none d-md-flex\"></lib-app-intro>\n","import { Component, ContentChild, EventEmitter, Input, OnChanges, Output, SimpleChanges, TemplateRef } from '@angular/core';\n\nexport interface TreeNode {\n id?: string | number;\n name?: string;\n isFolder?: boolean;\n expanded?: boolean;\n children?: TreeNode[];\n // allow arbitrary extra payload on a node\n [key: string]: any;\n}\n\nexport type TreeDropZone = 'before' | 'after' | 'inside';\n\ninterface FlatNode {\n node: TreeNode;\n level: number;\n parent: TreeNode | null;\n}\n\n// A resolved drop: where the indicator is drawn vs. where the move is applied.\n// They only differ when dropping \"after a folder, from the outside\" — the line\n// is drawn at the bottom of the folder's last child (its visual end), but the\n// node is inserted after the folder itself, at the folder's own level.\ninterface DropTarget {\n row: TreeNode; // the row the indicator line attaches to\n zone: TreeDropZone; // before / after / inside (line position or outline)\n indent: number; // px the indicator line is indented (= chosen drop level)\n ref: TreeNode; // node the dragged items are inserted relative to\n}\n\n/**\n * A lightweight, dependency-free tree:\n * - collapsible folders (closed/open folder icon)\n * - multi selection (ctrl/cmd to toggle, shift to select a range)\n * - native HTML5 drag & drop, dropping before/after a node or into a folder,\n * moving the whole current selection at once\n */\n@Component({\n selector: 'lib-tree',\n templateUrl: './tree.component.html',\n styleUrls: ['./tree.component.css'],\n standalone: false,\n})\nexport class TreeComponent implements OnChanges {\n // the tree data (mutated in place when nodes are dragged around)\n @Input() nodes: TreeNode[] = [];\n\n // currently selected nodes (two-way bindable)\n @Input() selectedNodes: TreeNode[] = [];\n\n // decide whether a node may be dragged\n @Input() allowDrag: (node: TreeNode) => boolean = () => true;\n\n // decide whether the dragged nodes may be dropped onto a target/zone\n @Input() allowDrop: (dragged: TreeNode[], target: TreeNode, zone: TreeDropZone) => boolean = () => true;\n\n @Output() selectedNodesChange = new EventEmitter<TreeNode[]>();\n\n // a (non-folder) leaf was activated by a plain click\n @Output() activate = new EventEmitter<TreeNode>();\n\n // the tree structure changed because of a drag & drop move\n @Output() nodesChange = new EventEmitter<TreeNode[]>();\n\n // custom node content, provided as <ng-template #nodeTemplate let-node>\n @ContentChild('nodeTemplate') nodeTemplate?: TemplateRef<any>;\n\n // the visible (expanded) nodes, flattened for rendering\n flatNodes: FlatNode[] = [];\n\n // currently dragged nodes and the live drop indicator\n draggingNodes: TreeNode[] = [];\n drop: DropTarget | null = null;\n // hovering the trailing strip drops at the very end of the root level\n dropTail = false;\n\n // indentation of one tree level, in px (must match the template/CSS)\n private static readonly INDENT_STEP = 15;\n private static readonly INDENT_BASE = 4;\n\n private selection = new Set<TreeNode>();\n private lastClickedIndex: number | null = null;\n private flatByNode = new Map<TreeNode, FlatNode>();\n\n indentPx(level: number): string {\n return this.indent(level) + 'px';\n }\n\n private indent(level: number): number {\n return level * TreeComponent.INDENT_STEP + TreeComponent.INDENT_BASE;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['selectedNodes']) {\n this.selection = new Set(this.selectedNodes ?? []);\n }\n this.rebuild();\n }\n\n isSelected(node: TreeNode): boolean {\n return this.selection.has(node);\n }\n\n isDragging(node: TreeNode): boolean {\n return this.draggingNodes.includes(node);\n }\n\n toggleExpand(node: TreeNode): void {\n node.expanded = !node.expanded;\n this.rebuild();\n }\n\n // ---- selection / clicking ----------------------------------------------\n\n onRowClick(flat: FlatNode, event: MouseEvent): void {\n const node = flat.node;\n const index = this.flatNodes.indexOf(flat);\n\n if (event.shiftKey && this.lastClickedIndex !== null) {\n this.selectRange(this.lastClickedIndex, index, event.ctrlKey || event.metaKey);\n } else if (event.ctrlKey || event.metaKey) {\n if (this.selection.has(node)) {\n this.selection.delete(node);\n } else {\n this.selection.add(node);\n }\n this.lastClickedIndex = index;\n } else {\n // plain click: folders toggle, leaves activate; either way select just this row\n if (node.isFolder) {\n this.toggleExpand(node);\n }\n this.selection.clear();\n this.selection.add(node);\n this.lastClickedIndex = index;\n if (!node.isFolder) {\n this.activate.emit(node);\n }\n }\n\n this.selectedNodesChange.emit([...this.selection]);\n }\n\n private selectRange(from: number, to: number, additive: boolean): void {\n if (!additive) {\n this.selection.clear();\n }\n const [lo, hi] = from <= to ? [from, to] : [to, from];\n for (let i = lo; i <= hi && i < this.flatNodes.length; i++) {\n this.selection.add(this.flatNodes[i].node);\n }\n }\n\n // ---- drag & drop --------------------------------------------------------\n\n onDragStart(flat: FlatNode, event: DragEvent): void {\n const node = flat.node;\n if (!this.allowDrag(node)) {\n event.preventDefault();\n return;\n }\n\n // dragging an unselected node makes it the sole selection\n if (!this.selection.has(node)) {\n this.selection.clear();\n this.selection.add(node);\n this.lastClickedIndex = this.flatNodes.indexOf(flat);\n this.selectedNodesChange.emit([...this.selection]);\n }\n\n // drag the whole selection, but never a node together with its own ancestor\n this.draggingNodes = this.removeNested([...this.selection]);\n\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n // required for Firefox to start a native drag\n event.dataTransfer.setData('text/plain', node.name ?? '');\n }\n }\n\n onDragOver(flat: FlatNode, event: DragEvent): void {\n if (!this.draggingNodes.length) {\n return;\n }\n\n const resolved = this.resolveDrop(flat, event.currentTarget as HTMLElement, event.clientX, event.clientY);\n if (!this.canDrop(resolved.ref, resolved.zone)) {\n this.clearIndicator();\n return;\n }\n\n // preventDefault marks this as a valid drop location\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move';\n }\n this.drop = resolved;\n this.dropTail = false;\n }\n\n onDrop(flat: FlatNode, event: DragEvent): void {\n event.preventDefault();\n if (this.drop) {\n this.moveNodes(this.draggingNodes, this.drop.ref, this.drop.zone);\n this.nodesChange.emit(this.nodes);\n }\n this.endDrag();\n }\n\n // The strip below the last row: drop after the last folder, at the root level.\n // (The last folder has no following row to act as a \"before\" drop target.)\n onTailDragOver(event: DragEvent): void {\n if (!this.draggingNodes.length) {\n return;\n }\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move';\n }\n this.drop = null;\n this.dropTail = true;\n }\n\n onTailDrop(event: DragEvent): void {\n event.preventDefault();\n if (this.draggingNodes.length) {\n this.detachAll(this.draggingNodes);\n this.nodes.push(...this.draggingNodes);\n this.nodesChange.emit(this.nodes);\n }\n this.endDrag();\n }\n\n onDragEnd(): void {\n this.endDrag();\n }\n\n private endDrag(): void {\n this.draggingNodes = [];\n this.clearIndicator();\n this.rebuild();\n }\n\n private clearIndicator(): void {\n this.drop = null;\n this.dropTail = false;\n }\n\n // Resolve the hovered row + cursor position into a drop target.\n // - top of a row -> before it\n // - middle of a folder -> inside it\n // - bottom of a row -> after it (see afterRow for the inside/outside choice)\n // An expanded, non-empty folder has no \"after\" band on its header: dropping\n // after such a folder happens at the bottom of its last child instead, so the\n // indicator lands at the folder's visual end rather than under its header.\n private resolveDrop(flat: FlatNode, row: HTMLElement, clientX: number, clientY: number): DropTarget {\n const node = flat.node;\n const rect = row.getBoundingClientRect();\n const offset = clientY - rect.top;\n\n if (node.isFolder) {\n if (offset < rect.height * 0.3) {\n return { row: node, zone: 'before', ref: node, indent: this.indent(flat.level) };\n }\n const expandedWithChildren = !!node.expanded && !!node.children?.length;\n if (expandedWithChildren || offset <= rect.height * 0.7) {\n return { row: node, zone: 'inside', ref: node, indent: this.indent(flat.level) };\n }\n return this.afterRow(flat, clientX, rect.left);\n }\n\n if (offset < rect.height / 2) {\n return { row: node, zone: 'before', ref: node, indent: this.indent(flat.level) };\n }\n return this.afterRow(flat, clientX, rect.left);\n }\n\n // \"after\" the hovered row. When the row is the last child of its subtree, the\n // horizontal cursor position chooses the level: keep the node inside next to\n // the row, or outdent to drop after one of its ancestor folders. The indicator\n // stays at this row's bottom edge but is indented to the chosen level.\n private afterRow(flat: FlatNode, clientX: number, rowLeft: number): DropTarget {\n const next = this.flatNodes[this.flatNodes.indexOf(flat) + 1];\n\n // not the last node of a subtree -> unambiguous \"after this row\"\n if (next && next.level >= flat.level) {\n return { row: flat.node, zone: 'after', ref: flat.node, indent: this.indent(flat.level) };\n }\n\n // last child: pick a drop level between the next visible row's level (how far\n // we may outdent) and this row's own level, from the cursor's x position\n const minLevel = next ? next.level : 0;\n const level = Math.max(\n minLevel,\n Math.min(flat.level, Math.round((clientX - rowLeft - TreeComponent.INDENT_BASE) / TreeComponent.INDENT_STEP))\n );\n\n // walk up to the ancestor sitting at the chosen level\n let ancestor: FlatNode | undefined = flat;\n while (ancestor && ancestor.level > level) {\n ancestor = ancestor.parent ? this.flatByNode.get(ancestor.parent) : undefined;\n }\n\n return { row: flat.node, zone: 'after', ref: ancestor?.node ?? flat.node, indent: this.indent(level) };\n }\n\n private canDrop(ref: TreeNode, zone: TreeDropZone): boolean {\n if (this.draggingNodes.includes(ref)) {\n return false;\n }\n // cannot drop a node into its own subtree\n if (this.draggingNodes.some((dragged) => this.contains(dragged, ref))) {\n return false;\n }\n if (zone === 'inside' && !ref.isFolder) {\n return false;\n }\n return this.allowDrop(this.draggingNodes, ref, zone);\n }\n\n private moveNodes(dragged: TreeNode[], ref: TreeNode, zone: TreeDropZone): void {\n this.detachAll(dragged);\n\n if (zone === 'inside') {\n ref.children = ref.children ?? [];\n ref.children.push(...dragged);\n ref.isFolder = true;\n ref.expanded = true;\n return;\n }\n\n const location = this.locate(ref);\n if (!location) {\n this.nodes.push(...dragged);\n return;\n }\n const insertAt = location.index + (zone === 'after' ? 1 : 0);\n location.list.splice(insertAt, 0, ...dragged);\n }\n\n // detach every dragged node from its current parent (re-locate each time, so\n // indices stay correct while the arrays are being spliced)\n private detachAll(dragged: TreeNode[]): void {\n for (const node of dragged) {\n const location = this.locate(node);\n if (location) {\n location.list.splice(location.index, 1);\n }\n }\n }\n\n // ---- tree helpers -------------------------------------------------------\n\n private rebuild(): void {\n this.flatNodes = [];\n this.flatByNode.clear();\n this.flatten(this.nodes ?? [], 0, null);\n }\n\n private flatten(list: TreeNode[], level: number, parent: TreeNode | null): void {\n for (const node of list) {\n const flat: FlatNode = { node, level, parent };\n this.flatNodes.push(flat);\n this.flatByNode.set(node, flat);\n if (node.isFolder && node.expanded && node.children?.length) {\n this.flatten(node.children, level + 1, node);\n }\n }\n }\n\n // drop nodes that are already contained in another node of the set\n private removeNested(nodes: TreeNode[]): TreeNode[] {\n return nodes.filter((node) => !nodes.some((other) => other !== node && this.contains(other, node)));\n }\n\n // is `node` somewhere inside `ancestor`'s subtree?\n private contains(ancestor: TreeNode, node: TreeNode): boolean {\n if (!ancestor.children) {\n return false;\n }\n for (const child of ancestor.children) {\n if (child === node || this.contains(child, node)) {\n return true;\n }\n }\n return false;\n }\n\n // find the array and index that currently hold `target`\n private locate(target: TreeNode, list: TreeNode[] = this.nodes): { list: TreeNode[]; index: number } | null {\n for (let i = 0; i < list.length; i++) {\n if (list[i] === target) {\n return { list, index: i };\n }\n const children = list[i].children;\n if (children?.length) {\n const found = this.locate(target, children);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n}\n","<div class=\"tree\" (dragend)=\"onDragEnd()\">\n @for (flat of flatNodes; track flat.node) {\n <div\n class=\"tree-node\"\n [class.selected]=\"isSelected(flat.node)\"\n [class.dragging]=\"isDragging(flat.node)\"\n [class.drop-before]=\"drop?.row === flat.node && drop?.zone === 'before'\"\n [class.drop-after]=\"drop?.row === flat.node && drop?.zone === 'after'\"\n [class.drop-inside]=\"drop?.row === flat.node && drop?.zone === 'inside'\"\n [style.--tree-indent]=\"indentPx(flat.level)\"\n [style.--tree-drop-indent]=\"drop?.row === flat.node ? drop.indent + 'px' : null\"\n [attr.draggable]=\"allowDrag(flat.node)\"\n (click)=\"onRowClick(flat, $event)\"\n (dragstart)=\"onDragStart(flat, $event)\"\n (dragover)=\"onDragOver(flat, $event)\"\n (drop)=\"onDrop(flat, $event)\"\n >\n <i\n class=\"tree-icon fa\"\n [class.fa-folder-open-o]=\"flat.node.isFolder && flat.node.expanded\"\n [class.fa-folder-o]=\"flat.node.isFolder && !flat.node.expanded\"\n [class.fa-file-o]=\"!flat.node.isFolder\"\n aria-hidden=\"true\"\n ></i>\n <span class=\"tree-label\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate || defaultTemplate; context: { $implicit: flat.node, node: flat.node }\"></ng-container>\n </span>\n </div>\n }\n\n <div class=\"tree-tail\" [class.drop-tail]=\"dropTail\" (dragover)=\"onTailDragOver($event)\" (drop)=\"onTailDrop($event)\"></div>\n</div>\n\n<ng-template #defaultTemplate let-node>{{ node.name }}</ng-template>\n","import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NgxBootstrapSliderModule } from 'ngx-bootstrap-slider';\nimport { AccordionModule } from 'ngx-bootstrap/accordion';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TypeaheadModule } from 'ngx-bootstrap/typeahead';\nimport { DropzoneModule } from 'ngx-dropzone-wrapper';\nimport { ToastrModule } from 'ngx-toastr';\nimport { ArraySortPipe } from './array-sort-pipe';\nimport { DesignerComponent } from './designer.component';\nimport { EffectCurveComponent } from './effect/effect-curve/effect-curve.component';\nimport { EffectPanTiltComponent } from './effect/effect-pan-tilt/effect-pan-tilt.component';\nimport { EffectComponent } from './effect/effect.component';\nimport { ErrorDialogComponent } from './error-dialog/error-dialog.component';\nimport { FixturePoolCreateFromFileComponent } from './fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component';\nimport { FixturePoolEditUniversesComponent } from './fixture-pool/fixture-pool-edit-universes/fixture-pool-edit-universes.component';\nimport { FixturePoolComponent } from './fixture-pool/fixture-pool.component';\nimport { FixtureCapabilityChannelComponent } from './fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component';\nimport { FixtureCapabilityColorWheelComponent } from './fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component';\nimport { FixtureCapabilityColorComponent } from './fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component';\nimport { FixtureCapabilityDimmerComponent } from './fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component';\nimport { FixtureCapabilityPanTiltComponent } from './fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component';\nimport { FixtureCapabilityComponent } from './fixture/fixture-capability/fixture-capability.component';\nimport { FixtureChannelComponent } from './fixture/fixture-channel/fixture-channel.component';\nimport { FixtureSettingsPositionComponent } from './fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component';\nimport { FixtureSettingsStageComponent } from './fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component';\nimport { FixtureSettingsComponent } from './fixture/fixture-settings/fixture-settings.component';\nimport { FixtureComponent } from './fixture/fixture.component';\nimport { IntroComponent } from './intro/intro.component';\nimport { MasterDimmerComponent } from './master-dimmer/master-dimmer.component';\nimport { PresetSettingsComponent } from './preset/preset-settings/preset-settings.component';\nimport { PresetComponent } from './preset/preset.component';\nimport { PreviewComponent } from './preview/preview.component';\nimport { ProjectBrowserComponent } from './project/project-browser/project-browser.component';\nimport { ProjectImportComponent } from './project/project-import/project-import.component';\nimport { ProjectSaveComponent } from './project/project-save/project-save.component';\nimport { ProjectShareComponent } from './project/project-share/project-share.component';\nimport { SceneSettingsComponent } from './scene/scene-settings/scene-settings.component';\nimport { SceneComponent } from './scene/scene.component';\nimport { CompositionSettingsComponent } from './timeline/composition-settings/composition-settings.component';\nimport { TimelineGridComponent } from './timeline/timeline-grid/timeline-grid.component';\nimport { TimelineComponent } from './timeline/timeline.component';\nimport { UserLoginComponent } from './user/user-login/user-login.component';\nimport { UserRegisterComponent } from './user/user-register/user-register.component';\nimport { WaitDialogComponent } from './wait-dialog/wait-dialog.component';\nimport { WarningDialogComponent } from './warning-dialog/warning-dialog.component';\nimport { DropzoneComponent } from './dropzone/dropzone.component';\nimport { TreeComponent } from './tree/tree.component';\nimport { SortablejsDirective } from './sortablejs/sortablejs.directive';\n\n@NgModule({\n declarations: [\n DesignerComponent,\n WarningDialogComponent,\n PreviewComponent,\n EffectCurveComponent,\n EffectPanTiltComponent,\n SceneComponent,\n TimelineComponent,\n FixtureCapabilityColorComponent,\n FixtureComponent,\n FixtureSettingsPositionComponent,\n FixtureCapabilityComponent,\n FixtureSettingsComponent,\n EffectComponent,\n FixturePoolComponent,\n PresetComponent,\n MasterDimmerComponent,\n FixtureCapabilityDimmerComponent,\n TimelineGridComponent,\n CompositionSettingsComponent,\n ArraySortPipe,\n FixtureCapabilityPanTiltComponent,\n FixtureCapabilityChannelComponent,\n FixtureChannelComponent,\n FixtureCapabilityColorWheelComponent,\n UserLoginComponent,\n UserRegisterComponent,\n ProjectBrowserComponent,\n WaitDialogComponent,\n ProjectImportComponent,\n ProjectShareComponent,\n ErrorDialogComponent,\n FixtureSettingsStageComponent,\n IntroComponent,\n PresetSettingsComponent,\n SceneSettingsComponent,\n ProjectSaveComponent,\n FixturePoolCreateFromFileComponent,\n FixturePoolEditUniversesComponent,\n DropzoneComponent,\n SortablejsDirective,\n TreeComponent,\n ],\n exports: [DesignerComponent],\n imports: [\n RouterModule.forRoot([], {}),\n BrowserModule,\n BrowserAnimationsModule,\n FormsModule,\n NgxBootstrapSliderModule,\n TranslateModule,\n AccordionModule,\n PopoverModule,\n TypeaheadModule,\n DropzoneModule,\n ToastrModule.forRoot({\n newestOnTop: true,\n }),\n ],\n providers: [provideHttpClient(withInterceptorsFromDi())],\n})\nexport class DesignerModule {}\n","/*\n * Public API Surface of designer\n */\n\nexport * from './lib/designer.service';\nexport * from './lib/designer.component';\nexport * from './lib/designer.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2.UserService","i4","i5","i2.ProjectService","i3","i5.UuidService","i6.FixturePixelGroupResolveService","i1.ConfigService","i2","i3.ProjectService","i4.AnimationService","i5.TimelineStateService","i1.EffectService","i2.UuidService","i4.FixtureService","i5.LivePreviewService","i1.UuidService","i2.EffectService","i3.PresetService","i4.ProjectService","i1.SceneService","i2.PresetService","i5.ConfigService","i6.TimelineStateService","i7.LivePreviewService","i1.PresetService","i2.FixtureService","i3.SceneService","i4.TimelineService","i5.ProjectService","i1.FixtureService","i2.PreviewMeshService","i3.AnimationService","i4.PreviewService","i5.TimelineService","i6.ProjectService","i1","i1.ProjectService","i2.PreviewService","i3.FixtureService","i4.PresetService","i5.SceneService","i6","i7.UuidService","i8.TimelineService","i9","i10.WarningDialogService","i11.LivePreviewService","i3.ProjectLoadService","i4.UserService","i5.WarningDialogService","i6.ConfigService","i7","i8.ArraySortPipe","i4.ProjectLoadService","i3.WarningDialogService","i4.ConfigService","i7.ArraySortPipe","i4.SortablejsDirective","i3.UuidService","i5.PreviewService","i8.PresetService","i9.ConfigService","i10.LivePreviewService","i11","i13.SortablejsDirective","i14.ArraySortPipe","i1.UserService","i3.ConfigService","i2.ConfigService","i2.TimelineService","i6.WarningDialogService","i8.ProjectService","i11.DropzoneComponent","i12.ArraySortPipe","i1.TimelineService","i5.HotkeyTargetExcludeService","i8.ConfigService","i9.IntroService","i12","i13","i14","i5.IntroService","i6.SortablejsDirective","i3.FixturePoolService","i6.LivePreviewService","i8.SortablejsDirective","i3.LivePreviewService","i2.LivePreviewService","i4.IntroService","i5.FixtureCapabilityColorComponent","i6.FixtureCapabilityDimmerComponent","i7.FixtureCapabilityPanTiltComponent","i8.FixtureCapabilityColorWheelComponent","i10","i3.PreviewService","i3.FixtureSettingsPositionComponent","i4.FixtureSettingsStageComponent","i2.AnimationService","i5.EffectService","i8","i3.EffectService","i4.WarningDialogService","i7.EffectCurveComponent","i8.EffectPanTiltComponent","i2.SceneService","i7.SortablejsDirective","i4.FixtureCapabilityChannelComponent","i1.IntroService","i4.FixturePoolService","i7.UserService","i8.UserEnsureLoginService","i9.ProjectLoadService","i11.ErrorDialogService","i12.FixtureService","i13.TimelineService","i14.IntroService","i15.EffectService","i16","i17","i18","i19.PreviewComponent","i20.SceneComponent","i21.TimelineComponent","i22.FixtureComponent","i23.FixtureCapabilityComponent","i24.FixtureSettingsComponent","i25.EffectComponent","i26.PresetComponent","i27.MasterDimmerComponent","i28.FixtureChannelComponent","i29.IntroComponent"],"mappings":"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"}
1
+ {"version":3,"file":"rocketshow-designer.mjs","sources":["../../../projects/designer/src/lib/designer.service.ts","../../../projects/designer/src/lib/models/fixture-capability.ts","../../../projects/designer/src/lib/models/fixture-channel.ts","../../../projects/designer/src/lib/models/fixture-matrix-pixel-group-constraints.ts","../../../projects/designer/src/lib/models/fixture-matrix-pixel-group.ts","../../../projects/designer/src/lib/models/fixture-matrix.ts","../../../projects/designer/src/lib/models/fixture-mode-channel.ts","../../../projects/designer/src/lib/models/fixture-mode.ts","../../../projects/designer/src/lib/models/fixture-physical.ts","../../../projects/designer/src/lib/models/fixture-wheel-slot.ts","../../../projects/designer/src/lib/models/fixture-wheel.ts","../../../projects/designer/src/lib/models/fixture-profile.ts","../../../projects/designer/src/lib/models/cached-fixture.ts","../../../projects/designer/src/lib/models/cached-fixture-capability.ts","../../../projects/designer/src/lib/models/cached-fixture-channel.ts","../../../projects/designer/src/lib/models/color.ts","../../../projects/designer/src/lib/models/fixture.ts","../../../projects/designer/src/lib/models/scene-playback-region.ts","../../../projects/designer/src/lib/models/composition.ts","../../../projects/designer/src/lib/models/effect.ts","../../../projects/designer/src/lib/models/effect-curve-profile-channel.ts","../../../projects/designer/src/lib/models/effect-curve.ts","../../../projects/designer/src/lib/models/effect-pan-tilt.ts","../../../projects/designer/src/lib/models/fixture-capability-value.ts","../../../projects/designer/src/lib/models/fixture-channel-value.ts","../../../projects/designer/src/lib/models/preset-fixture.ts","../../../projects/designer/src/lib/models/preset.ts","../../../projects/designer/src/lib/models/scene.ts","../../../projects/designer/src/lib/models/project.ts","../../../projects/designer/src/lib/services/user.service.ts","../../../projects/designer/src/lib/services/config.service.ts","../../../projects/designer/src/lib/services/project.service.ts","../../../projects/designer/src/lib/services/uuid.service.ts","../../../projects/designer/src/lib/models/cached-fixture-pixel.ts","../../../projects/designer/src/lib/services/fixture-pixel-group-resolve.service.ts","../../../projects/designer/src/lib/services/fixture.service.ts","../../../projects/designer/src/lib/services/preview-mesh.service.ts","../../../projects/designer/src/lib/models/preset-region-scene.ts","../../../projects/designer/src/lib/services/effect.service.ts","../../../projects/designer/src/lib/services/animation.service.ts","../../../projects/designer/src/lib/services/timeline-state.service.ts","../../../projects/designer/src/lib/services/live-preview.service.ts","../../../projects/designer/src/lib/services/preset.service.ts","../../../projects/designer/src/lib/services/scene.service.ts","../../../projects/designer/src/lib/services/timeline.service.ts","../../../projects/designer/src/lib/services/preview.service.ts","../../../projects/designer/src/lib/preview/models/fixture-3d.ts","../../../projects/designer/src/lib/preview/models/color-changer-3d.ts","../../../projects/designer/src/lib/preview/models/moving-head-3d.ts","../../../projects/designer/src/lib/preview/preview.component.ts","../../../projects/designer/src/lib/preview/preview.component.html","../../../projects/designer/src/lib/wait-dialog/wait-dialog.component.ts","../../../projects/designer/src/lib/wait-dialog/wait-dialog.component.html","../../../projects/designer/src/lib/warning-dialog/warning-dialog.component.ts","../../../projects/designer/src/lib/warning-dialog/warning-dialog.component.html","../../../projects/designer/src/lib/services/warning-dialog.service.ts","../../../projects/designer/src/lib/services/project-load.service.ts","../../../projects/designer/src/lib/array-sort-pipe.ts","../../../projects/designer/src/lib/project/project-browser/project-browser.component.ts","../../../projects/designer/src/lib/project/project-browser/project-browser.component.html","../../../projects/designer/src/lib/project/project-import/project-import.component.ts","../../../projects/designer/src/lib/project/project-import/project-import.component.html","../../../projects/designer/src/lib/project/project-save/project-save.component.ts","../../../projects/designer/src/lib/project/project-save/project-save.component.html","../../../projects/designer/src/lib/project/project-share/project-share.component.ts","../../../projects/designer/src/lib/project/project-share/project-share.component.html","../../../projects/designer/src/lib/error-dialog/error-dialog.component.ts","../../../projects/designer/src/lib/error-dialog/error-dialog.component.html","../../../projects/designer/src/lib/services/error-dialog.service.ts","../../../projects/designer/src/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.ts","../../../projects/designer/src/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.html","../../../projects/designer/src/lib/sortablejs/sortablejs.directive.ts","../../../projects/designer/src/lib/fixture-pool/fixture-pool-edit-universes/fixture-pool-edit-universes.component.ts","../../../projects/designer/src/lib/fixture-pool/fixture-pool-edit-universes/fixture-pool-edit-universes.component.html","../../../projects/designer/src/lib/fixture-pool/fixture-pool.component.ts","../../../projects/designer/src/lib/fixture-pool/fixture-pool.component.html","../../../projects/designer/src/lib/services/fixture-pool.service.ts","../../../projects/designer/src/lib/services/hotkey-target-exclude.service.ts","../../../projects/designer/src/lib/services/intro.service.ts","../../../projects/designer/src/lib/user/user-login/user-login.component.ts","../../../projects/designer/src/lib/user/user-login/user-login.component.html","../../../projects/designer/src/lib/user/user-register/user-register.component.ts","../../../projects/designer/src/lib/user/user-register/user-register.component.html","../../../projects/designer/src/lib/services/user-ensure-login.service.ts","../../../projects/designer/src/lib/dropzone/dropzone.component.ts","../../../projects/designer/src/lib/dropzone/dropzone.component.html","../../../projects/designer/src/lib/timeline/composition-settings/composition-settings.component.ts","../../../projects/designer/src/lib/timeline/composition-settings/composition-settings.component.html","../../../projects/designer/src/lib/timeline/timeline-grid/timeline-grid.component.ts","../../../projects/designer/src/lib/timeline/timeline-grid/timeline-grid.component.html","../../../projects/designer/src/lib/timeline/timeline.component.ts","../../../projects/designer/src/lib/timeline/timeline.component.html","../../../projects/designer/src/lib/scene/scene-settings/scene-settings.component.ts","../../../projects/designer/src/lib/scene/scene-settings/scene-settings.component.html","../../../projects/designer/src/lib/scene/scene.component.ts","../../../projects/designer/src/lib/scene/scene.component.html","../../../projects/designer/src/lib/fixture/fixture.component.ts","../../../projects/designer/src/lib/fixture/fixture.component.html","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.ts","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.html","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.ts","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.html","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.ts","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.html","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.ts","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.html","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability.component.ts","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability.component.html","../../../projects/designer/src/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.ts","../../../projects/designer/src/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.html","../../../projects/designer/src/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.ts","../../../projects/designer/src/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.html","../../../projects/designer/src/lib/fixture/fixture-settings/fixture-settings.component.ts","../../../projects/designer/src/lib/fixture/fixture-settings/fixture-settings.component.html","../../../projects/designer/src/lib/effect/effect-curve/effect-curve.component.ts","../../../projects/designer/src/lib/effect/effect-curve/effect-curve.component.html","../../../projects/designer/src/lib/effect/effect-pan-tilt/effect-pan-tilt.component.ts","../../../projects/designer/src/lib/effect/effect-pan-tilt/effect-pan-tilt.component.html","../../../projects/designer/src/lib/effect/effect.component.ts","../../../projects/designer/src/lib/effect/effect.component.html","../../../projects/designer/src/lib/preset/preset-settings/preset-settings.component.ts","../../../projects/designer/src/lib/preset/preset-settings/preset-settings.component.html","../../../projects/designer/src/lib/preset/preset.component.ts","../../../projects/designer/src/lib/preset/preset.component.html","../../../projects/designer/src/lib/master-dimmer/master-dimmer.component.ts","../../../projects/designer/src/lib/master-dimmer/master-dimmer.component.html","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.ts","../../../projects/designer/src/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.html","../../../projects/designer/src/lib/fixture/fixture-channel/fixture-channel.component.ts","../../../projects/designer/src/lib/fixture/fixture-channel/fixture-channel.component.html","../../../projects/designer/src/lib/intro/intro.component.ts","../../../projects/designer/src/lib/intro/intro.component.html","../../../projects/designer/src/lib/designer.component.ts","../../../projects/designer/src/lib/designer.component.html","../../../projects/designer/src/lib/tree/tree.component.ts","../../../projects/designer/src/lib/tree/tree.component.html","../../../projects/designer/src/lib/designer.module.ts","../../../projects/designer/src/public_api.ts","../../../projects/designer/src/rocketshow-designer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DesignerService {\n constructor() {}\n}\n","export enum FixtureCapabilityType {\n NoFunction = 'NoFunction',\n ShutterStrobe = 'ShutterStrobe',\n StrobeSpeed = 'StrobeSpeed',\n StrobeDuration = 'StrobeDuration',\n Intensity = 'Intensity',\n ColorIntensity = 'ColorIntensity',\n ColorPreset = 'ColorPreset',\n ColorTemperature = 'ColorTemperature',\n Pan = 'Pan',\n PanContinuous = 'PanContinuous',\n Tilt = 'Tilt',\n TiltContinuous = 'TiltContinuous',\n PanTiltSpeed = 'PanTiltSpeed',\n WheelSlot = 'WheelSlot',\n WheelShake = 'WheelShake',\n WheelSlotRotation = 'WheelSlotRotation',\n WheelRotation = 'WheelRotation',\n EffectSpeed = 'EffectSpeed',\n EffectDuration = 'EffectDuration',\n EffectParameter = 'EffectParameter',\n SoundSensitivity = 'SoundSensitivity',\n Focus = 'Focus',\n Zoom = 'Zoom',\n Iris = 'Iris',\n IrisEffect = 'IrisEffect',\n Frost = 'Frost',\n FrostEffect = 'FrostEffect',\n Prism = 'Prism',\n PrismRotation = 'PrismRotation',\n BladeInsertion = 'BladeInsertion',\n BladeRotation = 'BladeRotation',\n BladeSystemRotation = 'BladeSystemRotation',\n Fog = 'Fog',\n FogOutput = 'FogOutput',\n FogType = 'FogType',\n BeamAngle = 'BeamAngle',\n Rotation = 'Rotation',\n Speed = 'Speed',\n Time = 'Time',\n Maintenance = 'Maintenance',\n Generic = 'Generic',\n Effect = 'Effect',\n BeamPosition = 'BeamPosition',\n}\n\nexport enum FixtureCapabilityColor {\n Red = 'Red',\n Green = 'Green',\n Blue = 'Blue',\n Cyan = 'Cyan',\n Magenta = 'Magenta',\n Yellow = 'Yellow',\n Amber = 'Amber',\n White = 'White',\n 'Warm White' = 'Warm White',\n 'Cold White' = 'Cold White',\n UV = 'UV',\n Lime = 'Lime',\n Indigo = 'Indigo',\n}\n\nexport class FixtureCapability {\n type: FixtureCapabilityType;\n color: FixtureCapabilityColor;\n dmxRange: number[] = [];\n slotNumber: number;\n comment: string;\n soundControlled: boolean;\n shutterEffect: string;\n randomTiming: boolean;\n\n // may be empty. in this case, the channel name points to the wheel\n wheel: any;\n\n angle: string;\n angleStart: string;\n angleEnd: string;\n speed: string;\n speedStart: string;\n speedEnd: string;\n brightness: string;\n brightnessStart: string;\n brightnessEnd: string;\n duration: string;\n durationStart: string;\n durationEnd: string;\n colorTemperature: string;\n colorTemperatureStart: string;\n colorTemperatureEnd: string;\n soundSensitivity: string;\n soundSensitivityStart: string;\n soundSensitivityEnd: string;\n horizontalAngle: string;\n horizontalAngleStart: string;\n horizontalAngleEnd: string;\n verticalAngle: string;\n verticalAngleStart: string;\n verticalAngleEnd: string;\n distance: string;\n distanceStart: string;\n distanceEnd: string;\n openPercent: string;\n openPercentStart: string;\n openPercentEnd: string;\n frostIntensity: string;\n frostIntensityStart: string;\n frostIntensityEnd: string;\n fogOutput: string;\n fogOutputStart: string;\n fogOutputEnd: string;\n time: string;\n timeStart: string;\n timeEnd: string;\n insertion: string;\n insertionStart: string;\n insertionEnd: string;\n colors: string[];\n colorsStart: string[];\n colorsEnd: string[];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.type = FixtureCapabilityType[data.type as string];\n this.color = data.color;\n if (data.dmxRange) {\n this.dmxRange = data.dmxRange;\n }\n this.wheel = data.wheel;\n this.slotNumber = data.slotNumber;\n this.comment = data.comment;\n this.soundControlled = data.soundControlled;\n this.shutterEffect = data.shutterEffect;\n this.randomTiming = data.randomTiming;\n\n this.angle = data.angle;\n this.angleStart = data.angleStart;\n this.angleEnd = data.angleEnd;\n this.speed = data.speed;\n this.speedStart = data.speedStart;\n this.speedEnd = data.speedEnd;\n this.brightness = data.brightness;\n this.brightnessStart = data.brightnessStart;\n this.brightnessEnd = data.brightnessEnd;\n this.duration = data.duration;\n this.durationStart = data.durationStart;\n this.durationEnd = data.durationEnd;\n this.colorTemperature = data.colorTemperature;\n this.colorTemperatureStart = data.colorTemperatureStart;\n this.colorTemperatureEnd = data.colorTemperatureEnd;\n this.soundSensitivity = data.soundSensitivity;\n this.soundSensitivityStart = data.soundSensitivityStart;\n this.soundSensitivityEnd = data.soundSensitivityEnd;\n this.horizontalAngle = data.horizontalAngle;\n this.horizontalAngleStart = data.horizontalAngleStart;\n this.horizontalAngleEnd = data.horizontalAngleEnd;\n this.verticalAngle = data.verticalAngle;\n this.verticalAngleStart = data.verticalAngleStart;\n this.verticalAngleEnd = data.verticalAngleEnd;\n this.distance = data.distance;\n this.distanceStart = data.distanceStart;\n this.distanceEnd = data.distanceEnd;\n this.openPercent = data.openPercent;\n this.openPercentStart = data.openPercentStart;\n this.openPercentEnd = data.openPercentEnd;\n this.frostIntensity = data.frostIntensity;\n this.frostIntensityStart = data.frostIntensityStart;\n this.frostIntensityEnd = data.frostIntensityEnd;\n this.fogOutput = data.fogOutput;\n this.fogOutputStart = data.fogOutputStart;\n this.fogOutputEnd = data.fogOutputEnd;\n this.time = data.time;\n this.timeStart = data.timeStart;\n this.timeEnd = data.timeEnd;\n this.insertion = data.insertion;\n this.insertionStart = data.insertionStart;\n this.insertionEnd = data.insertionEnd;\n this.colors = data.colors;\n this.colorsStart = data.colorsStart;\n this.colorsEnd = data.colorsEnd;\n }\n}\n","import { FixtureCapability } from './fixture-capability';\n\nexport class FixtureChannel {\n fineChannelAliases: string[] = [];\n defaultValue: string | number;\n capability: FixtureCapability;\n capabilities: FixtureCapability[] = [];\n dmxValueResolution: string;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (data.fineChannelAliases) {\n this.fineChannelAliases = data.fineChannelAliases;\n }\n\n this.defaultValue = data.defaultValue;\n this.dmxValueResolution = data.dmxValueResolution;\n\n if (data.capability) {\n this.capability = new FixtureCapability(data.capability);\n } else if (data.capabilities) {\n for (const capability of data.capabilities) {\n this.capabilities.push(new FixtureCapability(capability));\n }\n }\n }\n}\n","export class FixtureMatrixPixelGroupConstraints {\n // constraint the pixel keys directly\n keys: string[] = [];\n\n // constraints by coordinates\n x: string[] = [];\n y: string[] = [];\n z: string[] = [];\n\n // a name regexp-constraint\n name: string[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (Array.isArray(data)) {\n // an array of pixel keys\n this.keys = data;\n } else {\n // an object of constraints\n this.x = data.x;\n this.y = data.y;\n this.z = data.z;\n this.name = data.name;\n }\n }\n}\n","import { FixtureMatrixPixelGroupConstraints } from './fixture-matrix-pixel-group-constraints';\n\nexport class FixtureMatrixPixelGroup {\n isAll: boolean = false;\n constraints: FixtureMatrixPixelGroupConstraints = null;\n\n constructor(isAll: boolean = false, constraints?: any) {\n this.isAll = isAll;\n if (constraints) {\n this.constraints = new FixtureMatrixPixelGroupConstraints(constraints);\n }\n }\n}\n","import { FixtureMatrixPixelGroup } from './fixture-matrix-pixel-group';\n\nexport class FixtureMatrix {\n pixelKeys: string[][];\n pixelCount: number[] = [];\n pixelGroups: any = {};\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (data.pixelKeys) {\n this.pixelKeys = data.pixelKeys;\n }\n if (data.pixelCount) {\n for (const pixelCountEntry of data.pixelCount) {\n this.pixelCount.push(pixelCountEntry);\n }\n }\n if (data.pixelGroups) {\n for (const property of Object.keys(data.pixelGroups)) {\n const pixelGroup = new FixtureMatrixPixelGroup(data.pixelGroups[property]);\n this.pixelGroups[property] = pixelGroup;\n }\n }\n }\n}\n","export class FixtureModeChannel {\n // direct reference to an available channel\n name: string;\n\n // a matrix channel\n insert: string;\n repeatFor: string[] = [];\n channelOrder: string;\n templateChannels: string[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (typeof data === 'string') {\n this.name = data;\n } else if (typeof data === 'object') {\n // after first saving the project, we have a FixtureModeChannel-object, even if it's just a direct channel with a name\n this.name = data.name;\n\n this.insert = data.insert;\n if (Array.isArray(data.repeatFor)) {\n this.repeatFor = data.repeatFor;\n } else {\n this.repeatFor.push(data.repeatFor);\n }\n this.channelOrder = data.channelOrder;\n this.templateChannels = data.templateChannels;\n }\n }\n}\n","import { FixtureModeChannel } from './fixture-mode-channel';\n\nexport class FixtureMode {\n name: string;\n shortName: string;\n channels: FixtureModeChannel[] = [];\n channelCount: number;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.name = data.name;\n this.shortName = data.shortName;\n\n if (data.channels) {\n for (const channel of data.channels) {\n this.channels.push(new FixtureModeChannel(channel));\n }\n }\n }\n}\n","export class FixturePhysical {\n dimensions: number[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (data.dimensions) {\n for (const dimension of data.dimensions) {\n this.dimensions.push(dimension);\n }\n }\n }\n}\n","export enum FixtureWheelSlotType {\n Open = 'Open',\n Closed = 'Closed',\n Color = 'Color',\n Gobo = 'Gobo',\n Prism = 'Prism',\n Iris = 'Iris',\n Frost = 'Frost',\n AnimationGoboStart = 'AnimationGoboStart',\n AnimationGoboEnd = 'AnimationGoboEnd',\n}\n\nexport class FixtureWheelSlot {\n type: FixtureWheelSlotType;\n name: string;\n colors: string[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.type = FixtureWheelSlotType[data.type as string];\n this.name = data.name;\n if (data.colors) {\n this.colors = data.colors;\n }\n }\n}\n","import { FixtureWheelSlot } from './fixture-wheel-slot';\n\nexport class FixtureWheel {\n slots: FixtureWheelSlot[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (data.slots) {\n for (const slot of data.slots) {\n this.slots.push(new FixtureWheelSlot(slot));\n }\n }\n }\n}\n","import { FixtureChannel } from './fixture-channel';\nimport { FixtureMatrix } from './fixture-matrix';\nimport { FixtureMode } from './fixture-mode';\nimport { FixturePhysical } from './fixture-physical';\nimport { FixtureWheel } from './fixture-wheel';\n\nexport enum FixtureCategory {\n Blinder = 'Blinder',\n 'Color Changer' = 'Color Changer',\n Dimmer = 'Dimmer',\n Effect = 'Effect',\n Fan = 'Fan',\n Flower = 'Flower',\n Hazer = 'Hazer',\n Laser = 'Laser',\n Matrix = 'Matrix',\n 'Moving Head' = 'Moving Head',\n 'Pixel Bar' = 'Pixel Bar',\n Scanner = 'Scanner',\n Smoke = 'Smoke',\n Stand = 'Stand',\n Strobe = 'Strobe',\n Other = 'Other',\n 'Barrel Scanner' = 'Barrel Scanner',\n}\n\nexport class FixtureProfile {\n uuid: string;\n name: string;\n\n // set to file, if the profile is not loaded from the backend\n source: string;\n createdFromFile = false;\n manufacturerShortName: string;\n manufacturerName: string;\n categories: FixtureCategory[] = [];\n physical: FixturePhysical;\n matrix: FixtureMatrix;\n availableChannels: any = {};\n templateChannels: any = {};\n shortName: string;\n wheels: any = {};\n\n // All available fixture modes\n modes: FixtureMode[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n // metadata\n this.uuid = data.uuid;\n this.name = data.name;\n this.manufacturerName = data.manufacturerName;\n this.manufacturerShortName = data.manufacturerShortName;\n\n if (data.categories) {\n for (const category of data.categories) {\n this.categories.push(FixtureCategory[category as string]);\n }\n } else if (data.mainCategory) {\n this.categories.push(FixtureCategory[data.mainCategory as string]);\n }\n if (data.physical) {\n this.physical = new FixturePhysical(data.physical);\n }\n if (data.matrix) {\n this.matrix = new FixtureMatrix(data.matrix);\n }\n if (data.wheels) {\n for (const property of Object.keys(data.wheels)) {\n const wheel = new FixtureWheel(data.wheels[property]);\n this.wheels[property] = wheel;\n }\n }\n if (data.modes) {\n for (const mode of data.modes) {\n this.modes.push(new FixtureMode(mode));\n }\n }\n if (data.availableChannels) {\n for (const property of Object.keys(data.availableChannels)) {\n const fixtureChannel = new FixtureChannel(data.availableChannels[property]);\n this.availableChannels[property] = fixtureChannel;\n }\n }\n if (data.templateChannels) {\n for (const property of Object.keys(data.templateChannels)) {\n const templateChannel = new FixtureChannel(data.templateChannels[property]);\n this.templateChannels[property] = templateChannel;\n }\n }\n if (data.createdFromFile) {\n this.createdFromFile = data.createdFromFile;\n }\n }\n}\n","import { CachedFixtureChannel } from './cached-fixture-channel';\nimport { CachedFixturePixel } from './cached-fixture-pixel';\nimport { Fixture } from './fixture';\nimport { FixtureMode } from './fixture-mode';\nimport { FixtureProfile } from './fixture-profile';\n\nexport class CachedFixture {\n fixture: Fixture;\n pixel: CachedFixturePixel;\n profile: FixtureProfile;\n mode: FixtureMode;\n channels: CachedFixtureChannel[] = [];\n}\n","import { FixtureCapability } from './fixture-capability';\nimport { FixtureWheel } from './fixture-wheel';\nimport { FixtureWheelSlot } from './fixture-wheel-slot';\n\nexport class CachedFixtureCapability {\n capability: FixtureCapability;\n\n // the wheel names, if available\n wheelName: string;\n\n // the wheel, if available\n wheel: FixtureWheel;\n\n // the wheel slots, if available\n wheelSlots: FixtureWheelSlot[] = [];\n\n // is this a color wheel?\n wheelIsColor = false;\n\n centerValue: number;\n}\n","import { CachedFixtureCapability } from './cached-fixture-capability';\nimport { FixtureChannel } from './fixture-channel';\nimport { FixtureWheel } from './fixture-wheel';\n\nexport class CachedFixtureChannel {\n // the corresponding channel\n channel: FixtureChannel;\n\n // the name of the channel\n name: string;\n\n // all channel capabilities\n capabilities: CachedFixtureCapability[] = [];\n\n // default value\n defaultValue: number;\n\n // maximum value\n maxValue: number;\n\n // a color wheel, if available\n colorWheel: FixtureWheel;\n}\n","export class Color {\n red: number;\n green: number;\n blue: number;\n\n constructor(red?: number, green?: number, blue?: number) {\n this.red = red;\n this.green = green;\n this.blue = blue;\n }\n}\n","export enum Positioning {\n topFront = 'topFront',\n topBack = 'topBack',\n bottomFront = 'bottomFront',\n bottomBack = 'bottomBack',\n manual = 'manual',\n}\n\nexport class Fixture {\n uuid: string;\n profileUuid: string;\n name: string;\n dmxUniverseUuid: string;\n dmxFirstChannel = 1;\n modeShortName: string;\n positioning: Positioning = Positioning.topFront;\n\n // Only relevant when positioning = manual\n // in CM\n positionX = 0;\n positionY = 0;\n positionZ = 0;\n\n // in DEG\n rotationX = 0;\n rotationY = 0;\n rotationZ = 0;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.profileUuid = data.profileUuid;\n this.name = data.name;\n this.dmxUniverseUuid = data.dmxUniverseUuid;\n this.dmxFirstChannel = data.dmxFirstChannel;\n this.modeShortName = data.modeShortName;\n this.positioning = data.positioning;\n this.positionX = data.positionX;\n this.positionY = data.positionY;\n this.positionZ = data.positionZ;\n this.rotationX = data.rotationX;\n this.rotationY = data.rotationY;\n this.rotationZ = data.rotationZ;\n }\n}\n","export class ScenePlaybackRegion {\n sceneUuid: string;\n startMillis: number;\n endMillis: number;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.sceneUuid = data.sceneUuid;\n this.startMillis = data.startMillis;\n this.endMillis = data.endMillis;\n }\n}\n","import { ScenePlaybackRegion } from './scene-playback-region';\n\nexport class Composition {\n public uuid: string;\n public name: string;\n\n // none or audio\n public syncType = 'audio';\n\n public audioFileName: string;\n public audioFileInLibrary = false;\n\n public beatsPerMinute = 120;\n public timeSignatureUpper = 4;\n public timeSignatureLower = 4;\n\n public snapToGrid = true;\n\n public tempoGuessed = false;\n\n // time based or musical\n public gridType = 'musical';\n public gridOffsetMillis = 0;\n\n // 1/1, 1/2, 1/4, 1/8, etc.\n public gridResolution = 1;\n\n // if no sync\n public durationMillis = 0;\n\n // Regions, where the scene will be played\n public scenePlaybackRegions: ScenePlaybackRegion[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.name = data.name;\n this.syncType = data.syncType;\n this.audioFileName = data.audioFileName;\n this.audioFileInLibrary = data.audioFileInLibrary;\n this.beatsPerMinute = data.beatsPerMinute;\n this.timeSignatureUpper = data.timeSignatureUpper;\n this.timeSignatureLower = data.timeSignatureLower;\n this.snapToGrid = data.snapToGrid;\n\n // never guess again (and overwrite), when a composition is loaded\n this.tempoGuessed = true;\n\n this.gridType = data.gridType;\n this.gridOffsetMillis = data.gridOffsetMillis;\n this.gridResolution = data.gridResolution;\n this.durationMillis = data.durationMillis;\n\n if (data.scenePlaybackRegions) {\n for (const scenePlaybackRegion of data.scenePlaybackRegions) {\n this.scenePlaybackRegions.push(new ScenePlaybackRegion(scenePlaybackRegion));\n }\n }\n }\n}\n","export abstract class Effect {\n type: string;\n uuid: string;\n visible = true;\n\n constructor(type: string, data?: any) {\n this.type = type;\n\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.visible = data.visible;\n }\n}\n","export class EffectCurveProfileChannels {\n profileUuid: string;\n channels: string[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.profileUuid = data.profileUuid;\n\n if (data.channels) {\n for (const channel of Object.keys(data.channels)) {\n this.channels.push(channel);\n }\n }\n }\n}\n","import { Effect } from './effect';\nimport { EffectCurveProfileChannels } from './effect-curve-profile-channel';\nimport { FixtureCapability } from './fixture-capability';\n\nexport class EffectCurve extends Effect {\n curveType = 'sine';\n\n capabilities: FixtureCapability[] = [];\n channels: EffectCurveProfileChannels[] = [];\n\n lengthMillis = 2500;\n phaseMillis = 0;\n amplitude = 1;\n position = 0.5;\n phasingMillis = 0;\n\n constructor(data?: any) {\n super('curve', data);\n\n if (!data) {\n return;\n }\n\n if (data.capabilities) {\n for (const capability of data.capabilities) {\n this.capabilities.push(new FixtureCapability(capability));\n }\n }\n\n if (data.channels) {\n for (const channel of data.channels) {\n this.channels.push(new EffectCurveProfileChannels(channel));\n }\n }\n\n this.lengthMillis = data.lengthMillis;\n this.phaseMillis = data.phaseMillis;\n this.amplitude = data.amplitude;\n this.position = data.position;\n this.phasingMillis = data.phasingMillis;\n this.curveType = data.curveType;\n }\n\n public getValueAtMillis(timeMillis: number, fixtureIndex?: number): number {\n // Calculate the offset for phasing\n let phasingIndex = 0;\n\n if (fixtureIndex) {\n phasingIndex = fixtureIndex;\n }\n\n const phase = this.phaseMillis + phasingIndex * this.phasingMillis;\n\n // Calculate the value between 0 and 1 according to the curve\n let value = 0;\n\n switch (this.curveType) {\n case 'sine':\n value = this.position + ((this.amplitude / 2) * Math.sin((2 * Math.PI * (timeMillis - phase)) / this.lengthMillis)) / 2;\n break;\n case 'square':\n if (Math.sign(Math.sin((2 * Math.PI * (timeMillis - phase)) / this.lengthMillis) / 2) === -1) {\n value = this.position + this.amplitude / 2;\n } else {\n value = this.position - this.amplitude / 2;\n }\n break;\n case 'triangle':\n // TODO check wikipedia formula\n break;\n case 'sawtooth':\n // TODO\n break;\n case 'reverse-sawtooth':\n // TODO\n break;\n }\n\n return Math.max(Math.min(value, 1), 0);\n }\n}\n","import { Effect } from './effect';\n\nexport class EffectPanTilt extends Effect {\n phasingMillis = 0;\n\n constructor(data?: any) {\n super('pan-tilt', data);\n }\n\n getValueAtMillis(timeMillis: number, fixtureIndex?: number): number {\n // Calculate the offset for phasing\n let phasingIndex = 0;\n\n if (fixtureIndex) {\n phasingIndex = fixtureIndex;\n }\n\n // let phase = this.phaseMillis + phasingIndex * this.phasingMillis;\n\n // Calculate the value according to the curve\n // TODO\n\n return 0;\n }\n}\n","import { FixtureCapabilityColor, FixtureCapabilityType } from './fixture-capability';\n\nexport class FixtureCapabilityValue {\n type: FixtureCapabilityType;\n profileUuid: string;\n\n // value between 0 and 1\n valuePercentage: number;\n\n color: FixtureCapabilityColor;\n wheel: string;\n slotNumber: number;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n this.type = FixtureCapabilityType[data.type as string];\n this.profileUuid = data.profileUuid;\n\n this.valuePercentage = data.valuePercentage;\n this.color = FixtureCapabilityColor[data.color as string];\n this.wheel = data.wheel;\n this.slotNumber = data.slotNumber;\n }\n}\n","export class FixtureChannelValue {\n channelName: string;\n profileUuid: string;\n value: number;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n this.channelName = data.channelName;\n this.profileUuid = data.profileUuid;\n this.value = data.value;\n }\n}\n","export class PresetFixture {\n public fixtureUuid: string;\n public pixelKey: string;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.fixtureUuid = data.fixtureUuid;\n this.pixelKey = data.pixelKey;\n }\n}\n","import { Effect } from './effect';\nimport { EffectCurve } from './effect-curve';\nimport { EffectPanTilt } from './effect-pan-tilt';\nimport { FixtureCapabilityValue } from './fixture-capability-value';\nimport { FixtureChannelValue } from './fixture-channel-value';\nimport { PresetFixture } from './preset-fixture';\n\nexport class Preset {\n uuid: string;\n name: string;\n\n // all related fixtures\n // OBSOLETE: replaced with fixtures\n fixtureUuids: string[] = [];\n fixtures: PresetFixture[] = [];\n\n // the selected values\n fixtureChannelValues: FixtureChannelValue[] = [];\n fixtureCapabilityValues: FixtureCapabilityValue[] = [];\n\n // all related effects\n effects: Effect[] = [];\n\n // position offset, relative to the scene start\n // (undefined = start/end of the scene itself)\n startMillis: number;\n endMillis: number;\n\n // fading times\n fadeInMillis = 0;\n fadeOutMillis = 0;\n\n // fade in/out outside the start/end times?\n fadeInPre = false;\n fadeOutPost = false;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.name = data.name;\n\n // OBSOLETE\n this.fixtureUuids = data.fixtureUuids;\n\n if (data.fixtures) {\n for (const fixture of data.fixtures) {\n this.fixtures.push(new PresetFixture(fixture));\n }\n }\n\n if (data.fixtureChannelValues) {\n for (const fixtureChannelValue of data.fixtureChannelValues) {\n this.fixtureChannelValues.push(new FixtureChannelValue(fixtureChannelValue));\n }\n }\n if (data.fixtureCapabilityValues) {\n for (const fixtureCapabilityValue of data.fixtureCapabilityValues) {\n this.fixtureCapabilityValues.push(new FixtureCapabilityValue(fixtureCapabilityValue));\n }\n }\n if (data.effects) {\n for (const effect of data.effects) {\n switch (effect.type) {\n case 'curve':\n this.effects.push(new EffectCurve(effect));\n break;\n case 'pan-tilt':\n this.effects.push(new EffectPanTilt(effect));\n break;\n }\n }\n }\n this.startMillis = data.startMillis;\n this.endMillis = data.endMillis;\n this.fadeInMillis = data.fadeInMillis;\n this.fadeOutMillis = data.fadeOutMillis;\n this.fadeInPre = data.fadeInPre;\n this.fadeOutPost = data.fadeOutPost;\n }\n}\n","import { ScenePlaybackRegion } from './scene-playback-region';\n\nexport class Scene {\n uuid: string;\n name: string;\n\n color = '#fff';\n\n // All contained presets\n presetUuids: string[] = [];\n\n // Fading times\n fadeInMillis = 0;\n fadeOutMillis = 0;\n\n // fade in/out outside the start/end times?\n fadeInPre = false;\n fadeOutPost = false;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.name = data.name;\n this.color = data.color;\n if (data.presetUuids) {\n this.presetUuids = data.presetUuids;\n }\n this.fadeInMillis = data.fadeInMillis;\n this.fadeOutMillis = data.fadeOutMillis;\n this.fadeInPre = data.fadeInPre;\n this.fadeOutPost = data.fadeOutPost;\n }\n}\n","import { Composition } from './composition';\nimport { Fixture } from './fixture';\nimport { FixtureProfile } from './fixture-profile';\nimport { Preset } from './preset';\nimport { PresetFixture } from './preset-fixture';\nimport { Scene } from './scene';\nimport { UniverseConfig } from './universe-config';\n\nexport class Project {\n public id: number;\n public version: number;\n public uuid: string;\n public name: string;\n public shareToken: string;\n\n public stageWidthCm = 600;\n public stageHeightCm = 350;\n public stageDepthCm = 600;\n\n public stageFloorHeightCm = 30;\n public stageCeilingHeightCm = 5;\n public stagePillarWidthCm = 20;\n\n public masterDimmerValue = 1;\n\n public selectedPresetUuid: string;\n public selectedSceneUuids: string[] = [];\n\n // true = show the preset, false = show the selected scene\n public previewPreset = true;\n\n public selectedCompositionUuid: string;\n\n public compositions: Composition[] = [];\n public fixtureProfiles: FixtureProfile[] = [];\n\n // fixtures added to the project in a DMX universe\n public fixtures: Fixture[] = [];\n\n // the fixtures and pixel keys in order to be selectable\n public presetFixtures: PresetFixture[] = [];\n\n // the universes (name + uuid) the project's fixtures are assigned to\n // (used when the user manages universes freely, see freeUniverseEdit)\n public universes: UniverseConfig[] = [];\n\n public scenes: Scene[] = [];\n public presets: Preset[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.id = data.id;\n this.version = data.version;\n this.uuid = data.uuid;\n this.name = data.name;\n this.shareToken = data.shareToken;\n\n this.stageWidthCm = data.stageWidthCm;\n this.stageHeightCm = data.stageHeightCm;\n this.stageDepthCm = data.stageDepthCm;\n\n this.stageFloorHeightCm = data.stageFloorHeightCm;\n this.stageCeilingHeightCm = data.stageCeilingHeightCm;\n this.stagePillarWidthCm = data.stagePillarWidthCm;\n\n this.masterDimmerValue = data.masterDimmerValue;\n\n this.selectedPresetUuid = data.selectedPresetUuid;\n this.selectedSceneUuids = data.selectedSceneUuids;\n this.previewPreset = data.previewPreset;\n this.selectedCompositionUuid = data.selectedCompositionUuid;\n\n if (data.compositions) {\n for (const composition of data.compositions) {\n this.compositions.push(new Composition(composition));\n }\n }\n\n if (data.fixtureProfiles) {\n for (const fixtureProfile of data.fixtureProfiles) {\n this.fixtureProfiles.push(new FixtureProfile(fixtureProfile));\n }\n }\n\n if (data.fixtures) {\n for (const fixture of data.fixtures) {\n this.fixtures.push(new Fixture(fixture));\n }\n }\n\n if (data.presetFixtures) {\n for (const presetFixture of data.presetFixtures) {\n this.presetFixtures.push(new PresetFixture(presetFixture));\n }\n }\n\n if (data.universes) {\n for (const universe of data.universes) {\n this.universes.push({ uuid: universe.uuid, name: universe.name });\n }\n }\n\n if (data.scenes) {\n for (const scene of data.scenes) {\n this.scenes.push(new Scene(scene));\n }\n }\n\n if (data.presets) {\n for (const preset of data.presets) {\n this.presets.push(new Preset(preset));\n }\n }\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Project } from '../models/project';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserService {\n // the authentication token\n token: string;\n tokenExpiration: Date;\n username: string;\n\n constructor(private http: HttpClient) {\n this.loadFromLocalStorage();\n }\n\n private loadFromLocalStorage() {\n this.token = localStorage.getItem('token');\n this.tokenExpiration = undefined;\n if (localStorage.getItem('tokenExpiration')) {\n this.tokenExpiration = new Date(Date.parse(localStorage.getItem('tokenExpiration')));\n }\n this.username = localStorage.getItem('username');\n }\n\n // register a new user\n register(email: string, username: string, password: string): Observable<any> {\n return this.http.post('register?email=' + email + '&username=' + username + '&password=' + password, null);\n }\n\n // login a user in the api\n login(email: string, password: string): Observable<any> {\n return this.http.post('login?email=' + email + '&password=' + password, null).pipe(\n map((result: any) => {\n this.token = result.token;\n this.username = result.username;\n\n // the token expires one month from now\n this.tokenExpiration = new Date();\n this.tokenExpiration.setDate(this.tokenExpiration.getDate() + 30);\n\n // store to the local storage\n localStorage.setItem('token', this.token);\n localStorage.setItem('tokenExpiration', JSON.stringify(this.tokenExpiration));\n localStorage.setItem('username', this.username);\n\n this.loadFromLocalStorage();\n })\n );\n }\n\n logout() {\n localStorage.removeItem('token');\n localStorage.removeItem('tokenExpiration');\n localStorage.removeItem('username');\n\n this.loadFromLocalStorage();\n }\n\n isLoggedIn(): boolean {\n if (!this.token) {\n return false;\n }\n\n if (new Date() > this.tokenExpiration) {\n this.logout();\n return false;\n }\n\n return true;\n }\n\n getHeaders(): HttpHeaders {\n if (!this.isLoggedIn()) {\n return null;\n }\n\n let headers = new HttpHeaders();\n headers = headers.append('Authorization', this.token);\n return headers;\n }\n\n setAutoLoadProject(project: Project) {\n localStorage.setItem('projectName', project.name);\n if (project.id) {\n localStorage.setItem('projectId', project.id.toString());\n } else {\n localStorage.removeItem('projectId');\n }\n }\n\n getAutoLoadProjectId(): number {\n if (!localStorage.getItem('projectId')) {\n return null;\n }\n return Number.parseInt(localStorage.getItem('projectId'), 10);\n }\n\n getAutoLoadProjectName(): string {\n return localStorage.getItem('projectName');\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { UniverseConfig } from '../models/universe-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConfigService {\n public restUrl: string;\n public enableMediaLibrary = false;\n public loginAvailable = false;\n public shareAvailable = false;\n public menuHeightPx = 0;\n public languageSwitch = false;\n public livePreview = false;\n public localProfiles = false;\n public intro = false;\n public uniqueProjectNames = false;\n public dropzoneChunking = true;\n\n // List of universes (with name and uuid) the user can choose from\n // in the fixture pool. Typically supplied by the host application\n // (e.g. fetched from a backend).\n public universes: UniverseConfig[] = [];\n\n // When true, the user can freely add their own universes (only\n // names) in the fixture pool, without depending on a list provided\n // by the host application.\n public freeUniverseEdit = false;\n\n public menuHeightChanged: Subject<void> = new Subject<void>();\n\n constructor() {}\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Project } from '../models/project';\nimport { UserService } from './user.service';\nimport { ConfigService } from './config.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProjectService {\n // the current project\n public project: Project;\n\n // the project-file versions used in this version of the designer (older ones will be migrated, newer ones are not supported)\n public currentProjectVersion = 2;\n\n constructor(\n private http: HttpClient,\n private userService: UserService,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private translateService: TranslateService,\n private toastrService: ToastrService,\n private configService: ConfigService\n ) {}\n\n private saveApi(project: Project): Observable<object> {\n return this.http.post('project', JSON.stringify(project), { headers: this.userService.getHeaders() }).pipe(\n map((response: any) => {\n if (response) {\n project.id = response.id;\n if (response.shareToken) {\n project.shareToken = response.shareToken;\n }\n const queryParams: Params = {\n id: project.id,\n token: project.shareToken,\n };\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams,\n queryParamsHandling: 'merge', // remove to replace all query params by provided\n });\n }\n return null;\n })\n );\n }\n\n save(project: Project) {\n // tries to save the project and returns, whether it has been saved or not\n\n if (this.configService.freeUniverseEdit) {\n // persist the freely edited universes together with the project\n project.universes = this.configService.universes;\n }\n\n this.saveApi(project).subscribe(\n () => {\n const msg = 'designer.project.save-success';\n const title = 'designer.project.save-success-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.success(result[msg], result[title]);\n });\n\n this.userService.setAutoLoadProject(project);\n },\n (response) => {\n const msg = 'designer.project.save-error';\n const title = 'designer.project.save-error-title';\n const error = response && response.error ? response.error.error : 'unknown';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg] + ' (' + error + ')', result[title]);\n });\n }\n );\n }\n\n getAllProjects(): Observable<Project[]> {\n return this.http.get('projects', { headers: this.userService.getHeaders() }).pipe(\n map((response: any) => {\n const projects: Project[] = [];\n for (const project of response) {\n const projectObject = new Project(project);\n projects.push(projectObject);\n }\n return projects;\n })\n );\n }\n\n deleteProject(project: Project): Observable<any> {\n return this.http.delete('project?id=' + project.id + '&name=' + project.name, { headers: this.userService.getHeaders() });\n }\n\n getProject(id: number, name: string, shareToken?: string): Observable<Project> {\n return this.http.get('project?id=' + id + '&name=' + name + '&token=' + shareToken, { headers: this.userService.getHeaders() }).pipe(\n map((response: any) => {\n const project = new Project(response);\n project.id = id;\n\n return project;\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UuidService {\n constructor() {}\n\n getUuid(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n // tslint:disable-next-line:no-bitwise\n const r = (Math.random() * 16) | 0;\n\n // tslint:disable-next-line:no-bitwise\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n\n return v.toString(16);\n });\n }\n}\n","import { FixtureProfile } from './fixture-profile';\n\nexport class CachedFixturePixel {\n key: string;\n\n // index of the pixel for all dimensions\n x: number;\n y: number;\n z: number;\n\n // position of the beam\n positionX: number;\n positionY: number;\n positionZ: number;\n}\n","import { Injectable } from '@angular/core';\nimport { CachedFixturePixel } from '../models/cached-fixture-pixel';\nimport { FixtureProfile } from '../models/fixture-profile';\n\ntype Axis = 'x' | 'y' | 'z';\n\ntype GroupDef = 'all' | string[] | (Partial<Record<Axis, string[]>> & { name?: string[] });\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FixturePixelGroupResolveService {\n private matchNumberRule(value: number, ruleRaw: string): boolean {\n const rule = ruleRaw.trim().toLowerCase();\n\n // comparisons: <=5, >=5, =5\n const m = rule.match(/^(<=|>=|=)\\s*(-?\\d+)$/);\n if (m) {\n const op = m[1];\n const n = Number(m[2]);\n if (op === '<=') return value <= n;\n if (op === '>=') return value >= n;\n return value === n;\n }\n\n // even / odd\n if (rule === 'even') return value % 2 === 0;\n if (rule === 'odd') return Math.abs(value % 2) === 1;\n\n // 3n, 3n+1, 3n+2, etc.\n const mn = rule.match(/^(\\d+)n(?:\\+(\\d+))?$/);\n if (mn) {\n const base = Number(mn[1]); // e.g. 3\n const rem = Number(mn[2] ?? '0'); // e.g. 1\n // handle negative values reasonably too\n const mod = ((value % base) + base) % base;\n return mod === ((rem % base) + base) % base;\n }\n\n // If you want, you can treat a plain number as \"=number\"\n const asNum = Number(rule);\n if (!Number.isNaN(asNum)) return value === asNum;\n\n throw new Error(`Unknown numeric rule: \"${ruleRaw}\"`);\n }\n\n private matchesAllConstraints(p: CachedFixturePixel, def: Partial<Record<Axis, string[]>> & { name?: string[] }): boolean {\n // AND across present fields\n if (def.x && !def.x.every((rule) => this.matchNumberRule(p.x, rule))) return false;\n if (def.y && !def.y.every((rule) => this.matchNumberRule(p.y, rule))) return false;\n if (def.z && !def.z.every((rule) => this.matchNumberRule(p.z, rule))) return false;\n\n if (def.name) {\n // Interpret each entry as a regex; AND across them (change to \"some\" if you want OR)\n const ok = def.name.every((pattern) => {\n const re = new RegExp(pattern);\n return re.test(p.key);\n });\n if (!ok) return false;\n }\n\n return true;\n }\n\n public resolveGroupPixels(group: string, pixelGroups: Record<string, GroupDef>, allPixels: CachedFixturePixel[]): CachedFixturePixel[] {\n const def = pixelGroups[group];\n if (!def) return []; // unknown group\n\n // 1) \"all\"\n if (def === 'all') return allPixels.slice();\n\n // 2) explicit keys\n if (Array.isArray(def)) {\n const wanted = new Set(def);\n return allPixels.filter((p) => wanted.has(p.key));\n }\n\n // 3) constraints object\n return allPixels.filter((p) => this.matchesAllConstraints(p, def));\n }\n\n public getPixelsForKeyOrGroup(profile: FixtureProfile, allPixelKeys: CachedFixturePixel[], keyOrGroup: string): CachedFixturePixel[] {\n let result: CachedFixturePixel[] = [];\n\n // search for a key first\n const pixel = allPixelKeys.find((p) => p.key === keyOrGroup);\n if (pixel) return [pixel];\n\n // search for a group\n if (profile.matrix.pixelGroups[keyOrGroup]) {\n result.push(...this.resolveGroupPixels(keyOrGroup, profile.matrix.pixelGroups, allPixelKeys));\n }\n\n return result;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CachedFixture } from '../models/cached-fixture';\nimport { CachedFixtureCapability } from '../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../models/cached-fixture-channel';\nimport { Color } from '../models/color';\nimport { Fixture } from '../models/fixture';\nimport { FixtureCapability, FixtureCapabilityColor, FixtureCapabilityType } from '../models/fixture-capability';\nimport { FixtureChannel } from '../models/fixture-channel';\nimport { FixtureMode } from '../models/fixture-mode';\nimport { FixtureProfile } from '../models/fixture-profile';\nimport { FixtureWheel } from '../models/fixture-wheel';\nimport { FixtureWheelSlot, FixtureWheelSlotType } from '../models/fixture-wheel-slot';\nimport { ProjectService } from './project.service';\nimport { UuidService } from './uuid.service';\nimport { CachedFixturePixel } from '../models/cached-fixture-pixel';\nimport { FixturePixelGroupResolveService } from './fixture-pixel-group-resolve.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FixtureService {\n cachedFixtures: CachedFixture[] = [];\n\n // is the side-tab settings currently selected?\n settingsSelection = false;\n\n selectedSettingsFixtures: Fixture[] = [];\n\n constructor(\n private http: HttpClient,\n private projectService: ProjectService,\n private translateService: TranslateService,\n private toastrService: ToastrService,\n private uuidService: UuidService,\n private fixturePixelGroupResolveService: FixturePixelGroupResolveService\n ) {}\n\n getFixtureByUuid(uuid: string): Fixture {\n for (const fixture of this.projectService.project.fixtures) {\n if (fixture.uuid === uuid) {\n return fixture;\n }\n }\n }\n\n private fixtureUuidAndPixelKeyEquals(fixtureUuid1: string, fixtureUuid2: string, pixelKey1: string, pixelKey2: string): boolean {\n return fixtureUuid1 === fixtureUuid2 && ((pixelKey1 == null && pixelKey2 == null) || pixelKey1 === pixelKey2);\n }\n\n getCachedFixtureByUuid(uuid: string, pixelKey: string): CachedFixture {\n for (const fixture of this.cachedFixtures) {\n if (this.fixtureUuidAndPixelKeyEquals(fixture.fixture.uuid, uuid, fixture.pixel?.key, pixelKey)) {\n return fixture;\n }\n }\n\n // not yet found -> try searching the fixture without pixelKey for the general channels\n if (pixelKey) {\n return undefined;\n }\n\n for (const fixture of this.cachedFixtures) {\n if (!fixture.pixel && fixture.fixture.uuid === uuid) {\n return fixture;\n }\n }\n }\n\n // Get all profiles to search for (only metadata)\n getSearchProfiles(): Observable<FixtureProfile[]> {\n return this.http.get('fixtures').pipe(\n map((response: object[]) => {\n const searchProfiles: FixtureProfile[] = [];\n\n for (const profile of response) {\n searchProfiles.push(new FixtureProfile(profile));\n }\n\n return searchProfiles;\n })\n );\n }\n\n getProfileByUuid(uuid: string): FixtureProfile {\n for (const fixtureProfile of this.projectService.project.fixtureProfiles) {\n if (fixtureProfile.uuid === uuid) {\n return fixtureProfile;\n }\n }\n }\n\n loadProfileByUuid(uuid: string): Observable<void> {\n const loadedProfile = this.getProfileByUuid(uuid);\n\n if (loadedProfile) {\n // This profile is already loaded\n return of(undefined);\n }\n\n // Load the metadata and the profile\n return forkJoin([this.http.get('fixtures?uuid=' + encodeURI(uuid)), this.http.get('fixture?uuid=' + encodeURI(uuid))]).pipe(\n map((result) => {\n const mergedData = { ...result[0][0], ...result[1] };\n const fixtureProfile = new FixtureProfile(mergedData);\n this.projectService.project.fixtureProfiles.push(fixtureProfile);\n })\n );\n }\n\n getRotationAngleDeg(value: string): number {\n // convert a rotation angle value into degrees\n if (value.endsWith('deg')) {\n return Number.parseInt(value.replace('deg', ''), 10);\n } else if (value.endsWith('%')) {\n const perc = Number.parseInt(value.replace('%', ''), 10);\n return (perc / 100) * 360;\n }\n\n return undefined;\n }\n\n getWheelSlotColors(wheel: FixtureWheel, slotNumber: number): string[] {\n let colors: string[] = [];\n const wheelSlots = this.getWheelSlots(wheel, slotNumber);\n\n for (const slot of wheelSlots) {\n if (slot.colors && slot.colors.length > 0) {\n colors = colors.concat(slot.colors);\n }\n }\n\n return colors;\n }\n\n getMixedWheelSlotColor(wheel: FixtureWheel, slotNumber: number): Color {\n const colors = this.getWheelSlotColors(wheel, slotNumber);\n const colorsRgb: Color[] = [];\n\n if (colors.length === 0) {\n return undefined;\n }\n\n for (const color of colors) {\n colorsRgb.push(this.hexToRgb(color));\n }\n\n return this.mixColors(colorsRgb);\n }\n\n private componentToHex(c: number): any {\n const hex = c.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }\n\n rgbToHex(r: number, g: number, b: number): string {\n return '#' + this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b);\n }\n\n hexToRgb(hex: string): Color {\n // expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => {\n return r + r + g + g + b + b;\n });\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new Color(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : null;\n }\n\n mixColors(colors: Color[]): Color {\n // mix an array of rgb-colors containing r, g, b values to a new color\n let r = 0;\n let g = 0;\n let b = 0;\n\n for (const color of colors) {\n r += color.red;\n g += color.green;\n b += color.blue;\n }\n\n r /= colors.length;\n g /= colors.length;\n b /= colors.length;\n\n return new Color(r, g, b);\n }\n\n wheelHasSlotType(wheel: FixtureWheel, slotType: FixtureWheelSlotType): boolean {\n for (const slot of wheel.slots) {\n if (slot.type === slotType) {\n return true;\n }\n }\n\n return false;\n }\n\n getWheelByName(profile: FixtureProfile, wheelName: string): FixtureWheel {\n for (const property in profile.wheels) {\n if (property === wheelName) {\n return profile.wheels[property];\n }\n }\n\n // wheel not found\n return undefined;\n }\n\n private getWheelSlots(wheel: FixtureWheel, slotNumber: number): FixtureWheelSlot[] {\n // return one slot or two slots, if they are mixed (e.g. slor number 2.5 returns the slots 2 and 3)\n const slots: FixtureWheelSlot[] = [];\n\n if (!wheel) {\n return slots;\n }\n\n if (slotNumber - Math.floor(slotNumber) > 0) {\n // two slots are set\n const number = Math.floor(slotNumber);\n slots.push(wheel.slots[number - 1]);\n if (number >= 0 && number < wheel.slots.length) {\n slots.push(wheel.slots[number]);\n }\n } else {\n // only one slot is set\n slots.push(wheel.slots[slotNumber - 1]);\n }\n\n return slots;\n }\n\n getModeByFixture(profile: FixtureProfile, fixture: Fixture): FixtureMode {\n for (const mode of profile.modes) {\n if (mode.shortName) {\n if (mode.shortName === fixture.modeShortName) {\n return mode;\n }\n } else {\n if (mode.name === fixture.modeShortName) {\n return mode;\n }\n }\n }\n }\n\n private getFixtureCapability(capability: FixtureCapability, channelName: string, profile: FixtureProfile): CachedFixtureCapability {\n const cachedFixtureCapability = new CachedFixtureCapability();\n cachedFixtureCapability.capability = capability;\n if (capability.slotNumber) {\n // there is a wheel connected to this capability\n if (typeof capability.wheel === 'string') {\n cachedFixtureCapability.wheelName = capability.wheel as string;\n } else if (Array.isArray(capability.wheel)) {\n cachedFixtureCapability.wheelName = capability.wheel[0];\n } else {\n cachedFixtureCapability.wheelName = channelName;\n }\n cachedFixtureCapability.wheel = this.getWheelByName(profile, cachedFixtureCapability.wheelName);\n cachedFixtureCapability.wheelSlots = this.getWheelSlots(cachedFixtureCapability.wheel, capability.slotNumber);\n cachedFixtureCapability.wheelIsColor = this.wheelHasSlotType(cachedFixtureCapability.wheel, FixtureWheelSlotType.Color);\n }\n if (cachedFixtureCapability.capability.dmxRange && cachedFixtureCapability.capability.dmxRange.length === 2) {\n cachedFixtureCapability.centerValue = Math.floor(\n (cachedFixtureCapability.capability.dmxRange[0] + cachedFixtureCapability.capability.dmxRange[1]) / 2\n );\n }\n return cachedFixtureCapability;\n }\n\n private getCapabilitiesByChannel(\n fixtureChannel: FixtureChannel,\n channelName: string,\n profile: FixtureProfile\n ): CachedFixtureCapability[] {\n const capabilites: CachedFixtureCapability[] = [];\n\n if (fixtureChannel.capability) {\n capabilites.push(this.getFixtureCapability(fixtureChannel.capability, channelName, profile));\n } else if (fixtureChannel.capabilities) {\n for (const capability of fixtureChannel.capabilities) {\n capabilites.push(this.getFixtureCapability(capability, channelName, profile));\n }\n }\n\n return capabilites;\n }\n\n private getMaxValueByChannel(fixtureChannel: FixtureChannel): number {\n return Math.pow(256, 1 + fixtureChannel.fineChannelAliases.length) - 1;\n }\n\n private getDefaultValueByChannel(fixtureChannel: FixtureChannel): number {\n if (!fixtureChannel.defaultValue) {\n return undefined;\n }\n\n if (isNaN(fixtureChannel.defaultValue as any) && (fixtureChannel.defaultValue as string).endsWith('%')) {\n // percentage value\n const percentage = Number.parseInt((fixtureChannel.defaultValue as string).replace('%', ''), 10);\n const maxValue = this.getMaxValueByChannel(fixtureChannel);\n return (maxValue / 100) * percentage;\n } else {\n // DMX value\n return Number.parseInt(fixtureChannel.defaultValue as any, 10);\n }\n }\n\n private getColorWheelByChannel(channel: CachedFixtureChannel, profile: FixtureProfile): FixtureWheel {\n for (const channelCapability of channel.capabilities) {\n if (channelCapability.wheelIsColor) {\n return channelCapability.wheel;\n }\n }\n\n return undefined;\n }\n\n getChannelByName(fixture: CachedFixture, channelName: string): CachedFixtureChannel {\n for (const channel of fixture.channels) {\n if (\n (channel.name && channel.name === channelName) ||\n (channel.channel && channel.channel.fineChannelAliases.indexOf(channelName) > -1)\n ) {\n return channel;\n }\n }\n\n return undefined;\n }\n\n private getChannelNameWithPixelKey(templateChannelName: string, pixelKey: string) {\n return templateChannelName.replace('$pixelKey', pixelKey);\n }\n\n private addCachedChannel(\n channels: CachedFixtureChannel[],\n channel: FixtureChannel,\n templateChannelName: string,\n pixelKey: string,\n profile: FixtureProfile\n ) {\n const cachedFixtureChannel = new CachedFixtureChannel();\n const channelName = this.getChannelNameWithPixelKey(templateChannelName, pixelKey);\n\n cachedFixtureChannel.channel = channel;\n cachedFixtureChannel.name = channelName;\n cachedFixtureChannel.capabilities = this.getCapabilitiesByChannel(cachedFixtureChannel.channel, channelName, profile);\n const defaultValue = this.getDefaultValueByChannel(cachedFixtureChannel.channel);\n if (defaultValue) {\n cachedFixtureChannel.defaultValue = defaultValue;\n }\n cachedFixtureChannel.maxValue = this.getMaxValueByChannel(cachedFixtureChannel.channel);\n cachedFixtureChannel.colorWheel = this.getColorWheelByChannel(cachedFixtureChannel, profile);\n channels.push(cachedFixtureChannel);\n }\n\n private alphanumericSort(a: CachedFixturePixel, b: CachedFixturePixel): number {\n return a.key.localeCompare(b.key, undefined, { numeric: true, sensitivity: 'base' });\n }\n\n private evenlySpacedPosCm(index: number, count: number, size: number): number {\n if (count <= 0) return 0;\n if (index < 0 || index >= count) return 0;\n if (count === 1) return size / 2;\n\n const step = size / (count + 1); // equal edge margins\n const pos = (index + 1) * step; // center position\n return pos;\n }\n\n private createPixel(key: string, x: number, y: number, z: number, profile: FixtureProfile): CachedFixturePixel {\n let pixel = new CachedFixturePixel();\n\n if (key) {\n pixel.key = key;\n } else {\n // no key available. generate a unique one based on the dimensions\n pixel.key = 'Pixel ' + (x + 1) + '-' + (y + 1) + '-' + (z + 1);\n }\n\n pixel.x = x;\n pixel.y = y;\n pixel.z = z;\n\n // calculate the position of the beam, based on the physical dimensions\n\n // dimensions in mm\n const widthCm = profile.physical.dimensions[0] / 10;\n const heightCm = profile.physical.dimensions[1] / 10;\n const depthCm = profile.physical.dimensions[2] / 10;\n\n let maxX = 0;\n let maxY = 0;\n let maxZ = 0;\n\n if (profile.matrix.pixelCount) {\n maxX = profile.matrix.pixelCount[0];\n maxY = profile.matrix.pixelCount[1];\n maxZ = profile.matrix.pixelCount[2];\n } else {\n maxX = profile.matrix.pixelKeys.length;\n maxY = profile.matrix.pixelKeys[0].length;\n maxZ = profile.matrix.pixelKeys[0][0].length;\n }\n\n // distribute the pixels with even spacing\n pixel.positionX = this.evenlySpacedPosCm(x, maxX, widthCm) - widthCm / 2;\n pixel.positionY = this.evenlySpacedPosCm(y, maxY, heightCm) - heightCm / 2;\n pixel.positionZ = this.evenlySpacedPosCm(z, maxZ, depthCm) - depthCm / 2;\n\n return pixel;\n }\n\n private getAllPixelKeys(profile: FixtureProfile): CachedFixturePixel[] {\n let result: CachedFixturePixel[] = [];\n\n if (!profile.matrix || !profile.matrix.pixelKeys) {\n return result;\n }\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n for (let y = 0; y < profile.matrix.pixelKeys[x].length; y++) {\n for (let z = 0; z < profile.matrix.pixelKeys[x][y].length; z++) {\n const pixelKey = profile.matrix.pixelKeys[x][y][z];\n if (pixelKey) {\n result.push(this.createPixel(pixelKey, x, y, z, profile));\n }\n }\n }\n }\n\n return result;\n }\n\n private getAllPixelsInGroups(profile: FixtureProfile, allPixelKeys: CachedFixturePixel[]): CachedFixturePixel[] {\n let result: CachedFixturePixel[] = [];\n if (!profile.matrix || !profile.matrix.pixelGroups) {\n return result;\n }\n for (const property of Object.keys(profile.matrix.pixelGroups)) {\n result.concat(this.fixturePixelGroupResolveService.resolveGroupPixels(property, profile.matrix.pixelGroups, allPixelKeys));\n }\n return result;\n }\n\n // get pixels in order for a specific channel repeatFor\n private getPixelsInOrder(profile: FixtureProfile, repeatFor: string[]): CachedFixturePixel[] {\n let allPixelKeys = this.getAllPixelKeys(profile);\n let result: CachedFixturePixel[] = [];\n\n // could contain different things\n\n if (repeatFor.length > 1) {\n // an array of pixel keys or groups\n for (let entry of repeatFor) {\n result = result.concat(this.fixturePixelGroupResolveService.getPixelsForKeyOrGroup(profile, allPixelKeys, entry));\n }\n } else if (repeatFor.length === 0) {\n return result;\n } else if (repeatFor[0] === 'eachPixelABC') {\n // Gets computed into an alphanumerically sorted list of all pixelKeys\n if (profile.matrix.pixelKeys) {\n result = result.concat(allPixelKeys);\n result.sort(this.alphanumericSort);\n result.sort((a, b) => a.key.localeCompare(b.key, undefined, { numeric: true, sensitivity: 'base' }));\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n } else if (repeatFor[0] === 'eachPixelGroup') {\n // Gets computed into an array of all pixel group keys, ordered by appearance in the JSON file\n result = result.concat(this.getAllPixelsInGroups(profile, allPixelKeys));\n } else if (repeatFor[0] === 'eachPixelXYZ') {\n if (profile.matrix.pixelKeys) {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n for (let y = 0; y < profile.matrix.pixelKeys[x].length; y++) {\n for (let z = 0; z < profile.matrix.pixelKeys[x][y].length; z++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n result.push(this.createPixel(pixel, x, y, z, profile));\n }\n }\n }\n }\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n } else if (repeatFor[0] === 'eachPixelXZY') {\n if (profile.matrix.pixelKeys) {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n for (let z = 0; z < profile.matrix.pixelKeys[x][0].length; z++) {\n for (let y = 0; y < profile.matrix.pixelKeys[x].length; y++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n result.push(this.createPixel(pixel, x, y, z, profile));\n }\n }\n }\n }\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n } else if (repeatFor[0] === 'eachPixelYXZ') {\n if (profile.matrix.pixelKeys) {\n for (let y = 0; y < profile.matrix.pixelKeys[0].length; y++) {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n for (let z = 0; z < profile.matrix.pixelKeys[x][y].length; z++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n result.push(this.createPixel(pixel, x, y, z, profile));\n }\n }\n }\n }\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n } else if (repeatFor[0] === 'eachPixelYZX') {\n if (profile.matrix.pixelKeys) {\n for (let y = 0; y < profile.matrix.pixelKeys[0].length; y++) {\n for (let z = 0; z < profile.matrix.pixelKeys[0][y].length; z++) {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n result.push(this.createPixel(pixel, x, y, z, profile));\n }\n }\n }\n }\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n } else if (repeatFor[0] === 'eachPixelZXY') {\n if (profile.matrix.pixelKeys) {\n for (let z = 0; z < profile.matrix.pixelKeys[0][0].length; z++) {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n for (let y = 0; y < profile.matrix.pixelKeys[x].length; y++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n result.push(this.createPixel(pixel, x, y, z, profile));\n }\n }\n }\n }\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n } else if (repeatFor[0] === 'eachPixelZYX') {\n if (profile.matrix.pixelKeys) {\n for (let z = 0; z < profile.matrix.pixelKeys[0][0].length; z++) {\n for (let y = 0; y < profile.matrix.pixelKeys[0].length; y++) {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n result.push(this.createPixel(pixel, x, y, z, profile));\n }\n }\n }\n }\n } else if (profile.matrix.pixelCount.length === 3) {\n for (let z = 0; z < profile.matrix.pixelCount[2]; z++) {\n for (let y = 0; y < profile.matrix.pixelCount[1]; y++) {\n for (let x = 0; x < profile.matrix.pixelCount[0]; x++) {\n result.push(this.createPixel(null, x, y, z, profile));\n }\n }\n }\n }\n }\n\n return result;\n }\n\n getModeChannelCount(profile: FixtureProfile, mode: FixtureMode): number {\n let count: number = 0;\n\n // already calculated?\n if (mode.channelCount) {\n return mode.channelCount;\n }\n\n for (let channel of mode.channels) {\n if (channel.insert === 'matrixChannels') {\n if (channel.repeatFor.length > 1) {\n count += channel.repeatFor.length * channel.templateChannels.length;\n } else if (channel.repeatFor[0] === 'eachPixelGroup') {\n count += profile.matrix.pixelGroups.length * channel.templateChannels.length;\n } else if (channel.repeatFor[0].startsWith('eachPixel')) {\n if (profile.matrix.pixelCount.length === 3) {\n count +=\n profile.matrix.pixelCount[0] * profile.matrix.pixelCount[1] * profile.matrix.pixelCount[2] * channel.templateChannels.length;\n } else {\n for (let x = 0; x < profile.matrix.pixelKeys.length; x++) {\n for (let y = 0; y < profile.matrix.pixelKeys[x].length; y++) {\n for (let z = 0; z < profile.matrix.pixelKeys[x][y].length; z++) {\n const pixel = profile.matrix.pixelKeys[x][y][z];\n if (pixel) {\n count += channel.templateChannels.length;\n }\n }\n }\n }\n }\n }\n } else {\n count++;\n }\n }\n\n mode.channelCount = count;\n\n return mode.channelCount;\n }\n\n getCachedChannels(profile: FixtureProfile, mode: FixtureMode, pixelKey: string): CachedFixtureChannel[] {\n const channels: CachedFixtureChannel[] = [];\n const allPixelKeys = this.getAllPixelKeys(profile);\n const allPixelsInGroups = this.getAllPixelsInGroups(profile, allPixelKeys);\n\n if (!mode) {\n return channels;\n }\n\n for (const channel of mode.channels) {\n if (channel.name && !pixelKey) {\n // direct reference to a channel\n // don't check the fine channels. only add the coarse channel.\n let channelFound = false;\n\n for (const availableChannelName of Object.keys(profile.availableChannels)) {\n if (channel.name === availableChannelName) {\n const availableChannel: FixtureChannel = profile.availableChannels[availableChannelName];\n channelFound = true;\n this.addCachedChannel(channels, availableChannel, availableChannelName, null, profile);\n }\n }\n\n // check the template channels, if not found in the available channels\n if (!channelFound) {\n for (const templateChannelName of Object.keys(profile.templateChannels)) {\n let existingPixelKeys = allPixelKeys.concat(allPixelsInGroups);\n\n for (const existingPixelKey of existingPixelKeys) {\n const channelName = this.getChannelNameWithPixelKey(templateChannelName, existingPixelKey.key);\n\n if (channel.name === channelName) {\n const templateChannel: FixtureChannel = profile.templateChannels[templateChannelName];\n\n this.addCachedChannel(channels, templateChannel, channelName, existingPixelKey.key, profile);\n }\n }\n }\n }\n } else {\n // reference a channel through a pixel matrix\n const availablePixels = this.getPixelsInOrder(profile, channel.repeatFor);\n\n if (channel.channelOrder === 'perPixel') {\n // each channel for each pixel\n\n for (const availablePixel of availablePixels) {\n if (availablePixel.key === pixelKey) {\n for (const modeTemplateChannelName of channel.templateChannels) {\n for (const templateChannelName of Object.keys(profile.templateChannels)) {\n // don't check the fine channels. only add the coarse channel.\n if (modeTemplateChannelName === templateChannelName) {\n const templateChannel: FixtureChannel = profile.templateChannels[templateChannelName];\n\n this.addCachedChannel(channels, templateChannel, templateChannelName, availablePixel.key, profile);\n }\n }\n }\n }\n }\n } else if (channel.channelOrder === 'perChannel') {\n // each pixel for each channel\n\n for (const modeTemplateChannelName of channel.templateChannels) {\n for (const availablePixel of availablePixels) {\n if (availablePixel.key === pixelKey) {\n for (const templateChannelName of Object.keys(profile.templateChannels)) {\n // don't check the fine channels. only add the coarse channel.\n if (modeTemplateChannelName === templateChannelName) {\n const templateChannel: FixtureChannel = profile.templateChannels[templateChannelName];\n\n this.addCachedChannel(channels, templateChannel, templateChannelName, availablePixel.key, profile);\n }\n }\n }\n }\n }\n }\n }\n }\n\n return channels;\n }\n\n // get all used pixels for all channels in the currently used fixture mode\n fixtureGetUniquePixels(fixture: Fixture): CachedFixturePixel[] {\n let pixels: CachedFixturePixel[] = [];\n\n let profile = this.getProfileByUuid(fixture.profileUuid);\n let mode = this.getModeByFixture(profile, fixture);\n\n // add the unique pixel keys\n for (let channel of mode.channels) {\n this.getPixelsInOrder(profile, channel.repeatFor).forEach((pixel) => {\n if (pixels.filter((p) => p.key === pixel.key).length === 0) {\n pixels.push(pixel);\n }\n });\n }\n\n return pixels;\n }\n\n // does the fixture have a general channel without reference to specific pixel keys in the current mode?\n fixtureHasGeneralChannel(fixture: Fixture): boolean {\n let profile = this.getProfileByUuid(fixture.profileUuid);\n let mode = this.getModeByFixture(profile, fixture);\n\n // add the unique pixel keys\n for (let channel of mode.channels) {\n if (this.getPixelsInOrder(profile, channel.repeatFor).length === 0) {\n return true;\n }\n }\n\n return false;\n }\n\n updateCachedFixtures() {\n // calculate some frequently used values as a cache to save cpu time\n // afterwards\n this.cachedFixtures = [];\n\n for (const fixture of this.projectService.project.fixtures) {\n if (this.fixtureHasGeneralChannel(fixture)) {\n const cachedFixture = new CachedFixture();\n cachedFixture.fixture = fixture;\n cachedFixture.profile = this.getProfileByUuid(fixture.profileUuid);\n cachedFixture.mode = this.getModeByFixture(cachedFixture.profile, fixture);\n cachedFixture.channels = this.getCachedChannels(cachedFixture.profile, cachedFixture.mode, null);\n this.cachedFixtures.push(cachedFixture);\n }\n\n const pixels = this.fixtureGetUniquePixels(fixture);\n\n for (let pixel of pixels) {\n const cachedFixture = new CachedFixture();\n cachedFixture.fixture = fixture;\n cachedFixture.pixel = pixel;\n cachedFixture.profile = this.getProfileByUuid(fixture.profileUuid);\n cachedFixture.mode = this.getModeByFixture(cachedFixture.profile, fixture);\n cachedFixture.channels = this.getCachedChannels(cachedFixture.profile, cachedFixture.mode, pixel.key);\n this.cachedFixtures.push(cachedFixture);\n }\n }\n }\n\n capabilitiesMatch(\n type1: FixtureCapabilityType,\n type2: FixtureCapabilityType,\n color1: FixtureCapabilityColor,\n color2: FixtureCapabilityColor,\n wheel1: string,\n wheel2: string,\n profileUuid1: string,\n profileUuid2: string\n ): boolean {\n // checks, whether two provided capapabilities match\n return (\n type1 === type2 &&\n (!color1 || color1 === color2) &&\n (!wheel1 || wheel1 === wheel2) &&\n (!profileUuid1 || profileUuid1 === profileUuid2)\n );\n }\n\n settingsFixtureIsSelected(fixture: Fixture): boolean {\n for (const selectedFixture of this.selectedSettingsFixtures) {\n if (selectedFixture === fixture) {\n return true;\n }\n }\n\n return false;\n }\n\n switchSettingsFixtureSelection(fixture: Fixture) {\n if (this.settingsFixtureIsSelected(fixture)) {\n this.selectedSettingsFixtures.splice(this.selectedSettingsFixtures.indexOf(fixture), 1);\n } else {\n this.selectedSettingsFixtures.push(fixture);\n }\n }\n\n getFixtureIconClass(profile: FixtureProfile): string {\n if (!profile) {\n return '';\n }\n if (profile.categories.length === 0) {\n return '';\n }\n if (!profile.categories[0]) {\n return '';\n }\n return profile.categories[0].replace(' ', '-').toLocaleLowerCase();\n }\n\n updateProfiles() {\n return this.http.post('update-profiles', null);\n }\n\n getNextFreeDmxChannel(fixturePool: Fixture[], neededChannels: number): number {\n // get the next free space for this fixture\n let freeChannels = 0;\n\n for (let i = 0; i < 512; i++) {\n let occupiedChannels = 0;\n\n for (const fixture of fixturePool) {\n const profile = this.getProfileByUuid(fixture.profileUuid);\n const mode = this.getModeByFixture(this.getProfileByUuid(fixture.profileUuid), fixture);\n const channelCount = this.getModeChannelCount(profile, mode);\n\n if (i >= fixture.dmxFirstChannel && i < fixture.dmxFirstChannel + channelCount) {\n // this channel is already occupied by a fixture -> move forward to the end of the fixture\n if (channelCount > occupiedChannels) {\n occupiedChannels = channelCount - (i - fixture.dmxFirstChannel);\n }\n }\n }\n\n if (occupiedChannels > 0) {\n i += occupiedChannels - 1;\n freeChannels = 0;\n } else {\n freeChannels++;\n }\n\n if (freeChannels === neededChannels) {\n return i - freeChannels + 1;\n }\n }\n\n // no free space left for the needed channels\n return -1;\n }\n\n addFixture(profile: FixtureProfile, fixturePool: Fixture[], channelPool?: Fixture[]): Fixture {\n const fixture = new Fixture();\n\n fixture.uuid = this.uuidService.getUuid();\n fixture.profileUuid = profile.uuid;\n fixture.name = profile.name;\n\n if (profile.modes && profile.modes.length > 0) {\n fixture.modeShortName = profile.modes[0].shortName;\n }\n\n // add the same mode as an existing fixture, if available\n let existingModeShortName: string;\n for (const existingFixture of fixturePool) {\n const existingProfile = this.getProfileByUuid(existingFixture.profileUuid);\n\n if (existingProfile === profile) {\n existingModeShortName = existingFixture.modeShortName;\n break;\n }\n }\n\n if (existingModeShortName) {\n fixture.modeShortName = existingModeShortName;\n } else {\n fixture.modeShortName = profile.modes[0].shortName || profile.modes[0].name;\n }\n\n const mode = this.getModeByFixture(profile, fixture);\n const channelCount = this.getModeChannelCount(profile, mode);\n const firstChannel = this.getNextFreeDmxChannel(channelPool ?? fixturePool, channelCount);\n\n if (firstChannel >= 0) {\n fixture.dmxFirstChannel = firstChannel;\n fixturePool.push(fixture);\n return fixture;\n } else {\n // no free space anymore\n const msg = 'designer.fixture-pool.no-free-space';\n const title = 'designer.fixture-pool.no-free-space-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg], result[title]);\n });\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport * as THREE from 'three';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PreviewMeshService {\n private loader = new GLTFLoader();\n private cachedMeshes = new Map<string, THREE.Mesh>();\n\n // the observable, if the requested mesh is already being loaded currently\n private cachedObservables = new Map<string, Observable<THREE.Mesh>>();\n\n constructor() {}\n\n private loadScene(name: string): Observable<THREE.Scene> {\n return new Observable((observer) => {\n this.loader.load(\n './assets/designer/models/' + name + '.gltf',\n\n // Called when the resource is loaded\n (gltf: any) => {\n const model = gltf.scene.children[0];\n\n model.position.set(0, 0, 0);\n\n observer.next(gltf.scene);\n observer.complete();\n },\n\n // Called while loading is progressing\n (xhr: any) => {},\n\n // Called when loading has errors\n (error: any) => {\n observer.error(error);\n }\n );\n });\n }\n\n private loadMesh(name: string): Observable<THREE.Mesh> {\n const observable = this.loadScene(name).pipe(\n map((scene: any) => {\n const model = scene.children[0];\n\n model.position.set(0, 0, 0);\n\n this.cachedMeshes.set(name, model);\n this.cachedObservables.delete(name);\n\n return model.clone();\n })\n );\n\n this.cachedObservables.set(name, observable);\n\n return observable;\n }\n\n getMesh(name: string): Observable<THREE.Mesh> {\n if (this.cachedMeshes.get(name)) {\n return of(this.cachedMeshes.get(name).clone());\n }\n\n return this.cachedObservables.get(name) || this.loadMesh(name);\n }\n}\n","import { Preset } from './preset';\nimport { Scene } from './scene';\nimport { ScenePlaybackRegion } from './scene-playback-region';\n\nexport class PresetRegionScene {\n preset: Preset;\n region: ScenePlaybackRegion;\n scene: Scene;\n\n constructor(preset: Preset, region: ScenePlaybackRegion, scene: Scene) {\n this.preset = preset;\n this.region = region;\n this.scene = scene;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Effect } from './../models/effect';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EffectService {\n // The currently selected effect\n selectedEffect: Effect;\n\n // The effects are currently being edited\n effectsOpen: boolean = false;\n effectsOpenChanged: Subject<void> = new Subject<void>();\n\n constructor() {}\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AnimationService {\n timeMillis = 0;\n\n constructor() {}\n}\n","import { Injectable } from '@angular/core';\nimport { Composition } from '../models/composition';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimelineStateService {\n public playState = 'paused';\n public selectedComposition: Composition;\n public selectedCompositionIndex: number;\n\n constructor() {}\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { AnimationService } from './animation.service';\nimport { ConfigService } from './config.service';\nimport { ProjectService } from './project.service';\nimport { TimelineStateService } from './timeline-state.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LivePreviewService {\n private livePreviewTimer: any;\n private liveChangePending = false;\n private livePreviewPendingPositionMillis: number;\n\n constructor(\n private configService: ConfigService,\n private http: HttpClient,\n private projectService: ProjectService,\n private animationService: AnimationService,\n private timelineStateService: TimelineStateService\n ) {}\n\n previewLive(compositionName: string = '', positionMillis?: number) {\n if (!this.configService.livePreview) {\n return;\n }\n\n if (!compositionName && this.timelineStateService.playState === 'playing' && this.timelineStateService.selectedComposition) {\n compositionName = this.timelineStateService.selectedComposition.name;\n }\n\n let position = positionMillis;\n\n if (position === undefined) {\n position = Math.round(this.animationService.timeMillis);\n }\n\n // collect all changes and delay them to not flood the backend\n // (except composition-bound updates. they need to be delivered always)\n if (this.livePreviewTimer && !compositionName) {\n this.livePreviewPendingPositionMillis = position;\n this.liveChangePending = true;\n return;\n }\n\n this.http\n .post('preview?positionMillis=' + position + '&compositionName=' + compositionName, JSON.stringify(this.projectService.project))\n .subscribe();\n\n this.liveChangePending = false;\n\n if (!compositionName) {\n this.livePreviewTimer = setTimeout(() => {\n this.livePreviewTimer = undefined;\n if (this.liveChangePending) {\n const pendingPosition = this.livePreviewPendingPositionMillis !== undefined ? this.livePreviewPendingPositionMillis : position;\n this.livePreviewPendingPositionMillis = undefined;\n\n this.http\n .post(\n 'preview?positionMillis=' + pendingPosition + '&compositionName=' + compositionName,\n JSON.stringify(this.projectService.project)\n )\n .subscribe();\n }\n }, 50);\n }\n }\n\n stopPreviewPlay() {\n if (!this.configService.livePreview) {\n return;\n }\n\n this.http.post('stop-preview-play', null).subscribe();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { CachedFixtureCapability } from '../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../models/cached-fixture-channel';\nimport { Fixture } from '../models/fixture';\nimport { FixtureCapabilityColor, FixtureCapabilityType } from '../models/fixture-capability';\nimport { FixtureCapabilityValue } from '../models/fixture-capability-value';\nimport { FixtureChannelValue } from '../models/fixture-channel-value';\nimport { FixtureProfile } from '../models/fixture-profile';\nimport { Preset } from '../models/preset';\nimport { EffectService } from './effect.service';\nimport { FixtureService } from './fixture.service';\nimport { ProjectService } from './project.service';\nimport { UuidService } from './uuid.service';\nimport { PresetFixture } from '../models/preset-fixture';\nimport { LivePreviewService } from './live-preview.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PresetService {\n selectedPreset: Preset;\n\n // fires, when the current preview element has changed (scene/preset)\n previewSelectionChanged: Subject<void> = new Subject<void>();\n\n // fires, when the fixture selection has changed\n fixtureSelectionChanged: Subject<void> = new Subject<void>();\n\n // fires, when the fixture selection has changed for settings\n fixtureSelectionSettingsChanged: Subject<void> = new Subject<void>();\n\n // fires, when the selected color has changed. This is required,\n // because detectChanges is not enough to trigger different components.\n fixtureColorChanged: Subject<void> = new Subject<void>();\n\n constructor(\n private effectService: EffectService,\n private uuidService: UuidService,\n private projectService: ProjectService,\n private fixtureService: FixtureService,\n private livePreviewService: LivePreviewService\n ) {}\n\n getPresetByUuid(uuid: string): Preset {\n for (const preset of this.projectService.project.presets) {\n if (preset.uuid === uuid) {\n return preset;\n }\n }\n }\n\n fixtureUuidAndPixelKeyEquals(fixtureUuid1: string, fixtureUuid2: string, pixelKey1: string, pixelKey2: string): boolean {\n return fixtureUuid1 === fixtureUuid2 && ((!pixelKey1 && !pixelKey2) || pixelKey1 === pixelKey2);\n }\n\n getPresetFixture(preset: Preset, fixtureUuid: string, pixelKey?: string): PresetFixture {\n for (const fixture of preset.fixtures) {\n if (this.fixtureUuidAndPixelKeyEquals(fixture.fixtureUuid, fixtureUuid, fixture.pixelKey, pixelKey)) {\n return fixture;\n }\n }\n\n return null;\n }\n\n fixtureIsSelected(fixture: Fixture, pixelKey: string, preset?: Preset): boolean {\n // is the passed fixture selected in the passed/currently selected preset?\n if (!preset) {\n if (this.selectedPreset) {\n preset = this.selectedPreset;\n } else {\n return false;\n }\n }\n\n const presetFixture = this.getPresetFixture(preset, fixture.uuid, pixelKey);\n\n if (presetFixture) {\n return true;\n }\n\n return false;\n }\n\n switchFixtureSelection(fixture: Fixture, pixelKey: string) {\n if (!this.selectedPreset) {\n return;\n }\n\n // select all fixtures at the specified start channel or unselect them,\n // if already selected\n if (this.fixtureIsSelected(fixture, pixelKey)) {\n for (let i = this.selectedPreset.fixtures.length - 1; i >= 0; i--) {\n const projectFixture = this.fixtureService.getFixtureByUuid(this.selectedPreset.fixtures[i].fixtureUuid);\n if (\n projectFixture.dmxFirstChannel === fixture.dmxFirstChannel &&\n projectFixture.dmxUniverseUuid === fixture.dmxUniverseUuid &&\n ((!this.selectedPreset.fixtures[i].pixelKey && !pixelKey) || this.selectedPreset.fixtures[i].pixelKey === pixelKey)\n ) {\n this.selectedPreset.fixtures.splice(i, 1);\n }\n }\n } else {\n for (const projectPresetFixture of this.projectService.project.presetFixtures) {\n if ((!projectPresetFixture.pixelKey && !pixelKey) || projectPresetFixture.pixelKey === pixelKey) {\n const projectFixture = this.fixtureService.getFixtureByUuid(projectPresetFixture.fixtureUuid);\n if (projectFixture.dmxFirstChannel === fixture.dmxFirstChannel && projectFixture.dmxUniverseUuid === fixture.dmxUniverseUuid) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = projectPresetFixture.fixtureUuid;\n presetFixture.pixelKey = pixelKey;\n this.selectedPreset.fixtures.push(presetFixture);\n }\n }\n }\n }\n }\n\n selectAllFixtures() {\n if (!this.selectedPreset) {\n return;\n }\n\n for (const fixture of this.projectService.project.fixtures) {\n if (this.fixtureService.fixtureHasGeneralChannel(fixture)) {\n if (!this.fixtureIsSelected(fixture, null)) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = fixture.uuid;\n this.selectedPreset.fixtures.push(presetFixture);\n }\n }\n\n const pixels = this.fixtureService.fixtureGetUniquePixels(fixture);\n\n for (const pixel of pixels) {\n if (!this.fixtureIsSelected(fixture, pixel.key)) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = fixture.uuid;\n presetFixture.pixelKey = pixel.key;\n this.selectedPreset.fixtures.push(presetFixture);\n }\n }\n }\n }\n\n selectNoFixtures() {\n if (!this.selectedPreset) {\n return;\n }\n\n this.selectedPreset.fixtures = [];\n }\n\n private presetFixtueEquals(fixture1: PresetFixture, fixture2: PresetFixture): boolean {\n return (\n fixture1.fixtureUuid === fixture2.fixtureUuid &&\n ((!fixture2.pixelKey && !fixture1.pixelKey) || fixture2.pixelKey === fixture1.pixelKey)\n );\n }\n\n public removeDeletedFixtures() {\n // after changing the configuration in the fixture pool, we might need to\n // delete some fixtures\n for (const preset of this.projectService.project.presets) {\n for (let i = preset.fixtures.length - 1; i >= 0; i--) {\n const presetFixture = preset.fixtures[i];\n\n let found = false;\n for (let projectFixture of this.projectService.project.presetFixtures) {\n if (this.presetFixtueEquals(presetFixture, projectFixture)) {\n found = true;\n break;\n }\n }\n if (!found) {\n preset.fixtures.splice(i, 1);\n }\n }\n }\n }\n\n public updateFixtureSelection() {\n // after changing the configuration in the fixture pool, we might need to\n // select some more fixtures on the same channel as already selected ones\n for (const preset of this.projectService.project.presets) {\n for (let presetFixture of preset.fixtures) {\n const fixture = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid);\n for (const projectFixture of this.projectService.project.fixtures) {\n if (\n projectFixture.dmxFirstChannel === fixture.dmxFirstChannel &&\n projectFixture.dmxUniverseUuid === fixture.dmxUniverseUuid &&\n !this.fixtureIsSelected(projectFixture, presetFixture.pixelKey, preset)\n ) {\n const newPresetFixture = new PresetFixture();\n newPresetFixture.fixtureUuid = projectFixture.uuid;\n newPresetFixture.pixelKey = presetFixture.pixelKey;\n preset.fixtures.push(newPresetFixture);\n }\n }\n }\n }\n }\n\n deleteCapabilityValue(\n preset: Preset,\n capabilityType: FixtureCapabilityType,\n color?: FixtureCapabilityColor,\n wheel?: string,\n profileUuid?: string\n ) {\n for (let i = 0; i < preset.fixtureCapabilityValues.length; i++) {\n if (\n this.fixtureService.capabilitiesMatch(\n preset.fixtureCapabilityValues[i].type,\n capabilityType,\n preset.fixtureCapabilityValues[i].color,\n color,\n preset.fixtureCapabilityValues[i].wheel,\n wheel,\n preset.fixtureCapabilityValues[i].profileUuid,\n profileUuid\n )\n ) {\n preset.fixtureCapabilityValues.splice(i, 1);\n return;\n }\n }\n }\n\n setCapabilityValue(\n preset: Preset,\n capabilityType: FixtureCapabilityType,\n valuePercentage: number,\n slotNumber?: number,\n color?: FixtureCapabilityColor,\n wheel?: string,\n profileUuid?: string\n ) {\n // Delete existant properties with this type and set the new value\n this.deleteCapabilityValue(preset, capabilityType, color, wheel, profileUuid);\n\n const fixtureCapabilityValue = new FixtureCapabilityValue();\n fixtureCapabilityValue.type = capabilityType;\n fixtureCapabilityValue.color = color;\n fixtureCapabilityValue.wheel = wheel;\n fixtureCapabilityValue.valuePercentage = valuePercentage;\n fixtureCapabilityValue.slotNumber = slotNumber;\n fixtureCapabilityValue.profileUuid = profileUuid;\n\n preset.fixtureCapabilityValues.push(fixtureCapabilityValue);\n }\n\n getCapabilityValue(\n preset: Preset,\n capabilityType: FixtureCapabilityType,\n color?: FixtureCapabilityColor,\n wheel?: string,\n profileUuid?: string\n ): FixtureCapabilityValue {\n for (const capabilityValue of preset.fixtureCapabilityValues) {\n if (\n this.fixtureService.capabilitiesMatch(\n capabilityValue.type,\n capabilityType,\n capabilityValue.color,\n color,\n capabilityValue.wheel,\n wheel,\n capabilityValue.profileUuid,\n profileUuid\n )\n ) {\n return capabilityValue;\n }\n }\n return undefined;\n }\n\n deleteChannelValue(channelName: string, profileUuid: string) {\n for (let i = 0; i < this.selectedPreset.fixtureChannelValues.length; i++) {\n if (\n this.selectedPreset.fixtureChannelValues[i].channelName === channelName &&\n this.selectedPreset.fixtureChannelValues[i].profileUuid === profileUuid\n ) {\n this.selectedPreset.fixtureChannelValues.splice(i, 1);\n return;\n }\n }\n }\n\n setChannelValue(channelName: string, profileUuid: string, value: number) {\n // Delete existant properties with this type and set the new value\n this.deleteChannelValue(channelName, profileUuid);\n\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = channelName;\n fixtureChannelValue.profileUuid = profileUuid;\n fixtureChannelValue.value = value;\n\n this.selectedPreset.fixtureChannelValues.push(fixtureChannelValue);\n }\n\n getChannelValue(channelName: string, profileUuid: string): number {\n for (const channelValue of this.selectedPreset.fixtureChannelValues) {\n if (channelValue.channelName === channelName && channelValue.profileUuid === profileUuid) {\n return channelValue.value;\n }\n }\n }\n\n getApproximatedColorWheelCapability(preset: Preset, cachedChannel: CachedFixtureChannel): CachedFixtureCapability {\n // return an approximated wheel slot channel capability, if a color or a slot on a different\n // wheel has been selected\n let colorRed: number;\n let colorGreen: number;\n let colorBlue: number;\n let lowestDiff = Number.MAX_VALUE;\n let lowestDiffCapability: CachedFixtureCapability;\n let capabilityValue: FixtureCapabilityValue;\n\n capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Red);\n if (capabilityValue) {\n colorRed = 255 * capabilityValue.valuePercentage;\n }\n capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Green);\n if (capabilityValue) {\n colorGreen = 255 * capabilityValue.valuePercentage;\n }\n capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Blue);\n if (capabilityValue) {\n colorBlue = 255 * capabilityValue.valuePercentage;\n }\n\n if (!colorRed && !colorGreen && !colorBlue) {\n // no color found -> search the first color wheel\n // TODO\n }\n\n if (colorRed !== undefined && colorGreen !== undefined && colorBlue !== undefined) {\n for (const capability of cachedChannel.capabilities) {\n if (capability.capability.slotNumber) {\n const mixedColor = this.fixtureService.getMixedWheelSlotColor(capability.wheel, capability.capability.slotNumber);\n if (mixedColor) {\n const diff =\n Math.abs(mixedColor.red - colorRed) + Math.abs(mixedColor.green - colorGreen) + Math.abs(mixedColor.blue - colorBlue);\n\n if (diff < lowestDiff) {\n lowestDiff = diff;\n lowestDiffCapability = capability;\n }\n }\n }\n }\n }\n\n return lowestDiffCapability;\n }\n\n private hasCapabilityType(type: FixtureCapabilityType): boolean {\n // there is at least one channel with at least one intensity capability\n for (const presetFixture of this.selectedPreset.fixtures) {\n const fixture = this.fixtureService.getCachedFixtureByUuid(presetFixture.fixtureUuid, presetFixture.pixelKey);\n for (const channel of fixture.channels) {\n if (channel.channel) {\n for (const capability of channel.capabilities) {\n if (capability.capability.type === type) {\n return true;\n }\n }\n }\n }\n }\n return false;\n }\n\n hasCapabilityDimmer(): boolean {\n return this.hasCapabilityType(FixtureCapabilityType.Intensity);\n }\n\n hasCapabilityColor(): boolean {\n // TODO optionally color temperature and color white (see stairville/mh-100)\n\n // one of the profiles has a color intensity\n if (this.hasCapabilityType(FixtureCapabilityType.ColorIntensity)) {\n return true;\n }\n\n return false;\n }\n\n hasCapabilityColorOrColorWheel(): boolean {\n // TODO optionally color temperature and color white (see stairville/mh-100)\n\n // one of the profiles has a color intensity\n if (this.hasCapabilityColor()) {\n return true;\n }\n\n // a color wheel is involved\n for (const projectFixture of this.selectedPreset.fixtures) {\n const fixture = this.fixtureService.getCachedFixtureByUuid(projectFixture.fixtureUuid, projectFixture.pixelKey);\n for (const channel of fixture.channels) {\n if (channel.colorWheel) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n hasCapabilityPanTilt(): boolean {\n let hasPan = false;\n let hasTilt = false;\n\n // there is at least one pan and one tilt channel\n if (this.hasCapabilityType(FixtureCapabilityType.Pan)) {\n hasPan = true;\n }\n\n if (this.hasCapabilityType(FixtureCapabilityType.Tilt)) {\n hasTilt = true;\n }\n\n if (hasPan && hasTilt) {\n return true;\n }\n\n return false;\n }\n\n selectPreset(index: number) {\n this.effectService.selectedEffect = undefined;\n this.selectedPreset = this.projectService.project.presets[index];\n this.projectService.project.selectedPresetUuid = this.projectService.project.presets[index].uuid;\n this.autoOpenFirstEffect();\n this.previewSelectionChanged.next();\n this.livePreviewService.previewLive();\n }\n\n autoOpenFirstEffect() {\n // open the first effect, if the preset only has one\n if (this.selectedPreset && this.selectedPreset.effects.length === 1) {\n this.effectService.selectedEffect = this.selectedPreset.effects[0];\n }\n }\n\n addPreset(name?: string): void {\n const preset: Preset = new Preset();\n preset.uuid = this.uuidService.getUuid();\n preset.name = name || 'New Preset';\n\n // Insert the new preset before the highest currently selected preset\n let highestSelectedPresetIndex = 0;\n\n for (let i = 0; i < this.projectService.project.presets.length; i++) {\n if (this.selectedPreset === this.projectService.project.presets[i]) {\n highestSelectedPresetIndex = i;\n break;\n }\n }\n\n this.projectService.project.presets.splice(highestSelectedPresetIndex, 0, preset);\n this.selectPreset(highestSelectedPresetIndex);\n }\n\n // return all fixture profiles used in the current preset selection\n getSelectedProfiles() {\n const profiles: FixtureProfile[] = [];\n\n if (!this.selectedPreset) {\n return profiles;\n }\n\n for (const presetFixture of this.selectedPreset.fixtures) {\n const fixture = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid);\n const profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n\n if (profiles.indexOf(profile) < 0) {\n profiles.push(profile);\n }\n }\n\n return profiles;\n }\n\n // given a list of fixture profiles, return all available channels based on the currently selected fixtures in the preset\n getSelectedProfileChannels(selectedProfiles: FixtureProfile[]) {\n const calculatedProfileModes = new Map<FixtureProfile, any[]>();\n const availableChannels: Map<FixtureProfile, CachedFixtureChannel[]> = new Map<FixtureProfile, CachedFixtureChannel[]>();\n\n // calculate all modes for each profile\n for (const profile of selectedProfiles) {\n const modeAndPixelKeys: any[] = [];\n\n // loop over the project fixtures to keep the order\n for (let projectFixture of this.projectService.project.presetFixtures) {\n for (const presetFixture of this.selectedPreset.fixtures) {\n if (this.presetFixtueEquals(presetFixture, projectFixture)) {\n const fixture = this.fixtureService.getCachedFixtureByUuid(presetFixture.fixtureUuid, presetFixture.pixelKey);\n if (fixture.profile.uuid === profile.uuid) {\n const exists = modeAndPixelKeys.some(\n (item) => (item.mode === fixture.mode && !item.pixelKey && !fixture.pixel?.key) || item.pixelKey === fixture.pixel?.key\n );\n if (!exists) {\n modeAndPixelKeys.push({\n mode: fixture.mode,\n pixelKey: presetFixture.pixelKey,\n });\n }\n }\n }\n }\n\n calculatedProfileModes.set(profile, modeAndPixelKeys);\n }\n }\n\n // calculate all channels from the modes\n calculatedProfileModes.forEach((modeAndPixelKeys: any[], profile: FixtureProfile) => {\n const profileChannels: CachedFixtureChannel[] = [];\n for (const modeAndPixelKey of modeAndPixelKeys) {\n const channels = this.fixtureService.getCachedChannels(profile, modeAndPixelKey.mode, modeAndPixelKey.pixelKey);\n for (const channel of channels) {\n // only add the channel, if no channel with the same name has already been added\n // (e.g. a fine channel)\n if (channel.channel && !profileChannels.find((c) => c.name === channel.name)) {\n profileChannels.push(channel);\n }\n }\n }\n availableChannels.set(profile, profileChannels);\n });\n\n return availableChannels;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Preset } from '../models/preset';\nimport { Scene } from '../models/scene';\nimport { EffectService } from './effect.service';\nimport { PresetService } from './preset.service';\nimport { ProjectService } from './project.service';\nimport { UuidService } from './uuid.service';\nimport { LivePreviewService } from './live-preview.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SceneService {\n selectedScenes: Scene[] = [];\n sceneColors: string[] = ['#945fda', '#61da5f', '#5fc3da', '#dad65f', '#da5f5f', '#246db7'];\n\n multipleSelection = false;\n\n sceneDeleted: Subject<void> = new Subject<void>();\n sceneSelected: Subject<void> = new Subject<void>();\n\n constructor(\n private uuidService: UuidService,\n private effectService: EffectService,\n private presetService: PresetService,\n private projectService: ProjectService,\n private livePreviewService: LivePreviewService\n ) {}\n\n sceneIsSelected(scene: Scene): boolean {\n for (const selectedScene of this.selectedScenes) {\n if (selectedScene.uuid === scene.uuid) {\n return true;\n }\n }\n\n return false;\n }\n\n presetIsSelected(preset: Preset): boolean {\n if (!this.selectedScenes || this.selectedScenes.length !== 1) {\n return false;\n }\n\n for (const uuid of this.selectedScenes[0].presetUuids) {\n if (preset.uuid === uuid) {\n return true;\n }\n }\n\n return false;\n }\n\n switchSceneSelection(scene: Scene) {\n // Select a scene if not yet selected or unselect it otherwise\n if (this.sceneIsSelected(scene)) {\n for (let i = 0; i < this.selectedScenes.length; i++) {\n if (this.selectedScenes[i].uuid === scene.uuid) {\n this.selectedScenes.splice(i, 1);\n return;\n }\n }\n } else {\n this.selectedScenes.push(scene);\n }\n\n this.sceneSelected.next();\n }\n\n selectPresetFromSelectedScene() {\n // select the first preset of the scene, if no preset of the current scene is already\n // selected to make sure, the user does not edit a preset which is not even\n // active in the current scene (and sees no change).\n\n let firstPresetUuid;\n\n // check, whether a preset of the current scene is already selected and do nothing\n // in this case\n for (const scene of this.selectedScenes) {\n for (const presetUuid of scene.presetUuids) {\n firstPresetUuid = presetUuid;\n\n if (presetUuid === this.presetService.selectedPreset.uuid) {\n // a preset of a currently selected scene is already selected -> do nothing\n return;\n }\n }\n }\n\n if (!firstPresetUuid) {\n return;\n }\n\n for (let i = 0; i < this.projectService.project.presets.length; i++) {\n if (this.projectService.project.presets[i].uuid === firstPresetUuid) {\n this.presetService.selectPreset(i);\n break;\n }\n }\n }\n\n selectScene(index: number) {\n this.effectService.selectedEffect = undefined;\n\n if (index >= this.projectService.project.scenes.length) {\n this.selectedScenes = [];\n } else {\n if (this.multipleSelection) {\n this.switchSceneSelection(this.projectService.project.scenes[index]);\n } else {\n this.selectedScenes = [];\n this.selectedScenes.push(this.projectService.project.scenes[index]);\n }\n }\n\n this.selectPresetFromSelectedScene();\n\n // preview the complete scene\n this.projectService.project.previewPreset = false;\n\n this.projectService.project.selectedSceneUuids = [];\n for (const scene of this.selectedScenes) {\n this.projectService.project.selectedSceneUuids.push(scene.uuid);\n }\n this.presetService.previewSelectionChanged.next();\n this.livePreviewService.previewLive();\n\n this.sceneSelected.next();\n }\n\n addScene(name?: string): void {\n const scene: Scene = new Scene();\n scene.uuid = this.uuidService.getUuid();\n scene.name = name || 'New Scene';\n\n if (this.projectService.project.scenes.length < this.sceneColors.length) {\n scene.color = this.sceneColors[this.projectService.project.scenes.length];\n } else {\n scene.color = '#' + Math.random().toString(16).slice(2, 8).toUpperCase();\n }\n\n // Insert the new scene before the highest currently selected scene\n let highestSelectedSceneIndex = 0;\n\n for (let i = 0; i < this.projectService.project.scenes.length; i++) {\n if (this.sceneIsSelected(this.projectService.project.scenes[i])) {\n highestSelectedSceneIndex = i;\n break;\n }\n }\n\n this.projectService.project.scenes.splice(highestSelectedSceneIndex, 0, scene);\n this.selectScene(highestSelectedSceneIndex);\n }\n\n removeScene(scene: Scene): void {\n // remove all playback regions\n for (const composition of this.projectService.project.compositions) {\n for (let i = composition.scenePlaybackRegions.length - 1; i >= 0; i--) {\n const compositionPlaybackRegion = composition.scenePlaybackRegions[i];\n if (compositionPlaybackRegion.sceneUuid === scene.uuid) {\n composition.scenePlaybackRegions.splice(i, 1);\n }\n }\n }\n\n // remove the scene\n this.projectService.project.scenes.splice(this.projectService.project.scenes.indexOf(scene), 1);\n if (this.projectService.project.scenes.length > 0) {\n this.selectScene(0);\n }\n\n this.sceneDeleted.next();\n }\n\n getSceneByUuid(uuid: string): Scene {\n for (const scene of this.projectService.project.scenes) {\n if (scene.uuid === uuid) {\n return scene;\n }\n }\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, NgZone } from '@angular/core';\nimport { Observable, Subject, Subscription, timer } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport WaveSurfer from 'wavesurfer.js';\nimport CursorPlugin from 'wavesurfer.js/dist/plugin/wavesurfer.cursor.min.js';\nimport RegionsPlugin from 'wavesurfer.js/dist/plugin/wavesurfer.regions.min.js';\nimport TimeLinePlugin from 'wavesurfer.js/dist/plugin/wavesurfer.timeline.min.js';\nimport { guess } from 'web-audio-beat-detector';\nimport { Composition } from '../models/composition';\nimport { Preset } from '../models/preset';\nimport { PresetRegionScene } from '../models/preset-region-scene';\nimport { Scene } from '../models/scene';\nimport { ScenePlaybackRegion } from '../models/scene-playback-region';\nimport { ConfigService } from './config.service';\nimport { PresetService } from './preset.service';\nimport { ProjectService } from './project.service';\nimport { SceneService } from './scene.service';\nimport { TimelineStateService } from './timeline-state.service';\nimport { LivePreviewService } from './live-preview.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimelineService {\n public waveSurfer: WaveSurfer;\n\n public zoom = 0;\n private timeUpdateSubscription: Subscription;\n public currentTime: string;\n private timelineClicking = false;\n public selectedPlaybackRegion: ScenePlaybackRegion;\n private intensity = 0.2;\n private intensitySelectedScene = 0.4;\n private intensityHighlighted = 0.8;\n public duration: string;\n public waveSurferReady: Subject<void> = new Subject();\n public detectChanges: Subject<void> = new Subject();\n\n // can we add new compositions based on an external pool and\n // should new compositions not available in this pool be added there?\n public externalCompositionsAvailable = false;\n\n public loadingAudioFile = false;\n\n constructor(\n private sceneService: SceneService,\n private presetService: PresetService,\n private projectService: ProjectService,\n private http: HttpClient,\n private configService: ConfigService,\n private ngZone: NgZone,\n private timelineStateService: TimelineStateService,\n private livePreviewService: LivePreviewService\n ) {\n this.presetService.previewSelectionChanged.subscribe(() => {\n this.selectedPlaybackRegion = undefined;\n this.updateRegionSelection();\n });\n this.sceneService.sceneDeleted.subscribe(() => {\n this.redrawAllRegions();\n });\n this.sceneService.sceneSelected.subscribe(() => {\n this.redrawAllRegions();\n });\n }\n\n get playState(): string {\n return this.timelineStateService.playState;\n }\n\n set playState(playState: string) {\n this.timelineStateService.playState = playState;\n }\n\n get selectedComposition(): Composition {\n return this.timelineStateService.selectedComposition;\n }\n\n set selectedComposition(selectedComposition: Composition) {\n this.timelineStateService.selectedComposition = selectedComposition;\n }\n\n get selectedCompositionIndex(): number {\n return this.timelineStateService.selectedCompositionIndex;\n }\n\n set selectedCompositionIndex(selectedCompositionIndex: number) {\n this.timelineStateService.selectedCompositionIndex = selectedCompositionIndex;\n }\n\n private redrawAllRegions() {\n // remove all regions from wavesurver\n if (this.waveSurfer) {\n for (const key of Object.keys(this.waveSurfer.regions.list)) {\n const region: any = this.waveSurfer.regions.list[key];\n region.remove();\n }\n }\n\n // draw all regions\n this.drawAllRegions();\n }\n\n private pad(num: number, size: number): string {\n if (!num) {\n num = 0;\n }\n\n let padded: string = num.toString();\n while (padded.length < size) {\n padded = '0' + padded;\n }\n\n return padded;\n }\n\n private msToTime(millis: number, includeMillis: boolean = true): string {\n const ms: number = Math.round(millis % 1000);\n const seconds: number = Math.floor(((millis % 360000) % 60000) / 1000);\n const minutes: number = Math.floor((millis % 3600000) / 60000);\n\n if (includeMillis) {\n return this.pad(minutes, 2) + ':' + this.pad(seconds, 2) + '.' + this.pad(ms, 3);\n } else {\n return this.pad(minutes, 2) + ':' + this.pad(seconds, 2);\n }\n }\n\n private updateCurrentTime() {\n if (!this.waveSurfer) {\n return;\n }\n\n // display the current time\n this.currentTime = this.msToTime(this.waveSurfer.getCurrentTime() * 1000);\n\n if (!this.waveSurfer.timeline.drawer) {\n return;\n }\n\n // draw the current cursor on the timeline\n // TODO redrawing the timeline each update is way to expensive.\n // maybe as a better solution use an element, like the cursor inside Wavesurfer to\n // display the progress?\n let x = 0;\n const duration: number = this.waveSurfer.backend.getDuration();\n const width: number =\n this.waveSurfer.params.fillParent && !this.waveSurfer.params.scrollParent\n ? this.waveSurfer.timeline.drawer.getWidth()\n : this.waveSurfer.timeline.drawer.wrapper.scrollWidth * this.waveSurfer.params.pixelRatio;\n\n x = (width / duration) * this.waveSurfer.getCurrentTime() - 2;\n\n // update the timeline canvas\n this.waveSurfer.timeline.render();\n\n // draw the cursor on the timeline\n this.waveSurfer.timeline.canvases.forEach((canvas, i) => {\n const leftOffset = i * this.waveSurfer.timeline.maxCanvasWidth;\n\n const ctx = canvas.getContext('2d');\n\n ctx.fillStyle = '#fd7e14';\n ctx.beginPath();\n ctx.moveTo(x - 12 - leftOffset, 20);\n ctx.lineTo(x + 12 - leftOffset, 20);\n ctx.lineTo(x - leftOffset, 45);\n ctx.fill();\n });\n }\n\n private startTimeUpdater() {\n this.stopTimeUpdater();\n\n // Avoid triggering change detection with each animation frame -> run outside zone\n this.ngZone.runOutsideAngular(() => {\n const timeUpdater = timer(0, 40);\n this.timeUpdateSubscription = timeUpdater.subscribe(() => {\n this.updateCurrentTime();\n });\n });\n }\n\n private stopTimeUpdater() {\n if (this.timeUpdateSubscription) {\n this.timeUpdateSubscription.unsubscribe();\n }\n }\n\n formatTimeCallback(seconds: number, pxPerSec: number) {\n if (this.selectedComposition.gridType === 'musical') {\n return Math.round(seconds / this.selectedComposition.timeSignatureUpper / (60 / this.selectedComposition.beatsPerMinute));\n } else {\n // calculate minutes and seconds from seconds count\n const minutes = parseInt((seconds / 60) as any, 10);\n seconds = parseInt((seconds % 60) as any, 10);\n\n // fill up seconds with zeroes\n const secondsStr = seconds < 10 ? '0' + seconds : seconds;\n return `${minutes}:${secondsStr}`;\n }\n }\n\n timeInterval(pxPerSec: number) {\n if (this.selectedComposition.gridType === 'musical') {\n const interval = 60 / this.selectedComposition.beatsPerMinute / this.selectedComposition.gridResolution;\n\n if (pxPerSec < 40) {\n return interval * 4;\n } else if (pxPerSec < 80) {\n return interval * 2;\n }\n\n return interval;\n } else {\n if (pxPerSec >= 25) {\n return 1;\n } else if (pxPerSec * 5 >= 25) {\n return 5;\n } else if (pxPerSec * 15 >= 25) {\n return 15;\n }\n\n return Math.ceil(0.5 / pxPerSec) * 60;\n }\n }\n\n primaryLabelInterval(pxPerSec: number) {\n if (this.selectedComposition.gridType === 'musical') {\n const interval = this.selectedComposition.timeSignatureUpper * this.selectedComposition.gridResolution;\n\n return interval;\n } else {\n if (pxPerSec >= 25) {\n return 10;\n } else if (pxPerSec * 5 >= 25) {\n return 6;\n } else if (pxPerSec * 15 >= 25) {\n return 4;\n }\n\n return 4;\n }\n }\n\n secondaryLabelInterval(pxPerSec: number) {\n if (this.selectedComposition.gridType === 'musical') {\n return 0;\n } else {\n if (pxPerSec >= 25) {\n return 5;\n } else if (pxPerSec * 5 >= 25) {\n return 2;\n } else if (pxPerSec * 15 >= 25) {\n return 2;\n }\n return 2;\n }\n }\n\n private seekWithTimeline(e: any) {\n // taken from wavesurfer -> drawer -> handleEvent\n const clientX = e.targetTouches ? e.targetTouches[0].clientX : e.clientX;\n const bbox = this.waveSurfer.timeline.wrapper.getBoundingClientRect();\n\n const nominalWidth = this.waveSurfer.timeline.drawer.width;\n const parentWidth = this.waveSurfer.timeline.drawer.getWidth();\n\n let progress: number;\n\n if (!this.waveSurfer.timeline.drawer.params.fillParent && nominalWidth < parentWidth) {\n progress =\n (this.waveSurfer.timeline.drawer.params.rtl ? bbox.right - clientX : clientX - bbox.left) *\n (this.waveSurfer.timeline.drawer.params.pixelRatio / nominalWidth) || 0;\n\n if (progress > 1) {\n progress = 1;\n }\n } else {\n progress =\n ((this.waveSurfer.timeline.drawer.params.rtl ? bbox.right - clientX : clientX - bbox.left) +\n this.waveSurfer.timeline.wrapper.scrollLeft) /\n this.waveSurfer.timeline.wrapper.scrollWidth || 0;\n }\n\n progress = Math.max(progress, 0);\n\n setTimeout(() => {\n this.waveSurfer.seekTo(progress);\n this.detectChanges.next();\n this.livePreviewService.previewLive(\n this.selectedComposition.name,\n Math.round(progress * this.waveSurfer.backend.getDuration() * 1000)\n );\n }, 0);\n }\n\n applyZoom(zoom: any) {\n if (zoom < 0 || zoom > 200) {\n return;\n }\n\n this.zoom = zoom;\n if (this.waveSurfer) {\n setTimeout(() => {\n this.waveSurfer.zoom(this.zoom);\n this.updateCurrentTime();\n }, 0);\n }\n }\n\n private isWaveSurferReady(): boolean {\n if (!this.waveSurfer) {\n return false;\n }\n\n if (!this.waveSurfer.isReady) {\n return false;\n }\n\n return true;\n }\n\n addRegion(waveSurferRegion?: any) {\n if (!this.isWaveSurferReady()) {\n return;\n }\n\n if (!this.sceneService.selectedScenes || this.sceneService.selectedScenes.length !== 1) {\n return;\n }\n\n if (!this.selectedComposition) {\n return;\n }\n\n const scenePlaybackRegion: ScenePlaybackRegion = new ScenePlaybackRegion();\n scenePlaybackRegion.sceneUuid = this.sceneService.selectedScenes[0].uuid;\n\n if (waveSurferRegion) {\n scenePlaybackRegion.startMillis = waveSurferRegion.start * 1000;\n scenePlaybackRegion.endMillis = waveSurferRegion.end * 1000;\n } else {\n scenePlaybackRegion.startMillis = (this.waveSurfer.getDuration() * 1000) / 3;\n scenePlaybackRegion.endMillis = ((this.waveSurfer.getDuration() * 1000) / 3) * 2;\n }\n\n this.selectedComposition.scenePlaybackRegions.push(scenePlaybackRegion);\n\n this.selectedPlaybackRegion = scenePlaybackRegion;\n\n if (waveSurferRegion) {\n waveSurferRegion.color =\n 'rgba(' +\n this.hexToRgb(this.sceneService.selectedScenes[0].color).r +\n ', ' +\n this.hexToRgb(this.sceneService.selectedScenes[0].color).g +\n ', ' +\n this.hexToRgb(this.sceneService.selectedScenes[0].color).b +\n ', ' +\n this.intensityHighlighted +\n ')';\n waveSurferRegion.attributes.selectable = true;\n this.connectRegion(waveSurferRegion, this.sceneService.selectedScenes[0], scenePlaybackRegion);\n this.updateRegionSelection();\n } else {\n this.drawRegion(scenePlaybackRegion, this.sceneService.selectedScenes[0]);\n }\n\n this.livePreviewService.previewLive();\n }\n\n private getSnapToGridInterval(): number {\n if (this.selectedComposition.snapToGrid) {\n return 60 / this.selectedComposition.beatsPerMinute / this.selectedComposition.gridResolution;\n }\n\n return undefined;\n }\n\n private getSnapToGridOffset(): number {\n return this.selectedComposition.gridOffsetMillis / 1000;\n }\n\n deleteSelectedComposition() {\n this.projectService.project.compositions.splice(this.selectedCompositionIndex, 1);\n this.selectedComposition = undefined;\n this.selectedCompositionIndex = undefined;\n this.destroyWaveSurfer();\n if (this.projectService.project.compositions.length > 0) {\n this.selectCompositionIndex(0);\n }\n }\n\n destroyWaveSurfer() {\n this.duration = undefined;\n this.loadingAudioFile = false;\n\n if (this.waveSurfer) {\n this.waveSurfer.destroy();\n this.waveSurfer = undefined;\n }\n }\n\n createWaveSurfer() {\n this.destroyWaveSurfer();\n\n if (!this.selectedComposition.audioFileName) {\n return;\n }\n\n this.loadingAudioFile = true;\n\n setTimeout(() => {\n this.waveSurfer = WaveSurfer.create({\n container: '#waveform',\n waveColor: 'white',\n progressColor: 'white',\n // barWidth: 2,\n height: 1,\n interact: false,\n xhr: {\n credentials: 'include',\n },\n // Use for timelines without sound. Wave will be displayed\n // wrong, but should work for a dummy audio without any waves.\n // duration: 400,\n plugins: [\n CursorPlugin.create({\n // showTime: true,\n opacity: 1,\n color: '#fd7e14',\n hideOnBlur: false /* don't show/hide the cursor on the wave (only on the timeline) */,\n }),\n RegionsPlugin.create({\n dragSelection: {\n slop: 5,\n },\n color: '#fff',\n snapToGridInterval: this.getSnapToGridInterval(),\n snapToGridOffset: this.getSnapToGridOffset(),\n }),\n TimeLinePlugin.create({\n container: '#waveform-timeline',\n primaryFontColor: '#fff',\n secondaryFontColor: '#fff',\n offset: this.getSnapToGridOffset(),\n formatTimeCallback: this.formatTimeCallback.bind(this),\n timeInterval: this.timeInterval.bind(this),\n primaryLabelInterval: this.primaryLabelInterval.bind(this),\n secondaryLabelInterval: this.secondaryLabelInterval.bind(this),\n }),\n ],\n });\n\n let audioFileName: string;\n\n if (this.configService.enableMediaLibrary) {\n // the file name is also used for the real file name\n audioFileName = 'file/get?name=' + this.selectedComposition.audioFileName + '&type=AUDIO';\n } else {\n // the composition uuid and extension is used as the file name\n audioFileName =\n 'composition-files/?file=' +\n this.selectedComposition.uuid +\n '.' +\n this.selectedComposition.audioFileName.substr(this.selectedComposition.audioFileName.lastIndexOf('.') + 1);\n }\n\n this.waveSurfer.load(this.configService.restUrl + audioFileName);\n\n this.waveSurfer.on('ready', () => {\n setTimeout(() => {\n // try guessing the bpm and offset from the file, if necessary\n if (this.selectedComposition.tempoGuessed) {\n // we already guessed the BPM of this file --> don't do it again\n this.loadingAudioFile = false;\n } else {\n // we have not yet guessed the BPM --> do it now\n this.selectedComposition.tempoGuessed = true;\n guess(this.waveSurfer.backend.buffer)\n .then(({ bpm, offset }) => {\n // the bpm and offset could be guessed\n this.selectedComposition.beatsPerMinute = bpm;\n this.selectedComposition.gridOffsetMillis = offset * 1000;\n this.loadingAudioFile = false;\n })\n .catch((err) => {\n // something went wrong\n console.error('Could not detect the BPM from the audio file', err);\n this.loadingAudioFile = false;\n });\n }\n\n this.duration = this.msToTime(this.waveSurfer.getDuration() * 1000);\n this.drawAllRegions();\n\n // scroll wavesurfer in sync with the timeline\n this.waveSurfer.timeline.wrapper.addEventListener('scroll', () => {\n this.waveSurfer.drawer.wrapper.scrollLeft = this.waveSurfer.timeline.wrapper.scrollLeft;\n\n // Set the scroll position of the timeline to the same position as the wavesurfer,\n // because the timeline is larger than wavesurfer and might get out of sync.\n // This way, if wavesurfer cannot scroll any further, we reset the position\n // of the timeline as well.\n this.waveSurfer.timeline.wrapper.scrollLeft = this.waveSurfer.drawer.wrapper.scrollLeft;\n });\n\n // display the cursor also on the timeline\n this.waveSurfer.timeline.wrapper.addEventListener('mouseenter', () => {\n this.waveSurfer.cursor.showCursor();\n });\n this.waveSurfer.timeline.wrapper.addEventListener('mouseleave', () => {\n this.waveSurfer.cursor.hideCursor();\n });\n this.waveSurfer.timeline.wrapper.addEventListener('mousemove', (e: any) => {\n const bbox = this.waveSurfer.container.getBoundingClientRect();\n const x = e.clientX - bbox.left;\n this.waveSurfer.cursor.updateCursorPosition(x, 0);\n });\n\n // hide the cursor on the wave initially. in combination with the param hideOnBlur = false,\n // it will never be displayed on the wave now. we handle it on the timeline only.\n this.waveSurfer.cursor.hideCursor();\n\n // seek on timeline-click\n this.waveSurfer.timeline.wrapper.addEventListener('mousedown', (e: any) => {\n this.timelineClicking = true;\n this.seekWithTimeline(e);\n });\n\n this.waveSurfer.timeline.wrapper.addEventListener('mousemove', (e: any) => {\n if (this.timelineClicking) {\n this.seekWithTimeline(e);\n }\n });\n\n this.waveSurfer.timeline.wrapper.addEventListener('mouseup', (e: any) => {\n this.timelineClicking = false;\n });\n\n this.updateCurrentTime();\n\n this.detectChanges.next();\n this.waveSurferReady.next();\n }, 0);\n });\n\n this.waveSurfer.on('error', (error: any) => {\n // could not load the composition --> delete it\n // (this may occur, when the composition has been deleted but the project is not saved afterwards)\n this.deleteSelectedComposition();\n });\n\n this.waveSurfer.on('seek', () => {\n this.updateCurrentTime();\n });\n\n this.waveSurfer.on('play', () => {\n this.startTimeUpdater();\n });\n\n this.waveSurfer.on('pause', () => {\n this.stopTimeUpdater();\n });\n\n this.waveSurfer.on('region-created', (region) => {\n // region created by selection or programmatically\n if (this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1) {\n if (!region.data.handled) {\n this.addRegion(region);\n }\n } else {\n if (!region.data.handled) {\n region.remove();\n }\n }\n });\n\n this.waveSurfer.on('region-updated', (region: any) => {\n this.detectChanges.next();\n this.livePreviewService.previewLive();\n });\n }, 0);\n }\n\n private hexToRgb(hex: string) {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null;\n }\n\n private updateRegionSelection() {\n if (!this.waveSurfer) {\n return;\n }\n\n for (const key of Object.keys(this.waveSurfer.regions.list)) {\n const region: any = this.waveSurfer.regions.list[key];\n\n // if no scene is set, the region is not valid (e.g. has been created, while\n // no scene has been selected and remove did not work properly)\n if (region.scene) {\n let intensity = this.intensity;\n\n region.drag = false;\n region.resize = false;\n region.attributes.selectable = false;\n\n if (this.sceneService.sceneIsSelected(region.scene)) {\n intensity = this.intensitySelectedScene;\n region.drag = true;\n region.resize = true;\n region.attributes.selectable = true;\n }\n\n region.attributes.selected = false;\n\n if (this.selectedPlaybackRegion && this.selectedPlaybackRegion === region.scenePlaybackRegion) {\n intensity = this.intensityHighlighted;\n region.attributes.selected = true;\n }\n\n region.color =\n 'rgba(' +\n this.hexToRgb(region.scene.color).r +\n ', ' +\n this.hexToRgb(region.scene.color).g +\n ', ' +\n this.hexToRgb(region.scene.color).b +\n ', ' +\n intensity +\n ')';\n region.updateRender();\n }\n }\n }\n\n updateSelectedRegion() {\n if (!this.waveSurfer) {\n return;\n }\n\n if (!this.selectedPlaybackRegion) {\n return;\n }\n\n for (const key of Object.keys(this.waveSurfer.regions.list)) {\n const region: any = this.waveSurfer.regions.list[key];\n\n if (this.selectedPlaybackRegion === region.scenePlaybackRegion) {\n region.start = this.selectedPlaybackRegion.startMillis / 1000;\n region.end = this.selectedPlaybackRegion.endMillis / 1000;\n region.updateRender();\n break;\n }\n }\n }\n\n private setSelectedRegion(scenePlaybackRegion?: ScenePlaybackRegion) {\n if (this.selectedPlaybackRegion && this.selectedPlaybackRegion === scenePlaybackRegion) {\n // No update required\n return;\n }\n\n if (scenePlaybackRegion) {\n this.selectedPlaybackRegion = scenePlaybackRegion;\n }\n\n this.updateRegionSelection();\n }\n\n private getRegionSnapToGridValue(value: number): number {\n // the regions should snap to a grid\n const offset = this.getSnapToGridOffset() || 0;\n const interval = this.getSnapToGridInterval() || 0;\n return Math.round((value - offset) / interval) * interval + offset;\n }\n\n private connectRegion(waveSurferRegion: any, scene: Scene, scenePlaybackRegion: ScenePlaybackRegion, preset?: Preset) {\n waveSurferRegion.scenePlaybackRegion = scenePlaybackRegion;\n waveSurferRegion.scene = scene;\n waveSurferRegion.preset = preset;\n\n waveSurferRegion.on('click', (event) => {\n if (this.sceneService.sceneIsSelected(scene)) {\n this.setSelectedRegion(scenePlaybackRegion);\n }\n });\n\n waveSurferRegion.on('update', () => {\n this.setSelectedRegion(scenePlaybackRegion);\n if (this.selectedComposition.snapToGrid) {\n // update the regions boundaries. they may not snap to grid, if it has been\n // disabled during creation of the region but activated afterwards.\n waveSurferRegion.start = this.getRegionSnapToGridValue(waveSurferRegion.start);\n waveSurferRegion.end = this.getRegionSnapToGridValue(waveSurferRegion.end);\n }\n scenePlaybackRegion.startMillis = Math.round(waveSurferRegion.start * 1000);\n scenePlaybackRegion.endMillis = Math.round(waveSurferRegion.end * 1000);\n });\n }\n\n private drawRegion(scenePlaybackRegion: ScenePlaybackRegion, scene: Scene) {\n // draw the regions of the currently selected scene\n if (!this.isWaveSurferReady()) {\n return;\n }\n\n // add the playback region\n const waveSurferRegion = this.waveSurfer.addRegion({\n start: scenePlaybackRegion.startMillis / 1000,\n end: scenePlaybackRegion.endMillis / 1000,\n color: '#fff',\n data: { handled: true },\n });\n this.connectRegion(waveSurferRegion, scene, scenePlaybackRegion);\n\n // TODO show the all presets\n // for (let presetUuid of scene.presetUuids) {\n // const preset = this.presetService.getPresetByUuid(presetUuid);\n\n // let waveSurferRegion = this.timelineService.waveSurfer.addRegion({\n // start: (scenePlaybackRegion.startMillis + (preset.startMillis ? preset.startMillis : 0)) / 1000,\n // end: (scenePlaybackRegion.startMillis\n // + (preset.endMillis ? preset.endMillis : scenePlaybackRegion.endMillis - scenePlaybackRegion.startMillis)) / 1000,\n // color: '#fff',\n // data: { handled: true },\n // // TODO\n // attributes: {\n // preset: true,\n // name: 'Preset 1'\n // }\n // });\n // this.connectRegion(waveSurferRegion, scene, scenePlaybackRegion, preset);\n // }\n\n this.updateRegionSelection();\n }\n\n removeRegion() {\n if (!this.selectedPlaybackRegion) {\n return;\n }\n\n if (this.sceneService.selectedScenes.length !== 1) {\n return;\n }\n\n for (let i = 0; i < this.selectedComposition.scenePlaybackRegions.length; i++) {\n if (this.selectedComposition.scenePlaybackRegions[i] === this.selectedPlaybackRegion) {\n // remove the region from wavesurfer\n for (const key of Object.keys(this.waveSurfer.regions.list)) {\n const region: any = this.waveSurfer.regions.list[key];\n\n if (region.scenePlaybackRegion === this.selectedPlaybackRegion) {\n region.remove();\n }\n }\n\n this.selectedPlaybackRegion = undefined;\n this.selectedComposition.scenePlaybackRegions.splice(i, 1);\n\n return;\n }\n }\n\n this.livePreviewService.previewLive();\n }\n\n getPresetsInTime(timeMillis: number): PresetRegionScene[] {\n // Return all presets which should be active during the specified time\n const activePresets: PresetRegionScene[] = [];\n\n for (let sceneIndex = this.projectService.project.scenes.length - 1; sceneIndex >= 0; sceneIndex--) {\n const scene = this.projectService.project.scenes[sceneIndex];\n\n for (const region of this.selectedComposition.scenePlaybackRegions) {\n if (region.sceneUuid === scene.uuid) {\n for (let presetIndex = this.projectService.project.presets.length - 1; presetIndex >= 0; presetIndex--) {\n for (const presetUuid of scene.presetUuids) {\n if (presetUuid === this.projectService.project.presets[presetIndex].uuid) {\n const preset = this.presetService.getPresetByUuid(presetUuid);\n\n if (preset) {\n let presetStartMillis = preset.startMillis === undefined ? region.startMillis : region.startMillis + preset.startMillis;\n let presetEndMillis = preset.endMillis === undefined ? region.endMillis : region.startMillis + preset.endMillis;\n\n // extend the running time, if fading is done outside the boundaries\n presetStartMillis -= preset.fadeInPre ? preset.fadeInMillis : 0;\n presetEndMillis += preset.fadeOutPost ? preset.fadeOutMillis : 0;\n\n if (presetStartMillis <= timeMillis && presetEndMillis >= timeMillis) {\n activePresets.push(new PresetRegionScene(preset, region, scene));\n }\n }\n }\n }\n }\n }\n }\n }\n\n return activePresets;\n }\n\n drawAllRegions() {\n if (!this.selectedComposition) {\n return;\n }\n\n // draw the regions in the same order as their corresponding scenes, but draw\n // the selected ones last, to make sure they're always clickable.\n for (let sceneIndex = this.projectService.project.scenes.length - 1; sceneIndex >= 0; sceneIndex--) {\n const scene = this.projectService.project.scenes[sceneIndex];\n if (!this.sceneService.sceneIsSelected(scene)) {\n for (const scenePlaybackRegion of this.selectedComposition.scenePlaybackRegions) {\n if (scenePlaybackRegion.sceneUuid === scene.uuid) {\n this.drawRegion(scenePlaybackRegion, scene);\n }\n }\n }\n }\n\n // draw all selected scenes afterwards\n for (let sceneIndex = this.projectService.project.scenes.length - 1; sceneIndex >= 0; sceneIndex--) {\n const scene = this.projectService.project.scenes[sceneIndex];\n\n if (this.sceneService.sceneIsSelected(scene)) {\n for (const scenePlaybackRegion of this.selectedComposition.scenePlaybackRegions) {\n if (scenePlaybackRegion.sceneUuid === scene.uuid) {\n this.drawRegion(scenePlaybackRegion, scene);\n }\n }\n }\n }\n }\n\n updateGrid() {\n if (this.waveSurferReady) {\n this.waveSurfer.timeline.params.offset = this.getSnapToGridOffset();\n\n this.waveSurfer.regions.params.snapToGridInterval = this.getSnapToGridInterval();\n this.waveSurfer.regions.params.snapToGridOffset = this.getSnapToGridOffset();\n }\n this.updateCurrentTime();\n }\n\n getExternalCompositionNames(): Observable<string[]> {\n // get available compositions from an external pool (e.g. Rocket Show)\n return this.http.get('composition/list').pipe(\n map((response: object[]) => {\n const compositionNames: string[] = [];\n\n for (const responseComposition of response) {\n compositionNames.push((responseComposition as any).name);\n }\n\n return compositionNames;\n })\n );\n }\n\n selectCompositionIndex(index: number) {\n this.selectedComposition = this.projectService.project.compositions[index];\n this.selectedCompositionIndex = index;\n this.projectService.project.selectedCompositionUuid = this.selectedComposition.uuid;\n this.createWaveSurfer();\n\n // required to trigger timeline.component.resize()\n this.waveSurferReady.next();\n\n this.applyZoom(0);\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport * as THREE from 'three';\nimport { CachedFixture } from '../models/cached-fixture';\nimport { EffectCurve } from '../models/effect-curve';\nimport { FixtureCapabilityType } from '../models/fixture-capability';\nimport { FixtureChannelValue } from '../models/fixture-channel-value';\nimport { Preset } from '../models/preset';\nimport { PresetRegionScene } from '../models/preset-region-scene';\nimport { FixtureService } from './fixture.service';\nimport { PresetService } from './preset.service';\nimport { ProjectService } from './project.service';\nimport { SceneService } from './scene.service';\nimport { TimelineService } from './timeline.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PreviewService implements OnDestroy {\n public doUpdateFixtureSetup: Subject<void> = new Subject();\n public doUpdateStageAndPositions: Subject<void> = new Subject();\n\n private updateStageAndPositionsSubscription: Subscription;\n public stageAndPositionsDirty: boolean = true;\n\n public scene: THREE.Scene;\n\n private stageMeshes: THREE.Mesh[] = [];\n private stageMaterial: THREE.MeshStandardMaterial;\n fixtureMaterial: THREE.MeshStandardMaterial;\n fixtureSelectedMaterial: THREE.MeshLambertMaterial;\n\n constructor(\n private presetService: PresetService,\n private fixtureService: FixtureService,\n private sceneService: SceneService,\n private timelineService: TimelineService,\n private projectService: ProjectService\n ) {\n this.stageMaterial = new THREE.MeshStandardMaterial({\n color: 0x0d0d0d,\n // roughness: 0.5,\n // metalness: 0.5,\n });\n this.fixtureMaterial = new THREE.MeshLambertMaterial({\n color: 0x0d0d0d,\n emissive: 0x0d0d0d,\n });\n this.fixtureSelectedMaterial = new THREE.MeshLambertMaterial({\n color: 0x660066,\n emissive: 0xaa00aa,\n emissiveIntensity: 0.000000000000000000001,\n });\n this.updateStageAndPositionsSubscription = this.doUpdateStageAndPositions.subscribe(() => {\n this.stageAndPositionsDirty = true;\n });\n }\n\n private getAlreadyCalculatedFixture(fixtures: CachedFixture[], fixtureIndex: number): CachedFixture {\n // Has this fixture already been calculated (same universe and dmx start address as a fixture before)\n // --> return it\n for (let i = 0; i < fixtureIndex; i++) {\n const calculatedFixture = fixtures[i];\n\n if (\n calculatedFixture.fixture.dmxUniverseUuid === fixtures[fixtureIndex].fixture.dmxUniverseUuid &&\n calculatedFixture.fixture.dmxFirstChannel === fixtures[fixtureIndex].fixture.dmxFirstChannel &&\n ((!calculatedFixture.pixel?.key && !fixtures[fixtureIndex].pixel?.key) ||\n calculatedFixture.pixel?.key === fixtures[fixtureIndex].pixel?.key)\n ) {\n return calculatedFixture;\n }\n }\n\n return undefined;\n }\n\n public getPresets(timeMillis: number): PresetRegionScene[] {\n // Get relevant presets in correct order to process with their corresponding scene, if available\n let presets: PresetRegionScene[] = [];\n\n if (this.timelineService.playState === 'playing') {\n // Only use active presets in current regions\n presets = this.timelineService.getPresetsInTime(timeMillis);\n } else {\n if (this.projectService.project.previewPreset) {\n // Only preview the selected preset\n if (this.presetService.selectedPreset) {\n presets.push(new PresetRegionScene(this.presetService.selectedPreset, undefined, undefined));\n }\n } else {\n // Preview the selected scenes\n for (let sceneIndex = this.projectService.project.scenes.length - 1; sceneIndex >= 0; sceneIndex--) {\n for (const scene of this.sceneService.selectedScenes) {\n if (scene.uuid === this.projectService.project.scenes[sceneIndex].uuid) {\n for (let presetIndex = this.projectService.project.presets.length - 1; presetIndex >= 0; presetIndex--) {\n for (const presetUuid of scene.presetUuids) {\n // Loop over the presets in the preset service to retain the preset order\n if (presetUuid === this.projectService.project.presets[presetIndex].uuid) {\n presets.push(new PresetRegionScene(this.projectService.project.presets[presetIndex], undefined, scene));\n break;\n }\n }\n }\n }\n }\n }\n }\n }\n\n return presets;\n }\n\n private mixChannelValue(\n existingChannelValues: FixtureChannelValue[],\n channelValue: FixtureChannelValue,\n intensityPercentage: number,\n defaultValue: number = 0\n ) {\n let newValue: number = channelValue.value;\n let existingValue: number = defaultValue;\n\n if (intensityPercentage < 1) {\n // We need to mix a possibly existing value (or the default value 0) with the new value (fading)\n\n // Get the existent value for this property\n for (const existingChannelValue of existingChannelValues) {\n if (\n existingChannelValue.channelName === channelValue.channelName &&\n existingChannelValue.profileUuid === channelValue.profileUuid\n ) {\n existingValue = existingChannelValue.value;\n break;\n }\n }\n\n // Mix the existing value with the new value\n newValue = existingValue * (1 - intensityPercentage) + newValue * intensityPercentage;\n }\n\n // Remove the existent value, if available\n for (let i = 0; i < existingChannelValues.length; i++) {\n if (\n existingChannelValues[i].channelName === channelValue.channelName &&\n existingChannelValues[i].profileUuid === channelValue.profileUuid\n ) {\n existingChannelValues.splice(i, 1);\n break;\n }\n }\n\n // Add the new value\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = channelValue.channelName;\n fixtureChannelValue.profileUuid = channelValue.profileUuid;\n fixtureChannelValue.value = newValue;\n existingChannelValues.push(fixtureChannelValue);\n }\n\n // Get the fixture index inside the passed preset (used for chasing)\n private getFixtureIndex(preset: Preset, fixtureUuid: string, pixelKey: string): number {\n let index = 0;\n const countedFirstDmxChannelPixelKey: any[] = [];\n\n if (!this.presetService.getPresetFixture(preset, fixtureUuid, pixelKey)) {\n // fixture is not in preset\n return undefined;\n }\n\n // Loop over the global fixtures to retain the order\n for (const projectFixture of this.projectService.project.presetFixtures) {\n for (const presetFixture of preset.fixtures) {\n if (\n this.presetService.fixtureUuidAndPixelKeyEquals(\n projectFixture.fixtureUuid,\n presetFixture.fixtureUuid,\n projectFixture.pixelKey,\n presetFixture.pixelKey\n )\n ) {\n if (this.presetService.fixtureUuidAndPixelKeyEquals(projectFixture.fixtureUuid, fixtureUuid, projectFixture.pixelKey, pixelKey)) {\n return index;\n }\n\n const fixture = this.fixtureService.getFixtureByUuid(projectFixture.fixtureUuid);\n const firstDmxChannelAndFixtureUuid = {\n dmxUniverseUuid: fixture.dmxUniverseUuid,\n firstDmxChannel: fixture.dmxFirstChannel,\n pixelKey: projectFixture.pixelKey,\n };\n\n const exists = countedFirstDmxChannelPixelKey.some(\n (item) =>\n item.dmxUniverseUuid === firstDmxChannelAndFixtureUuid.dmxUniverseUuid &&\n item.firstDmxChannel === firstDmxChannelAndFixtureUuid.firstDmxChannel &&\n ((!item.pixelKey && !firstDmxChannelAndFixtureUuid.pixelKey) || item.pixelKey === firstDmxChannelAndFixtureUuid.pixelKey)\n );\n\n // don't count fixtures on the same universe and channel as already counted ones\n if (!exists) {\n index++;\n countedFirstDmxChannelPixelKey.push(firstDmxChannelAndFixtureUuid);\n }\n\n break;\n }\n }\n }\n\n return undefined;\n }\n\n private getPresetIntensity(preset: PresetRegionScene, timeMillis: number): number {\n // When fading is in progress (on preset or scene-level), the current preset does not\n // fully cover underlying values.\n // -> 0 = no covering at all, 1 = fully cover (no fading)\n let intensityPercentageScene = 1;\n let intensityPercentagePreset = 1;\n let intensityPercentage = 1;\n\n if (preset.region && preset.scene) {\n // Fade out is stronger than fade in (if they overlap)\n\n // Take away intensity for scene fading\n const sceneStartMillis = preset.scene.fadeInPre ? preset.region.startMillis - preset.scene.fadeInMillis : preset.region.startMillis;\n const sceneEndMillis = preset.scene.fadeOutPost ? preset.region.endMillis + preset.scene.fadeOutMillis : preset.region.endMillis;\n\n if (timeMillis > sceneEndMillis - preset.scene.fadeOutMillis && timeMillis < sceneEndMillis) {\n // Scene fades out\n intensityPercentageScene = (sceneEndMillis - timeMillis) / preset.scene.fadeOutMillis;\n } else if (timeMillis < sceneStartMillis + preset.scene.fadeInMillis && timeMillis > sceneStartMillis) {\n // Scene fades in\n intensityPercentageScene = (timeMillis - sceneStartMillis) / preset.scene.fadeInMillis;\n }\n }\n\n if (preset.region && preset.preset) {\n // Take away intensity for preset fading\n let presetStartMillis =\n preset.preset.startMillis === undefined ? preset.region.startMillis : preset.region.startMillis + preset.preset.startMillis;\n\n let presetEndMillis =\n preset.preset.endMillis === undefined ? preset.region.endMillis : preset.region.startMillis + preset.preset.endMillis;\n\n // extend the running time, if fading is done outside the boundaries\n presetStartMillis -= preset.preset.fadeInPre ? preset.preset.fadeInMillis : 0;\n presetEndMillis += preset.preset.fadeOutPost ? preset.preset.fadeOutMillis : 0;\n\n if (timeMillis > presetEndMillis - preset.preset.fadeOutMillis && timeMillis < presetEndMillis) {\n // Preset fades out\n intensityPercentagePreset = (presetEndMillis - timeMillis) / preset.preset.fadeOutMillis;\n } else if (timeMillis < presetStartMillis + preset.preset.fadeInMillis && timeMillis > presetStartMillis) {\n // Preset fades in\n intensityPercentagePreset = (timeMillis - presetStartMillis) / preset.preset.fadeInMillis;\n }\n\n intensityPercentage = intensityPercentageScene * intensityPercentagePreset;\n }\n\n return intensityPercentage;\n }\n\n private mixCapabilityValues(\n preset: PresetRegionScene,\n cachedFixture: CachedFixture,\n values: FixtureChannelValue[],\n intensityPercentage: number\n ) {\n let hasColor = false;\n\n // mix the preset capability values\n for (const presetCapabilityValue of preset.preset.fixtureCapabilityValues) {\n for (const cachedChannel of cachedFixture.channels) {\n if (cachedChannel.channel) {\n for (const channelCapability of cachedChannel.capabilities) {\n if (\n this.fixtureService.capabilitiesMatch(\n presetCapabilityValue.type,\n channelCapability.capability.type,\n presetCapabilityValue.color,\n channelCapability.capability.color,\n presetCapabilityValue.wheel,\n channelCapability.wheelName,\n presetCapabilityValue.profileUuid,\n cachedFixture.profile.uuid\n )\n ) {\n // the capabilities match -> apply the value, if possible\n if (\n (presetCapabilityValue.type === FixtureCapabilityType.Intensity ||\n presetCapabilityValue.type === FixtureCapabilityType.ColorIntensity) &&\n presetCapabilityValue.valuePercentage >= 0\n ) {\n // intensity and colorIntensity (dimmer and color)\n const valuePercentage = presetCapabilityValue.valuePercentage;\n const defaultValue = 0;\n\n // brightness property\n if (cachedChannel.capabilities.length === 1) {\n // the only capability in this channel\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.maxValue * valuePercentage;\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage, defaultValue);\n\n if (presetCapabilityValue.type === FixtureCapabilityType.ColorIntensity) {\n hasColor = true;\n }\n } else {\n // more than one capability in the channel\n if (channelCapability.capability.brightness === 'off' && valuePercentage === 0) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = channelCapability.centerValue;\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage, defaultValue);\n\n if (presetCapabilityValue.type === FixtureCapabilityType.ColorIntensity) {\n hasColor = true;\n }\n } else if (\n (channelCapability.capability.brightnessStart === 'dark' || channelCapability.capability.brightnessStart === 'off') &&\n channelCapability.capability.brightnessEnd === 'bright'\n ) {\n const value =\n (channelCapability.capability.dmxRange[1] - channelCapability.capability.dmxRange[0]) * valuePercentage +\n channelCapability.capability.dmxRange[0];\n\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = value;\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage, defaultValue);\n\n if (presetCapabilityValue.type === FixtureCapabilityType.ColorIntensity) {\n hasColor = true;\n }\n }\n }\n } else if (\n (presetCapabilityValue.type === FixtureCapabilityType.Pan || presetCapabilityValue.type === FixtureCapabilityType.Tilt) &&\n presetCapabilityValue.valuePercentage >= 0\n ) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.maxValue * presetCapabilityValue.valuePercentage;\n this.mixChannelValue(values, fixtureChannelValue, 1);\n } else if (\n presetCapabilityValue.type === FixtureCapabilityType.WheelSlot &&\n channelCapability.capability.slotNumber === presetCapabilityValue.slotNumber\n ) {\n // wheel slot (color, gobo, etc.)\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = channelCapability.centerValue;\n this.mixChannelValue(values, fixtureChannelValue, 1);\n\n // check, whether we just set a color wheel value\n if (channelCapability.wheelIsColor) {\n hasColor = true;\n }\n }\n }\n }\n }\n\n // approximate the color from a color or a different color wheel, if necessary\n if (!hasColor && cachedChannel.colorWheel) {\n const capability = this.presetService.getApproximatedColorWheelCapability(preset.preset, cachedChannel);\n\n if (capability) {\n // we found an approximated color in the available wheel channel\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = capability.centerValue;\n this.mixChannelValue(values, fixtureChannelValue, 1);\n }\n }\n }\n }\n }\n\n private mixChannelValues(\n preset: PresetRegionScene,\n cachedFixture: CachedFixture,\n values: FixtureChannelValue[],\n intensityPercentage: number\n ) {\n // mix the preset channel values\n for (const cachedChannel of cachedFixture.channels) {\n if (cachedChannel.channel) {\n for (const channelValue of preset.preset.fixtureChannelValues) {\n if (cachedFixture.profile.uuid === channelValue.profileUuid && cachedChannel.name === channelValue.channelName) {\n this.mixChannelValue(values, channelValue, intensityPercentage);\n }\n }\n }\n }\n }\n\n private mixEffects(\n timeMillis: number,\n fixtureIndex: number,\n preset: PresetRegionScene,\n cachedFixture: CachedFixture,\n values: FixtureChannelValue[],\n intensityPercentage: number\n ) {\n let effectTimeMillis = timeMillis;\n\n if (preset.region) {\n effectTimeMillis = timeMillis - preset.region.startMillis;\n }\n\n for (const effect of preset.preset.effects) {\n if (effect.visible) {\n // EffectCurve\n if (effect instanceof EffectCurve) {\n const effectCurve = effect as EffectCurve;\n\n // capabilities\n for (const capability of effectCurve.capabilities) {\n for (const cachedChannel of cachedFixture.channels) {\n for (const channelCapability of cachedChannel.capabilities) {\n if (\n this.fixtureService.capabilitiesMatch(\n capability.type,\n channelCapability.capability.type,\n capability.color,\n channelCapability.capability.color,\n null,\n null,\n null,\n null\n )\n ) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.maxValue * effectCurve.getValueAtMillis(effectTimeMillis, fixtureIndex);\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage);\n }\n }\n }\n }\n\n // channels\n for (const channelProfile of effectCurve.channels) {\n if (channelProfile.profileUuid === cachedFixture.profile.uuid) {\n for (const channel of channelProfile.channels) {\n for (const cachedChannel of cachedFixture.channels) {\n if (cachedChannel.name === channel) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.maxValue * effectCurve.getValueAtMillis(effectTimeMillis, fixtureIndex);\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage);\n }\n }\n }\n\n break;\n }\n }\n }\n\n // TODO other effects (PanTilt, etc.)\n }\n }\n }\n\n // return all fixture uuids with their corresponding channel values\n public getChannelValues(timeMillis: number, presets: PresetRegionScene[]): Map<CachedFixture, FixtureChannelValue[]> {\n // Loop over all relevant presets and calc the property values from the presets (capabilities, channels and effects)\n const calculatedFixtures = new Map<CachedFixture, FixtureChannelValue[]>();\n\n for (let i = 0; i < this.fixtureService.cachedFixtures.length; i++) {\n const cachedFixture = this.fixtureService.cachedFixtures[i];\n\n // all values of the current fixture channels\n let values: FixtureChannelValue[] = [];\n\n const alreadyCalculatedFixture = this.getAlreadyCalculatedFixture(this.fixtureService.cachedFixtures, i);\n\n if (alreadyCalculatedFixture) {\n // only relevant for the preview --> reuse all calculated values\n values = Object.assign([], calculatedFixtures.get(alreadyCalculatedFixture));\n } else {\n // apply the default values\n for (const cachedChannel of cachedFixture.channels) {\n if (cachedChannel.channel) {\n if (cachedChannel.channel.defaultValue) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.defaultValue;\n this.mixChannelValue(values, fixtureChannelValue, 1);\n }\n }\n }\n\n for (const preset of presets) {\n // search for this fixture in the preset and get it's preset-specific index (for chasing effects)\n const fixtureIndex = this.getFixtureIndex(preset.preset, cachedFixture.fixture.uuid, cachedFixture.pixel?.key);\n\n if (fixtureIndex >= 0) {\n // this fixture is also in the preset -> mix the required values (overwrite existing values,\n // if set multiple times)\n const intensityPercentage = this.getPresetIntensity(preset, timeMillis);\n\n this.mixCapabilityValues(preset, cachedFixture, values, intensityPercentage);\n this.mixChannelValues(preset, cachedFixture, values, intensityPercentage);\n this.mixEffects(timeMillis, fixtureIndex, preset, cachedFixture, values, intensityPercentage);\n }\n }\n }\n\n // Store the calculated values for subsequent fixtures on the same DMX address\n calculatedFixtures.set(cachedFixture, values);\n }\n\n return calculatedFixtures;\n }\n\n public fixtureIsSelected(uuid: string, pixelKey: string, presets: PresetRegionScene[]): boolean {\n for (const preset of presets) {\n if (this.presetService.getPresetFixture(preset.preset, uuid, pixelKey)) {\n return true;\n }\n }\n\n return false;\n }\n\n public updateFixtureSetup() {\n this.stageAndPositionsDirty = true;\n this.doUpdateFixtureSetup.next();\n }\n\n private prepareStageMesh(mesh: THREE.Mesh) {\n mesh.receiveShadow = false;\n mesh.castShadow = false;\n }\n\n public updateStage() {\n if (!this.scene) {\n return;\n }\n\n let geometry: any;\n let mesh: any;\n\n // Remove old meshes from the scene\n for (const existingMesh of this.stageMeshes) {\n this.scene.remove(existingMesh);\n existingMesh.geometry.dispose();\n }\n this.stageMeshes = [];\n\n // Ground\n geometry = new THREE.PlaneGeometry(5000, 5000);\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(0, 0, 0);\n mesh.rotateX((Math.PI / 180) * -90);\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Floor\n geometry = new THREE.BoxGeometry(\n this.projectService.project.stageWidthCm,\n this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm\n );\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(0, this.projectService.project.stageFloorHeightCm / 2, 0);\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Pillar front left\n geometry = new THREE.BoxGeometry(\n this.projectService.project.stagePillarWidthCm,\n this.projectService.project.stageHeightCm,\n this.projectService.project.stagePillarWidthCm\n );\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(\n -this.projectService.project.stageWidthCm / 2 + this.projectService.project.stagePillarWidthCm / 2,\n this.projectService.project.stageHeightCm / 2 + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm / 2 - this.projectService.project.stagePillarWidthCm / 2\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Pillar front right\n geometry = new THREE.BoxGeometry(\n this.projectService.project.stagePillarWidthCm,\n this.projectService.project.stageHeightCm,\n this.projectService.project.stagePillarWidthCm\n );\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(\n this.projectService.project.stageWidthCm / 2 - this.projectService.project.stagePillarWidthCm / 2,\n this.projectService.project.stageHeightCm / 2 + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm / 2 - this.projectService.project.stagePillarWidthCm / 2\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Pillar back left\n geometry = new THREE.BoxGeometry(\n this.projectService.project.stagePillarWidthCm,\n this.projectService.project.stageHeightCm,\n this.projectService.project.stagePillarWidthCm\n );\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(\n -this.projectService.project.stageWidthCm / 2 + this.projectService.project.stagePillarWidthCm / 2,\n this.projectService.project.stageHeightCm / 2 + this.projectService.project.stageFloorHeightCm,\n -this.projectService.project.stageDepthCm / 2 + this.projectService.project.stagePillarWidthCm / 2\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Pillar back right\n geometry = new THREE.BoxGeometry(\n this.projectService.project.stagePillarWidthCm,\n this.projectService.project.stageHeightCm,\n this.projectService.project.stagePillarWidthCm\n );\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(\n this.projectService.project.stageWidthCm / 2 - this.projectService.project.stagePillarWidthCm / 2,\n this.projectService.project.stageHeightCm / 2 + this.projectService.project.stageFloorHeightCm,\n -this.projectService.project.stageDepthCm / 2 + this.projectService.project.stagePillarWidthCm / 2\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Ceiling\n geometry = new THREE.BoxGeometry(\n this.projectService.project.stageWidthCm,\n this.projectService.project.stageCeilingHeightCm,\n this.projectService.project.stageDepthCm\n );\n mesh = new THREE.Mesh(geometry, this.stageMaterial);\n this.prepareStageMesh(mesh);\n mesh.position.set(\n 0,\n this.projectService.project.stageHeightCm +\n this.projectService.project.stageCeilingHeightCm / 2 +\n this.projectService.project.stageFloorHeightCm,\n 0\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n }\n\n ngOnDestroy() {\n this.fixtureMaterial.dispose();\n this.fixtureSelectedMaterial.dispose();\n }\n}\n","import * as THREE from 'three';\nimport { CachedFixture } from '../../models/cached-fixture';\nimport { CachedFixtureCapability } from '../../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../../models/cached-fixture-channel';\nimport { Positioning } from '../../models/fixture';\nimport { FixtureCapabilityColor, FixtureCapabilityType } from '../../models/fixture-capability';\nimport { FixtureChannelValue } from '../../models/fixture-channel-value';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PreviewService } from '../../services/preview.service';\n\nexport abstract class Fixture3d {\n private readonly pointLightMaxIntensity: number = 2;\n private readonly spotLightLightMaxIntensity: number = 10;\n\n protected scene: any;\n\n // group pixels of the same fixture into one group to be able to rotate properly\n protected fixtureGroup: THREE.Group;\n\n public fixture: CachedFixture;\n private fixtureHasDimmer = false;\n private fixtureHasColorWheel = false;\n private fixtureHasColor = false;\n\n private colorRed: number;\n private colorGreen: number;\n private colorBlue: number;\n private dimmer: number = 0;\n\n protected lastSelected: boolean;\n public isSelected = false;\n protected isLoaded = false;\n\n // spotlight\n protected hasSpotLight: boolean = false;\n protected spotLight: THREE.SpotLight;\n protected spotLightBeam: THREE.Mesh;\n protected spotlightGroup: THREE.Object3D;\n protected spotlightMaterial: THREE.ShaderMaterial;\n\n // glowing bulb\n private hasBulb: boolean = false;\n private bulbMaterial: THREE.MeshLambertMaterial;\n private bulbSphereRadius = 3;\n private bulbSphere: THREE.Mesh;\n private blackColor = new THREE.Color(0x000000);\n\n constructor(\n public fixtureService: FixtureService,\n public previewService: PreviewService,\n fixture: CachedFixture,\n scene: any,\n fixtureGroup: THREE.Group,\n hasSpotLight: boolean = false,\n hasBulb: boolean = false\n ) {\n this.fixture = fixture;\n this.scene = scene;\n this.fixtureGroup = fixtureGroup;\n this.hasSpotLight = hasSpotLight;\n this.hasBulb = hasBulb;\n\n // evaluate, various capabilities of this fixture\n for (const cachedChannel of this.fixture.channels) {\n if (cachedChannel.channel) {\n for (const capability of cachedChannel.capabilities) {\n switch (capability.capability.type) {\n case FixtureCapabilityType.Intensity:\n this.fixtureHasDimmer = true;\n break;\n case FixtureCapabilityType.ColorIntensity:\n this.fixtureHasColor = true;\n break;\n }\n }\n\n if (cachedChannel.colorWheel) {\n this.fixtureHasColorWheel = true;\n }\n }\n }\n }\n\n private createSpotlightMaterial() {\n const vertexShader = `\n varying vec3 vNormal;\n varying vec3 vWorldPosition;\n\n void main(){\n vNormal = normalize(normalMatrix * normal);\n\n vec4 worldPosition = modelMatrix * vec4(position, 1.0);\n vWorldPosition = worldPosition.xyz;\n\n gl_Position\t= projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`;\n const fragmentShader = `\n varying vec3 vNormal;\n varying vec3 vWorldPosition;\n\n uniform vec3 lightColor;\n uniform float\topacity;\n uniform vec3 spotPosition;\n uniform float attenuation;\n uniform float\tanglePower;\n\n void main(){\n float intensity;\n\n intensity\t= distance(vWorldPosition, spotPosition) / attenuation;\n intensity\t= 1.0 - clamp(intensity, 0.0, 1.0);\n\n vec3 normal\t= vec3(vNormal.x, vNormal.y, abs(vNormal.z));\n float angleIntensity\t= pow(dot(normal, vec3(0.0, 0.0, 1.0)), anglePower);\n intensity\t= intensity * angleIntensity * opacity;\n\n gl_FragColor\t= vec4(lightColor, intensity);\n }`;\n\n this.spotlightMaterial = new THREE.ShaderMaterial({\n uniforms: {\n attenuation: {\n type: 'f',\n value: 800.0,\n },\n anglePower: {\n type: 'f',\n value: 2,\n },\n spotPosition: {\n type: 'v3',\n value: new THREE.Vector3(0, 0, 0),\n },\n lightColor: {\n type: 'c',\n value: new THREE.Color('white'),\n },\n opacity: {\n type: 'f',\n value: 1.0,\n },\n },\n vertexShader,\n fragmentShader,\n transparent: true,\n depthWrite: false,\n });\n }\n\n protected createObjects() {\n if (this.hasSpotLight) {\n this.createSpotlightMaterial();\n\n this.spotLight = new THREE.SpotLight(0xffffff, 50000);\n this.spotLight.angle = 2;\n this.spotLight.penumbra = 1;\n this.spotLight.decay = 0.01;\n this.spotLight.distance = 0;\n this.spotLight.intensity = 1;\n\n const spotLightTarget = new THREE.Object3D();\n this.spotLight.target = spotLightTarget;\n\n this.spotlightGroup = new THREE.Object3D();\n this.spotlightGroup.add(this.spotLight);\n this.spotlightGroup.add(spotLightTarget);\n this.spotLight.position.set(0, -1.4, 0);\n spotLightTarget.position.set(0, -10, 0);\n this.createSpotLightBeam();\n }\n\n if (this.hasBulb) {\n const bulbGeo = new THREE.SphereGeometry(this.bulbSphereRadius * 1.12, 64, 64);\n this.bulbMaterial = new THREE.MeshLambertMaterial({\n color: 0xff00ff,\n emissive: 0xff00ff,\n });\n\n this.bulbSphere = new THREE.Mesh(bulbGeo, this.bulbMaterial);\n this.fixtureGroup.add(this.bulbSphere);\n }\n }\n\n protected getCapabilityInValue(channel: CachedFixtureChannel, value: number): CachedFixtureCapability {\n for (const capability of channel.capabilities) {\n if (\n capability.capability.dmxRange.length === 0 ||\n (value >= capability.capability.dmxRange[0] && value <= capability.capability.dmxRange[1])\n ) {\n return capability;\n }\n }\n\n return undefined;\n }\n\n updatePosition(object?: THREE.Object3D) {\n // the offset position (e.g. for single beams inside a fixture)\n if (object) {\n object.position.set(\n this.fixture.pixel ? this.fixture.pixel.positionX : 0,\n this.fixture.pixel ? this.fixture.pixel.positionY : 0,\n this.fixture.pixel ? this.fixture.pixel.positionZ : 0\n );\n }\n\n if (this.hasBulb) {\n this.bulbSphere.position.set(\n this.fixture.pixel ? this.fixture.pixel.positionX : 0,\n (this.fixture.pixel ? this.fixture.pixel.positionY : 0) - 15 + this.bulbSphereRadius / 2,\n this.fixture.pixel ? this.fixture.pixel.positionZ : 0\n );\n }\n\n switch (this.fixture.fixture.positioning) {\n case Positioning.topFront: {\n this.fixtureGroup.rotation.x = THREE.MathUtils.degToRad(0);\n this.fixtureGroup.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY - 13, this.fixture.fixture.positionZ);\n break;\n }\n case Positioning.bottomFront: {\n this.fixtureGroup.rotation.x = THREE.MathUtils.degToRad(180);\n this.fixtureGroup.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY + 13, this.fixture.fixture.positionZ);\n break;\n }\n case Positioning.topBack: {\n this.fixtureGroup.rotation.x = THREE.MathUtils.degToRad(0);\n this.fixtureGroup.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY - 13, this.fixture.fixture.positionZ);\n break;\n }\n case Positioning.bottomBack: {\n this.fixtureGroup.rotation.x = THREE.MathUtils.degToRad(180);\n this.fixtureGroup.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY + 13, this.fixture.fixture.positionZ);\n break;\n }\n case Positioning.manual: {\n this.fixtureGroup.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY, this.fixture.fixture.positionZ);\n\n this.fixtureGroup.rotation.x = THREE.MathUtils.degToRad(this.fixture.fixture.rotationX);\n this.fixtureGroup.rotation.y = THREE.MathUtils.degToRad(this.fixture.fixture.rotationY);\n this.fixtureGroup.rotation.z = THREE.MathUtils.degToRad(this.fixture.fixture.rotationZ);\n break;\n }\n }\n }\n\n // Apply the properties of the base fixture to the preview\n updatePreview(channelValues: FixtureChannelValue[], masterDimmerValue: number) {\n // Apply default settings\n if (this.fixtureHasDimmer) {\n this.dimmer = 0;\n } else {\n this.dimmer = 1;\n }\n\n this.colorRed = 255;\n this.colorGreen = 255;\n this.colorBlue = 255;\n\n if (!this.fixtureHasColorWheel && this.fixtureHasColor) {\n this.colorRed = 0;\n this.colorGreen = 0;\n this.colorBlue = 0;\n }\n\n for (const channelValue of channelValues) {\n const channel = this.fixtureService.getChannelByName(this.fixture, channelValue.channelName);\n const capability = this.getCapabilityInValue(channel, channelValue.value);\n\n if (capability) {\n switch (capability.capability.type) {\n case FixtureCapabilityType.Intensity: {\n let valuePercentage: number;\n if (capability.capability.dmxRange.length > 0) {\n valuePercentage =\n (channelValue.value - capability.capability.dmxRange[0]) /\n (capability.capability.dmxRange[1] - capability.capability.dmxRange[0]);\n } else {\n valuePercentage = channelValue.value / channel.maxValue;\n }\n this.dimmer = valuePercentage * masterDimmerValue;\n break;\n }\n case FixtureCapabilityType.ColorIntensity: {\n const valuePercentage = (255 * channelValue.value) / channel.maxValue;\n switch (capability.capability.color) {\n case FixtureCapabilityColor.Red:\n // Round needed for threejs\n this.colorRed = Math.round(valuePercentage);\n break;\n case FixtureCapabilityColor.Green:\n // Round needed for threejs\n this.colorGreen = Math.round(valuePercentage);\n break;\n case FixtureCapabilityColor.Blue:\n // Round needed for threejs\n this.colorBlue = Math.round(valuePercentage);\n break;\n }\n break;\n }\n case FixtureCapabilityType.WheelSlot: {\n const mixedColor = this.fixtureService.getMixedWheelSlotColor(capability.wheel, capability.capability.slotNumber);\n if (mixedColor) {\n this.colorRed = Math.round(mixedColor.red);\n this.colorGreen = Math.round(mixedColor.green);\n this.colorBlue = Math.round(mixedColor.blue);\n }\n break;\n }\n }\n }\n }\n\n // Apply the colors and intensities\n // Apply the dimmer value\n // Take the color into account for the beam (don't show a black beam)\n const color = new THREE.Color('rgb(' + this.colorRed + ', ' + this.colorGreen + ', ' + this.colorBlue + ')');\n const intensityColor = Math.max(this.colorRed, this.colorGreen, this.colorBlue);\n\n if (this.hasSpotLight) {\n this.spotLight.color = color;\n this.spotLightBeam.material.uniforms.lightColor.value = color;\n\n this.spotLightBeam.material.uniforms.opacity.value = Math.min(intensityColor, this.dimmer);\n this.spotLight.intensity = this.spotLightLightMaxIntensity * this.dimmer;\n this.spotLightBeam.material.uniforms.spotPosition.value = this.spotlightGroup.position;\n }\n\n if (this.hasBulb) {\n // Normalize 0–255 → 0–1\n const intensity = Math.max(this.colorRed, this.colorGreen, this.colorBlue) / 255;\n\n this.bulbMaterial.color.copy(color.clone().lerp(this.blackColor, intensity));\n this.bulbMaterial.emissive.copy(color.clone().lerp(this.blackColor, intensity));\n }\n }\n\n protected createSpotLightBeam() {\n // TODO set the correct angle from the profile\n const beamAngleDegrees = 14;\n const geometry = new THREE.CylinderGeometry(0.1, beamAngleDegrees * 1.2, 100, 64, 20, false);\n geometry.applyMatrix4(new THREE.Matrix4().makeTranslation(0, -geometry.parameters.height / 2, 0));\n geometry.applyMatrix4(new THREE.Matrix4().makeRotationX(-Math.PI / 2));\n\n this.spotLightBeam = new THREE.Mesh(geometry, this.spotlightMaterial);\n this.spotLightBeam.position.set(0, -0.02, 0);\n this.spotLightBeam.receiveShadow = false;\n this.spotLightBeam.castShadow = false;\n\n this.spotlightGroup.add(this.spotLightBeam);\n this.spotLightBeam.rotation.x = Math.PI / 2;\n }\n\n destroy() {\n if (this.hasSpotLight) {\n this.spotlightMaterial.dispose();\n }\n if (this.hasBulb) {\n this.bulbMaterial.dispose();\n }\n }\n}\n","import { forkJoin } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport * as THREE from 'three';\nimport { Mesh } from 'three';\nimport { CachedFixture } from '../../models/cached-fixture';\nimport { FixtureChannelValue } from '../../models/fixture-channel-value';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PreviewMeshService } from '../../services/preview-mesh.service';\nimport { Fixture3d } from './fixture-3d';\nimport { PreviewService } from '../../services/preview.service';\n\nexport class ColorChanger3d extends Fixture3d {\n private mesh: THREE.Mesh;\n private objectGroup: THREE.Object3D = new THREE.Object3D();\n private destroyed = false;\n\n constructor(\n public fixtureService: FixtureService,\n public previewService: PreviewService,\n previewMeshService: PreviewMeshService,\n fixture: CachedFixture,\n scene: any,\n fixtureGroup: THREE.Group,\n hasSpotLight: boolean = true,\n hasBulb: boolean = false\n ) {\n super(fixtureService, previewService, fixture, scene, fixtureGroup, hasSpotLight, hasBulb);\n\n forkJoin([previewMeshService.getMesh('color-changer')])\n .pipe(\n map(([colorChanger]) => {\n if (this.destroyed) {\n return;\n }\n\n this.mesh = colorChanger;\n this.createObjects();\n })\n )\n .subscribe();\n }\n\n protected createObjects() {\n if (this.destroyed) {\n return;\n }\n\n super.createObjects();\n\n this.mesh.material = this.previewService.fixtureMaterial;\n\n if (this.hasSpotLight) {\n this.objectGroup.add(this.spotlightGroup);\n }\n this.objectGroup.add(this.mesh);\n this.objectGroup.scale.multiplyScalar(9);\n this.fixtureGroup.add(this.objectGroup);\n\n this.isLoaded = true;\n this.updatePosition();\n }\n\n override updatePosition() {\n if (!this.isLoaded) {\n return;\n }\n\n super.updatePosition(this.objectGroup);\n }\n\n override updatePreview(channelValues: FixtureChannelValue[], masterDimmerValue: number): void {\n if (!this.isLoaded) {\n return;\n }\n\n super.updatePreview(channelValues, masterDimmerValue);\n\n // Update the material\n if (this.lastSelected !== this.isSelected) {\n if (this.isSelected) {\n for (const child of this.mesh.children) {\n (child as Mesh).material = this.previewService.fixtureSelectedMaterial;\n }\n } else {\n for (const child of this.mesh.children) {\n (child as Mesh).material = this.previewService.fixtureMaterial;\n }\n }\n\n this.lastSelected = this.isSelected;\n }\n }\n\n destroy() {\n this.destroyed = true;\n\n if (this.objectGroup.parent) {\n this.objectGroup.parent.remove(this.objectGroup);\n }\n }\n}\n","import { forkJoin } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport * as THREE from 'three';\nimport { CachedFixture } from '../../models/cached-fixture';\nimport { FixtureCapabilityType } from '../../models/fixture-capability';\nimport { FixtureChannelValue } from '../../models/fixture-channel-value';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PreviewMeshService } from '../../services/preview-mesh.service';\nimport { Fixture3d } from './fixture-3d';\nimport { PreviewService } from '../../services/preview.service';\n\nexport class MovingHead3d extends Fixture3d {\n private pan: number;\n private tilt: number;\n\n private socket: THREE.Mesh;\n private arm: THREE.Mesh;\n private head: THREE.Mesh;\n\n private headGroup: THREE.Object3D = new THREE.Object3D();\n private armGroup: THREE.Object3D = new THREE.Object3D();\n private objectGroup: THREE.Object3D = new THREE.Object3D();\n\n private lastBeamAngleDegrees: number;\n private destroyed = false;\n\n constructor(\n public fixtureService: FixtureService,\n public previewService: PreviewService,\n previewMeshService: PreviewMeshService,\n fixture: CachedFixture,\n scene: any,\n fixtureGroup: THREE.Group\n ) {\n super(fixtureService, previewService, fixture, scene, fixtureGroup, true, false);\n\n forkJoin([\n previewMeshService.getMesh('moving_head_socket'),\n previewMeshService.getMesh('moving_head_arm'),\n previewMeshService.getMesh('moving_head_head'),\n ])\n .pipe(\n map(([socket, arm, head]) => {\n if (this.destroyed) {\n return;\n }\n\n this.socket = socket;\n this.arm = arm;\n this.head = head;\n\n this.createObjects();\n })\n )\n .subscribe();\n }\n\n protected createObjects() {\n if (this.destroyed) {\n return;\n }\n\n super.createObjects();\n\n this.socket.material = this.previewService.fixtureMaterial;\n this.arm.material = this.previewService.fixtureMaterial;\n this.head.material = this.previewService.fixtureMaterial;\n\n // Add the head\n this.head.scale.multiplyScalar(0.9);\n this.head.position.set(-0.1, 0, 0);\n const headPivotGroup = new THREE.Object3D();\n headPivotGroup.add(this.head);\n this.headGroup.add(headPivotGroup);\n\n this.headGroup.add(this.spotlightGroup);\n\n // Add the arm\n this.armGroup.add(this.headGroup);\n this.headGroup.position.set(0, -0.6, 0);\n this.armGroup.add(this.arm);\n\n // Add the socket\n this.objectGroup.add(this.armGroup);\n this.objectGroup.add(this.socket);\n this.socket.position.set(0, 1.2, 0);\n\n // A moving head has about 32 cm in width\n this.objectGroup.scale.multiplyScalar(9);\n\n this.fixtureGroup.add(this.objectGroup);\n\n this.isLoaded = true;\n this.updatePosition();\n }\n\n override updatePosition() {\n if (!this.isLoaded) {\n return;\n }\n\n super.updatePosition(this.objectGroup);\n }\n\n override updatePreview(channelValues: FixtureChannelValue[], masterDimmerValue: number): void {\n if (!this.isLoaded) {\n return;\n }\n\n super.updatePreview(channelValues, masterDimmerValue);\n\n // Apply default settings\n let panStart = 0;\n let panEnd = 255;\n\n let tiltStart = 0;\n let tiltEnd = 255;\n\n this.pan = 0;\n this.tilt = 0;\n\n // Apply the known property values\n for (const channelValue of channelValues) {\n const channel = this.fixtureService.getChannelByName(this.fixture, channelValue.channelName);\n const capability = this.getCapabilityInValue(channel, channelValue.value);\n if (capability) {\n switch (capability.capability.type) {\n case FixtureCapabilityType.Pan: {\n panStart = this.fixtureService.getRotationAngleDeg(capability.capability.angleStart) || 0;\n panEnd = this.fixtureService.getRotationAngleDeg(capability.capability.angleEnd) || 540;\n this.pan = channelValue.value / channel.maxValue;\n break;\n }\n case FixtureCapabilityType.Tilt: {\n tiltStart = this.fixtureService.getRotationAngleDeg(capability.capability.angleStart) || 0;\n tiltEnd = this.fixtureService.getRotationAngleDeg(capability.capability.angleEnd) || 2700;\n this.tilt = channelValue.value / channel.maxValue;\n break;\n }\n }\n }\n }\n\n // calculate the y/x rotation in radiants based on pan/tilt (0-1) respecting the max pan/tilt\n this.armGroup.rotation.y = THREE.MathUtils.degToRad(panEnd * this.pan + panStart) - THREE.MathUtils.degToRad(panEnd / 2);\n this.headGroup.rotation.x = THREE.MathUtils.degToRad(tiltEnd * this.tilt + tiltStart) - THREE.MathUtils.degToRad(tiltEnd / 2);\n\n // Update the angle only on change, because it's expensive\n // TODO update the correct angle from the profile\n const beamAngleDregrees = 14;\n if (this.lastBeamAngleDegrees !== beamAngleDregrees) {\n this.spotLight.angle = THREE.MathUtils.degToRad(beamAngleDregrees);\n this.lastBeamAngleDegrees = beamAngleDregrees;\n }\n\n // Update the material\n if (this.lastSelected !== this.isSelected) {\n if (this.isSelected) {\n this.socket.material = this.previewService.fixtureSelectedMaterial;\n this.arm.material = this.previewService.fixtureSelectedMaterial;\n this.head.material = this.previewService.fixtureSelectedMaterial;\n } else {\n this.socket.material = this.previewService.fixtureMaterial;\n this.arm.material = this.previewService.fixtureMaterial;\n this.head.material = this.previewService.fixtureMaterial;\n }\n\n this.lastSelected = this.isSelected;\n }\n }\n\n destroy() {\n this.destroyed = true;\n\n if (this.objectGroup.parent) {\n this.objectGroup.parent.remove(this.objectGroup);\n }\n }\n}\n","import { AfterViewInit, Component, ElementRef, HostListener, NgZone, ViewChild } from '@angular/core';\nimport * as THREE from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport { FixtureCategory } from '../models/fixture-profile';\nimport { FixtureService } from '../services/fixture.service';\nimport { PreviewMeshService } from '../services/preview-mesh.service';\nimport { PreviewService } from '../services/preview.service';\nimport { ProjectService } from '../services/project.service';\nimport { TimelineService } from '../services/timeline.service';\nimport { Positioning } from './../models/fixture';\nimport { AnimationService } from './../services/animation.service';\nimport { ColorChanger3d } from './models/color-changer-3d';\nimport { Fixture3d } from './models/fixture-3d';\nimport { MovingHead3d } from './models/moving-head-3d';\n\n@Component({\n selector: 'lib-app-preview',\n templateUrl: './preview.component.html',\n styleUrls: ['./preview.component.css'],\n standalone: false,\n})\nexport class PreviewComponent implements AfterViewInit {\n private renderer: THREE.WebGLRenderer;\n private scene: THREE.Scene = new THREE.Scene();\n private camera: THREE.PerspectiveCamera;\n public controls: OrbitControls;\n\n private fixtures3d: Fixture3d[] = [];\n\n // grouping fixture (pixels) into the same fixture to being able to properly rotate around the center\n private fixtureGroups = new Map<string, THREE.Group>();\n\n @ViewChild('canvas')\n private canvasRef: ElementRef;\n\n constructor(\n private fixtureService: FixtureService,\n private previewMeshService: PreviewMeshService,\n private animationService: AnimationService,\n private previewService: PreviewService,\n private timelineService: TimelineService,\n private projectService: ProjectService,\n private ngZone: NgZone\n ) {\n this.previewService.doUpdateFixtureSetup.subscribe(() => {\n this.syncFixtures();\n });\n this.syncFixtures();\n }\n\n // synchronize the 3d-fixtures to the project fixtures\n private syncFixtures() {\n if (!this.previewService.scene) {\n return;\n }\n\n // remove all fixtures\n for (const fixture3d of this.fixtures3d) {\n fixture3d.destroy();\n }\n this.fixtures3d = [];\n\n // destroy all groups\n for (const fixtureGroup of this.fixtureGroups.values()) {\n this.scene.remove(fixtureGroup);\n }\n this.fixtureGroups.clear();\n\n // add all fixtures from the project\n const fixture3dMap = {\n [FixtureCategory['Moving Head']]: MovingHead3d,\n [FixtureCategory['Color Changer']]: ColorChanger3d,\n [FixtureCategory['Blinder']]: ColorChanger3d,\n };\n\n // TODO group fixtures of the same UUID but with differen pixels into the same fixture to ensure\n // rotation is aligned\n for (const fixture of this.fixtureService.cachedFixtures) {\n const category = fixture.profile.categories.find((c) => fixture3dMap[c]);\n const uuid = fixture.fixture.uuid;\n\n let fixtureGroup = this.fixtureGroups.get(uuid);\n\n if (!fixtureGroup) {\n fixtureGroup = new THREE.Group();\n fixtureGroup.name = `fixture-${uuid}`;\n\n this.scene.add(fixtureGroup);\n this.fixtureGroups.set(uuid, fixtureGroup);\n }\n\n if (category) {\n const Fixture3dClass = fixture3dMap[category];\n\n if (Fixture3dClass === ColorChanger3d) {\n const isPixelBar = fixture.profile.categories?.[0] === FixtureCategory['Pixel Bar'];\n\n const fixture3d = new ColorChanger3d(\n this.fixtureService,\n this.previewService,\n this.previewMeshService,\n fixture,\n this.scene,\n fixtureGroup,\n !isPixelBar,\n isPixelBar\n );\n\n this.fixtures3d.push(fixture3d);\n } else {\n const fixture3d = new Fixture3dClass(\n this.fixtureService,\n this.previewService,\n this.previewMeshService,\n fixture,\n this.scene,\n fixtureGroup\n );\n\n this.fixtures3d.push(fixture3d);\n }\n } else {\n console.warn(`No supported category found for fixture`);\n }\n }\n }\n\n private get canvas(): HTMLCanvasElement {\n return this.canvasRef.nativeElement;\n }\n\n private render() {\n this.renderer.render(this.scene, this.camera);\n }\n\n private updateStagePosition(\n positioning: Positioning,\n xMin: number,\n xMax: number,\n yMin: number,\n yMax: number,\n zMin: number,\n zMax: number\n ) {\n let positionCount = 0; // number of fixtures in the same position (only counting one pixel)\n let positionIndex = 0;\n let lastFixtureUuid = undefined; // skip new positioning if it's just a new pixel inside the same fixture\n\n this.projectService.project.presetFixtures.forEach((element, index) => {\n const fixture = this.fixtureService.getFixtureByUuid(element.fixtureUuid);\n if (fixture.positioning === positioning && element.fixtureUuid != lastFixtureUuid) {\n positionCount++;\n }\n lastFixtureUuid = element.fixtureUuid;\n });\n\n lastFixtureUuid = undefined;\n this.projectService.project.presetFixtures.forEach((element, index) => {\n const fixture = this.fixtureService.getFixtureByUuid(element.fixtureUuid);\n\n if (fixture.positioning === positioning) {\n if (element.fixtureUuid != lastFixtureUuid) {\n positionIndex++;\n }\n\n fixture.positionX = xMin + ((xMax - xMin) / (positionCount + 1)) * positionIndex;\n fixture.positionY = yMin + ((yMax - yMin) / (positionCount + 1)) * positionIndex;\n fixture.positionZ = zMin + ((zMax - zMin) / (positionCount + 1)) * positionIndex;\n }\n lastFixtureUuid = element.fixtureUuid;\n });\n }\n\n private animate(timeMillis: number) {\n if (this.timelineService.playState === 'playing') {\n // Overwrite the current time with the playing time, if we're in playback mode\n timeMillis = this.timelineService.waveSurfer.getCurrentTime() * 1000;\n }\n\n this.animationService.timeMillis = timeMillis;\n\n // Update the controls\n if (this.controls) {\n this.controls.update();\n }\n\n // Update the positions\n this.updateStagePosition(\n Positioning.topFront,\n -this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm / 2 - 70,\n this.projectService.project.stageDepthCm / 2 - 70\n );\n this.updateStagePosition(\n Positioning.bottomFront,\n -this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm / 2 - 70,\n this.projectService.project.stageDepthCm / 2 - 70\n );\n this.updateStagePosition(\n Positioning.topBack,\n -this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm,\n -this.projectService.project.stageDepthCm / 2 + 70,\n -this.projectService.project.stageDepthCm / 2 + 70\n );\n this.updateStagePosition(\n Positioning.bottomBack,\n -this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageFloorHeightCm,\n -this.projectService.project.stageDepthCm / 2 + 70,\n -this.projectService.project.stageDepthCm / 2 + 70\n );\n\n // Update all fixtures and apply the preview properties, if available\n // TODO Update the fixtures only e.g. 40 times per second according to the \"real\" refresh rate of the DMX interface?\n const presets = this.previewService.getPresets(timeMillis);\n\n const calculatedFixtures = this.previewService.getChannelValues(timeMillis, presets);\n\n for (const fixture3d of this.fixtures3d) {\n // Update the fixture positions\n if (this.previewService.stageAndPositionsDirty) {\n fixture3d.updatePosition();\n }\n\n // Update the fixture properties\n fixture3d.updatePreview(calculatedFixtures.get(fixture3d.fixture) || [], this.projectService.project.masterDimmerValue);\n\n // Select the fixture, if required\n if (this.fixtureService.settingsSelection) {\n fixture3d.isSelected = this.fixtureService.settingsFixtureIsSelected(fixture3d.fixture.fixture);\n } else {\n fixture3d.isSelected = this.previewService.fixtureIsSelected(fixture3d.fixture.fixture.uuid, fixture3d.fixture.pixel?.key, presets);\n }\n }\n\n // Render the scene\n this.render();\n\n this.previewService.stageAndPositionsDirty = false;\n\n requestAnimationFrame(this.animate.bind(this));\n }\n\n private getAspectRatio(): number {\n const height = this.canvas.clientHeight;\n\n if (height === 0) {\n return 0;\n }\n\n return this.canvas.clientWidth / this.canvas.clientHeight;\n }\n\n @HostListener('window:resize')\n public onResize() {\n this.camera.aspect = this.getAspectRatio();\n this.camera.updateProjectionMatrix();\n this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);\n }\n\n private setupRenderer() {\n this.renderer = new THREE.WebGLRenderer({ antialias: true });\n this.canvas.appendChild(this.renderer.domElement);\n this.renderer.setPixelRatio(devicePixelRatio);\n this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);\n // this.renderer.shadowMap.enabled = true;\n // this.renderer.gammaInput = true;\n // this.renderer.gammaOutput = true;\n }\n\n private setupCamera() {\n this.camera = new THREE.PerspectiveCamera(35, window.innerWidth / window.innerHeight, 1, 10000);\n this.camera.position.set(-600, 80, 700);\n }\n\n private setupControls() {\n this.controls = new OrbitControls(this.camera, this.renderer.domElement);\n this.controls.enableKeys = false;\n this.controls.rotateSpeed = 0.05;\n this.controls.zoomSpeed = 1.2;\n this.controls.enableDamping = true;\n this.controls.dampingFactor = 0.25;\n this.controls.screenSpacePanning = false;\n this.controls.minDistance = 700;\n // this.controls.zoom = 1000;\n this.controls.maxDistance = 2000;\n this.controls.maxPolarAngle = Math.PI / 2;\n this.controls.target = new THREE.Vector3(0, 200, 0);\n // this.controls.rotation = 100;\n }\n\n private setupScene() {\n // this.scene.background = new THREE.Color(0x080808);\n // this.scene.fog\t= new THREE.FogExp2( 0x000000, 0.1 );\n\n this.previewService.scene = this.scene;\n\n // Add a little bit of ambient light\n const ambient = new THREE.AmbientLight(0xffffff, 1.8);\n this.scene.add(ambient);\n\n // Create the stage dimensions\n this.previewService.updateStage();\n\n const lights = [];\n lights[0] = new THREE.PointLight(0xffffff, 2, 0, 0.1);\n lights[1] = new THREE.PointLight(0xffffff, 2, 0, 0.1);\n lights[2] = new THREE.PointLight(0xffffff, 2, 0, 0.1);\n\n lights[0].position.set(0, 2000, 0);\n lights[1].position.set(1000, 2000, 1000);\n lights[2].position.set(-1000, -2000, -1000);\n\n lights[0].castShadow = true;\n lights[1].castShadow = true;\n lights[2].castShadow = true;\n\n this.scene.add(lights[0]);\n this.scene.add(lights[1]);\n this.scene.add(lights[2]);\n\n this.previewService.updateFixtureSetup();\n }\n\n ngAfterViewInit(): void {\n this.setupRenderer();\n this.setupCamera();\n this.setupControls();\n this.setupScene();\n\n this.onResize();\n\n // Avoid triggering change detection with each animation frame -> run outside zone\n this.ngZone.runOutsideAngular(() => {\n this.animate(null);\n });\n }\n}\n","<div class=\"h-100\" #canvas style=\"overflow: hidden\"></div>\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-wait-dialog',\n templateUrl: './wait-dialog.component.html',\n styleUrls: ['./wait-dialog.component.css'],\n standalone: false,\n})\nexport class WaitDialogComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","<div class=\"card-modal\">\n <div class=\"card\">\n <div class=\"card-body\">\n <p class=\"card-text\">{{ 'designer.misc.please-wait' | translate }}</p>\n <div class=\"progress\">\n <div\n class=\"progress-bar progress-bar-striped progress-bar-animated\"\n role=\"progressbar\"\n style=\"width: 100%\"\n aria-valuenow=\"10\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n ></div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'lib-app-warning-dialog',\n templateUrl: './warning-dialog.component.html',\n styleUrls: ['./warning-dialog.component.scss'],\n standalone: false,\n})\nexport class WarningDialogComponent implements OnInit {\n onClose: Subject<number>;\n\n message: string;\n\n constructor(private bsModalRef: BsModalRef) {}\n\n ngOnInit() {\n this.onClose = new Subject();\n }\n\n public ok(): void {\n this.onClose.next(1);\n this.bsModalRef.hide();\n }\n\n public cancel(): void {\n this.onClose.next(2);\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"card-modal\">\n <div class=\"card\">\n <div class=\"card-header\">\n {{ 'designer.misc.warning' | translate }}\n </div>\n\n <div class=\"card-body\">\n <div class=\"row\">\n <div class=\"col-auto\">\n <h2 class=\"mb-0\">\n <i class=\"fa fa-exclamation-triangle text-primary\" aria-hidden=\"true\"></i>\n </h2>\n </div>\n <div class=\"col pl-0\">\n <p class=\"mb-0\">{{ message }}</p>\n </div>\n </div>\n </div>\n\n <div class=\"card-footer\">\n <div class=\"d-flex float-right\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok(); (false)\">\n {{ 'designer.misc.ok' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { WarningDialogComponent } from '../warning-dialog/warning-dialog.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WarningDialogService {\n constructor(private modalService: BsModalService, private translateService: TranslateService) {}\n\n // Show a warning dialog and return true, when the user clicked OK\n show(message: string): Observable<boolean> {\n return this.translateService.get(message).pipe(\n map((result) => {\n return result;\n }),\n mergeMap((result) => {\n const fileDialog = this.modalService.show(WarningDialogComponent, { keyboard: false, ignoreBackdropClick: true });\n (fileDialog.content as WarningDialogComponent).message = result;\n\n return (fileDialog.content as WarningDialogComponent).onClose.pipe(\n map((warningResult) => {\n if (warningResult === 1) {\n return true;\n }\n\n return false;\n })\n );\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable } from 'rxjs';\nimport { finalize, map } from 'rxjs/operators';\nimport { Preset } from '../models/preset';\nimport { Project } from '../models/project';\nimport { WaitDialogComponent } from '../wait-dialog/wait-dialog.component';\nimport { FixtureService } from './fixture.service';\nimport { PresetService } from './preset.service';\nimport { PreviewService } from './preview.service';\nimport { ProjectService } from './project.service';\nimport { SceneService } from './scene.service';\nimport { TimelineService } from './timeline.service';\nimport { UuidService } from './uuid.service';\nimport { PresetFixture } from '../models/preset-fixture';\nimport { WarningDialogService } from './warning-dialog.service';\nimport { LivePreviewService } from './live-preview.service';\nimport { ConfigService } from './config.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProjectLoadService {\n constructor(\n private projectService: ProjectService,\n private previewService: PreviewService,\n private fixtureService: FixtureService,\n private presetService: PresetService,\n private sceneService: SceneService,\n private modalService: BsModalService,\n private uuidService: UuidService,\n private timelineService: TimelineService,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private warningDialogService: WarningDialogService,\n private livePreviewService: LivePreviewService,\n private configService: ConfigService\n ) {}\n\n private migrateToVersion2() {\n for (let fixture of this.projectService.project.fixtures) {\n if (this.fixtureService.fixtureHasGeneralChannel(fixture)) {\n const projectFixture = new PresetFixture();\n projectFixture.fixtureUuid = fixture.uuid;\n this.projectService.project.presetFixtures.push(projectFixture);\n }\n\n const pixels = this.fixtureService.fixtureGetUniquePixels(fixture);\n\n for (let pixelKey of pixels) {\n const projectFixture = new PresetFixture();\n projectFixture.fixtureUuid = fixture.uuid;\n projectFixture.pixelKey = pixelKey.key;\n this.projectService.project.presetFixtures.push(projectFixture);\n }\n }\n for (let preset of this.projectService.project.presets) {\n for (let fixtureUuid of preset.fixtureUuids) {\n const fixture = this.fixtureService.getFixtureByUuid(fixtureUuid);\n\n if (this.fixtureService.fixtureHasGeneralChannel(fixture)) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = fixtureUuid;\n preset.fixtures.push(presetFixture);\n }\n\n const pixels = this.fixtureService.fixtureGetUniquePixels(fixture);\n\n for (let pixel of pixels) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = fixtureUuid;\n presetFixture.pixelKey = pixel.key;\n preset.fixtures.push(presetFixture);\n }\n }\n preset.fixtureUuids = undefined;\n }\n this.projectService.project.version = 2;\n }\n\n private migrateFromOldProject() {\n let migrated = false;\n\n if (!this.projectService.project.version) {\n // Migrate from version 1\n this.migrateToVersion2();\n migrated = true;\n }\n\n if (migrated) {\n this.warningDialogService.show('designer.project.migrated').subscribe();\n }\n }\n\n private setupUniverses() {\n if (this.configService.freeUniverseEdit) {\n // when the user manages universes freely, the project itself stores the\n // universes -> use them as the working list\n this.configService.universes = this.projectService.project.universes;\n\n // ensure a default universe exists\n if (this.configService.universes.length === 0) {\n this.configService.universes.push({ uuid: this.uuidService.getUuid(), name: 'Universe 1' });\n }\n }\n\n if (this.configService.universes.length === 0) {\n // no universe available to assign the fixtures to (e.g. the host\n // application did not provide any)\n return;\n }\n\n // assign all fixtures without a universe to the first (default) universe\n const defaultUniverseUuid = this.configService.universes[0].uuid;\n\n for (const fixture of this.projectService.project.fixtures) {\n if (!fixture.dmxUniverseUuid) {\n fixture.dmxUniverseUuid = defaultUniverseUuid;\n }\n }\n }\n\n private afterLoad() {\n this.migrateFromOldProject();\n this.setupUniverses();\n this.fixtureService.updateCachedFixtures();\n this.presetService.removeDeletedFixtures();\n this.previewService.updateFixtureSetup();\n this.presetService.fixtureSelectionChanged.next();\n this.presetService.autoOpenFirstEffect();\n this.previewService.updateStage();\n this.livePreviewService.previewLive();\n this.sceneService.selectPresetFromSelectedScene();\n }\n\n private selectScenesPresetComposition() {\n this.presetService.selectedPreset = this.presetService.getPresetByUuid(this.projectService.project.selectedPresetUuid);\n this.sceneService.selectedScenes = [];\n if (this.projectService.project.selectedSceneUuids) {\n for (const uuid of this.projectService.project.selectedSceneUuids) {\n this.sceneService.selectedScenes.push(this.sceneService.getSceneByUuid(uuid));\n }\n }\n this.timelineService.selectedComposition = undefined;\n this.timelineService.selectedCompositionIndex = undefined;\n this.timelineService.destroyWaveSurfer();\n for (let i = 0; i < this.projectService.project.compositions.length; i++) {\n if (this.projectService.project.compositions[i].uuid === this.projectService.project.selectedCompositionUuid) {\n this.timelineService.selectCompositionIndex(i);\n break;\n }\n }\n }\n\n load(id: number, name: string, shareToken?: string): Observable<void> {\n const ref = this.modalService.show(WaitDialogComponent, { keyboard: false, ignoreBackdropClick: true });\n\n return this.projectService.getProject(id, name, shareToken).pipe(\n map((project) => {\n if (project.version > this.projectService.currentProjectVersion) {\n throw new Error(\n 'The project version ' +\n project.version +\n ' is created with a newer version of the designer. Please update your Rocket Show version to open this project.'\n );\n }\n this.projectService.project = project;\n this.selectScenesPresetComposition();\n this.afterLoad();\n\n const queryParams: Params = {\n id,\n token: project.shareToken,\n };\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams,\n queryParamsHandling: 'merge', // remove to replace all query params by provided\n });\n }),\n finalize(() => {\n // hide the modal again because of:\n // https://github.com/valor-software/ngx-bootstrap/issues/3711\n setTimeout(() => {\n ref.hide();\n }, 250);\n setTimeout(() => {\n ref.hide();\n }, 500);\n setTimeout(() => {\n ref.hide();\n }, 1500);\n })\n );\n }\n\n new() {\n // create an empty new project\n const project = new Project();\n project.uuid = this.uuidService.getUuid();\n project.version = this.projectService.currentProjectVersion;\n this.projectService.project = project;\n this.projectService.project.shareToken = this.uuidService.getUuid();\n\n // Add a default scene and preset\n const preset = new Preset();\n preset.uuid = this.uuidService.getUuid();\n preset.name = 'New Preset';\n this.projectService.project.presets.push(preset);\n this.presetService.selectPreset(0);\n\n this.sceneService.addScene();\n this.projectService.project.scenes[0].presetUuids.push(preset.uuid);\n\n this.projectService.project.previewPreset = true;\n\n this.sceneService.selectedScenes = [this.projectService.project.scenes[0]];\n this.presetService.selectedPreset = this.projectService.project.presets[0];\n\n this.timelineService.selectedComposition = undefined;\n this.timelineService.selectedCompositionIndex = undefined;\n this.timelineService.destroyWaveSurfer();\n\n this.afterLoad();\n\n const queryParams: Params = {\n id: '',\n token: '',\n };\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams,\n queryParamsHandling: 'merge', // remove to replace all query params by provided\n });\n }\n\n template() {\n // load the template project with id 1\n this.load(1, null).subscribe(() => {\n this.projectService.project.id = undefined;\n });\n }\n\n import(data: string) {\n // import a project from a string\n const project = new Project(JSON.parse(data));\n project.id = undefined;\n this.projectService.project = project;\n\n this.selectScenesPresetComposition();\n this.afterLoad();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'sort',\n standalone: false,\n})\nexport class ArraySortPipe implements PipeTransform {\n transform(array: any, field: string): any[] {\n if (!Array.isArray(array)) {\n return;\n }\n array.sort((a: any, b: any) => {\n if (a[field] < b[field]) {\n return -1;\n } else if (a[field] > b[field]) {\n return 1;\n } else {\n return 0;\n }\n });\n return array;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { map } from 'rxjs/operators';\nimport { Project } from '../../models/project';\nimport { ConfigService } from '../../services/config.service';\nimport { ProjectLoadService } from '../../services/project-load.service';\nimport { ProjectService } from '../../services/project.service';\nimport { UserService } from '../../services/user.service';\nimport { WarningDialogService } from '../../services/warning-dialog.service';\n\n@Component({\n selector: 'lib-project-browser',\n templateUrl: './project-browser.component.html',\n styleUrls: ['./project-browser.component.css'],\n standalone: false,\n})\nexport class ProjectBrowserComponent implements OnInit {\n projects: Project[] = [];\n loading = true;\n\n constructor(\n private bsModalRef: BsModalRef,\n private projectService: ProjectService,\n private projectLoadService: ProjectLoadService,\n private userService: UserService,\n private warningDialogService: WarningDialogService,\n private configService: ConfigService\n ) {\n this.loadProjects();\n }\n\n private loadProjects() {\n this.projectService.getAllProjects().subscribe((projects) => {\n this.projects = projects;\n this.loading = false;\n });\n }\n\n ngOnInit() {}\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n openProject(project: Project) {\n this.bsModalRef.hide();\n this.projectLoadService.load(project.id, project.name).subscribe(() => {\n this.userService.setAutoLoadProject(project);\n });\n }\n\n deleteProject(project: Project) {\n this.warningDialogService\n .show('designer.project.delete-warning')\n .pipe(\n map((result) => {\n if (result) {\n this.projectService.deleteProject(project).subscribe((projects) => {\n this.loadProjects();\n });\n }\n })\n )\n .subscribe();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.project.browser-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel(); (false)\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body p-0\">\n @if (loading) {\n <div class=\"m-2 d-flex w-100\">\n <p class=\"w-100\" style=\"text-align: center\"><i class=\"fa fa-spinner fa-pulse fa-fw\"></i></p>\n </div>\n } @if (projects.length == 0 && !loading) {\n <div class=\"m-2 d-flex w-100\">\n <p class=\"w-100\" style=\"text-align: center\">\n {{ 'designer.project.browser-empty' | translate }}\n </p>\n </div>\n } @if (!loading) {\n <div class=\"list-group list-group-flush\" style=\"max-height: 500px; overflow-y: scroll\">\n @for (project of projects | sort: 'name'; track project) {\n <div class=\"list-group-item\">\n <div class=\"row\">\n <div class=\"col-auto my-auto flex-grow\">\n <a href=\"#\" (click)=\"openProject(project); (false)\">\n <p class=\"mb-0 w-100\">{{ project.name }}</p>\n </a>\n </div>\n <div class=\"my-auto\">\n <div class=\"col-auto my-auto pl-0 text-danger float-right\" style=\"cursor: pointer\" (click)=\"deleteProject(project); (false)\">\n <i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button (click)=\"cancel(); (false)\" type=\"button\" class=\"btn btn-primary\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { DropzoneConfigInterface } from 'ngx-dropzone-wrapper';\nimport { ToastrService } from 'ngx-toastr';\nimport { map } from 'rxjs/operators';\nimport { ProjectLoadService } from '../../services/project-load.service';\n\n@Component({\n selector: 'lib-project-import',\n templateUrl: './project-import.component.html',\n styleUrls: ['./project-import.component.css'],\n standalone: false,\n})\nexport class ProjectImportComponent implements OnInit {\n public dropzoneConfig: DropzoneConfigInterface;\n public uploadMessage: string;\n\n constructor(\n public bsModalRef: BsModalRef,\n private translateService: TranslateService,\n private toastrService: ToastrService,\n private projectLoadService: ProjectLoadService\n ) {}\n\n ngOnInit() {\n this.dropzoneConfig = {\n url: 'dummy',\n addRemoveLinks: false,\n maxFilesize: 10 /* 10 MB */,\n acceptedFiles: '.rsd',\n timeout: 0,\n accept: (file: any, done: any) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', (event: any) => {\n this.projectLoadService.import(event.target.result);\n done('noerr');\n this.bsModalRef.hide();\n });\n reader.readAsText(file);\n },\n previewTemplate: `\n <div style=\"display: none;\">\n <!-- No preview -->\n </div>\n `,\n };\n\n this.translateService\n .get('designer.misc.dropzone-message')\n .pipe(\n map((result) => {\n this.uploadMessage = '<h3 class=\"mb-0\"><i class=\"fa fa-cloud-upload\"></i></h3>' + result;\n })\n )\n .subscribe();\n }\n\n public onUploadError(args: any) {\n if (args[1] === 'noerr') {\n // this error is set in the accept event listener -> everything OK\n return;\n }\n\n const msg = 'designer.misc.toast-upload-error';\n const title = 'designer.misc.toast-upload-error-title';\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg] + args[1], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });\n });\n }\n\n ok() {\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.project.import-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <!-- Dropzone -->\n <dropzone [config]=\"dropzoneConfig\" [useDropzoneClass]=\"'false'\" [message]=\"uploadMessage\" (error)=\"onUploadError($event)\"></dropzone>\n</div>\n<div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { map } from 'rxjs/operators';\nimport { Project } from '../../models/project';\nimport { ConfigService } from '../../services/config.service';\nimport { ProjectService } from '../../services/project.service';\nimport { WarningDialogService } from '../../services/warning-dialog.service';\n\n@Component({\n selector: 'lib-project-save',\n templateUrl: './project-save.component.html',\n styleUrls: ['./project-save.component.css'],\n standalone: false,\n})\nexport class ProjectSaveComponent implements OnInit {\n projects: Project[] = [];\n loading = true;\n projectName: string;\n\n constructor(\n private bsModalRef: BsModalRef,\n private projectService: ProjectService,\n private warningDialogService: WarningDialogService,\n private configService: ConfigService\n ) {\n this.loadProjects();\n if (this.projectService.project.name) {\n this.projectName = this.projectService.project.name;\n } else {\n this.projectName = 'New Project';\n }\n }\n\n ngOnInit() {}\n\n private loadProjects() {\n this.projectService.getAllProjects().subscribe((projects) => {\n this.projects = projects;\n this.loading = false;\n });\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n selectProject(project: Project) {\n this.projectService.project.name = project.name;\n }\n\n private existingProject(uuid: string, name: string) {\n for (const project of this.projects) {\n if (project.name === name && project.uuid !== uuid) {\n return true;\n }\n }\n return false;\n }\n\n private doSave() {\n this.projectService.project.name = this.projectName;\n this.projectService.save(this.projectService.project);\n this.bsModalRef.hide();\n }\n\n saveProject() {\n if (this.existingProject(this.projectService.project.uuid, this.projectName) && this.configService.uniqueProjectNames) {\n this.warningDialogService\n .show('designer.project.overwrite-warning')\n .pipe(\n map((result) => {\n if (result) {\n this.doSave();\n }\n })\n )\n .subscribe();\n } else {\n this.doSave();\n }\n }\n\n deleteProject(project: Project) {\n this.warningDialogService\n .show('designer.project.delete-warning')\n .pipe(\n map((result) => {\n if (result) {\n this.projectService.deleteProject(project).subscribe((projects) => {\n this.loadProjects();\n });\n }\n })\n )\n .subscribe();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.saveProject();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.project.save-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel(); (false)\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body p-0\">\n <!-- The name of the current project -->\n <div class=\"form-group row p-3 mb-0\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.project.name' | translate }}</label>\n <div class=\"col-lg-8\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"projectName\" (ngModelChange)=\"projectName = $event\" />\n </div>\n </div>\n\n <!-- List existing projects -->\n @if (loading) {\n <div class=\"m-2 d-flex w-100\">\n <p class=\"w-100\" style=\"text-align: center\"><i class=\"fa fa-spinner fa-pulse fa-fw\"></i></p>\n </div>\n } @if (!loading) {\n <div class=\"list-group list-group-flush\" style=\"max-height: 500px; overflow-y: scroll\">\n @for (project of projects | sort: 'name'; track project) {\n <div class=\"list-group-item\">\n <div class=\"row\">\n <div class=\"col-auto my-auto flex-grow\">\n <a href=\"#\" (click)=\"selectProject(project); (false)\">\n <p class=\"mb-0 w-100\">{{ project.name }}</p>\n </a>\n </div>\n <div class=\"my-auto\">\n <div class=\"col-auto my-auto pl-0 text-danger float-right\" style=\"cursor: pointer\" (click)=\"deleteProject(project); (false)\">\n <i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button [disabled]=\"loading || !projectName\" (click)=\"saveProject(); (false)\" type=\"button\" class=\"btn btn-primary\">\n {{ 'designer.misc.ok' | translate }}\n </button>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ProjectService } from '../../services/project.service';\n\n@Component({\n selector: 'lib-project-share',\n templateUrl: './project-share.component.html',\n styleUrls: ['./project-share.component.css'],\n standalone: false,\n})\nexport class ProjectShareComponent implements OnInit {\n shareLink: string;\n\n constructor(public bsModalRef: BsModalRef, private projectService: ProjectService) {}\n\n ngOnInit() {\n this.shareLink =\n window.location.host + '/designer/app?id=' + this.projectService.project.id + '&token=' + this.projectService.project.shareToken;\n }\n\n ok() {\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.project.share-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.project.share-link' | translate }}</label>\n <div class=\"col-lg-8 d-flex\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"shareLink\" readonly />\n </div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'lib-error-dialog',\n templateUrl: './error-dialog.component.html',\n styleUrls: ['./error-dialog.component.css'],\n standalone: false,\n})\nexport class ErrorDialogComponent implements OnInit {\n onClose: Subject<number>;\n\n message: string;\n details: string;\n\n constructor(private bsModalRef: BsModalRef) {}\n\n ngOnInit() {\n this.onClose = new Subject();\n }\n\n public ok(): void {\n this.onClose.next(1);\n this.bsModalRef.hide();\n }\n\n public cancel(): void {\n this.onClose.next(2);\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"card-modal\">\n <div class=\"card\">\n <div class=\"card-header\">\n {{ 'designer.misc.error' | translate }}\n </div>\n\n <div class=\"card-body\">\n <div class=\"row\">\n <div class=\"col-auto\">\n <h2 class=\"mb-0\">\n <i class=\"fa fa-exclamation-circle text-danger\" aria-hidden=\"true\"></i>\n </h2>\n </div>\n <div class=\"col pl-0\">\n <p class=\"mb-0\">{{ message }}</p>\n @if (details) {\n <p class=\"mt-1 mb-0\">({{ details }})</p>\n }\n </div>\n </div>\n </div>\n\n <div class=\"card-footer\">\n <div class=\"d-flex float-right\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok(); (false)\">\n {{ 'designer.misc.ok' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { ErrorDialogComponent } from '../error-dialog/error-dialog.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ErrorDialogService {\n constructor(private modalService: BsModalService, private translateService: TranslateService) {}\n\n // Show a warning dialog and return true, when the user clicked OK\n show(message: string, details?: string): Observable<boolean> {\n return this.translateService.get(message).pipe(\n map((result) => {\n return result;\n }),\n mergeMap((result) => {\n const fileDialog = this.modalService.show(ErrorDialogComponent, { keyboard: true, ignoreBackdropClick: false });\n (fileDialog.content as ErrorDialogComponent).message = result;\n (fileDialog.content as ErrorDialogComponent).details = details;\n\n return (fileDialog.content as ErrorDialogComponent).onClose.pipe(\n map((errorResult) => {\n if (errorResult === 1) {\n return true;\n }\n\n return false;\n })\n );\n })\n );\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { DropzoneConfigInterface } from 'ngx-dropzone-wrapper';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { FixtureProfile } from '../../models/fixture-profile';\nimport { FixtureService } from '../../services/fixture.service';\nimport { ProjectService } from '../../services/project.service';\n\n@Component({\n selector: 'lib-fixture-pool-create-from-file',\n templateUrl: './fixture-pool-create-from-file.component.html',\n styleUrls: ['./fixture-pool-create-from-file.component.css'],\n standalone: false,\n})\nexport class FixturePoolCreateFromFileComponent implements OnInit {\n public dropzoneConfig: DropzoneConfigInterface;\n public uploadMessage: string;\n public onClose: Subject<FixtureProfile> = new Subject();\n\n constructor(\n public bsModalRef: BsModalRef,\n private translateService: TranslateService,\n private toastrService: ToastrService,\n private fixtureService: FixtureService,\n private projectService: ProjectService\n ) {}\n\n ngOnInit() {\n this.dropzoneConfig = {\n url: 'dummy',\n addRemoveLinks: false,\n maxFilesize: 10 /* 10 MB */,\n acceptedFiles: '.json',\n timeout: 0,\n accept: (file: any, done: any) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', (event: any) => {\n // validate the file\n const text = event.target.result;\n const json = JSON.parse(text);\n if (json['$schema'].match(/open-fixture-library\\/(?:schema-(.*?)|master)\\/schemas\\/fixture\\.json/)) {\n // create the metadata from the file. we don't have the corresponding\n // manufacturer-file, therefore we just assume the attributes from the\n // fixture-file.\n const manufacturerShortName = json['manufacturerKey'];\n const manufacturerName = manufacturerShortName;\n const uuid = manufacturerShortName + '/' + json['fixtureKey'];\n const profile = new FixtureProfile(json);\n\n profile.manufacturerShortName = manufacturerShortName;\n profile.manufacturerName = manufacturerName;\n profile.uuid = uuid;\n profile.createdFromFile = true;\n\n // add the profile to the project, if not already added\n const loadedProfile = this.fixtureService.getProfileByUuid(uuid);\n if (!loadedProfile) {\n this.projectService.project.fixtureProfiles.push(profile);\n }\n\n // add a new fixture from this profile\n this.onClose.next(profile);\n this.bsModalRef.hide();\n } else {\n // show an error toast\n const msg = 'designer.fixture-pool.invalid-fixture-profile-file';\n const title = 'designer.misc.toast-upload-error-title';\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });\n });\n }\n\n done('noerr');\n });\n reader.readAsText(file);\n },\n previewTemplate: `\n <div style=\"display: none;\">\n <!-- No preview -->\n </div>\n `,\n };\n\n this.translateService\n .get('designer.misc.dropzone-message')\n .pipe(\n map((result) => {\n this.uploadMessage = '<h3 class=\"mb-0\"><i class=\"fa fa-cloud-upload\"></i></h3>' + result;\n })\n )\n .subscribe();\n }\n\n public onUploadError(args: any) {\n if (args[1] === 'noerr') {\n // this error is set in the accept event listener -> everything OK\n return;\n }\n\n const msg = 'designer.misc.toast-upload-error';\n const title = 'designer.misc.toast-upload-error-title';\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg] + args[1], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });\n });\n }\n\n ok() {\n this.onClose.next(undefined);\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.onClose.next(undefined);\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.fixture-pool.create-fixture-from-profile-file-dialog-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <!-- Dropzone -->\n <dropzone [config]=\"dropzoneConfig\" [useDropzoneClass]=\"'false'\" [message]=\"uploadMessage\" (error)=\"onUploadError($event)\"></dropzone>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n </div>\n</div>\n","import { AfterViewInit, Directive, ElementRef, EventEmitter, Input, NgZone, OnDestroy, Output } from '@angular/core';\nimport Sortable from 'sortablejs';\nimport type { Options } from 'sortablejs';\n\ninterface SortableReorderEvent {\n item?: HTMLElement;\n oldIndex?: number | null;\n newIndex?: number | null;\n oldDraggableIndex?: number | null;\n newDraggableIndex?: number | null;\n}\n\nconst DEFAULT_OPTIONS: Options = {\n animation: 150,\n draggable: '>*:not(.no-sortjs)',\n filter: '.no-sortjs, .no-sortjs *',\n handle: '.list-sort-handle',\n preventOnFilter: false,\n};\n\n@Directive({\n selector: '[sortablejs]',\n standalone: false,\n})\nexport class SortablejsDirective implements AfterViewInit, OnDestroy {\n @Input() sortablejs: any[] | undefined | null;\n @Input() sortablejsContainer: string | undefined;\n @Input() sortablejsOptions: Options | undefined;\n @Output() sortablejsInit = new EventEmitter<any>();\n\n private sortableInstance: any;\n private createTimer: ReturnType<typeof setTimeout> | undefined;\n\n constructor(private element: ElementRef<HTMLElement>, private zone: NgZone) {}\n\n ngAfterViewInit(): void {\n const container = this.sortablejsContainer\n ? this.element.nativeElement.querySelector(this.sortablejsContainer)\n : this.element.nativeElement;\n\n if (!(container instanceof HTMLElement)) {\n return;\n }\n\n this.createTimer = setTimeout(() => {\n this.zone.runOutsideAngular(() => {\n this.sortableInstance = Sortable.create(container, this.options);\n });\n\n this.sortablejsInit.emit(this.sortableInstance);\n }, 0);\n }\n\n ngOnDestroy(): void {\n if (this.createTimer) {\n clearTimeout(this.createTimer);\n }\n\n this.sortableInstance?.destroy();\n }\n\n private get options(): Options {\n const { onMove: _onMove, ...userOptions } = this.sortablejsOptions || {};\n const userOnEnd = userOptions.onEnd;\n const userOnUpdate = userOptions.onUpdate;\n\n return {\n ...userOptions,\n ...DEFAULT_OPTIONS,\n onEnd: (event: SortableReorderEvent) => {\n if (userOnEnd) {\n this.zone.run(() => userOnEnd(event));\n }\n },\n onUpdate: (event: SortableReorderEvent) => {\n this.zone.run(() => {\n this.restoreDomOrder(event);\n this.reorder(event);\n userOnUpdate?.(event);\n });\n },\n };\n }\n\n private reorder(event: SortableReorderEvent): void {\n if (!this.sortablejs) {\n return;\n }\n\n const oldIndex = this.indexFromEvent(event, 'old');\n const newIndex = this.indexFromEvent(event, 'new');\n\n if (\n oldIndex === undefined ||\n oldIndex === null ||\n newIndex === undefined ||\n newIndex === null ||\n oldIndex === newIndex ||\n oldIndex < 0 ||\n newIndex < 0 ||\n oldIndex >= this.sortablejs.length ||\n newIndex >= this.sortablejs.length\n ) {\n return;\n }\n\n const [movedItem] = this.sortablejs.splice(oldIndex, 1);\n this.sortablejs.splice(newIndex, 0, movedItem);\n }\n\n private restoreDomOrder(event: SortableReorderEvent): void {\n const oldIndex = this.indexFromEvent(event, 'old');\n const item = event.item;\n const container = item?.parentElement;\n\n if (!item || !container || oldIndex === undefined || oldIndex === null || oldIndex < 0) {\n return;\n }\n\n const draggableChildren = Array.from(container.children).filter(\n (child): child is HTMLElement => child instanceof HTMLElement && child !== item && !child.classList.contains('no-sortjs')\n );\n const firstNoSortItem = Array.from(container.children).find(\n (child): child is HTMLElement => child instanceof HTMLElement && child.classList.contains('no-sortjs')\n );\n const referenceNode = draggableChildren[oldIndex] || firstNoSortItem || null;\n\n container.insertBefore(item, referenceNode);\n }\n\n private indexFromEvent(event: SortableReorderEvent, direction: 'old' | 'new'): number | null | undefined {\n const draggableIndex = direction === 'old' ? event.oldDraggableIndex : event.newDraggableIndex;\n const index = direction === 'old' ? event.oldIndex : event.newIndex;\n\n return draggableIndex ?? index;\n }\n}\n","import { Component, HostListener } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { UniverseConfig } from '../../models/universe-config';\nimport { UuidService } from '../../services/uuid.service';\n\n@Component({\n selector: 'lib-fixture-pool-edit-universes',\n templateUrl: './fixture-pool-edit-universes.component.html',\n styleUrls: ['./fixture-pool-edit-universes.component.css'],\n standalone: false,\n})\nexport class FixturePoolEditUniversesComponent {\n public universes: UniverseConfig[] = [];\n public newUniverseName = '';\n public onClose: Subject<UniverseConfig[] | undefined> = new Subject();\n\n constructor(public bsModalRef: BsModalRef, private uuidService: UuidService) {}\n\n addUniverse() {\n const name = (this.newUniverseName || '').trim();\n if (!name) return;\n this.universes.push({ uuid: this.uuidService.getUuid(), name });\n this.newUniverseName = '';\n }\n\n removeUniverse(universe: UniverseConfig) {\n const index = this.universes.findIndex((u) => u.uuid === universe.uuid);\n if (index >= 0) {\n this.universes.splice(index, 1);\n }\n }\n\n ok() {\n this.onClose.next(this.universes);\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.onClose.next(undefined);\n this.bsModalRef.hide();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.fixture-pool.edit-universes-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <!-- Add universe -->\n <div class=\"input-group mb-3\">\n <input\n type=\"text\"\n class=\"form-control\"\n maxlength=\"200\"\n [(ngModel)]=\"newUniverseName\"\n (keydown.enter)=\"addUniverse(); $event.stopPropagation(); $event.preventDefault()\"\n placeholder=\"{{ 'designer.fixture-pool.universe-name' | translate }}\"\n />\n <div class=\"input-group-append\">\n <button type=\"button\" class=\"btn btn-secondary\" [disabled]=\"!newUniverseName || !newUniverseName.trim()\" (click)=\"addUniverse()\">\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n\n <!-- Sortable universe list -->\n <ul class=\"list-group\" [sortablejs]=\"universes\">\n @for (universe of universes; track universe.uuid) {\n <li class=\"list-group-item d-flex align-items-center py-1\">\n <div class=\"list-sort-handle mr-2\" style=\"cursor: move; cursor: -webkit-grabbing\">\n <i class=\"fa fa-bars\" aria-hidden=\"true\"></i>\n </div>\n <span class=\"flex-grow-1\">{{ universe.name }}</span>\n <button class=\"btn btn-primary btn-sm\" type=\"button\" (click)=\"removeUniverse(universe)\">\n <i class=\"fa fa-minus\" aria-hidden=\"true\"></i>\n </button>\n </li>\n }\n </ul>\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subject } from 'rxjs';\nimport { catchError, finalize } from 'rxjs/operators';\nimport { Fixture } from '../models/fixture';\nimport { FixtureProfile } from '../models/fixture-profile';\nimport { ConfigService } from '../services/config.service';\nimport { FixtureService } from '../services/fixture.service';\nimport { PresetService } from '../services/preset.service';\nimport { PreviewService } from '../services/preview.service';\nimport { ProjectService } from '../services/project.service';\nimport { UuidService } from '../services/uuid.service';\nimport { FixturePoolCreateFromFileComponent } from './fixture-pool-create-from-file/fixture-pool-create-from-file.component';\nimport { FixturePoolEditUniversesComponent } from './fixture-pool-edit-universes/fixture-pool-edit-universes.component';\nimport { PresetFixture } from '../models/preset-fixture';\nimport { LivePreviewService } from '../services/live-preview.service';\nimport { UniverseConfig } from '../models/universe-config';\n\n@Component({\n selector: 'lib-app-fixture-pool',\n templateUrl: './fixture-pool.component.html',\n styleUrls: ['./fixture-pool.component.css'],\n standalone: false,\n})\nexport class FixturePoolComponent implements OnInit {\n private profiles: FixtureProfile[];\n public filteredProfiles: FixtureProfile[];\n public loadingProfiles = false;\n\n public fixturePool: Fixture[];\n\n public dmxChannels: number[] = [];\n public selectedFixture: Fixture;\n public selectedFixtureProfile: FixtureProfile;\n public showChannelNumbers = false;\n public channelDragFixture: Fixture;\n public channelDragOffset: number;\n\n public onClose: Subject<number> = new Subject();\n\n public searchExpression: string;\n\n public updatingProfiles: boolean;\n\n // Universes the user can choose from. In \"free edit\" mode the user can\n // extend this list at runtime; otherwise it is provided by the host\n // application through the ConfigService.\n public universes: UniverseConfig[] = [];\n\n // The currently active universe. The channel map and fixture list are\n // filtered to only show fixtures belonging to this universe.\n public selectedUniverse: UniverseConfig;\n\n constructor(\n public bsModalRef: BsModalRef,\n public fixtureService: FixtureService,\n private uuidService: UuidService,\n public projectService: ProjectService,\n private previewService: PreviewService,\n private translateService: TranslateService,\n private toastrService: ToastrService,\n private presetService: PresetService,\n public configService: ConfigService,\n private modalService: BsModalService,\n private livePreviewService: LivePreviewService\n ) {\n this.fixturePool = structuredClone(this.projectService.project.fixtures);\n\n // Initialise the universe list from the config. We keep a local copy so\n // edits done in free-edit mode don't bleed into the config until the user\n // confirms with OK (see `ok()` below).\n this.universes = structuredClone(this.configService.universes || []);\n\n if (this.universes.length === 0 && this.configService.freeUniverseEdit) {\n this.universes.push({ uuid: this.uuidService.getUuid(), name: 'Universe 1' });\n }\n\n if (this.universes.length > 0) {\n this.selectedUniverse = this.universes[0];\n }\n\n const firstVisible = this.currentUniverseFixtures[0] ?? this.fixturePool[0];\n if (firstVisible) {\n this.selectFixture(firstVisible);\n }\n }\n\n get freeUniverseEdit(): boolean {\n return this.configService.freeUniverseEdit;\n }\n\n /** Fixtures belonging to the currently selected universe. */\n get currentUniverseFixtures(): Fixture[] {\n if (!this.selectedUniverse) {\n return this.fixturePool;\n }\n return this.fixturePool.filter((f) => f.dmxUniverseUuid === this.selectedUniverse.uuid);\n }\n\n /** Fixtures used for channel-map calculations (same as currentUniverseFixtures). */\n private get channelFixtures(): Fixture[] {\n return this.currentUniverseFixtures;\n }\n\n selectUniverse(universe: UniverseConfig) {\n this.selectedUniverse = universe;\n // Deselect the current fixture if it doesn't belong to the new universe.\n if (this.selectedFixture && this.selectedFixture.dmxUniverseUuid !== universe?.uuid) {\n this.selectFixture(this.currentUniverseFixtures[0] ?? undefined);\n }\n }\n\n ngOnInit() {\n for (let i = 0; i < 512; i++) {\n this.dmxChannels.push(0);\n }\n\n this.loadProfiles();\n }\n\n private loadProfiles() {\n this.loadingProfiles = true;\n\n this.fixtureService.getSearchProfiles().subscribe((profiles) => {\n this.profiles = profiles;\n this.filterProfiles();\n this.loadingProfiles = false;\n });\n }\n\n selectFixture(fixture: Fixture) {\n this.selectedFixtureProfile = undefined;\n if (fixture) {\n this.selectedFixtureProfile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n }\n this.selectedFixture = fixture;\n }\n\n filterProfiles() {\n if (!this.searchExpression || !this.profiles) {\n this.filteredProfiles = this.profiles;\n return;\n }\n\n this.filteredProfiles = [];\n\n const keywords = this.searchExpression.split(' ');\n\n for (const profile of this.profiles) {\n let foundKeywords = 0;\n\n for (const keyword of keywords) {\n if (\n profile.uuid.toLowerCase().indexOf(keyword.toLowerCase()) !== -1 ||\n profile.name.toLowerCase().indexOf(keyword.toLowerCase()) !== -1 ||\n profile.manufacturerName.toLowerCase().indexOf(keyword.toLowerCase()) !== -1\n ) {\n foundKeywords++;\n }\n }\n\n if (foundKeywords === keywords.length) {\n this.filteredProfiles.push(profile);\n }\n }\n }\n\n addFixture(searchProfile: FixtureProfile) {\n // Load the profile details, if not already done. There is only a\n // minimal profile passed from the search.\n this.fixtureService.loadProfileByUuid(searchProfile.uuid).subscribe(() => {\n const profile = this.fixtureService.getProfileByUuid(searchProfile.uuid);\n const newFixture = this.fixtureService.addFixture(profile, this.fixturePool, this.currentUniverseFixtures);\n if (newFixture) {\n newFixture.dmxUniverseUuid = this.selectedUniverse?.uuid;\n this.selectFixture(newFixture);\n }\n });\n }\n\n addCopy(originalFixture: Fixture) {\n const fixture = new Fixture();\n\n fixture.uuid = this.uuidService.getUuid();\n fixture.profileUuid = originalFixture.profileUuid;\n fixture.name = originalFixture.name;\n fixture.modeShortName = originalFixture.modeShortName;\n fixture.dmxFirstChannel = originalFixture.dmxFirstChannel;\n fixture.dmxUniverseUuid = this.selectedUniverse?.uuid;\n\n this.fixturePool.push(fixture);\n this.selectFixture(fixture);\n }\n\n removeFixture(fixture: Fixture) {\n for (let i = 0; i < this.fixturePool.length; i++) {\n if (this.fixturePool[i].uuid === fixture.uuid) {\n if (this.selectedFixture === this.fixturePool[i]) {\n this.selectFixture(undefined);\n }\n this.fixturePool.splice(i, 1);\n break;\n }\n }\n\n if (!this.selectedFixture) {\n this.selectFixture(this.currentUniverseFixtures[0] ?? undefined);\n }\n\n // remove unused profiles\n for (let i = 0; i < this.projectService.project.fixtureProfiles.length; i++) {\n let profileUsed = false;\n\n for (const fixtureInPool of this.fixturePool) {\n if (fixtureInPool.profileUuid === this.projectService.project.fixtureProfiles[i].uuid) {\n profileUsed = true;\n break;\n }\n }\n\n if (!profileUsed) {\n this.projectService.project.fixtureProfiles.splice(i, 1);\n }\n }\n }\n\n channelOccupied(index: number): boolean {\n for (const fixture of this.channelFixtures) {\n const profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n const mode = this.fixtureService.getModeByFixture(profile, fixture);\n const channelCount = this.fixtureService.getModeChannelCount(profile, mode);\n\n if (index >= fixture.dmxFirstChannel && index < fixture.dmxFirstChannel + channelCount) {\n return true;\n }\n }\n\n return false;\n }\n\n channelOccupiedStart(index: number): boolean {\n for (const fixture of this.channelFixtures) {\n if (index === fixture.dmxFirstChannel) {\n return true;\n }\n }\n\n return false;\n }\n\n channelOccupiedEnd(index: number): boolean {\n for (const fixture of this.channelFixtures) {\n const profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n const mode = this.fixtureService.getModeByFixture(profile, fixture);\n const channelCount = this.fixtureService.getModeChannelCount(profile, mode);\n\n if (index === fixture.dmxFirstChannel + channelCount - 1) {\n return true;\n }\n }\n\n return false;\n }\n\n channelOverlapped(index: number): boolean {\n return this.channelOverlappedInFixtures(index, this.channelFixtures);\n }\n\n private channelOverlappedInFixtures(index: number, fixtures: Fixture[]): boolean {\n let occupiedFixture: Fixture;\n\n for (const fixture of fixtures) {\n const profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n const mode = this.fixtureService.getModeByFixture(profile, fixture);\n const channelCount = this.fixtureService.getModeChannelCount(profile, mode);\n\n if (index >= fixture.dmxFirstChannel && index < fixture.dmxFirstChannel + channelCount) {\n if (occupiedFixture) {\n if (\n occupiedFixture.dmxFirstChannel !== fixture.dmxFirstChannel ||\n occupiedFixture.modeShortName !== fixture.modeShortName ||\n occupiedFixture.dmxUniverseUuid !== fixture.dmxUniverseUuid\n ) {\n // fixtures are allowed to overlap, if they start at the same channel,\n // use the same mode and belong to the same universe. otherwise it's not allowed.\n return true;\n }\n } else {\n occupiedFixture = fixture;\n }\n }\n }\n\n return false;\n }\n\n channelMouseDown(event: any) {\n // start dragging\n const selectedIndex = event.target.dataset.index;\n let newSelectedFixture: Fixture;\n\n // find a dragging fixture and select it, but don't change the selection, if the\n // currently selected fixture might also be selected (on overlapped fixtures)\n for (const fixture of this.channelFixtures) {\n const profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n const mode = this.fixtureService.getModeByFixture(profile, fixture);\n const channelCount = this.fixtureService.getModeChannelCount(profile, mode);\n\n if (selectedIndex >= fixture.dmxFirstChannel && selectedIndex <= fixture.dmxFirstChannel + channelCount - 1) {\n if (this.selectedFixture === fixture) {\n newSelectedFixture = fixture;\n break;\n }\n\n if (!newSelectedFixture) {\n newSelectedFixture = fixture;\n }\n }\n }\n\n if (newSelectedFixture) {\n if (newSelectedFixture !== this.selectedFixture) {\n this.selectFixture(newSelectedFixture);\n }\n\n this.channelDragFixture = newSelectedFixture;\n this.channelDragOffset = selectedIndex - newSelectedFixture.dmxFirstChannel;\n }\n }\n\n channelSelected(index: number): boolean {\n if (!this.selectedFixture) {\n return false;\n }\n\n if (index >= this.selectedFixture.dmxFirstChannel) {\n const profile = this.fixtureService.getProfileByUuid(this.selectedFixture.profileUuid);\n const mode = this.fixtureService.getModeByFixture(profile, this.selectedFixture);\n const channelCount = this.fixtureService.getModeChannelCount(profile, mode);\n\n if (index < this.selectedFixture.dmxFirstChannel + channelCount) {\n return true;\n }\n }\n\n return false;\n }\n\n // register mouse up globally (e.g. also outside the DMX mapping)\n @HostListener('window:mouseup', ['$event'])\n mouseUp(event: any) {\n // finish dragging\n this.channelDragFixture = undefined;\n this.channelDragOffset = undefined;\n }\n\n channelMouseOver(event: any) {\n if (!this.channelDragFixture) {\n return;\n }\n\n // perform dragging\n const selectedIndex = event.target.dataset.index;\n const profile = this.fixtureService.getProfileByUuid(this.channelDragFixture.profileUuid);\n const mode = this.fixtureService.getModeByFixture(profile, this.selectedFixture);\n const channelCount = this.fixtureService.getModeChannelCount(profile, mode);\n\n if (selectedIndex - this.channelDragOffset >= 0 && selectedIndex - this.channelDragOffset + channelCount - 1 <= 511) {\n this.channelDragFixture.dmxFirstChannel = selectedIndex - this.channelDragOffset;\n }\n }\n\n ok() {\n // don't allow OK if overlapping fixtures exist within any universe\n for (const universe of this.universes) {\n const universeFixtures = this.fixturePool.filter((f) => f.dmxUniverseUuid === universe.uuid);\n for (let i = 0; i < this.dmxChannels.length; i++) {\n if (this.channelOverlappedInFixtures(i, universeFixtures)) {\n const msg = 'designer.fixture-pool.channel-occupied';\n const title = 'designer.fixture-pool.channel-occupied-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg], result[title]);\n });\n\n return;\n }\n }\n }\n\n // remove deleted fixtures/pixel keys from preset fixtures\n for (let i = this.projectService.project.presetFixtures.length - 1; i >= 0; i--) {\n let found = false;\n const presetFixture = this.projectService.project.presetFixtures[i];\n for (let fixture of this.fixturePool) {\n if (presetFixture.fixtureUuid === fixture.uuid) {\n found = true;\n break;\n }\n }\n if (!found) {\n this.projectService.project.presetFixtures.splice(i, 1);\n }\n }\n\n // If a mode is changed, we need to re-add the fixture to make sure, all pixel keys\n // are removed/added\n for (let projectFixture of this.projectService.project.fixtures) {\n for (let poolFixture of this.fixturePool) {\n if (poolFixture.profileUuid === projectFixture.profileUuid && poolFixture.modeShortName != projectFixture.modeShortName) {\n // the mode has changed -> remove it from the presetfixtures\n for (let i = this.projectService.project.presetFixtures.length - 1; i >= 0; i--) {\n const presetFixture = this.projectService.project.presetFixtures[i];\n if (presetFixture.fixtureUuid === poolFixture.uuid) {\n this.projectService.project.presetFixtures.splice(i, 1);\n }\n }\n }\n }\n }\n\n // add the new fixtures/pixel keys to the preset fixtures\n for (let fixture of this.fixturePool) {\n let found = false;\n for (let presetFixture of this.projectService.project.presetFixtures) {\n if (presetFixture.fixtureUuid === fixture.uuid) {\n found = true;\n break;\n }\n }\n if (!found) {\n if (this.fixtureService.fixtureHasGeneralChannel(fixture)) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = fixture.uuid;\n this.projectService.project.presetFixtures.push(presetFixture);\n }\n\n const pixels = this.fixtureService.fixtureGetUniquePixels(fixture);\n\n for (let pixel of pixels) {\n const presetFixture = new PresetFixture();\n presetFixture.fixtureUuid = fixture.uuid;\n presetFixture.pixelKey = pixel.key;\n this.projectService.project.presetFixtures.push(presetFixture);\n }\n }\n }\n this.projectService.project.fixtures = this.fixturePool;\n\n // Persist any locally edited universes back to the config when the\n // host application has opted in to free editing.\n if (this.configService.freeUniverseEdit) {\n this.configService.universes = this.universes;\n }\n\n this.fixtureService.updateCachedFixtures();\n this.presetService.removeDeletedFixtures();\n this.previewService.updateFixtureSetup();\n this.presetService.updateFixtureSelection();\n this.presetService.fixtureSelectionChanged.next();\n this.livePreviewService.previewLive();\n\n this.onClose.next(1);\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.onClose.next(2);\n this.bsModalRef.hide();\n }\n\n updateProfiles() {\n this.updatingProfiles = true;\n\n // TODO\n this.fixtureService\n .updateProfiles()\n .pipe(\n finalize(() => {\n this.updatingProfiles = false;\n }),\n catchError(() => {\n const msg = 'designer.fixture-pool.profiles-update-error';\n const title = 'designer.fixture-pool.profiles-update-error-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg], result[title]);\n });\n\n return undefined;\n })\n )\n .subscribe(() => {\n this.loadProfiles();\n\n const msg = 'designer.fixture-pool.profiles-updated';\n const title = 'designer.fixture-pool.profiles-updated-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.success(result[msg], result[title]);\n });\n });\n }\n\n openEditUniverses() {\n const ref = this.modalService.show(FixturePoolEditUniversesComponent, {\n keyboard: true,\n ignoreBackdropClick: false,\n initialState: { universes: structuredClone(this.universes) },\n });\n (ref.content as FixturePoolEditUniversesComponent).onClose.subscribe((result) => {\n if (!result) return;\n\n // Clear fixture universe assignments for any removed universe\n for (const universe of this.universes) {\n if (!result.find((u) => u.uuid === universe.uuid)) {\n for (const fixture of this.fixturePool) {\n if (fixture.dmxUniverseUuid === universe.uuid) {\n fixture.dmxUniverseUuid = undefined;\n }\n }\n }\n }\n\n this.universes = result;\n\n // Re-anchor selectedUniverse to the new object reference from result.\n // The modal works on a structuredClone, so all objects have new references.\n const stillSelected = this.universes.find((u) => u.uuid === this.selectedUniverse?.uuid);\n if (stillSelected) {\n this.selectedUniverse = stillSelected;\n } else {\n this.selectedUniverse = this.universes[0] ?? undefined;\n this.selectFixture(this.currentUniverseFixtures[0] ?? undefined);\n }\n });\n }\n\n createFixtureFromProfileFile() {\n const bsModalRef = this.modalService.show(FixturePoolCreateFromFileComponent, { keyboard: true, ignoreBackdropClick: false });\n (bsModalRef.content as FixturePoolCreateFromFileComponent).onClose.subscribe((profile: FixtureProfile) => {\n const newFixture = this.fixtureService.addFixture(profile, this.fixturePool, this.currentUniverseFixtures);\n if (newFixture) {\n newFixture.dmxUniverseUuid = this.selectedUniverse?.uuid;\n }\n this.selectFixture(newFixture);\n });\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.fixture-pool.title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel(); (false)\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"row\">\n <div class=\"col-6\">\n <!-- Search for profiles -->\n <input\n type=\"text\"\n class=\"form-control input-block mb-3\"\n id=\"searchSet\"\n placeholder=\"{{ 'designer.fixture-pool.search-profiles' | translate }}\"\n (input)=\"searchExpression = $event.target.value; filterProfiles()\"\n />\n\n <!-- Profiles -->\n <div class=\"card border-secondary w-100\" style=\"height: 200px\">\n <div class=\"card-body p-0 w-100\">\n <div class=\"list-group list-group-flush w-100\">\n @if (loadingProfiles) {\n <a class=\"list-group-item flex-column align-items-start d-flex\">\n <p class=\"mb-0 mx-auto\">\n <i class=\"fa fa-spinner fa-pulse fa-fw\"></i>\n </p>\n </a>\n } @for (profile of filteredProfiles | sort : 'uuid'; track profile) {\n <div class=\"list-group-item\">\n <div class=\"row\">\n <div class=\"col-10 col-auto my-auto pl-2\">\n <p class=\"mb-0\">\n <span class=\"icon-{{ fixtureService.getFixtureIconClass(profile) }} mr-1\"></span> {{ profile.manufacturerName }} -\n {{ profile.name }}\n </p>\n </div>\n <div class=\"col-2 my-auto\">\n <a class=\"btn btn-primary btn-sm float-right\" href=\"#\" role=\"button\" (click)=\"addFixture(profile); (false)\">\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\n </a>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n <div>\n <p class=\"d-inline-block mb-0 mt-2\">\n Powered by the <a href=\"https://open-fixture-library.org/\" target=\"_blank\">Open Fixture Library</a>\n </p>\n <a\n class=\"mt-2 btn btn-secondary btn-sm float-right\"\n href=\"https://open-fixture-library.org/fixture-editor\"\n target=\"_blank\"\n role=\"button\"\n >\n <i class=\"fa fa-file-o\" aria-hidden=\"true\"></i> {{ 'designer.fixture-pool.add-profile' | translate }}\n </a>\n @if (configService.localProfiles) {\n <button\n type=\"button\"\n class=\"mr-2 mt-2 btn btn-secondary btn-sm float-right\"\n (click)=\"updateProfiles(); (false)\"\n [disabled]=\"updatingProfiles\"\n role=\"button\"\n >\n @if (updatingProfiles) {\n <i class=\"fa fa-spinner fa-pulse fa-fw\" aria-hidden=\"true\"></i>\n } @if (!updatingProfiles) {\n <i class=\"fa fa-download fa-fw\" aria-hidden=\"true\"></i>\n }\n {{ 'designer.fixture-pool.update-profiles' | translate }}\n </button>\n }\n </div>\n </div>\n <div class=\"col-6\">\n <div class=\"row\">\n <!-- Add fixture from local profile -->\n <div class=\"col-6\">\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"createFixtureFromProfileFile()\" role=\"button\">\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i> {{ 'designer.fixture-pool.create-fixture-from-profile-file' | translate }}\n </button>\n </div>\n\n <!-- Universe -->\n <div class=\"col-6\">\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.fixture-pool.universe' | translate }}</label>\n <div class=\"col-lg-8\">\n <div class=\"input-group\">\n <select\n class=\"custom-select\"\n [disabled]=\"universes.length === 0\"\n [ngModel]=\"selectedUniverse\"\n (ngModelChange)=\"selectUniverse($event)\"\n >\n @for (universe of universes; track universe.uuid) {\n <option [ngValue]=\"universe\">{{ universe.name }}</option>\n }\n </select>\n @if (freeUniverseEdit) {\n <div class=\"input-group-append\">\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"openEditUniverses()\">\n <i class=\"fa fa-pencil\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Fixtures -->\n <div class=\"card border-secondary\" style=\"height: 235px\">\n <div class=\"card-body p-0\">\n <div class=\"list-group list-group-flush\" [sortablejs]=\"fixturePool\">\n @for (fixture of currentUniverseFixtures; track fixture) {\n <div\n class=\"list-group-item\"\n [class.active]=\"fixture == selectedFixture\"\n (click)=\"selectFixture(fixture)\"\n style=\"cursor: pointer\"\n >\n <div class=\"row\">\n <div class=\"col-auto list-sort-handle my-auto\" style=\"cursor: move; cursor: -webkit-grabbing\">\n <i class=\"fa fa-bars\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"col-auto flex-grow pl-0 my-auto\">\n <p class=\"mb-0\">\n <span class=\"icon-{{ fixtureService.getFixtureIconClass(fixtureService.getProfileByUuid(fixture.profileUuid)) }} mr-1\">\n </span\n >{{ fixture.name }}\n </p>\n </div>\n <div class=\"col-auto my-auto\">\n <a class=\"btn btn-primary btn-sm float-right\" href=\"#\" role=\"button\" (click)=\"removeFixture(fixture); (false)\">\n <i class=\"fa fa-minus\" aria-hidden=\"true\"></i>\n </a>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row mt-3\">\n <div class=\"col\">\n <!-- Tab navigation -->\n <ul class=\"nav nav-tabs mb-4\" id=\"myTab\" role=\"tablist\">\n <li class=\"nav-item\">\n <a class=\"nav-link active\" id=\"sets-tab\" data-toggle=\"tab\" href=\"#dmx\" role=\"tab\">\n <i class=\"icon-ola\" aria-hidden=\"true\"></i> {{ 'designer.fixture-pool.dmx' | translate }}\n </a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" id=\"compositions-tab\" data-toggle=\"tab\" href=\"#settings\" role=\"tab\">\n <i class=\"fa fa-cog\" aria-hidden=\"true\"></i> {{ 'designer.fixture-pool.settings' | translate }}\n </a>\n </li>\n </ul>\n\n <!-- Tab content -->\n <div class=\"tab-content\" id=\"myTabContent\">\n <!-- DMX universe overview-->\n <div class=\"tab-pane show active\" id=\"dmx\" role=\"tabpanel\">\n <!-- Show all channel numbers -->\n <!-- <div class=\"form-group row\">\n <div class=\"col-auto flex-grow\"></div>\n <div class=\"col-lg-3 d-flex\">\n <div class=\"form-check my-auto ml-auto\">\n <input type=\"checkbox\" class=\"form-check-input\" id=\"showChannelNumbers\" [ngModel]=\"showChannelNumbers\"\n (ngModelChange)=\"showChannelNumbers = $event\">\n <label class=\"form-check-label\" for=\"showChannelNumbers\">Show channels</label>\n </div>\n </div>\n </div> -->\n\n <!-- List of DMX channels -->\n <div>\n @for (channel of dmxChannels; track $index; let i = $index) {\n <div\n class=\"dmx-channel\"\n [class.dmx-channel-occupied]=\"channelOccupied(i)\"\n [class.dmx-channel-occupied-start]=\"channelOccupiedStart(i)\"\n [class.dmx-channel-occupied-end]=\"channelOccupiedEnd(i)\"\n [class.dmx-channel-selected]=\"channelSelected(i)\"\n [class.dmx-channel-overlapped]=\"channelOverlapped(i)\"\n (mousedown)=\"channelMouseDown($event)\"\n (mouseover)=\"channelMouseOver($event)\"\n [attr.data-index]=\"i\"\n popover=\"{{ i + 1 }}\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n >\n <div class=\"d-flex w-100 dmx-channel-text\" [attr.data-index]=\"i\" [class.dmx-channel-text-visible]=\"showChannelNumbers\">\n <div class=\"m-auto\" style=\"font-size: 11px\" [attr.data-index]=\"i\"><small [attr.data-index]=\"i\">&nbsp;</small></div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Fixture settings -->\n <div class=\"tab-pane\" id=\"settings\" role=\"tabpanel\">\n @if (selectedFixture && selectedFixtureProfile) {\n <div>\n <div class=\"form-group row\">\n <label class=\"col-lg-3 col-form-label\" for=\"fixtureName\">{{ 'designer.fixture-pool.fixture-name' | translate }}</label>\n <div class=\"col-lg-9\">\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"selectedFixture.name\" maxlength=\"200\" id=\"fixtureName\" />\n </div>\n </div>\n <div class=\"form-group row\">\n <label class=\"col-lg-3 col-form-label\">{{ 'designer.fixture-pool.mode' | translate }}</label>\n <div class=\"col-lg-9\">\n <select\n class=\"custom-select\"\n [ngModel]=\"selectedFixture.modeShortName\"\n (ngModelChange)=\"selectedFixture.modeShortName = $event\"\n >\n @for (mode of selectedFixtureProfile.modes; track mode) {\n <option [ngValue]=\"mode.shortName || mode.name\">\n {{ mode.name }}\n - {{ fixtureService.getModeChannelCount(selectedFixtureProfile, mode) }}\n {{ 'designer.fixture-pool.channels' | translate }}\n </option>\n }\n </select>\n </div>\n </div>\n <div class=\"form-group row\">\n <label class=\"col-lg-3 col-form-label\">{{ 'designer.fixture-pool.universe' | translate }}</label>\n <div class=\"col-lg-9\">\n <select\n class=\"custom-select\"\n [disabled]=\"universes.length === 0\"\n [ngModel]=\"selectedFixture.dmxUniverseUuid\"\n (ngModelChange)=\"selectedFixture.dmxUniverseUuid = $event\"\n >\n @for (universe of universes; track universe.uuid) {\n <option [ngValue]=\"universe.uuid\">{{ universe.name }}</option>\n }\n </select>\n </div>\n </div>\n <div class=\"form-group row\">\n <label class=\"col-lg-3 col-form-label\">{{ 'designer.fixture-pool.first-channel' | translate }}</label>\n <div class=\"col-lg-9\">\n <select\n class=\"custom-select\"\n [ngModel]=\"selectedFixture.dmxFirstChannel\"\n (ngModelChange)=\"selectedFixture.dmxFirstChannel = $event\"\n >\n @for (channel of dmxChannels; track $index; let i = $index) {\n <option [ngValue]=\"i\">\n {{ i + 1 }}\n </option>\n }\n </select>\n </div>\n </div>\n <div class=\"form-group row\">\n <label class=\"col-lg-3 col-form-label\"></label>\n <div class=\"col-lg-9\">\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"addCopy(selectedFixture)\">\n {{ 'designer.fixture.add-copy' | translate }}\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { FixturePoolComponent } from '../fixture-pool/fixture-pool.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FixturePoolService {\n private fixturePoolOpened = false;\n\n constructor(private modalService: BsModalService) {}\n\n open() {\n if (this.fixturePoolOpened) {\n return;\n }\n\n this.fixturePoolOpened = true;\n const bsModalRef = this.modalService.show(FixturePoolComponent, { keyboard: false, ignoreBackdropClick: true, class: 'modal-full' });\n (bsModalRef.content as FixturePoolComponent).onClose.subscribe((result) => {\n this.fixturePoolOpened = false;\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HotkeyTargetExcludeService {\n constructor() {}\n\n exclude(event: any): boolean {\n // don't react on certain targets (e.g. the user is inside an input field)\n if (!event.target) {\n return false;\n }\n\n if (event.target.nodeName === 'INPUT') {\n return true;\n }\n\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ConfigService } from './config.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IntroService {\n showIntro = false;\n activeStep = 'start';\n positionTopPercentage = 50;\n positionLeftPercentage = 50;\n stylePosition = 'top: calc(50% - 150px); left: calc(50% - 200px);';\n stepChanged: Subject<void> = new Subject<void>();\n\n constructor(private configService: ConfigService) {}\n\n refresh() {\n // called, as soon as the config has been updated\n if (this.configService.intro) {\n if (localStorage.getItem('showIntro')) {\n this.showIntro = localStorage.getItem('showIntro') === 'true';\n } else {\n this.showIntro = true;\n }\n }\n }\n\n setShowIntro(value: boolean) {\n this.showIntro = value;\n if (value) {\n localStorage.setItem('showIntro', 'true');\n } else {\n localStorage.setItem('showIntro', 'false');\n }\n this.stepChanged.next();\n }\n\n reset() {\n this.activeStep = 'start';\n this.setShowIntro(true);\n this.stepChanged.next();\n }\n\n showStep(step: string): boolean {\n if (!this.showIntro) {\n return false;\n }\n\n if (this.activeStep !== step) {\n return false;\n }\n\n return true;\n }\n\n next() {\n switch (this.activeStep) {\n case 'start':\n this.activeStep = 'preview';\n this.positionTopPercentage = 60;\n this.positionLeftPercentage = 40;\n break;\n case 'preview':\n this.activeStep = 'fixtures';\n this.positionTopPercentage = 40;\n this.positionLeftPercentage = 30;\n break;\n case 'fixtures':\n this.activeStep = 'presets';\n this.positionTopPercentage = 30;\n this.positionLeftPercentage = 50;\n break;\n case 'presets':\n this.activeStep = 'capabilities';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 60;\n break;\n case 'capabilities':\n this.activeStep = 'scenes';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 40;\n break;\n case 'scenes':\n this.activeStep = 'timeline';\n this.positionTopPercentage = 40;\n this.positionLeftPercentage = 50;\n break;\n case 'timeline':\n this.activeStep = 'finish';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 50;\n break;\n }\n\n this.stepChanged.next();\n }\n\n back() {\n switch (this.activeStep) {\n case 'preview':\n this.activeStep = 'start';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 50;\n break;\n case 'fixtures':\n this.activeStep = 'preview';\n this.positionTopPercentage = 60;\n this.positionLeftPercentage = 40;\n break;\n case 'presets':\n this.activeStep = 'fixtures';\n this.positionTopPercentage = 30;\n this.positionLeftPercentage = 50;\n break;\n case 'capabilities':\n this.activeStep = 'presets';\n this.positionTopPercentage = 40;\n this.positionLeftPercentage = 30;\n break;\n case 'scenes':\n this.activeStep = 'capabilities';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 60;\n break;\n case 'timeline':\n this.activeStep = 'scenes';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 40;\n break;\n case 'finish':\n this.activeStep = 'timeline';\n this.positionTopPercentage = 40;\n this.positionLeftPercentage = 50;\n break;\n }\n\n this.stepChanged.next();\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { UserService } from '../../services/user.service';\n\n@Component({\n selector: 'lib-user-login',\n templateUrl: './user-login.component.html',\n styleUrls: ['./user-login.component.css'],\n standalone: false,\n})\nexport class UserLoginComponent implements OnInit {\n error = '';\n loggingIn = false;\n\n email = '';\n password = '';\n\n // emits, when logged in\n subject: Subject<void>;\n\n constructor(private bsModalRef: BsModalRef, private userService: UserService) {}\n\n ngOnInit() {}\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n login() {\n this.loggingIn = true;\n this.error = '';\n\n if (!this.email || !this.password) {\n this.error = 'fill-all-fields';\n this.loggingIn = false;\n return;\n }\n\n this.userService.login(this.email, this.password).subscribe(\n () => {\n this.bsModalRef.hide();\n if (this.subject) {\n this.subject.next();\n }\n },\n (response) => {\n if (response.error && response.error.error) {\n this.error = response.error.error;\n } else {\n this.error = 'internal';\n }\n this.loggingIn = false;\n }\n );\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.login();\n }\n}\n","<form (ngSubmit)=\"login()\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.user.login-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel(); (false)\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"form-group row\">\n <label for=\"email\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.email' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-envelope-o\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"loggingIn\"\n name=\"email\"\n [(ngModel)]=\"email\"\n type=\"email\"\n class=\"form-control\"\n id=\"email\"\n placeholder=\"email@example.com\"\n />\n </div>\n </div>\n </div>\n <div class=\"form-group row\">\n <label for=\"password\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.password' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-lock\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"loggingIn\"\n name=\"password\"\n [(ngModel)]=\"password\"\n type=\"password\"\n class=\"form-control\"\n id=\"password\"\n placeholder=\"{{ 'designer.user.password' | translate }}\"\n />\n </div>\n </div>\n </div>\n @if (error) {\n <div class=\"alert alert-primary\" role=\"alert\">\n {{ 'designer.user.error.' + error | translate }}\n </div>\n }\n </div>\n <div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button [disabled]=\"loggingIn\" type=\"submit\" class=\"btn btn-primary\">\n @if (loggingIn) {\n <i class=\"fa fa-spinner fa-pulse fa-fw\"></i>\n } {{ 'designer.user.login' | translate }}\n </button>\n </div>\n</form>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { UserService } from '../../services/user.service';\nimport { UserLoginComponent } from '../user-login/user-login.component';\n\n@Component({\n selector: 'lib-user-register',\n templateUrl: './user-register.component.html',\n styleUrls: ['./user-register.component.css'],\n standalone: false,\n})\nexport class UserRegisterComponent implements OnInit {\n error = '';\n registering = false;\n\n username = '';\n email = '';\n password = '';\n passwordRepeat = '';\n\n // emits, when logged in\n subject: Subject<void>;\n\n constructor(private bsModalRef: BsModalRef, private modalService: BsModalService, private userService: UserService) {}\n\n ngOnInit() {}\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n login() {\n this.bsModalRef.hide();\n this.modalService.show(UserLoginComponent, { keyboard: true, ignoreBackdropClick: false, initialState: { subject: this.subject } });\n }\n\n private emailIsValid(email: string): boolean {\n // tslint:disable-next-line:max-line-length\n const re =\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(String(email).toLowerCase());\n }\n\n register() {\n this.registering = true;\n this.error = '';\n\n if (!this.username || !this.email || !this.password || !this.passwordRepeat) {\n this.error = 'fill-all-fields';\n this.registering = false;\n return;\n }\n\n if (!this.emailIsValid(this.email)) {\n this.error = 'email-valid';\n this.registering = false;\n return;\n }\n\n if (this.password !== this.passwordRepeat) {\n this.error = 'password-mismatch';\n this.registering = false;\n return;\n }\n\n this.userService.register(this.email, this.username, this.password).subscribe(\n () => {\n // automatically login after registering\n this.userService.login(this.email, this.password).subscribe(() => {\n this.registering = false;\n this.bsModalRef.hide();\n });\n },\n (response) => {\n if (response.error && response.error.error) {\n this.error = response.error.error;\n } else {\n this.error = 'internal';\n }\n this.registering = false;\n }\n );\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.register();\n }\n}\n","<form (ngSubmit)=\"register()\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.user.register-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel(); (false)\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n @if (subject) {\n <div class=\"alert alert-success\" role=\"alert\">\n {{ 'designer.user.login-required' | translate }}\n </div>\n }\n <div class=\"form-group row\">\n <label for=\"username\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.username' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-user\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"registering\"\n name=\"username\"\n [(ngModel)]=\"username\"\n type=\"text\"\n class=\"form-control\"\n id=\"username\"\n placeholder=\"John Doe\"\n />\n </div>\n </div>\n </div>\n <div class=\"form-group row\">\n <label for=\"email\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.email' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-envelope-o\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"registering\"\n name=\"email\"\n [(ngModel)]=\"email\"\n type=\"email\"\n class=\"form-control\"\n id=\"email\"\n placeholder=\"email@example.com\"\n />\n </div>\n </div>\n </div>\n <div class=\"form-group row\">\n <label for=\"password\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.password' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-lock\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"registering\"\n name=\"password\"\n [(ngModel)]=\"password\"\n type=\"password\"\n class=\"form-control\"\n id=\"password\"\n placeholder=\"{{ 'designer.user.password' | translate }}\"\n />\n </div>\n </div>\n </div>\n <div class=\"form-group row\">\n <label for=\"passwordRepeat\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.password-repeat' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-lock\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"registering\"\n name=\"passwordRepeat\"\n [(ngModel)]=\"passwordRepeat\"\n type=\"password\"\n class=\"form-control\"\n id=\"passwordRepeat\"\n placeholder=\"{{ 'designer.user.password' | translate }}\"\n />\n </div>\n </div>\n </div>\n @if (error) {\n <div class=\"alert alert-primary\" role=\"alert\">\n {{ 'designer.user.error.' + error | translate }}\n </div>\n }\n <a href=\"#\" (click)=\"login(); (false)\">\n <p class=\"mt-3 mb-0\" style=\"text-align: center\">{{ 'designer.user.already-have-account' | translate }}</p>\n </a>\n </div>\n <div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button [disabled]=\"registering\" type=\"submit\" class=\"btn btn-primary\">\n @if (registering) {\n <i class=\"fa fa-spinner fa-pulse fa-fw\"> </i>\n }{{ 'designer.user.register' | translate }}\n </button>\n </div>\n</form>\n","import { Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable, of, Subject } from 'rxjs';\nimport { UserRegisterComponent } from '../user/user-register/user-register.component';\nimport { ConfigService } from './config.service';\nimport { UserService } from './user.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserEnsureLoginService {\n constructor(private userService: UserService, private modalService: BsModalService, private configService: ConfigService) {}\n\n // show the login form and log a user in, if required\n login(): Observable<void> {\n if (this.userService.isLoggedIn()) {\n return of(null);\n }\n\n if (!this.configService.loginAvailable) {\n return of(null);\n }\n\n const subject = new Subject<void>();\n this.modalService.show(UserRegisterComponent, { keyboard: true, ignoreBackdropClick: false, initialState: { subject } });\n return subject;\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DropzoneConfigInterface } from 'ngx-dropzone-wrapper';\nimport { map } from 'rxjs/operators';\nimport { ConfigService } from '../services/config.service';\n\n@Component({\n selector: 'app-dropzone',\n templateUrl: './dropzone.component.html',\n styleUrl: './dropzone.component.css',\n standalone: false,\n})\nexport class DropzoneComponent {\n @Output() error = new EventEmitter();\n @Output() success = new EventEmitter();\n @Output() addedFile = new EventEmitter();\n\n private _url: string;\n private _acceptedFiles: string;\n private _maxFiles: number = undefined;\n\n @Input()\n set url(value: string) {\n this._url = value;\n this.updateConfig();\n }\n @Input()\n set acceptedFiles(value: string) {\n this._acceptedFiles = value;\n this.updateConfig();\n }\n @Input()\n set maxFiles(value: number) {\n this._maxFiles = value;\n this.updateConfig();\n }\n\n dropzoneConfig: DropzoneConfigInterface;\n uploadMessage: string;\n\n constructor(private translateService: TranslateService, private configService: ConfigService) {\n this.translateService\n .get('designer.misc.dropzone-message')\n .pipe(\n map((result) => {\n this.uploadMessage = '<h3 class=\"mb-0\"><i class=\"fa fa-cloud-upload\"></i></h3>' + result;\n })\n )\n .subscribe();\n\n this.updateConfig();\n }\n\n updateConfig() {\n this.dropzoneConfig = {\n url: this.configService.restUrl + this._url,\n paramName: 'file',\n addRemoveLinks: false,\n maxFilesize: null /* unlimited */,\n acceptedFiles: this._acceptedFiles,\n timeout: 0,\n chunking: this.configService.dropzoneChunking,\n forceChunking: this.configService.dropzoneChunking,\n parallelUploads: 1,\n maxFiles: this._maxFiles,\n withCredentials: true,\n chunkSize: 2 * 1024 * 1024, // 2 MB\n previewTemplate: `\n <div class=\"dz-preview dz-file-preview\">\n <!-- The attachment details -->\n <div class=\"dz-details\" style=\"text-align: left\">\n <i class=\"fa fa-file-o\"></i> <span data-dz-name></span> <small><span class=\"label label-default file-size\" data-dz-size></span></small>\n </div>\n\n <!--div class=\"mt-5\">\n <span data-dz-errormessage></span>\n </div-->\n\n <div class=\"progress mt-4 mb-1\" style=\"height: 10px\">\n <div class=\"progress-bar progress-bar-striped progress-bar-animated\" role=\"progressbar\" style=\"width:0%;\" data-dz-uploadprogress></div>\n </div>\n </div>\n `,\n };\n }\n}\n","<dropzone\n [config]=\"dropzoneConfig\"\n [useDropzoneClass]=\"'false'\"\n [message]=\"uploadMessage\"\n (error)=\"error.emit($event)\"\n (success)=\"success.emit($event)\"\n (addedFile)=\"addedFile.emit($event)\"\n></dropzone>\n","import { HttpClient } from '@angular/common/http';\nimport { Component, HostListener, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { DropzoneConfigInterface } from 'ngx-dropzone-wrapper';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Composition } from '../../models/composition';\nimport { ConfigService } from '../../services/config.service';\nimport { ProjectService } from '../../services/project.service';\nimport { TimelineService } from '../../services/timeline.service';\nimport { WarningDialogService } from '../../services/warning-dialog.service';\n\n@Component({\n selector: 'lib-app-composition-settings',\n templateUrl: './composition-settings.component.html',\n styleUrls: ['./composition-settings.component.css'],\n standalone: false,\n})\nexport class CompositionSettingsComponent implements OnInit {\n composition: Composition;\n existingCompositionNames: string[] = [];\n\n public onClose: Subject<number> = new Subject();\n\n public dropzoneConfig: DropzoneConfigInterface;\n public uploadMessage: string;\n\n public existingFiles: string[] = [];\n public filteredExistingFiles: string[] = [];\n\n public uploading = false;\n\n constructor(\n public bsModalRef: BsModalRef,\n private timelineService: TimelineService,\n public configService: ConfigService,\n private translateService: TranslateService,\n private http: HttpClient,\n private warningDialogService: WarningDialogService,\n private toastrService: ToastrService,\n public projectService: ProjectService\n ) {}\n\n ngOnInit() {\n this.loadFiles();\n\n if (this.timelineService.externalCompositionsAvailable) {\n this.timelineService.getExternalCompositionNames().subscribe((compositionNames) => {\n this.existingCompositionNames = compositionNames;\n });\n }\n }\n\n getDropzoneUrl() {\n const projectId = this.projectService.project.id ? this.projectService.project.id : '';\n return 'file/upload?compositionUuid=' + this.composition.uuid + '&projectId=' + projectId;\n }\n\n ok() {\n this.onClose.next(1);\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.onClose.next(2);\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n\n private getNameFromFile(data: any): string {\n return data.name;\n }\n\n private loadFiles() {\n if (!this.configService.enableMediaLibrary) {\n return;\n }\n\n this.http\n .get('file/list')\n .pipe(\n map((response: object[]) => {\n this.existingFiles = [];\n\n for (const file of response) {\n // only load audio files\n if ((file as any).audioFile) {\n this.existingFiles.push(this.getNameFromFile((file as any).audioFile));\n }\n }\n\n this.filterExistingFiles();\n })\n )\n .subscribe();\n }\n\n public onUploadError(args: any) {\n const msg = 'designer.misc.toast-upload-error';\n const title = 'designer.misc.toast-upload-error-title';\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg] + args[1], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });\n // Hide the preview element\n args[0].previewElement.hidden = true;\n });\n }\n\n public onUploadSuccess(args: any) {\n this.loadFiles();\n\n // allow to guess the bpm of the newly uploaded file\n this.composition.tempoGuessed = false;\n\n // hide the preview element\n args[0].previewElement.hidden = true;\n\n // select this file\n this.composition.audioFileName = args[0].name;\n\n if (this.configService.enableMediaLibrary) {\n // the file has been uploaded to the media library\n this.composition.audioFileInLibrary = true;\n }\n }\n\n public onQueueComplete(args: any) {\n this.uploading = false;\n }\n\n public onAddedFile(args: any) {\n this.uploading = true;\n }\n\n // Filter the existing files\n filterExistingFiles(searchValue?: string) {\n if (!searchValue) {\n this.filteredExistingFiles = this.existingFiles;\n return;\n }\n\n this.filteredExistingFiles = [];\n\n for (const file of this.existingFiles) {\n if (file.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1) {\n this.filteredExistingFiles.push(file);\n }\n }\n }\n\n selectExistingFile(existingFile: string) {\n this.composition.audioFileName = existingFile;\n\n // the file has been selected from the media library\n this.composition.audioFileInLibrary = true;\n }\n\n deleteFile(existingFile: string) {\n this.warningDialogService\n .show('designer.timeline.warning-delete-file')\n .pipe(\n map((result) => {\n if (result) {\n this.http\n .post('file/delete?name=' + existingFile + '&type=AUDIO', undefined)\n .pipe(\n map((response: Response) => {\n this.loadFiles();\n })\n )\n .subscribe();\n }\n })\n )\n .subscribe();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ composition.name }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.composition-name' | translate }}</label>\n <div class=\"col-lg-8 d-flex\">\n <input\n type=\"text\"\n class=\"form-control\"\n [ngModel]=\"composition.name\"\n (ngModelChange)=\"composition.name = $event\"\n [typeahead]=\"existingCompositionNames\"\n />\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.composition-sync-type' | translate }}</label>\n <div class=\"col-lg-8 d-flex\">\n <select class=\"custom-select\" [ngModel]=\"composition.syncType\" (ngModelChange)=\"composition.syncType = $event\">\n <!-- TODO -->\n <!-- <option value=\"none\">{{ 'designer.timeline.composition-sync-type-none' | translate }}</option> -->\n <option value=\"audio\">{{ 'designer.timeline.composition-sync-type-audio' | translate }}</option>\n </select>\n </div>\n </div>\n\n @if (composition.syncType == 'audio') {\n <div class=\"row\">\n <div class=\"px-3 w-100\">\n <!-- Selected file -->\n <div class=\"card border-secondary mb-3\">\n <div class=\"card-body\">\n <!-- No file selected -->\n @if (!composition.audioFileName) {\n <div>\n {{ 'designer.timeline.composition-no-file-selected' | translate }}\n </div>\n }\n <!-- A file is selected -->\n @if (composition.audioFileName) {\n <div>\n {{ composition.audioFileName }}\n </div>\n }\n </div>\n </div>\n <!-- Choose file -->\n @if (configService.enableMediaLibrary) {\n <ul class=\"nav nav-tabs mb-3\" id=\"myTab\" role=\"tablist\">\n <li class=\"nav-item\">\n <a class=\"nav-link active\" id=\"upload-tab\" data-toggle=\"tab\" href=\"#upload\" role=\"tab\">\n <i class=\"fa fa-upload\" aria-hidden=\"true\"></i>\n {{ 'designer.timeline.composition-file-upload' | translate }}\n </a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" id=\"media-library-tab\" data-toggle=\"tab\" href=\"#media-library\" role=\"tab\">\n <i class=\"fa fa-folder-o\" aria-hidden=\"true\"></i>\n {{ 'designer.timeline.composition-file-library' | translate }}\n </a>\n </li>\n </ul>\n }\n <div class=\"tab-content\" id=\"myTabContent\">\n <!-- Upload -->\n <div class=\"tab-pane fade show active\" id=\"upload\" role=\"tabpanel\">\n <app-dropzone\n [url]=\"getDropzoneUrl()\"\n [acceptedFiles]=\"'audio/*'\"\n (error)=\"onUploadError($event)\"\n (success)=\"onUploadSuccess($event)\"\n (queuecomplete)=\"onQueueComplete($event)\"\n (addedfile)=\"onAddedFile($event)\"\n ></app-dropzone>\n </div>\n <!-- Media library -->\n <div class=\"tab-pane fade\" id=\"media-library\" role=\"tabpanel\">\n <input\n type=\"text\"\n class=\"form-control input-block mb-3\"\n id=\"searchFileList\"\n placeholder=\"{{ 'designer.misc.search' | translate }}\"\n (input)=\"filterExistingFiles($event.target.value)\"\n />\n <div class=\"card border-secondary\" style=\"height: 200px; overflow-y: scroll\">\n <div class=\"card-body p-0\">\n <div class=\"list-group list-group-flush\">\n @for (existingFile of filteredExistingFiles | sort : 'name'; track existingFile) {\n <a\n class=\"list-group-item\"\n [class.active]=\"composition.audioFileName == existingFile\"\n href=\"#\"\n (click)=\"selectExistingFile(existingFile); (false)\"\n >\n <div class=\"row\">\n <div class=\"col-auto my-auto flex-grow text-break-word\">\n {{ existingFile }}\n </div>\n <div class=\"col-auto my-auto pl-0 text-danger float-right\" (click)=\"deleteFile(existingFile); (false)\">\n <i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </div>\n </div>\n </a>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button [disabled]=\"uploading\" type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { TimelineService } from '../../services/timeline.service';\n\n@Component({\n selector: 'lib-app-timeline-grid',\n templateUrl: './timeline-grid.component.html',\n styleUrls: ['./timeline-grid.component.css'],\n standalone: false,\n})\nexport class TimelineGridComponent implements OnInit {\n public gridType: string;\n public beatsPerMinute: number;\n public timeSignatureUpper: number;\n public timeSignatureLower: number;\n public snapToGrid: boolean;\n public gridOffsetMillis: number;\n public gridResolution: number;\n\n constructor(public bsModalRef: BsModalRef, public timelineService: TimelineService) {\n this.gridType = timelineService.selectedComposition.gridType;\n this.beatsPerMinute = timelineService.selectedComposition.beatsPerMinute;\n this.timeSignatureUpper = timelineService.selectedComposition.timeSignatureUpper;\n this.timeSignatureLower = timelineService.selectedComposition.timeSignatureLower;\n this.snapToGrid = timelineService.selectedComposition.snapToGrid;\n this.gridOffsetMillis = timelineService.selectedComposition.gridOffsetMillis;\n this.gridResolution = timelineService.selectedComposition.gridResolution;\n }\n\n ngOnInit() {}\n\n ok() {\n this.timelineService.selectedComposition.gridType = this.gridType;\n this.timelineService.selectedComposition.beatsPerMinute = this.beatsPerMinute;\n this.timelineService.selectedComposition.timeSignatureUpper = this.timeSignatureUpper;\n this.timelineService.selectedComposition.timeSignatureLower = this.timeSignatureLower;\n this.timelineService.selectedComposition.snapToGrid = this.snapToGrid;\n this.timelineService.selectedComposition.gridOffsetMillis = this.gridOffsetMillis;\n this.timelineService.selectedComposition.gridResolution = this.gridResolution;\n\n this.timelineService.updateGrid();\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.timeline.grid' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.grid-type' | translate }}</label>\n <div class=\"col-lg-8\">\n <select class=\"custom-select\" [ngModel]=\"gridType\" (ngModelChange)=\"gridType = $event\">\n <option value=\"time\">{{ 'designer.timeline.grid-type-time-based' | translate }}</option>\n <option value=\"musical\">{{ 'designer.timeline.grid-type-musical' | translate }}</option>\n </select>\n </div>\n </div>\n\n @if (gridType == 'musical') {\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.beats-per-minute' | translate }}</label>\n <div class=\"col-lg-8\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"beatsPerMinute\" (ngModelChange)=\"beatsPerMinute = $event\" />\n </div>\n </div>\n } @if (gridType == 'musical') {\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.time-signature' | translate }}</label>\n <div class=\"col-lg-8\">\n <input\n type=\"text\"\n class=\"form-control\"\n [ngModel]=\"timeSignatureUpper\"\n (ngModelChange)=\"timeSignatureUpper = $event\"\n style=\"float: left; width: 40px\"\n />\n <div class=\"d-flex px-2 h-100\" style=\"float: left\">\n <div class=\"m-auto\">/</div>\n </div>\n <input\n type=\"text\"\n class=\"form-control\"\n [ngModel]=\"timeSignatureLower\"\n (ngModelChange)=\"timeSignatureLower = $event\"\n style=\"width: 40px\"\n />\n </div>\n </div>\n } @if (gridType == 'musical') {\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.grid-resolution' | translate }}</label>\n <div class=\"col-lg-8\">\n <select class=\"custom-select\" [ngModel]=\"gridResolution\" (ngModelChange)=\"gridResolution = $event\">\n <option value=\"1\">1/1</option>\n <option value=\"2\">1/2</option>\n <option value=\"4\">1/4</option>\n <option value=\"8\">1/8</option>\n <option value=\"16\">1/16</option>\n <option value=\"32\">1/32</option>\n <option value=\"64\">1/64</option>\n </select>\n </div>\n </div>\n } @if (gridType == 'musical') {\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.timeline.grid-offset' | translate }}</label>\n <div class=\"col-lg-8\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"gridOffsetMillis\" (ngModelChange)=\"gridOffsetMillis = $event\" />\n </div>\n </div>\n }\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\"></label>\n <div class=\"col-lg-8\">\n <div class=\"form-check\">\n <input type=\"checkbox\" [ngModel]=\"snapToGrid\" (ngModelChange)=\"snapToGrid = $event\" class=\"form-check-input\" id=\"snapToGrid\" />\n\n <label class=\"form-check-label\" for=\"snapToGrid\">\n {{ 'designer.timeline.snap-to-grid' | translate }}\n </label>\n </div>\n </div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { HttpClient } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { map } from 'rxjs/operators';\nimport { Composition } from '../models/composition';\nimport { ConfigService } from '../services/config.service';\nimport { HotkeyTargetExcludeService } from '../services/hotkey-target-exclude.service';\nimport { IntroService } from '../services/intro.service';\nimport { ProjectService } from '../services/project.service';\nimport { TimelineService } from '../services/timeline.service';\nimport { UuidService } from '../services/uuid.service';\nimport { WarningDialogService } from '../services/warning-dialog.service';\nimport { CompositionSettingsComponent } from './composition-settings/composition-settings.component';\nimport { TimelineGridComponent } from './timeline-grid/timeline-grid.component';\nimport { LivePreviewService } from '../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-timeline',\n templateUrl: './timeline.component.html',\n styleUrls: ['./timeline.component.css'],\n standalone: false,\n})\nexport class TimelineComponent implements OnInit, AfterViewInit {\n @ViewChild('waveWrapper')\n waveWrapper: ElementRef;\n\n @ViewChild('waveElement')\n waveElement: ElementRef;\n\n private lastHeight: number;\n private lastWidth: number;\n\n constructor(\n public timelineService: TimelineService,\n private changeDetectorRef: ChangeDetectorRef,\n private modalService: BsModalService,\n private uuidService: UuidService,\n public projectService: ProjectService,\n private hotkeyTargetExcludeService: HotkeyTargetExcludeService,\n private warningDialogService: WarningDialogService,\n private http: HttpClient,\n private configService: ConfigService,\n public introService: IntroService,\n private livePreviewService: LivePreviewService\n ) {\n this.timelineService.waveSurferReady.subscribe(() => {\n this.onResize();\n });\n this.timelineService.detectChanges.subscribe(() => {\n this.changeDetectorRef.detectChanges();\n });\n }\n\n ngOnInit() {}\n\n ngAfterViewInit() {}\n\n @HostListener('window:resize')\n public onResize() {\n if (!this.waveElement) {\n return;\n }\n\n // Hide wavesurfer to calculate the height, because it will grow infinitely\n // otherwise\n this.waveElement.nativeElement.style.display = 'none';\n const height = this.waveWrapper.nativeElement.clientHeight;\n this.waveElement.nativeElement.style.display = 'block';\n\n const width = this.waveWrapper.nativeElement.clientWidth;\n\n if (!this.lastHeight || this.lastHeight !== height || !this.lastWidth || this.lastWidth !== width) {\n // Set height and redraw\n if (this.timelineService.waveSurfer) {\n this.timelineService.waveSurfer.setHeight(height);\n }\n\n this.lastHeight = height;\n this.lastWidth = width;\n }\n }\n\n play() {\n this.timelineService.playState = 'playing';\n this.livePreviewService.previewLive(\n this.timelineService.selectedComposition.name,\n Math.round(this.timelineService.waveSurfer.getCurrentTime() * 1000)\n );\n this.timelineService.waveSurfer.play();\n }\n\n pause() {\n this.timelineService.playState = 'paused';\n this.livePreviewService.stopPreviewPlay();\n this.timelineService.waveSurfer.pause();\n }\n\n rewind() {\n this.timelineService.playState = 'paused';\n this.pause();\n this.timelineService.waveSurfer.seekTo(0);\n }\n\n addRegion(waveSurferRegion?: any) {\n this.timelineService.addRegion(waveSurferRegion);\n }\n\n removeRegion() {\n this.timelineService.removeRegion();\n }\n\n openGridSettings() {\n const bsModalRef = this.modalService.show(TimelineGridComponent, { keyboard: true, ignoreBackdropClick: false, class: '' });\n }\n\n private afterDeleteFile() {\n this.timelineService.deleteSelectedComposition();\n }\n\n removeComposition() {\n this.warningDialogService\n .show('designer.timeline.warning-delete-composition')\n .pipe(\n map((result) => {\n if (result) {\n if (this.configService.enableMediaLibrary) {\n // don't delete the file from the library\n this.afterDeleteFile();\n } else {\n // the composition uuid and extension is used as the file name\n this.http\n .post('file/delete?compositionUuid=' + this.timelineService.selectedComposition.uuid, undefined)\n .pipe(\n map((response: Response) => {\n this.afterDeleteFile();\n })\n )\n .subscribe();\n }\n }\n })\n )\n .subscribe();\n }\n\n private openCompositionSettings(compositionIndex?: number, newComposition?: Composition) {\n const editComposition: Composition =\n newComposition || JSON.parse(JSON.stringify(this.projectService.project.compositions[compositionIndex]));\n\n const bsModalRef = this.modalService.show(CompositionSettingsComponent, {\n keyboard: false,\n ignoreBackdropClick: true,\n class: '',\n initialState: { composition: editComposition },\n });\n\n (bsModalRef.content as CompositionSettingsComponent).onClose.subscribe((result) => {\n if (result === 1) {\n // OK has been pressed -> save\n if (newComposition) {\n this.projectService.project.compositions.push(editComposition);\n this.timelineService.selectedCompositionIndex = this.projectService.project.compositions.length - 1;\n\n // create the composition, if externally necessary\n if (this.timelineService.externalCompositionsAvailable) {\n // TODO check, if this composition already exists externally and create it, if not\n // maybe not needed and even confusing?\n }\n } else {\n this.projectService.project.compositions[compositionIndex] = editComposition;\n }\n\n this.selectComposition(this.timelineService.selectedCompositionIndex);\n }\n });\n }\n\n compositionSettings() {\n this.openCompositionSettings(this.timelineService.selectedCompositionIndex);\n }\n\n addComposition() {\n // create a new composition\n const composition = new Composition();\n composition.uuid = this.uuidService.getUuid();\n composition.name = 'New Composition';\n\n this.openCompositionSettings(undefined, composition);\n }\n\n selectComposition(index: number) {\n this.timelineService.selectCompositionIndex(index);\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeyboardEvent(event: KeyboardEvent) {\n if (this.hotkeyTargetExcludeService.exclude(event)) {\n return;\n }\n\n if (!this.timelineService.selectedComposition) {\n return;\n }\n\n if (event.key === ' ') {\n if (this.timelineService.playState === 'paused') {\n this.play();\n } else {\n this.pause();\n }\n\n // prevent checkboxes being toggled, if in focus e.g.\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n setRegionStartMillis(value: any) {\n if (!this.timelineService.selectedPlaybackRegion) {\n return;\n }\n\n if (isNaN(value) || value < 0) {\n return;\n }\n\n this.timelineService.selectedPlaybackRegion.startMillis = +value;\n this.timelineService.updateSelectedRegion();\n }\n\n setRegionEndMillis(value: any) {\n if (!this.timelineService.selectedPlaybackRegion) {\n return;\n }\n\n if (isNaN(value) || value < 0) {\n return;\n }\n\n this.timelineService.selectedPlaybackRegion.endMillis = +value;\n this.timelineService.updateSelectedRegion();\n }\n}\n","<div class=\"card border-secondary h-100\" [class.card-intro-active]=\"introService.showStep('timeline')\">\n <div class=\"card-body h-100 d-flex\" style=\"flex-flow: column; overflow: unset\">\n <div class=\"d-flex pb-3\">\n <div class=\"btn-group mr-3 my-auto\" role=\"group\" style=\"float: left\">\n <a href=\"#\" class=\"btn btn-primary m-0 p-1 mr-3\" (click)=\"addComposition(); (false)\"\n ><i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i\n ></a>\n\n @if (projectService.project.compositions.length > 0) {\n <select\n class=\"mr-3\"\n [ngModel]=\"timelineService.selectedCompositionIndex\"\n (ngModelChange)=\"selectComposition($event)\"\n style=\"width: 150px; height: 30px\"\n >\n @for (composition of projectService.project.compositions; track composition; let i = $index) {\n <option [value]=\"i\">\n {{ composition.name }}\n </option>\n }\n </select>\n } @if (timelineService.selectedComposition) {\n <div class=\"d-flex\">\n <a href=\"#\" class=\"btn btn-primary m-0 p-1\" (click)=\"rewind(); (false)\"\n ><i class=\"fa fa-step-backward fa-fw\" aria-hidden=\"true\"></i\n ></a>\n @if (timelineService.playState == 'paused') {\n <a href=\"#\" class=\"btn btn-primary m-0 p-1\" (click)=\"play(); (false)\"><i class=\"fa fa-play fa-fw\" aria-hidden=\"true\"></i></a>\n } @if (timelineService.playState == 'playing') {\n <a href=\"#\" class=\"btn btn-primary m-0 p-1\" (click)=\"pause(); (false)\"><i class=\"fa fa-pause fa-fw\" aria-hidden=\"true\"></i></a>\n }\n </div>\n }\n </div>\n\n @if (timelineService.selectedComposition) {\n <div class=\"d-flex w-100\">\n @if (timelineService.duration) {\n <div class=\"my-auto mr-3\">\n <span style=\"width: 78px; text-align: left; display: inline-block; margin-left: 5px\">{{ timelineService.currentTime }}</span>\n <span style=\"display: inline-block\"></span>- {{ timelineService.duration }}\n </div>\n }\n <div class=\"my-auto mr-3 ml-auto\" style=\"float: left\">\n <i (click)=\"timelineService.applyZoom(timelineService.zoom - 20)\" class=\"fa fa-search-minus mr-3\" aria-hidden=\"true\"></i>\n <mv-slider\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [value]=\"timelineService.zoom\"\n [min]=\"0\"\n [max]=\"200\"\n [step]=\"20\"\n (change)=\"timelineService.applyZoom($event.newValue)\"\n ></mv-slider>\n <i (click)=\"timelineService.applyZoom(timelineService.zoom + 20)\" class=\"fa fa-search-plus ml-3\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"my-auto mr-3\">\n <input\n type=\"text\"\n [ngModel]=\"timelineService.selectedPlaybackRegion?.startMillis\"\n (ngModelChange)=\"setRegionStartMillis($event)\"\n />\n - <input type=\"text\" [ngModel]=\"timelineService.selectedPlaybackRegion?.endMillis\" (ngModelChange)=\"setRegionEndMillis($event)\" />\n </div>\n <a\n href=\"#\"\n class=\"btn btn-secondary m-0 py-1 mr-3\"\n (click)=\"openGridSettings(); (false)\"\n popover=\"{{ 'designer.timeline.grid' | translate }}\"\n container=\"body\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n ><i class=\"fa fa-th\" aria-hidden=\"true\"></i\n ></a>\n <a\n href=\"#\"\n class=\"btn btn-secondary m-0 py-1 mr-3\"\n (click)=\"removeRegion(); (false)\"\n popover=\"{{ 'designer.timeline.remove-region' | translate }}\"\n container=\"body\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n ><i class=\"fa fa-minus-circle\" aria-hidden=\"true\"></i\n ></a>\n <a\n href=\"#\"\n class=\"btn btn-secondary m-0 py-1 mr-3\"\n (click)=\"addRegion(); (false)\"\n popover=\"{{ 'designer.timeline.add-region' | translate }}\"\n container=\"body\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n ><i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i\n ></a>\n <a\n href=\"#\"\n class=\"btn btn-secondary m-0 py-1 mr-3\"\n (click)=\"removeComposition(); (false)\"\n popover=\"{{ 'designer.timeline.remove-composition' | translate }}\"\n container=\"body\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n ><i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i\n ></a>\n <a\n href=\"#\"\n class=\"btn btn-secondary m-0 py-1\"\n (click)=\"compositionSettings(); (false)\"\n popover=\"{{ 'designer.timeline.composition-settings' | translate }}\"\n container=\"body\"\n placement=\"left\"\n triggers=\"mouseenter:mouseleave\"\n ><i class=\"fa fa-cog\" aria-hidden=\"true\"></i\n ></a>\n </div>\n }\n </div>\n\n @if (timelineService.loadingAudioFile) {\n <div class=\"w-100 d-flex\">\n <i class=\"fa fa-circle-o-notch fa-spin m-auto\" style=\"margin-top: -30px\"></i>\n </div>\n } @if (timelineService.selectedComposition) {\n <div>\n <div id=\"waveform-timeline\"></div>\n </div>\n } @if (timelineService.selectedComposition) {\n <div #waveWrapper class=\"h-100\" style=\"flex: 2; position: relative\">\n <div #waveElement id=\"waveform\"></div>\n </div>\n } @if (projectService.project.compositions.length == 0) {\n <div class=\"w-100 d-flex\">\n <a href=\"#\" class=\"m-auto\" (click)=\"addComposition(); (false)\"\n ><i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i> {{ 'designer.timeline.no-compositions' | translate }}</a\n >\n </div>\n }\n </div>\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Scene } from '../../models/scene';\n\n@Component({\n selector: 'lib-scene-settings',\n templateUrl: './scene-settings.component.html',\n styleUrls: ['./scene-settings.component.css'],\n standalone: false,\n})\nexport class SceneSettingsComponent implements OnInit {\n scene: Scene;\n\n name: string;\n fadeInMillis: number;\n fadeOutMillis: number;\n fadeInPre: boolean;\n fadeOutPost: boolean;\n\n constructor(public bsModalRef: BsModalRef) {}\n\n ngOnInit() {\n this.name = this.scene.name;\n this.fadeInMillis = this.scene.fadeInMillis;\n this.fadeOutMillis = this.scene.fadeOutMillis;\n this.fadeInPre = this.scene.fadeInPre;\n this.fadeOutPost = this.scene.fadeOutPost;\n }\n\n ok() {\n this.scene.name = this.name;\n\n if (!isNaN(this.fadeInMillis) && this.fadeInMillis >= 0) {\n this.scene.fadeInMillis = +this.fadeInMillis;\n }\n if (!isNaN(this.fadeOutMillis) && this.fadeOutMillis >= 0) {\n this.scene.fadeOutMillis = +this.fadeOutMillis;\n }\n\n this.scene.fadeInPre = this.fadeInPre;\n this.scene.fadeOutPost = this.fadeOutPost;\n\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ name }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.preset.settings-name' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"name\" (ngModelChange)=\"name = $event\" />\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.scene.settings-fade-in' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"fadeInMillis\" (ngModelChange)=\"fadeInMillis = $event\" />\n </div>\n <div class=\"col-lg-1 d-flex p-0\">\n <div class=\"my-auto\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\"></label>\n <div class=\"col-lg-8 d-flex\">\n <div class=\"form-check my-auto\">\n <input type=\"checkbox\" [ngModel]=\"fadeInPre\" (ngModelChange)=\"fadeInPre = $event\" class=\"form-check-input\" id=\"fadeInPre\" />\n\n <label class=\"form-check-label\" for=\"fadeInPre\">\n {{ 'designer.scene.settings-fade-in-pre' | translate }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.scene.settings-fade-out' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"fadeOutMillis\" (ngModelChange)=\"fadeOutMillis = $event\" />\n </div>\n <div class=\"col-lg-1 d-flex p-0\">\n <div class=\"my-auto\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\"></label>\n <div class=\"col-lg-8 d-flex\">\n <div class=\"form-check my-auto\">\n <input type=\"checkbox\" [ngModel]=\"fadeOutPost\" (ngModelChange)=\"fadeOutPost = $event\" class=\"form-check-input\" id=\"fadeOutPost\" />\n\n <label class=\"form-check-label\" for=\"fadeOutPost\">\n {{ 'designer.scene.settings-fade-out-post' | translate }}\n </label>\n </div>\n </div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Scene } from '../models/scene';\nimport { IntroService } from '../services/intro.service';\nimport { PresetService } from '../services/preset.service';\nimport { ProjectService } from '../services/project.service';\nimport { SceneService } from '../services/scene.service';\nimport { SceneSettingsComponent } from './scene-settings/scene-settings.component';\n\n@Component({\n selector: 'lib-app-scene',\n templateUrl: './scene.component.html',\n styleUrls: ['./scene.component.css'],\n standalone: false,\n})\nexport class SceneComponent implements OnInit {\n constructor(\n public sceneService: SceneService,\n public presetService: PresetService,\n public projectService: ProjectService,\n private modalService: BsModalService,\n public introService: IntroService\n ) {}\n\n ngOnInit() {}\n\n selectScene(event: any, index: number) {\n this.sceneService.selectScene(index);\n }\n\n removeScene() {\n if (this.sceneService.selectedScenes.length === 0) {\n return;\n }\n\n this.sceneService.removeScene(this.sceneService.selectedScenes[0]);\n }\n\n openSettings(scene: Scene) {\n const bsModalRef = this.modalService.show(SceneSettingsComponent, {\n keyboard: true,\n ignoreBackdropClick: false,\n class: '',\n initialState: { scene },\n });\n }\n}\n","<div class=\"card border-secondary panel h-100\" [class.card-intro-active]=\"introService.showStep('scenes')\">\n <div class=\"card-header d-flex\">\n <div>\n {{ 'designer.scene.title' | translate }}\n </div>\n <div class=\"ml-auto\">\n <a\n href=\"#\"\n class=\"d-none d-md-inline-block btn btn-secondary m-0 p-0\"\n [class.text-primary]=\"sceneService.multipleSelection == true\"\n (click)=\"sceneService.multipleSelection = !sceneService.multipleSelection; (false)\"\n ><i class=\"fa fa-object-group fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"d-none d-md-inline-block btn btn-secondary m-0 p-0\" (click)=\"removeScene(); (false)\"\n ><i class=\"fa fa-minus-circle fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"d-none d-md-inline-block btn btn-secondary m-0 p-0\" (click)=\"sceneService.addScene(); (false)\"\n ><i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i\n ></a>\n </div>\n </div>\n <div class=\"card-body border-secondary p-0\">\n <!-- List of scenes -->\n <div class=\"list-group\" [sortablejs]=\"projectService.project.scenes\">\n @for (scene of projectService.project.scenes; track scene; let i = $index) {\n <div\n class=\"list-group-item\"\n [class.active-light]=\"projectService.project.previewPreset && sceneService.sceneIsSelected(scene)\"\n [class.active]=\"!projectService.project.previewPreset && sceneService.sceneIsSelected(scene)\"\n >\n <div class=\"row d-flex\" (click)=\"selectScene($event, i)\" style=\"cursor: pointer\">\n <div class=\"d-none d-md-block col-auto list-sort-handle my-auto\" style=\"cursor: move; cursor: -webkit-grabbing\">\n <i class=\"fa fa-bars\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"my-auto\">\n {{ scene.name }}\n </div>\n <div class=\"my-auto ml-auto mr-2 d-flex\">\n <svg class=\"my-auto\" height=\"20\" width=\"20\">\n <circle cx=\"10\" cy=\"10\" r=\"9\" stroke=\"white\" stroke-width=\"1\" [attr.fill]=\"scene.color\" />\n </svg>\n </div>\n <div class=\"d-none d-md-flex my-auto mr-2\">\n <button type=\"button\" class=\"btn btn-secondary btn-sm py-0 px-1\" (click)=\"openSettings(scene); (false)\">...</button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { Fixture } from '../models/fixture';\nimport { FixturePoolService } from '../services/fixture-pool.service';\nimport { FixtureService } from '../services/fixture.service';\nimport { IntroService } from '../services/intro.service';\nimport { PresetService } from '../services/preset.service';\nimport { ProjectService } from '../services/project.service';\nimport { PresetFixture } from '../models/preset-fixture';\nimport type { Options } from 'sortablejs';\nimport { LivePreviewService } from '../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-fixture',\n templateUrl: './fixture.component.html',\n styleUrls: ['./fixture.component.css'],\n standalone: false,\n})\nexport class FixtureComponent implements OnInit {\n fixtureSortableOptions: Options = {\n onUpdate: () => this.fixtureListReordered(),\n };\n\n constructor(\n public projectService: ProjectService,\n public presetService: PresetService,\n private fixturePoolService: FixturePoolService,\n public fixtureService: FixtureService,\n public introService: IntroService,\n private livePreviewService: LivePreviewService\n ) {}\n\n ngOnInit() {}\n\n fixtureName(presetFixture: PresetFixture) {\n let name: string;\n name = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid).name;\n if (presetFixture.pixelKey) {\n name += ' - ' + presetFixture.pixelKey;\n }\n return name;\n }\n\n fixtureIsSelected(presetFixture: PresetFixture): boolean {\n const fixture = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid);\n if (this.fixtureService.settingsSelection) {\n return this.fixtureService.settingsFixtureIsSelected(fixture);\n } else {\n return this.presetService.fixtureIsSelected(fixture, presetFixture.pixelKey);\n }\n }\n\n selectFixture(event: any, presetFixture: PresetFixture) {\n const fixture = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid);\n if (this.fixtureService.settingsSelection) {\n // select fixtures for the settings\n this.fixtureService.switchSettingsFixtureSelection(fixture);\n this.presetService.fixtureSelectionSettingsChanged.next();\n } else {\n // select fixtures for the current preset\n this.presetService.switchFixtureSelection(fixture, presetFixture.pixelKey);\n this.presetService.fixtureSelectionChanged.next();\n this.livePreviewService.previewLive();\n }\n }\n\n selectAll() {\n this.presetService.selectAllFixtures();\n this.presetService.fixtureSelectionChanged.next();\n }\n\n selectNone() {\n this.presetService.selectNoFixtures();\n this.presetService.fixtureSelectionChanged.next();\n }\n\n fixtureListReordered() {\n this.livePreviewService.previewLive();\n }\n\n openFixturePool() {\n this.fixturePoolService.open();\n }\n}\n","<div class=\"card border-secondary h-100 panel\" [class.card-intro-active]=\"introService.showStep('fixtures')\">\n <div class=\"card-header d-flex\">\n <div>Fixtures</div>\n <div class=\"ml-auto\">\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"selectNone(); (false)\"\n ><i class=\"fa fa-square-o fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"selectAll(); (false)\"\n ><i class=\"fa fa-check-square-o fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"openFixturePool(); (false)\"\n ><i class=\"fa fa-cog fa-fw\" aria-hidden=\"true\"></i\n ></a>\n </div>\n </div>\n\n <div class=\"card-body h-100 p-0\">\n <!-- List of fixtures -->\n @if (presetService.selectedPreset) {\n <div class=\"list-group\" [sortablejs]=\"projectService.project.presetFixtures\" [sortablejsOptions]=\"fixtureSortableOptions\">\n @for (presetFixture of projectService.project.presetFixtures; track presetFixture) {\n <div class=\"list-group-item\" [class.inactive-list-item]=\"!fixtureIsSelected(presetFixture)\">\n <div class=\"row d-flex\" (click)=\"selectFixture($event, presetFixture)\" style=\"cursor: pointer\">\n <div class=\"col-auto list-sort-handle my-auto\" style=\"cursor: move; cursor: -webkit-grabbing\">\n <i class=\"fa fa-bars\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"form-check\">\n <input type=\"checkbox\" class=\"form-check-input\" id=\"active\" [ngModel]=\"fixtureIsSelected(presetFixture)\" />\n </div>\n <div>\n <span\n class=\"icon-{{\n fixtureService.getFixtureIconClass(\n fixtureService.getProfileByUuid(fixtureService.getFixtureByUuid(presetFixture.fixtureUuid).profileUuid)\n )\n }} mr-1\"\n ></span>\n {{ fixtureName(presetFixture) }}\n </div>\n </div>\n </div>\n }\n </div>\n } @if (projectService.project.presetFixtures.length == 0) {\n <div class=\"w-100 h-100 d-flex p-3 text-center\">\n <a href=\"#\" class=\"m-auto\" (click)=\"openFixturePool(); (false)\"\n ><i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i> {{ 'designer.fixture.no-fixtures' | translate }}</a\n >\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { FixtureCapabilityColor, FixtureCapabilityType } from '../../../models/fixture-capability';\nimport { FixtureCapabilityValue } from '../../../models/fixture-capability-value';\nimport { FixtureService } from '../../../services/fixture.service';\nimport { PresetService } from '../../../services/preset.service';\nimport { LivePreviewService } from '../../../services/live-preview.service';\n\ndeclare var iro: any;\n\n@Component({\n selector: 'lib-app-fixture-capability-color',\n templateUrl: './fixture-capability-color.component.html',\n styleUrls: ['./fixture-capability-color.component.css'],\n standalone: false,\n})\nexport class FixtureCapabilityColorComponent implements OnInit, OnDestroy {\n color = '#ffffff';\n colorPicker: any;\n active = false;\n private colorPickerMounted = false;\n\n // avoid internal updating events\n private updatingColor = false;\n\n private updateSubscription: Subscription;\n\n constructor(\n private presetService: PresetService,\n private fixtureService: FixtureService,\n private changeDetectorRef: ChangeDetectorRef,\n private livePreviewService: LivePreviewService\n ) {\n this.updateSubscription = this.presetService.previewSelectionChanged.subscribe(() => {\n this.update();\n this.changeDetectorRef.detectChanges();\n });\n this.update();\n }\n\n private update() {\n let red: number;\n let green: number;\n let blue: number;\n let capabilityValue: FixtureCapabilityValue;\n capabilityValue = this.presetService.getCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Red\n );\n if (capabilityValue) {\n red = 255 * capabilityValue.valuePercentage;\n }\n capabilityValue = this.presetService.getCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Green\n );\n if (capabilityValue) {\n green = 255 * capabilityValue.valuePercentage;\n }\n capabilityValue = this.presetService.getCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Blue\n );\n if (capabilityValue) {\n blue = 255 * capabilityValue.valuePercentage;\n }\n if (red !== undefined && green !== undefined && blue !== undefined) {\n this.active = true;\n } else {\n this.active = false;\n red = 255;\n green = 255;\n blue = 255;\n }\n this.color = this.fixtureService.rgbToHex(red, green, blue);\n this.setPickerColor(red, green, blue);\n }\n\n private setPickerColor(red: number, green: number, blue: number) {\n this.updatingColor = true;\n if (this.colorPicker) {\n this.colorPicker.color.rgb = { r: red, g: green, b: blue };\n }\n this.updatingColor = false;\n }\n\n ngOnDestroy() {\n this.updateSubscription.unsubscribe();\n }\n\n ngOnInit() {\n this.colorPicker = new iro.ColorPicker('#color-picker-container', {\n width: 180,\n color: this.color,\n borderWidth: 1,\n borderColor: '#ffffff',\n sliderMargin: 20,\n });\n\n this.colorPicker.on('color:change', this.changeColor.bind(this));\n\n // mounted may be called, before this callback has been added. use input:start therefore\n this.colorPicker.on('input:start', this.mount.bind(this));\n }\n\n mount() {\n this.colorPickerMounted = true;\n }\n\n private updateFixtureColor(color: any) {\n if (this.presetService.selectedPreset) {\n if (color) {\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n color.rgb.r / 255,\n undefined,\n FixtureCapabilityColor.Red\n );\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n color.rgb.g / 255,\n undefined,\n FixtureCapabilityColor.Green\n );\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n color.rgb.b / 255,\n undefined,\n FixtureCapabilityColor.Blue\n );\n } else {\n this.presetService.deleteCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Red\n );\n this.presetService.deleteCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Green\n );\n this.presetService.deleteCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Blue\n );\n }\n this.changeDetectorRef.detectChanges();\n this.presetService.fixtureColorChanged.next();\n this.livePreviewService.previewLive();\n }\n }\n\n changeActive(active: boolean) {\n this.active = active;\n\n if (active) {\n this.updateFixtureColor(this.colorPicker.color);\n } else {\n this.updateFixtureColor(undefined);\n this.setPickerColor(255, 255, 255);\n this.color = '#ffffff';\n }\n this.livePreviewService.previewLive();\n }\n\n changeColor(color: any) {\n if (!this.colorPickerMounted || this.updatingColor) {\n return;\n }\n\n this.active = true;\n this.color = color.hexString;\n this.updateFixtureColor(color);\n }\n}\n","<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"!active\">\n <div class=\"card-header\">\n <div class=\"my-auto\" style=\"float: left\">\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityColorActive\"\n [ngModel]=\"active\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityColorActive\">{{ 'designer.fixture.capability-color' | translate }}</label>\n </div>\n </div>\n <div class=\"pull-right\">\n <input type=\"text\" [(ngModel)]=\"color\" style=\"width: 58px; text-align: center; font-size: 12px; font-family: monospace\" />\n </div>\n </div>\n\n <div class=\"card-body h-100\">\n <div id=\"color-picker-container\"></div>\n </div>\n</div>\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { FixtureCapabilityType } from '../../../models/fixture-capability';\nimport { PresetService } from '../../../services/preset.service';\nimport { LivePreviewService } from '../../../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-fixture-capability-dimmer',\n templateUrl: './fixture-capability-dimmer.component.html',\n styleUrls: ['./fixture-capability-dimmer.component.css'],\n standalone: false,\n})\nexport class FixtureCapabilityDimmerComponent implements OnInit {\n constructor(\n private presetService: PresetService,\n private changeDetectorRef: ChangeDetectorRef,\n private livePreviewService: LivePreviewService\n ) {}\n\n ngOnInit() {}\n\n getValue(): number {\n const capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Intensity);\n if (capabilityValue) {\n return capabilityValue.valuePercentage;\n }\n return undefined;\n }\n\n getValueText(): number {\n const value = this.getValue();\n if (value >= 0) {\n return Math.round(value * 100 * 100) / 100;\n }\n return undefined;\n }\n\n setValue(value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (value < 0 || value > 1) {\n return;\n }\n\n this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Intensity, value);\n this.changeDetectorRef.detectChanges();\n this.livePreviewService.previewLive();\n }\n\n changeActive(active: boolean) {\n if (active) {\n this.setValue(1);\n } else {\n this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Intensity);\n this.changeDetectorRef.detectChanges();\n }\n this.livePreviewService.previewLive();\n }\n}\n","<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"getValue() == undefined\" style=\"min-height: 200px\">\n <div class=\"card-header\">\n <div class=\"my-auto\">\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityDimmerActive\"\n [ngModel]=\"getValue() != undefined\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityDimmerActive\">\n <i class=\"icon-dimmer\"></i>\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"card-body h-100 d-flex\" style=\"flex-direction: column\">\n <div class=\"mb-4 w-100 d-flex\">\n <input\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"getValueText() >= 0 ? getValueText() : 0\"\n (ngModelChange)=\"setValue($event / 100)\"\n style=\"width: 42px; height: 20px; text-align: center; font-size: 12px; font-family: monospace\"\n />\n </div>\n\n <div class=\"h-100 w-100 d-flex\">\n <mv-slider\n class=\"mx-auto\"\n [value]=\"getValue() >= 0 ? getValue() : 0\"\n (change)=\"setValue($event.newValue)\"\n [orientation]=\"'vertical'\"\n [reversed]=\"true\"\n style=\"height: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"0\"\n [max]=\"1\"\n [step]=\"0.001\"\n ></mv-slider>\n </div>\n </div>\n</div>\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { FixtureCapabilityType } from '../../../models/fixture-capability';\nimport { PresetService } from '../../../services/preset.service';\nimport { LivePreviewService } from '../../../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-fixture-capability-pan-tilt',\n templateUrl: './fixture-capability-pan-tilt.component.html',\n styleUrls: ['./fixture-capability-pan-tilt.component.css'],\n standalone: false,\n})\nexport class FixtureCapabilityPanTiltComponent implements OnInit {\n constructor(\n private presetService: PresetService,\n private changeDetectorRef: ChangeDetectorRef,\n private livePreviewService: LivePreviewService\n ) {}\n\n ngOnInit() {}\n\n getValuePan(): number {\n const capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Pan);\n if (capabilityValue) {\n return capabilityValue.valuePercentage;\n }\n return undefined;\n }\n\n getValueTextPan(): number {\n const value = this.getValuePan();\n if (value >= 0) {\n return Math.round(value * 100 * 100) / 100;\n }\n return undefined;\n }\n\n setValuePan(value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (value < 0 || value > 1) {\n return;\n }\n\n this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Pan, value);\n this.changeDetectorRef.detectChanges();\n this.livePreviewService.previewLive();\n }\n\n getValueTilt(): number {\n const capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Tilt);\n if (capabilityValue) {\n return capabilityValue.valuePercentage;\n }\n return undefined;\n }\n\n getValueTextTilt(): number {\n const value = this.getValueTilt();\n if (value >= 0) {\n return Math.round(value * 100 * 100) / 100;\n }\n return undefined;\n }\n\n setValueTilt(value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (value < 0 || value > 1) {\n return;\n }\n\n this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Tilt, value);\n this.changeDetectorRef.detectChanges();\n this.livePreviewService.previewLive();\n }\n\n changeActive(active: boolean) {\n if (active) {\n this.setValuePan(0.5);\n this.setValueTilt(0.5);\n } else {\n this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Pan);\n this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Tilt);\n this.changeDetectorRef.detectChanges();\n }\n this.livePreviewService.previewLive();\n }\n}\n","<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"getValuePan() == undefined && getValueTilt() == undefined\">\n <div class=\"card-header\">\n <div class=\"my-auto\">\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityColorWheelActive\"\n [ngModel]=\"getValuePan() != undefined || getValueTilt() != undefined\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityColorWheelActive\">{{ 'designer.fixture.capability-pan-tilt' | translate }}</label>\n </div>\n </div>\n </div>\n\n <div class=\"card-body h-100 d-flex\" style=\"flex-direction: row\">\n <div class=\"d-flex h-100 mr-3\" style=\"flex-direction: column\">\n <div class=\"mb-4 w-100 d-flex\">\n <input\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"getValueTextPan() >= 0 ? getValueTextPan() : 0\"\n (ngModelChange)=\"setValuePan($event / 100)\"\n style=\"width: 42px; height: 20px; text-align: center; font-size: 12px; font-family: monospace\"\n />\n </div>\n\n <div class=\"h-100 w-100 d-flex\">\n <mv-slider\n class=\"mx-auto\"\n [value]=\"getValuePan() >= 0 ? getValuePan() : 0\"\n (change)=\"setValuePan($event.newValue)\"\n [orientation]=\"'vertical'\"\n [reversed]=\"true\"\n style=\"height: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"0\"\n [max]=\"1\"\n [step]=\"0.001\"\n ></mv-slider>\n </div>\n </div>\n\n <div class=\"d-flex h-100\" style=\"flex-direction: column\">\n <div class=\"mb-4 w-100 d-flex\">\n <input\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"getValueTextTilt() >= 0 ? getValueTextTilt() : 0\"\n (ngModelChange)=\"setValueTilt($event / 100)\"\n style=\"width: 42px; height: 20px; text-align: center; font-size: 12px; font-family: monospace\"\n />\n </div>\n\n <div class=\"h-100 w-100 d-flex\">\n <mv-slider\n class=\"mx-auto\"\n [value]=\"getValueTilt() >= 0 ? getValueTilt() : 0\"\n (change)=\"setValueTilt($event.newValue)\"\n [orientation]=\"'vertical'\"\n [reversed]=\"true\"\n style=\"height: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"0\"\n [max]=\"1\"\n [step]=\"0.001\"\n ></mv-slider>\n </div>\n </div>\n </div>\n</div>\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CachedFixtureCapability } from '../../../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../../../models/cached-fixture-channel';\nimport { FixtureCapabilityType } from '../../../models/fixture-capability';\nimport { FixtureProfile } from '../../../models/fixture-profile';\nimport { FixtureWheel } from '../../../models/fixture-wheel';\nimport { FixtureService } from '../../../services/fixture.service';\nimport { PresetService } from '../../../services/preset.service';\nimport { LivePreviewService } from '../../../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-fixture-capability-color-wheel',\n templateUrl: './fixture-capability-color-wheel.component.html',\n styleUrls: ['./fixture-capability-color-wheel.component.css'],\n standalone: false,\n})\nexport class FixtureCapabilityColorWheelComponent implements OnInit, OnDestroy {\n _fixtureProfile: FixtureProfile;\n _channel: CachedFixtureChannel;\n wheelName: string;\n wheel: FixtureWheel;\n slotCapabilities: CachedFixtureCapability[];\n\n private colorChangeSubscription: Subscription;\n\n @Input()\n set profile(value: FixtureProfile) {\n this._fixtureProfile = value;\n this.update();\n }\n\n @Input()\n set channel(value: CachedFixtureChannel) {\n this._channel = value;\n this.update();\n }\n\n @Input()\n wheelIndex: number;\n\n @Input()\n showContainer = false;\n\n constructor(\n public presetService: PresetService,\n private changeDetectorRef: ChangeDetectorRef,\n private fixtureService: FixtureService,\n private livePreviewService: LivePreviewService\n ) {}\n\n ngOnInit() {\n this.colorChangeSubscription = this.presetService.fixtureColorChanged.subscribe(() => {\n this.changeDetectorRef.detectChanges();\n });\n }\n\n ngOnDestroy() {\n this.colorChangeSubscription.unsubscribe();\n }\n\n private update() {\n if (this._fixtureProfile && this._channel) {\n this.wheelName = undefined;\n this.slotCapabilities = [];\n\n // get the wheel name\n for (const capability of this._channel.capabilities) {\n if (capability.wheel) {\n this.wheelName = capability.wheelName;\n break;\n }\n }\n if (!this.wheelName) {\n this.wheelName = this._channel.name;\n }\n\n this.wheel = this.fixtureService.getWheelByName(this._fixtureProfile, this.wheelName);\n\n // calculate all available slots\n for (const capability of this._channel.capabilities) {\n if (capability.capability.type === FixtureCapabilityType.WheelSlot) {\n this.slotCapabilities.push(capability);\n }\n }\n }\n\n this.changeDetectorRef.detectChanges();\n }\n\n getCapabilityColorStyle(capability: CachedFixtureCapability): any {\n let property = 'background-color';\n let value = 'black';\n let colors: string[] = [];\n\n if (capability.wheelSlots) {\n for (const slot of capability.wheelSlots) {\n // calculate the color based on the color wheel slot\n if (slot.colors.length > 0) {\n colors = colors.concat(slot.colors);\n }\n }\n }\n\n if (colors.length > 1) {\n // mixed colors -> gradient\n let colorString: string;\n for (const color of colors) {\n if (colorString) {\n colorString += ', ';\n } else {\n colorString = '';\n }\n colorString += color;\n }\n property = 'background-image';\n value = 'linear-gradient(to bottom right, ' + colorString + ')';\n } else if (colors.length === 1) {\n value = colors[0];\n } else {\n value = '#fff';\n }\n\n const style = {};\n style[property] = value;\n return style;\n }\n\n getCurrentSlotNumber(): number {\n const capabilityValue = this.presetService.getCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.WheelSlot,\n undefined,\n this.wheelName,\n this._fixtureProfile.uuid\n );\n\n if (capabilityValue) {\n return capabilityValue.slotNumber;\n }\n return undefined;\n }\n\n slotCapabilityIsSelected(slotNumber: number): boolean {\n const selectedSlotNumber = this.getCurrentSlotNumber();\n\n if (selectedSlotNumber >= 0) {\n // a slot is selected\n return selectedSlotNumber === slotNumber;\n } else {\n // no slot is selected and the capability is inactive\n // -> show the approx. color, if a color or a similar slot from a different wheel has been selected\n const approximatedCapability = this.presetService.getApproximatedColorWheelCapability(\n this.presetService.selectedPreset,\n this._channel\n );\n\n if (approximatedCapability) {\n return slotNumber === approximatedCapability.capability.slotNumber;\n } else {\n return false;\n }\n }\n }\n\n changeActive(active: boolean) {\n if (active) {\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.WheelSlot,\n undefined,\n 1,\n undefined,\n this.wheelName,\n this._fixtureProfile.uuid\n );\n } else {\n this.presetService.deleteCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.WheelSlot,\n undefined,\n this.wheelName,\n this._fixtureProfile.uuid\n );\n }\n\n this.livePreviewService.previewLive();\n }\n\n selectSlotNumber(slotNumber: number) {\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.WheelSlot,\n undefined,\n slotNumber,\n undefined,\n this.wheelName,\n this._fixtureProfile.uuid\n );\n this.livePreviewService.previewLive();\n }\n}\n","<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"getCurrentSlotNumber() == undefined\" style=\"min-height: 200px\">\n <div class=\"card-header\">\n <div class=\"my-auto\">\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityColorWheel{{ wheelIndex }}Active\"\n [ngModel]=\"getCurrentSlotNumber() != undefined\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityColorWheel{{ wheelIndex }}Active\">\n {{ 'designer.fixture.capability-color' | translate }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"card-body h-100\">\n @if (showContainer) {\n <div>{{ _fixtureProfile.name }} - {{ _channel.name }}</div>\n } @if (wheel) {\n <div class=\"d-flex\" style=\"max-width: 240px; flex-wrap: wrap\">\n @for (slot of slotCapabilities; track $index; let i = $index) {\n <div\n (click)=\"selectSlotNumber(slot.capability.slotNumber)\"\n class=\"m-1 color\"\n [class.color-selected]=\"slotCapabilityIsSelected(slot.capability.slotNumber)\"\n [ngStyle]=\"getCapabilityColorStyle(slot)\"\n >\n @if (slotCapabilityIsSelected(slot.capability.slotNumber)) {\n <div (click)=\"selectSlotNumber(slot.capability.slotNumber)\" class=\"color-selected-inner\"></div>\n }\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CachedFixtureChannel } from '../../models/cached-fixture-channel';\nimport { FixtureProfile } from '../../models/fixture-profile';\nimport { FixtureWheelSlotType } from '../../models/fixture-wheel-slot';\nimport { FixtureService } from '../../services/fixture.service';\nimport { IntroService } from '../../services/intro.service';\nimport { PresetService } from '../../services/preset.service';\nimport { ProjectService } from '../../services/project.service';\n\n@Component({\n selector: 'lib-app-fixture-capability',\n templateUrl: './fixture-capability.component.html',\n styleUrls: ['./fixture-capability.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class FixtureCapabilityComponent implements OnInit, OnDestroy {\n private fixtureSelectionChangedSubscription: Subscription;\n private previewSelectionChangedSubscription: Subscription;\n\n // map containing the profile and the channel name containing the wheel\n colorWheelChannels: Map<FixtureProfile, CachedFixtureChannel> = new Map<FixtureProfile, CachedFixtureChannel>();\n hasCapabilityDimmer: boolean = false;\n hasCapabilityColorOrColorWheel: boolean = false;\n hasCapabilityPanTilt: boolean = false;\n\n constructor(\n public presetService: PresetService,\n private fixtureService: FixtureService,\n private changeDetectorRef: ChangeDetectorRef,\n public projectService: ProjectService,\n public introService: IntroService\n ) {\n this.fixtureSelectionChangedSubscription = this.presetService.fixtureSelectionChanged.subscribe(() => {\n this.update();\n });\n\n this.previewSelectionChangedSubscription = this.presetService.previewSelectionChanged.subscribe(() => {\n this.update();\n });\n\n this.introService.stepChanged.subscribe(() => {\n this.changeDetectorRef.detectChanges();\n });\n }\n\n ngOnInit() {\n this.update();\n }\n\n ngOnDestroy() {\n this.fixtureSelectionChangedSubscription.unsubscribe();\n this.previewSelectionChangedSubscription.unsubscribe();\n }\n\n private wheelInList(wheels: Map<FixtureProfile, CachedFixtureChannel>, profile: FixtureProfile, channel: CachedFixtureChannel) {\n wheels.forEach((existingChannel: CachedFixtureChannel, existingProfile: FixtureProfile) => {\n if (existingProfile.uuid === profile.uuid && existingChannel.name === channel.name) {\n return true;\n }\n });\n\n return false;\n }\n\n private updateColorWheels() {\n this.colorWheelChannels = new Map<FixtureProfile, CachedFixtureChannel>();\n\n if (!this.presetService.selectedPreset) {\n return;\n }\n\n for (const preserFixture of this.presetService.selectedPreset.fixtures) {\n const fixture = this.fixtureService.getCachedFixtureByUuid(preserFixture.fixtureUuid, preserFixture.pixelKey);\n for (const channel of fixture.channels) {\n for (const capability of channel.capabilities) {\n if (capability.wheel && capability.wheelSlots && capability.wheelSlots.length > 0) {\n if (this.fixtureService.wheelHasSlotType(capability.wheel, FixtureWheelSlotType.Color)) {\n // color wheel\n if (!this.wheelInList(this.colorWheelChannels, fixture.profile, channel)) {\n this.colorWheelChannels.set(fixture.profile, channel);\n }\n } else if (this.fixtureService.wheelHasSlotType(capability.wheel, FixtureWheelSlotType.Gobo)) {\n // gobo wheel\n // TODO\n }\n }\n }\n }\n }\n }\n\n private updateCapabilities() {\n this.hasCapabilityDimmer = this.presetService.hasCapabilityDimmer();\n this.hasCapabilityColorOrColorWheel = this.presetService.hasCapabilityColorOrColorWheel();\n this.hasCapabilityPanTilt = this.presetService.hasCapabilityPanTilt();\n }\n\n private update() {\n this.updateColorWheels();\n this.updateCapabilities();\n this.changeDetectorRef.detectChanges();\n }\n\n isChrome(): boolean {\n if (navigator.appVersion.indexOf('Chrome/') !== -1) {\n return true;\n }\n return false;\n }\n}\n","<div class=\"card border-secondary panel h-100\" [class.card-intro-active]=\"introService.showStep('capabilities')\">\n <div class=\"card-body capability-container d-flex h-100\" style=\"overflow-y: hidden\">\n <!-- h-100 needs to be applied in chrome to avoid performance issues with many layouts (reflows)\n during sliding. But the class must not be applied e.g. in Safari, because the bottom margin is not correct\n anymore afterwards. -->\n @if (presetService.selectedPreset) {\n <div class=\"row m-0 pl-3\" [class.h-100]=\"isChrome()\">\n <!-- Dimmer -->\n <!-- the height attribute is required to avoid performance issues with many layouts (reflows)\n in Chrome during sliding -->\n @if (hasCapabilityDimmer) {\n <div class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-dimmer></lib-app-fixture-capability-dimmer>\n </div>\n }\n <!-- Color -->\n <!-- Also show for color wheel fixtures to approx. the color -->\n @if (hasCapabilityColorOrColorWheel) {\n <div class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-color></lib-app-fixture-capability-color>\n </div>\n }\n <!-- Color wheels -->\n @for (entry of colorWheelChannels | keyvalue; track $index; let i = $index) {\n <div class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-color-wheel\n [profile]=\"entry.key\"\n [channel]=\"entry.value\"\n [wheelIndex]=\"i\"\n [showContainer]=\"colorWheelChannels.size > 1\"\n ></lib-app-fixture-capability-color-wheel>\n </div>\n }\n <!-- Pan/Tilt -->\n @if (hasCapabilityPanTilt) {\n <div class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-pan-tilt></lib-app-fixture-capability-pan-tilt>\n </div>\n }\n <!-- Fix spacing at the end -->\n <div class=\"col col-auto p-0 my-3 mr-3\">&nbsp;</div>\n </div>\n } @if (projectService.project.fixtures.length == 0) {\n <div class=\"m-auto\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures' | translate }}</p>\n </div>\n } @if ( projectService.project.fixtures.length > 0 && presetService.selectedPreset && presetService.selectedPreset.fixtures.length == 0\n ) {\n <div class=\"m-auto\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures-selected' | translate }}</p>\n </div>\n } @if ( projectService.project.fixtures.length > 0 && presetService.selectedPreset && presetService.selectedPreset.fixtures.length > 0\n && !hasCapabilityColorOrColorWheel && !hasCapabilityPanTilt ) {\n <div class=\"m-auto\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-capabilities-available' | translate }}</p>\n </div>\n }\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { Positioning } from '../../../models/fixture';\nimport { FixtureService } from '../../../services/fixture.service';\nimport { PresetService } from '../../../services/preset.service';\nimport { PreviewService } from '../../../services/preview.service';\n\n@Component({\n selector: 'lib-app-fixture-settings-position',\n templateUrl: './fixture-settings-position.component.html',\n styleUrls: ['./fixture-settings-position.component.css'],\n standalone: false,\n})\nexport class FixtureSettingsPositionComponent implements OnInit {\n selectUndefinedOptionValue: any = undefined;\n\n selectedPositioning: string = undefined;\n\n positionX = 0;\n positionY = 0;\n positionZ = 0;\n\n positionXMin = -400;\n positionXMax = 400;\n positionYMin = 0;\n positionYMax = 400;\n positionZMin = -400;\n positionZMax = 400;\n\n rotationX = 0;\n rotationY = 0;\n rotationZ = 0;\n\n rotationMin = 0;\n rotationMax = 360;\n\n constructor(public fixtureService: FixtureService, private presetService: PresetService, private previewService: PreviewService) {\n this.presetService.fixtureSelectionSettingsChanged.subscribe(() => {\n this.updateSelection();\n });\n }\n\n ngOnInit() {}\n\n private updated() {\n this.previewService.doUpdateStageAndPositions.next();\n }\n\n private updateSelection() {\n // get all display values for the selected settings fixtures\n this.selectedPositioning = undefined;\n\n this.positionX = undefined;\n this.positionY = undefined;\n this.positionZ = undefined;\n\n this.rotationX = undefined;\n this.rotationY = undefined;\n this.rotationZ = undefined;\n\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.selectedPositioning) {\n if (this.selectedPositioning !== fixture.positioning) {\n this.selectedPositioning = undefined;\n break;\n }\n } else {\n this.selectedPositioning = fixture.positioning;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.positionX) {\n if (this.positionX !== fixture.positionX) {\n this.positionX = undefined;\n break;\n }\n } else {\n this.positionX = fixture.positionX;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.positionY) {\n if (this.positionY !== fixture.positionY) {\n this.positionY = undefined;\n break;\n }\n } else {\n this.positionY = fixture.positionY;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.positionZ) {\n if (this.positionZ !== fixture.positionZ) {\n this.positionZ = undefined;\n break;\n }\n } else {\n this.positionZ = fixture.positionZ;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.rotationX) {\n if (this.rotationX !== fixture.rotationX) {\n this.rotationX = undefined;\n break;\n }\n } else {\n this.rotationX = fixture.rotationX;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.rotationY) {\n if (this.rotationY !== fixture.rotationY) {\n this.rotationY = undefined;\n break;\n }\n } else {\n this.rotationY = fixture.rotationY;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.rotationZ) {\n if (this.rotationZ !== fixture.rotationZ) {\n this.rotationZ = undefined;\n break;\n }\n } else {\n this.rotationZ = fixture.rotationZ;\n }\n }\n }\n\n changePosition(positioningStr: string) {\n const positioning: Positioning = Positioning[positioningStr];\n\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n fixture.positioning = positioning;\n }\n\n this.updated();\n }\n\n changePositionManual(position: string, value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (position === 'x') {\n if (value >= this.positionXMin && value <= this.positionXMax) {\n this.positionX = +value;\n }\n } else if (position === 'y') {\n if (value >= this.positionYMin && value <= this.positionYMax) {\n this.positionY = +value;\n }\n } else if (position === 'z') {\n if (value >= this.positionZMin && value <= this.positionZMax) {\n this.positionZ = +value;\n }\n }\n\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (position === 'x') {\n if (value >= this.positionXMin && value <= this.positionXMax) {\n fixture.positionX = +value;\n }\n } else if (position === 'y') {\n if (value >= this.positionYMin && value <= this.positionYMax) {\n fixture.positionY = +value;\n }\n } else if (position === 'z') {\n if (value >= this.positionZMin && value <= this.positionZMax) {\n fixture.positionZ = +value;\n }\n }\n }\n\n this.updated();\n }\n\n changeRotationManual(rotation: string, value: any) {\n if (isNaN(value) || value < this.rotationMin || value > this.rotationMax) {\n return;\n }\n\n if (rotation === 'x') {\n this.rotationX = +value;\n } else if (rotation === 'y') {\n this.rotationY = +value;\n } else if (rotation === 'z') {\n this.rotationZ = +value;\n }\n\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (rotation === 'x') {\n fixture.rotationX = +value;\n } else if (rotation === 'y') {\n fixture.rotationY = +value;\n } else if (rotation === 'z') {\n fixture.rotationZ = +value;\n }\n }\n\n this.updated();\n }\n}\n","<div class=\"card border-secondary h-100\">\n <div class=\"card-header\">\n {{ 'designer.fixture.setting-position-title' | translate }}\n </div>\n\n @if (fixtureService.selectedSettingsFixtures.length > 0) {\n <div class=\"card-body h-100\">\n <div>\n <select class=\"mb-2\" style=\"width: 140px\" [(ngModel)]=\"selectedPositioning\" (change)=\"changePosition($event.target.value)\">\n <option [ngValue]=\"selectUndefinedOptionValue\"></option>\n <option value=\"topFront\">{{ 'designer.fixture.setting-position-front-top' | translate }}</option>\n <option value=\"bottomFront\">{{ 'designer.fixture.setting-position-front-bottom' | translate }}</option>\n <option value=\"topBack\">{{ 'designer.fixture.setting-position-back-top' | translate }}</option>\n <option value=\"bottomBack\">{{ 'designer.fixture.setting-position-back-bottom' | translate }}</option>\n <option value=\"manual\">{{ 'designer.fixture.setting-position-manual' | translate }}</option>\n </select>\n </div>\n @if (selectedPositioning == 'manual') {\n <div>\n <div>{{ 'designer.fixture.setting-position' | translate }}</div>\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 20px; float: left\">X</div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [value]=\"positionX ? positionX : (positionXMax + positionXMin) / 2\"\n [min]=\"positionXMin\"\n [max]=\"positionXMax\"\n [step]=\"1\"\n (change)=\"changePositionManual('x', $event.newValue)\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input [ngModel]=\"positionX\" (ngModelChange)=\"changePositionManual('x', $event)\" type=\"text\" class=\"slider-input\" />\n </div>\n </div>\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 20px; float: left\">Y</div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 80px; height: 18px\"\n [tooltip]=\"'hide'\"\n [value]=\"positionZ ? positionZ : (positionZMax + positionZMin) / 2\"\n [min]=\"positionZMin\"\n [max]=\"positionZMax\"\n [step]=\"1\"\n (change)=\"changePositionManual('z', $event.newValue)\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input [ngModel]=\"positionZ\" (ngModelChange)=\"changePositionManual('z', $event)\" type=\"text\" class=\"slider-input\" />\n </div>\n </div>\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 20px; float: left\">Z</div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [value]=\"positionY ? positionY : (positionYMax + positionYMin) / 2\"\n [min]=\"positionYMin\"\n [max]=\"positionYMax\"\n [step]=\"1\"\n (change)=\"changePositionManual('y', $event.newValue)\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input [ngModel]=\"positionY\" (ngModelChange)=\"changePositionManual('y', $event)\" type=\"text\" class=\"slider-input\" />\n </div>\n </div>\n <div class=\"mt-2\">{{ 'designer.fixture.setting-rotation' | translate }}</div>\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 20px; float: left\">X</div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [value]=\"rotationX ? rotationX : 0\"\n [min]=\"rotationMin\"\n [max]=\"rotationMax\"\n [step]=\"1\"\n (change)=\"changeRotationManual('x', $event.newValue)\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input [ngModel]=\"rotationX\" (ngModelChange)=\"changeRotationManual('x', $event)\" type=\"text\" class=\"slider-input\" />\n </div>\n </div>\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 20px; float: left\">Y</div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [value]=\"rotationY ? rotationY : 0\"\n [min]=\"rotationMin\"\n [max]=\"rotationMax\"\n [step]=\"1\"\n (change)=\"changeRotationManual('y', $event.newValue)\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input [ngModel]=\"rotationY\" (ngModelChange)=\"changeRotationManual('y', $event)\" type=\"text\" class=\"slider-input\" />\n </div>\n </div>\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 20px; float: left\">Z</div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 80px; height: 18px\"\n [tooltip]=\"'hide'\"\n [value]=\"rotationZ ? rotationZ : 0\"\n [min]=\"rotationMin\"\n [max]=\"rotationMax\"\n [step]=\"1\"\n (change)=\"changeRotationManual('z', $event.newValue)\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input [ngModel]=\"rotationZ\" (ngModelChange)=\"changeRotationManual('z', $event)\" type=\"text\" class=\"slider-input\" />\n </div>\n </div>\n </div>\n }\n </div>\n } @if (fixtureService.selectedSettingsFixtures.length == 0) {\n <div class=\"card-body h-100 d-flex\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures-settings-selected' | translate }}</p>\n </div>\n }\n</div>\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { PreviewService } from '../../../services/preview.service';\nimport { ProjectService } from '../../../services/project.service';\n\n@Component({\n selector: 'lib-app-fixture-settings-stage',\n templateUrl: './fixture-settings-stage.component.html',\n styleUrls: ['./fixture-settings-stage.component.css'],\n standalone: false,\n})\nexport class FixtureSettingsStageComponent implements OnInit {\n constructor(public projectService: ProjectService, public previewService: PreviewService, private changeDetectorRef: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n update() {\n this.previewService.updateStage();\n this.changeDetectorRef.detectChanges();\n\n this.previewService.doUpdateStageAndPositions.next();\n }\n}\n","<div class=\"card border-secondary h-100\">\n <div class=\"card-header\">\n {{ 'designer.fixture.setting-stage' | translate }}\n </div>\n\n <div class=\"card-body h-100\">\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-width' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageWidthCm\"\n [min]=\"100\"\n [max]=\"2000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageWidthCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageWidthCm\"\n (ngModelChange)=\"projectService.project.stageWidthCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-height' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageHeightCm\"\n [min]=\"100\"\n [max]=\"2000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageHeightCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageHeightCm\"\n (ngModelChange)=\"projectService.project.stageHeightCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-depth' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageDepthCm\"\n [min]=\"100\"\n [max]=\"2000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageDepthCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageDepthCm\"\n (ngModelChange)=\"projectService.project.stageDepthCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-floor-height' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageFloorHeightCm\"\n [min]=\"1\"\n [max]=\"1000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageFloorHeightCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageFloorHeightCm\"\n (ngModelChange)=\"projectService.project.stageFloorHeightCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-ceiling-height' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stageCeilingHeightCm\"\n [min]=\"1\"\n [max]=\"1000\"\n [step]=\"5\"\n (change)=\"projectService.project.stageCeilingHeightCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stageCeilingHeightCm\"\n (ngModelChange)=\"projectService.project.stageCeilingHeightCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 120px; float: left\">\n {{ 'designer.fixture.setting-stage-pillar-width' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n style=\"width: 140px\"\n [tooltip]=\"'hide'\"\n [value]=\"projectService.project.stagePillarWidthCm\"\n [min]=\"1\"\n [max]=\"200\"\n [step]=\"5\"\n (change)=\"projectService.project.stagePillarWidthCm = $event.newValue; update()\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input\n type=\"text\"\n [ngModel]=\"projectService.project.stagePillarWidthCm\"\n (ngModelChange)=\"projectService.project.stagePillarWidthCm = $event; update()\"\n class=\"slider-input-readonly\"\n readonly\n />\n </div>\n <div class=\"my-auto ml-1\" style=\"color: darkgray\">cm</div>\n </div>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PresetService } from '../../services/preset.service';\n\n@Component({\n selector: 'lib-app-fixture-settings',\n templateUrl: './fixture-settings.component.html',\n styleUrls: ['./fixture-settings.component.css'],\n standalone: false,\n})\nexport class FixtureSettingsComponent implements OnInit {\n dmxChannels: number[] = [];\n\n constructor(private fixtureService: FixtureService, public presetService: PresetService) {\n for (let i = 0; i < 512; i++) {\n this.dmxChannels.push(0);\n }\n }\n\n ngOnInit() {}\n\n isChrome(): boolean {\n if (navigator.appVersion.indexOf('Chrome/') !== -1) {\n return true;\n }\n return false;\n }\n}\n","<div class=\"card border-secondary panel h-100\">\n <div class=\"card-body capability-container d-flex h-100\" style=\"overflow-y: hidden\">\n <!-- h-100 needs to be applied in chrome to avoid performance issues with many layouts (reflows)\n during sliding. But the class must not be applied e.g. in Safari, because the bottom margin is not correct\n anymore afterwards. -->\n <div class=\"row m-0 pl-3\" [class.h-100]=\"isChrome()\">\n <!-- Position -->\n <div class=\"col col-auto p-0 my-3 mr-3\">\n <lib-app-fixture-settings-position></lib-app-fixture-settings-position>\n </div>\n\n <!-- Stage -->\n <div class=\"col col-auto p-0 my-3 mr-3\">\n <lib-app-fixture-settings-stage></lib-app-fixture-settings-stage>\n </div>\n\n <!-- Fix spacing at the end -->\n <div class=\"col col-auto p-0 my-3 mr-3\">&nbsp;</div>\n </div>\n </div>\n</div>\n","import { Component, ElementRef, Input, NgZone, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, Subscription, timer } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CachedFixtureChannel } from '../../models/cached-fixture-channel';\nimport { EffectCurveProfileChannels } from '../../models/effect-curve-profile-channel';\nimport { FixtureCapability, FixtureCapabilityColor, FixtureCapabilityType } from '../../models/fixture-capability';\nimport { FixtureProfile } from '../../models/fixture-profile';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PresetService } from '../../services/preset.service';\nimport { EffectCurve } from './../../models/effect-curve';\nimport { AnimationService } from './../../services/animation.service';\nimport { EffectService } from '../../services/effect.service';\nimport { LivePreviewService } from '../../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-effect-curve',\n templateUrl: './effect-curve.component.html',\n styleUrls: ['./effect-curve.component.css'],\n standalone: false,\n})\nexport class EffectCurveComponent implements OnInit, OnDestroy {\n private gridUpdateSubscription: Subscription;\n private ctx: any;\n private maxWidth: number;\n private maxHeight: number;\n\n public lengthMillisMin = 20;\n public lengthMillisMax = 8000;\n public amplitudeMin = 0;\n public amplitudeMax = 4;\n public percentageMin = 0;\n public percentageMax = 1;\n public phaseMillisMin = -1000;\n public phaseMillisMax = 1000;\n public phasingMillisMin = 0;\n public phasingMillisMax = 1000;\n\n // the selected capabilities\n public availableCapabilities: FixtureCapability[] = [];\n\n // the selected channels\n public availableChannels: Map<FixtureProfile, CachedFixtureChannel[]> = new Map<FixtureProfile, CachedFixtureChannel[]>();\n public availableProfiles: FixtureProfile[] = [];\n public selectedProfiles: FixtureProfile[] = [];\n\n private effectsOpenChangedSubscription: Subscription;\n\n @Input() curve: EffectCurve;\n\n // whether the effect is currently being edited (open) or not\n @Input()\n set isSelected(value: boolean) {\n if (value) {\n this.startUpdateTimer();\n } else {\n this.stopUpdateTimer();\n }\n }\n\n @ViewChild('curveGrid', { static: true }) curveGrid: ElementRef;\n\n constructor(\n public presetService: PresetService,\n private animationService: AnimationService,\n private fixtureService: FixtureService,\n private translate: TranslateService,\n private effectService: EffectService,\n private ngZone: NgZone,\n public livePreviewService: LivePreviewService\n ) {\n this.presetService.fixtureSelectionChanged.subscribe(() => {\n this.updateCapabilitiesAndChannels();\n });\n\n this.updateCapabilitiesAndChannels();\n\n this.effectsOpenChangedSubscription = this.effectService.effectsOpenChanged.subscribe(() => {\n if (this.effectService.effectsOpen) {\n this.startUpdateTimer();\n } else {\n this.stopUpdateTimer();\n }\n });\n if (this.effectService.effectsOpen) {\n this.startUpdateTimer();\n }\n }\n\n ngOnInit() {\n const canvas = this.curveGrid.nativeElement;\n this.ctx = canvas.getContext('2d');\n this.maxWidth = canvas.width;\n this.maxHeight = canvas.height;\n\n this.redraw();\n }\n\n ngOnDestroy() {\n this.stopUpdateTimer();\n this.effectsOpenChangedSubscription.unsubscribe();\n }\n\n private startUpdateTimer() {\n if (!this.gridUpdateSubscription) {\n // Avoid triggering change detection with each animation frame -> run outside zone\n this.ngZone.runOutsideAngular(() => {\n this.gridUpdateSubscription = timer(0, 15).subscribe(() => {\n this.redraw();\n });\n });\n }\n }\n\n private stopUpdateTimer() {\n if (this.gridUpdateSubscription) {\n this.gridUpdateSubscription.unsubscribe();\n this.gridUpdateSubscription = undefined;\n }\n }\n\n private drawCurrentValue(currMillis: number, radius: number, lineWidth: number, durationMillis: number, maxHeight: number) {\n const currVal = 1 - this.curve.getValueAtMillis(currMillis);\n\n const x = (this.maxWidth * (currMillis % durationMillis)) / durationMillis;\n const y = maxHeight * currVal + lineWidth;\n\n this.ctx.beginPath();\n this.ctx.arc(x, y, radius, 0, 2 * Math.PI, false);\n this.ctx.fillStyle = '#fff';\n this.ctx.fill();\n this.ctx.lineWidth = 1;\n this.ctx.strokeStyle = '#000';\n this.ctx.stroke();\n }\n\n private getPhasingCount(): number {\n let count = 0;\n const countedFirstDmxChannelPixelKey: any[] = [];\n\n for (const presetFixture of this.presetService.selectedPreset.fixtures) {\n const fixture = this.fixtureService.getFixtureByUuid(presetFixture.fixtureUuid);\n const firstDmxChannelAndFixtureUuid = {\n dmxUniverseUuid: fixture.dmxUniverseUuid,\n firstDmxChannel: fixture.dmxFirstChannel,\n pixelKey: presetFixture.pixelKey,\n };\n\n const exists = countedFirstDmxChannelPixelKey.some(\n (item) =>\n item.dmxUniverseUuid === firstDmxChannelAndFixtureUuid.dmxUniverseUuid &&\n item.firstDmxChannel === firstDmxChannelAndFixtureUuid.firstDmxChannel &&\n ((!item.pixelKey && !firstDmxChannelAndFixtureUuid.pixelKey) || item.pixelKey === firstDmxChannelAndFixtureUuid.pixelKey)\n );\n\n // don't count it, if it has the same DMX universe, address and pixel key (if available),\n // as an already counted one\n if (!exists) {\n count++;\n countedFirstDmxChannelPixelKey.push(firstDmxChannelAndFixtureUuid);\n }\n }\n\n return count;\n }\n\n redraw() {\n this.ctx.clearRect(0, 0, this.maxWidth, this.maxHeight);\n this.ctx.fillStyle = '#fff';\n this.ctx.strokeStyle = '#fff';\n\n // the width of the lines\n const width = 3;\n\n this.ctx.lineWidth = width;\n\n let oldX: number;\n let oldY: number;\n\n let step = 50;\n\n if (length < 500) {\n step = 5;\n }\n\n const durationMillis = this.curve.lengthMillis * Math.max(Math.round(4 - this.curve.lengthMillis / 1000), 1);\n const maxHeight = this.maxHeight - width * 2;\n\n // draw the curve\n for (let i = -step * 2; i < durationMillis + step * 2; i += step) {\n const val = 1 - this.curve.getValueAtMillis(i);\n\n // Scale the values to the grid dimensions\n const x = (this.maxWidth * i) / durationMillis;\n const y = maxHeight * val + width;\n\n if (oldY) {\n this.ctx.beginPath();\n this.ctx.moveTo(oldX, oldY);\n this.ctx.lineTo(x, y);\n this.ctx.stroke();\n }\n\n oldX = x;\n oldY = y;\n }\n\n // draw the current value\n this.drawCurrentValue(this.animationService.timeMillis % durationMillis, 5, width, durationMillis, maxHeight);\n\n // draw the phasing values (chase), if required\n let phasingCount = 0;\n\n if (this.curve.phasingMillis > 0 && this.presetService.selectedPreset) {\n phasingCount = this.getPhasingCount();\n }\n\n for (let i = 1; i < phasingCount; i++) {\n this.drawCurrentValue(\n (this.animationService.timeMillis - i * this.curve.phasingMillis) % durationMillis,\n 3,\n width,\n durationMillis,\n maxHeight\n );\n }\n }\n\n private calculateChannelCapabilities() {\n this.availableChannels = this.presetService.getSelectedProfileChannels(this.selectedProfiles);\n }\n\n changeProfileSelection($event: any, profile: FixtureProfile) {\n if (this.selectedProfiles.indexOf(profile) >= 0) {\n this.selectedProfiles.splice(this.selectedProfiles.indexOf(profile), 1);\n } else {\n this.selectedProfiles.push(profile);\n }\n\n this.calculateChannelCapabilities();\n }\n\n private updateCapabilitiesAndChannels() {\n // capabilities\n this.availableCapabilities = [];\n\n if (this.presetService.hasCapabilityDimmer()) {\n const capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.Intensity;\n this.availableCapabilities.push(capability);\n }\n\n if (this.presetService.hasCapabilityColor()) {\n let capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.ColorIntensity;\n capability.color = FixtureCapabilityColor.Red;\n this.availableCapabilities.push(capability);\n\n capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.ColorIntensity;\n capability.color = FixtureCapabilityColor.Green;\n this.availableCapabilities.push(capability);\n\n capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.ColorIntensity;\n capability.color = FixtureCapabilityColor.Blue;\n this.availableCapabilities.push(capability);\n }\n\n if (this.presetService.hasCapabilityPanTilt()) {\n let capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.Pan;\n this.availableCapabilities.push(capability);\n\n capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.Tilt;\n this.availableCapabilities.push(capability);\n }\n\n // calculate all profiles\n this.availableProfiles = this.presetService.getSelectedProfiles();\n\n // select all profiles by default\n this.selectedProfiles = [...this.availableProfiles];\n\n // calculate all channels\n this.calculateChannelCapabilities();\n }\n\n getCapabilityName(capability: FixtureCapability): Observable<string> {\n return this.translate\n .get(['designer.fixtureCapabilityType.' + capability.type, 'designer.fixtureCapabilityColor.' + capability.color])\n .pipe(\n map((result: string) => {\n let name = '';\n name += result['designer.fixtureCapabilityType.' + capability.type];\n\n if (capability.color) {\n name += ', ' + result['designer.fixtureCapabilityColor.' + capability.color];\n } else {\n return name;\n }\n\n return name;\n })\n );\n }\n\n capabilityChecked(capability: FixtureCapability): boolean {\n for (const existingCapability of this.curve.capabilities) {\n if (\n this.fixtureService.capabilitiesMatch(\n existingCapability.type,\n capability.type,\n existingCapability.color,\n capability.color,\n null,\n null,\n null,\n null\n )\n ) {\n return true;\n }\n }\n return false;\n }\n\n toggleCapability(event: any, capability: FixtureCapability) {\n if (event.currentTarget.checked) {\n // add the capability\n this.curve.capabilities.push(capability);\n } else {\n // Remove the channel\n for (let i = 0; i < this.curve.capabilities.length; i++) {\n const existingCapability = this.curve.capabilities[i];\n if (\n this.fixtureService.capabilitiesMatch(\n existingCapability.type,\n capability.type,\n existingCapability.color,\n capability.color,\n null,\n null,\n null,\n null\n )\n ) {\n this.curve.capabilities.splice(i, 1);\n }\n }\n }\n\n this.livePreviewService.previewLive();\n }\n\n getChannelName(profileName: string, channelName: string) {\n if (this.availableProfiles.length > 1) {\n return profileName + ' - ' + channelName;\n }\n\n return channelName;\n }\n\n channelChecked(profile: FixtureProfile, channel: CachedFixtureChannel): boolean {\n for (const profileChannels of this.curve.channels) {\n if (profileChannels.profileUuid === profile.uuid) {\n if (profileChannels.channels.includes(channel.name)) {\n return true;\n }\n\n break;\n }\n }\n\n return false;\n }\n\n toggleChannel(event: any, profile: FixtureProfile, channel: CachedFixtureChannel) {\n // add the profile, if necessary\n let profileContained = false;\n for (const profileChannels of this.curve.channels) {\n if (profileChannels.profileUuid === profile.uuid) {\n profileContained = true;\n break;\n }\n }\n\n if (!profileContained) {\n const profileChannels = new EffectCurveProfileChannels();\n profileChannels.profileUuid = profile.uuid;\n this.curve.channels.push(profileChannels);\n }\n\n // add or delete the channel\n for (const profileChannels of this.curve.channels) {\n if (profileChannels.profileUuid === profile.uuid) {\n const index = profileChannels.channels.indexOf(channel.name);\n\n if (index >= 0) {\n profileChannels.channels.splice(index, 1);\n } else {\n profileChannels.channels.push(channel.name);\n }\n\n break;\n }\n }\n\n this.livePreviewService.previewLive();\n }\n\n setLengthMillis(value: any) {\n if (!isNaN(value) && value >= this.lengthMillisMin && value <= this.lengthMillisMax) {\n this.curve.lengthMillis = +value;\n this.livePreviewService.previewLive();\n }\n }\n\n setAmplitude(value: any) {\n if (!isNaN(value) && value >= this.amplitudeMin && value <= this.amplitudeMax) {\n this.curve.amplitude = +value;\n this.livePreviewService.previewLive();\n }\n }\n\n setPosition(value: any) {\n if (!isNaN(value) && value >= this.percentageMin && value <= this.percentageMax) {\n this.curve.position = +value;\n this.livePreviewService.previewLive();\n }\n }\n\n setPhaseMillis(value: any) {\n if (!isNaN(value) && value >= this.phaseMillisMin && value <= this.phaseMillisMax) {\n this.curve.phaseMillis = +value;\n this.livePreviewService.previewLive();\n }\n }\n\n setPhasingMillis(value: any) {\n if (!isNaN(value) && value >= this.phasingMillisMin && value <= this.phasingMillisMax) {\n this.curve.phasingMillis = +value;\n this.livePreviewService.previewLive();\n }\n }\n}\n","<div class=\"mr-3\" style=\"float: left\">\n <div class=\"mb-2\">\n <select\n [ngModel]=\"curve.curveType\"\n (ngModelChange)=\"curve.curveType = $event; livePreviewService.previewLive()\"\n style=\"width: 200px; height: 20px\"\n >\n <option [value]=\"'sine'\">\n {{ 'designer.effect.curve-sine' | translate }}\n </option>\n <option [value]=\"'square'\">\n {{ 'designer.effect.curve-square' | translate }}\n </option>\n <!-- <option [value]=\"'triangle'\">\n {{ 'designer.effect.curve-triangle' | translate }}</option>\n <option [value]=\"'sawtooth'\">\n {{ 'designer.effect.curve-sawtooth' | translate }}</option>\n <option [value]=\"'reverse-sawtooth'\">\n {{ 'designer.effect.curve-reverse-sawtooth' | translate }}</option> -->\n </select>\n </div>\n <div>\n <canvas #curveGrid class=\"curve-grid\" width=\"200\" height=\"100\" viewBox=\"150 -75 4850 5150\" preserveAspectRatio=\"none\"></canvas>\n </div>\n</div>\n\n<div class=\"mr-4\" style=\"float: left\">\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 100px; float: left\">\n {{ 'designer.effect.curve-length' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n (change)=\"redraw(); livePreviewService.previewLive()\"\n [(value)]=\"curve.lengthMillis\"\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [value]=\"0\"\n [min]=\"lengthMillisMin\"\n [max]=\"lengthMillisMax\"\n [step]=\"1\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input type=\"text\" class=\"slider-input\" [ngModel]=\"curve.lengthMillis\" (ngModelChange)=\"setLengthMillis($event); redraw()\" />\n </div>\n <div class=\"my-auto ml-1\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 100px; float: left\">\n {{ 'designer.effect.curve-amplitude' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n (change)=\"redraw(); livePreviewService.previewLive()\"\n [(value)]=\"curve.amplitude\"\n style=\"width: 80px\"\n [tooltip]=\"'hide'\"\n [min]=\"amplitudeMin\"\n [max]=\"amplitudeMax\"\n [step]=\"0.01\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input type=\"text\" class=\"slider-input\" [ngModel]=\"curve.amplitude\" (ngModelChange)=\"setAmplitude($event); redraw()\" />\n </div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 100px; float: left\">\n {{ 'designer.effect.curve-position' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n (change)=\"redraw(); livePreviewService.previewLive()\"\n [(value)]=\"curve.position\"\n style=\"width: 80px; height: 18px\"\n [tooltip]=\"'hide'\"\n [min]=\"percentageMin\"\n [max]=\"percentageMax\"\n [step]=\"0.01\"\n >\n </mv-slider>\n </div>\n <div class=\"my-auto\">\n <input type=\"text\" class=\"slider-input\" [ngModel]=\"curve.position\" (ngModelChange)=\"setPosition($event); redraw()\" />\n </div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 100px; float: left\">\n {{ 'designer.effect.curve-phase' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n (change)=\"redraw(); livePreviewService.previewLive()\"\n [(value)]=\"curve.phaseMillis\"\n style=\"width: 80px; height: 18px\"\n [tooltip]=\"'hide'\"\n [min]=\"phaseMillisMin\"\n [max]=\"phaseMillisMax\"\n [step]=\"1\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input type=\"text\" class=\"slider-input\" [ngModel]=\"curve.phaseMillis\" (ngModelChange)=\"setPhaseMillis($event); redraw()\" />\n </div>\n <div class=\"my-auto ml-1\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n\n <div class=\"d-flex\">\n <div class=\"my-auto\" style=\"width: 100px; float: left\">\n {{ 'designer.effect.curve-chase' | translate }}\n </div>\n <div class=\"my-auto\" style=\"float: left\">\n <mv-slider\n (change)=\"redraw(); livePreviewService.previewLive()\"\n [(value)]=\"curve.phasingMillis\"\n style=\"width: 80px; height: 18px\"\n [tooltip]=\"'hide'\"\n [min]=\"phasingMillisMin\"\n [max]=\"phasingMillisMax\"\n [step]=\"1\"\n ></mv-slider>\n </div>\n <div class=\"my-auto\">\n <input type=\"text\" class=\"slider-input\" [ngModel]=\"curve.phasingMillis\" (ngModelChange)=\"setPhasingMillis($event); redraw()\" />\n </div>\n <div class=\"my-auto ml-1\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n</div>\n\n<!-- Menu for the capabilities and channels-->\n<div class=\"col col-auto p-0\" style=\"margin-right: 1px; width: 50px; float: left\">\n <div class=\"nav flex-column nav-pills\" id=\"v-pills-tab\" role=\"tablist\" aria-orientation=\"vertical\">\n <a\n class=\"nav-link px-3 active\"\n id=\"v-pills-effect-capabilities-tab\"\n popover=\"{{ 'designer.misc.capabilities' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-effect-capabilities-{{ curve?.uuid }}\"\n role=\"tab\"\n aria-controls=\"v-pills-capabilities\"\n aria-selected=\"true\"\n >\n <i class=\"fa fa-bolt fa-fw\" aria-hidden=\"true\"></i>\n </a>\n <a\n class=\"nav-link px-3\"\n id=\"v-pills-effect-channels-tab\"\n popover=\"{{ 'designer.misc.channels' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-effect-channels-{{ curve?.uuid }}\"\n role=\"tab\"\n aria-controls=\"v-pills-channels\"\n aria-selected=\"false\"\n >\n <i class=\"fa fa-sliders fa-fw\" aria-hidden=\"true\"></i>\n </a>\n </div>\n</div>\n\n<div class=\"h-100\" class=\"applying-to\">\n <div class=\"tab-content h-100\" id=\"v-pills-tabContent\">\n <div class=\"tab-pane h-100 show active\" id=\"v-pills-effect-capabilities-{{ curve?.uuid }}\" role=\"tabpanel\">\n <!-- Capabilities-->\n @for (capability of availableCapabilities; track $index; let i = $index) {\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capability_{{ curve?.uuid + '_' + i }}\"\n [ngModel]=\"capabilityChecked(capability)\"\n (change)=\"toggleCapability($event, capability)\"\n />\n <label class=\"form-check-label\" for=\"capability_{{ curve?.uuid + '_' + i }}\">{{ getCapabilityName(capability) | async }}</label>\n </div>\n }\n </div>\n <div class=\"tab-pane h-100 show\" id=\"v-pills-effect-channels-{{ curve?.uuid }}\" role=\"tabpanel\">\n <!-- channels -->\n\n <!-- profile selection -->\n @if (availableProfiles.length > 1) {\n <div>\n @for (profile of availableProfiles; track profile; let i = $index) {\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"channel_profile_{{ curve?.uuid }}_{{ profile.uuid }}\"\n [ngModel]=\"selectedProfiles.indexOf(profile) >= 0\"\n (change)=\"changeProfileSelection($event, profile)\"\n />\n <label class=\"form-check-label\" for=\"channel_profile_{{ curve?.uuid }}_{{ profile.uuid }}\">{{ profile.name }}</label>\n </div>\n }\n <hr class=\"my-1\" style=\"border-color: white\" />\n </div>\n }\n\n <!-- channels -->\n @for (entry of availableChannels | keyvalue; track entry; let i = $index) { @for (channel of entry.value; track channel; let j =\n $index) {\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"channel_{{ curve?.uuid }}_{{ i }}_{{ j }}\"\n [ngModel]=\"channelChecked(entry.key, channel)\"\n (change)=\"toggleChannel($event, entry.key, channel)\"\n />\n <label class=\"form-check-label\" for=\"channel_{{ curve?.uuid }}_{{ i }}_{{ j }}\">{{\n getChannelName(entry.key.name, channel.name)\n }}</label>\n </div>\n } }\n </div>\n </div>\n</div>\n","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'lib-app-effect-pan-tilt',\n templateUrl: './effect-pan-tilt.component.html',\n styleUrls: ['./effect-pan-tilt.component.css'],\n standalone: false,\n})\nexport class EffectPanTiltComponent implements OnInit {\n @ViewChild('panTiltGrid') panTiltGrid: ElementRef;\n\n // private line = d3.line();\n private svg;\n private path;\n\n private points = [\n [0, 500],\n [500, 0],\n [1000, 500],\n [500, 1000],\n ];\n\n private dragged = null;\n private selected = this.points[0];\n\n constructor() {}\n\n private redraw() {}\n\n ngOnInit() {}\n}\n","<svg #panTiltGrid class=\"pan-tilt-grid\" width=\"150\" height=\"150\" viewBox=\"-100 -100 1200 1200\" style=\"border: 1px solid white\"></svg>\n","import { Component, OnInit } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { Effect } from '../models/effect';\nimport { EffectCurve } from '../models/effect-curve';\nimport { EffectPanTilt } from '../models/effect-pan-tilt';\nimport { EffectService } from '../services/effect.service';\nimport { PresetService } from '../services/preset.service';\nimport { UuidService } from '../services/uuid.service';\nimport { WarningDialogService } from '../services/warning-dialog.service';\nimport { LivePreviewService } from '../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-effect',\n templateUrl: './effect.component.html',\n styleUrls: ['./effect.component.css'],\n standalone: false,\n})\nexport class EffectComponent implements OnInit {\n constructor(\n private uuidService: UuidService,\n public presetService: PresetService,\n public effectService: EffectService,\n private warningDialogService: WarningDialogService,\n public livePreviewService: LivePreviewService\n ) {}\n\n ngOnInit() {}\n\n private addEffect(effect: Effect) {\n this.effectService.selectedEffect = effect;\n\n if (this.presetService.selectedPreset) {\n this.presetService.selectedPreset.effects.push(effect);\n }\n }\n\n addCurveEffect() {\n const effect = new EffectCurve();\n effect.uuid = this.uuidService.getUuid();\n this.addEffect(effect);\n this.livePreviewService.previewLive();\n }\n\n addPanTiltEffect() {\n this.addEffect(new EffectPanTilt());\n }\n\n openEffect(effect: Effect, event: any) {\n if (event) {\n this.effectService.selectedEffect = effect;\n } else {\n if (this.effectService.selectedEffect === effect) {\n this.effectService.selectedEffect = undefined;\n }\n }\n }\n\n deleteEffect(effect: Effect) {\n this.warningDialogService\n .show('designer.effect.delete-warning')\n .pipe(\n map((result) => {\n if (result) {\n this.presetService.selectedPreset.effects.splice(this.presetService.selectedPreset.effects.indexOf(effect), 1);\n this.livePreviewService.previewLive();\n }\n })\n )\n .subscribe();\n }\n}\n","<div class=\"card border-secondary panel h-100\">\n @if (presetService.selectedPreset) {\n <div class=\"card-body capability-container\">\n <div class=\"m-3\">\n <accordion [closeOthers]=\"true\">\n @for (item of presetService.selectedPreset.effects; track item; let i = $index) {\n <accordion-group [isOpen]=\"effectService.selectedEffect == item\" (isOpenChange)=\"openEffect(item, $event)\" style=\"margin-top: 1px\">\n <button class=\"btn btn-link btn-block clearfix\" accordion-heading>\n <div class=\"pull-left float-left d-flex w-100\">\n @if (item.type == 'curve') {\n <i class=\"fa fa-area-chart fa-fw my-auto\" aria-hidden=\"true\"></i>\n } @if (item.type == 'pan-tilt') {\n <i class=\"fa fa-arrows-alt fa-fw my-auto\" aria-hidden=\"true\"></i>\n }\n <span class=\"ml-2\">{{ 'designer.effect.type-' + item.type | translate }}</span>\n <div class=\"ml-auto mr-2\">\n <i\n (click)=\"item.visible = !item.visible; livePreviewService.previewLive(); $event.stopPropagation()\"\n class=\"fa fa-eye fa-fw\"\n [class.text-primary]=\"item.visible\"\n aria-hidden=\"true\"\n ></i>\n </div>\n <div class=\"mr-2\">\n <i (click)=\"this.deleteEffect(item); $event.stopPropagation()\" class=\"fa fa-trash fa-fw\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"mr-2\">\n @if (item == effectService.selectedEffect) {\n <i class=\"fa fa-caret-down fa-fw\" aria-hidden=\"true\"></i>\n } @if (item != effectService.selectedEffect) {\n <i class=\"fa fa-caret-right fa-fw\" aria-hidden=\"true\"></i>\n }\n </div>\n </div>\n </button>\n @if (item.type == 'curve') {\n <div style=\"min-width: 670px\">\n <lib-app-effect-curve [curve]=\"item\" [isSelected]=\"item == effectService.selectedEffect\"></lib-app-effect-curve>\n </div>\n } @if (item.type == 'pan-tilt') {\n <div style=\"min-width: 500px\">\n <lib-app-effect-pan-tilt></lib-app-effect-pan-tilt>\n </div>\n }\n </accordion-group>\n }\n </accordion>\n <div class=\"d-flex mx-auto mt-3\">\n <div class=\"dropdown d-flex\">\n <a\n class=\"btn btn-secondary dropdown-toggle\"\n href=\"#\"\n role=\"button\"\n id=\"dropdownMenuLink\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i> {{ 'designer.effect.add-new' | translate }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuLink\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"addCurveEffect(); (false)\">\n <i class=\"fa fa-area-chart fa-fw\" aria-hidden=\"true\"></i> {{ 'designer.effect.curve' | translate }}</a\n >\n <!-- <a class=\"dropdown-item\" href=\"#\" (click)=\"addPanTiltEffect()\">\n <i class=\"fa fa-arrows-alt fa-fw\" aria-hidden=\"true\"></i> Pan/Tilt</a> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n</div>\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Preset } from '../../models/preset';\n\n@Component({\n selector: 'lib-preset-settings',\n templateUrl: './preset-settings.component.html',\n styleUrls: ['./preset-settings.component.css'],\n standalone: false,\n})\nexport class PresetSettingsComponent implements OnInit {\n preset: Preset;\n\n name: string;\n startMillis: number;\n endMillis: number;\n fadeInMillis: number;\n fadeOutMillis: number;\n fadeInPre: boolean;\n fadeOutPost: boolean;\n\n constructor(public bsModalRef: BsModalRef) {}\n\n ngOnInit() {\n this.name = this.preset.name;\n this.startMillis = this.preset.startMillis;\n this.endMillis = this.preset.endMillis;\n this.fadeInMillis = this.preset.fadeInMillis;\n this.fadeOutMillis = this.preset.fadeOutMillis;\n this.fadeInPre = this.preset.fadeInPre;\n this.fadeOutPost = this.preset.fadeOutPost;\n }\n\n ok() {\n this.preset.name = this.name;\n\n if (this.startMillis === undefined || this.startMillis === null || (this.startMillis as any) === '') {\n this.preset.startMillis = undefined;\n } else if (!isNaN(this.startMillis) && this.startMillis >= 0) {\n this.preset.startMillis = +this.startMillis;\n }\n if (this.endMillis === undefined || this.endMillis === null || (this.endMillis as any) === '') {\n this.preset.endMillis = undefined;\n } else if (!isNaN(this.endMillis) && this.endMillis >= 0) {\n this.preset.endMillis = +this.endMillis;\n }\n if (!isNaN(this.fadeInMillis) && this.fadeInMillis >= 0) {\n this.preset.fadeInMillis = +this.fadeInMillis;\n }\n if (!isNaN(this.fadeOutMillis) && this.fadeOutMillis >= 0) {\n this.preset.fadeOutMillis = +this.fadeOutMillis;\n }\n\n this.preset.fadeInPre = this.fadeInPre;\n this.preset.fadeOutPost = this.fadeOutPost;\n\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ name }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.preset.settings-name' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"name\" (ngModelChange)=\"name = $event\" />\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.preset.settings-start' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"startMillis\" (ngModelChange)=\"startMillis = $event\" />\n </div>\n <div class=\"col-lg-1 d-flex p-0\">\n <div class=\"my-auto\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.preset.settings-end' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"endMillis\" (ngModelChange)=\"endMillis = $event\" />\n </div>\n <div class=\"col-lg-1 d-flex p-0\">\n <div class=\"my-auto\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.preset.settings-fade-in' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"fadeInMillis\" (ngModelChange)=\"fadeInMillis = $event\" />\n </div>\n <div class=\"col-lg-1 d-flex p-0\">\n <div class=\"my-auto\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\"></label>\n <div class=\"col-lg-8 d-flex\">\n <div class=\"form-check my-auto\">\n <input type=\"checkbox\" [ngModel]=\"fadeInPre\" (ngModelChange)=\"fadeInPre = $event\" class=\"form-check-input\" id=\"fadeInPre\" />\n\n <label class=\"form-check-label\" for=\"fadeInPre\">\n {{ 'designer.preset.settings-fade-in-pre' | translate }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\">{{ 'designer.preset.settings-fade-out' | translate }}</label>\n <div class=\"col-lg-7\">\n <input type=\"text\" class=\"form-control\" [ngModel]=\"fadeOutMillis\" (ngModelChange)=\"fadeOutMillis = $event\" />\n </div>\n <div class=\"col-lg-1 d-flex p-0\">\n <div class=\"my-auto\">\n {{ 'designer.misc.ms' | translate }}\n </div>\n </div>\n </div>\n\n <div class=\"form-group row\">\n <label class=\"col-lg-4 col-form-label\"></label>\n <div class=\"col-lg-8 d-flex\">\n <div class=\"form-check my-auto\">\n <input type=\"checkbox\" [ngModel]=\"fadeOutPost\" (ngModelChange)=\"fadeOutPost = $event\" class=\"form-check-input\" id=\"fadeOutPost\" />\n\n <label class=\"form-check-label\" for=\"fadeOutPost\">\n {{ 'designer.preset.settings-fade-out-post' | translate }}\n </label>\n </div>\n </div>\n </div>\n</div>\n<div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"ok()\">{{ 'designer.misc.ok' | translate }}</button>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Preset } from '../models/preset';\nimport { IntroService } from '../services/intro.service';\nimport { PresetService } from '../services/preset.service';\nimport { ProjectService } from '../services/project.service';\nimport { SceneService } from '../services/scene.service';\nimport { PresetSettingsComponent } from './preset-settings/preset-settings.component';\nimport { TreeNode } from '../tree/tree.component';\n\n@Component({\n selector: 'lib-app-preset',\n templateUrl: './preset.component.html',\n styleUrls: ['./preset.component.css'],\n standalone: false,\n})\nexport class PresetComponent implements OnInit {\n treeNodes: TreeNode[] = [\n {\n id: 1,\n name: 'root1',\n isFolder: true,\n children: [\n { id: 2, name: 'child1', isFolder: false },\n { id: 3, name: 'child2', isFolder: false },\n ],\n },\n {\n id: 4,\n name: 'root2',\n isFolder: true,\n children: [\n { id: 5, name: 'child1', isFolder: false },\n { id: 6, name: 'child2', isFolder: false },\n ],\n },\n ];\n\n constructor(\n public presetService: PresetService,\n public sceneService: SceneService,\n public projectService: ProjectService,\n public introService: IntroService,\n private modalService: BsModalService\n ) {}\n\n ngOnInit() {}\n\n onActivate(node: TreeNode) {\n console.log(node);\n }\n\n selectPreset(index: number) {\n this.projectService.project.previewPreset = true;\n this.presetService.selectPreset(index);\n }\n\n enableCheckbox(): boolean {\n return this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1;\n }\n\n activatePreset(active: boolean, index: number) {\n if (this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1) {\n const uuid = this.projectService.project.presets[index].uuid;\n\n if (active) {\n // Activate a new uuid\n this.sceneService.selectedScenes[0].presetUuids.push(uuid);\n } else {\n // Remove the uuid\n for (let i = 0; i < this.sceneService.selectedScenes[0].presetUuids.length; i++) {\n if (this.sceneService.selectedScenes[0].presetUuids[i] === uuid) {\n this.sceneService.selectedScenes[0].presetUuids.splice(i, 1);\n return;\n }\n }\n }\n }\n }\n\n addPreset() {\n this.presetService.addPreset();\n\n if (this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1) {\n this.sceneService.selectedScenes[0].presetUuids.push(this.presetService.selectedPreset.uuid);\n }\n }\n\n removePreset() {\n if (!this.presetService.selectedPreset) {\n return;\n }\n\n this.projectService.project.presets.splice(this.projectService.project.presets.indexOf(this.presetService.selectedPreset), 1);\n this.presetService.selectPreset(0);\n }\n\n openSettings(preset: Preset) {\n const bsModalRef = this.modalService.show(PresetSettingsComponent, {\n keyboard: true,\n ignoreBackdropClick: false,\n class: '',\n initialState: { preset },\n });\n }\n}\n","<div\n class=\"card border-secondary h-100 panel card-intro-preset card-intro-active\"\n [class.card-intro-active]=\"introService.showStep('presets')\"\n>\n <div class=\"card-header d-flex\">\n <div>\n {{ 'designer.preset.title' | translate }}\n </div>\n <div class=\"ml-auto\">\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"removePreset(); (false)\"\n ><i class=\"fa fa-minus-circle fa-fw\" aria-hidden=\"true\"></i\n ></a>\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"addPreset(); (false)\"\n ><i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i\n ></a>\n </div>\n </div>\n\n <div class=\"card-body h-100 p-0\">\n <!-- List of presets -->\n <!-- <lib-tree [nodes]=\"treeNodes\" (activate)=\"onActivate($event)\">\n <ng-template #nodeTemplate let-node>\n <span>{{ node.name }}</span>\n </ng-template>\n </lib-tree> -->\n\n <div class=\"list-group\" [sortablejs]=\"projectService.project.presets\">\n @for (item of projectService.project.presets; track item; let i = $index) {\n <div\n class=\"list-group-item\"\n (click)=\"selectPreset(i)\"\n [class.active-light]=\"!projectService.project.previewPreset && item == presetService.selectedPreset\"\n [class.active]=\"projectService.project.previewPreset && item == presetService.selectedPreset\"\n [class.inactive-list-item]=\"!sceneService.presetIsSelected(item)\"\n >\n <div class=\"row d-flex\" style=\"cursor: pointer\">\n <div class=\"col-auto list-sort-handle my-auto\" style=\"cursor: move; cursor: -webkit-grabbing\">\n <i class=\"fa fa-bars\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n [disabled]=\"!enableCheckbox()\"\n class=\"form-check-input\"\n id=\"active\"\n [ngModel]=\"sceneService.presetIsSelected(item)\"\n (ngModelChange)=\"activatePreset($event, i)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n <div>\n {{ item.name }}\n </div>\n <div class=\"my-auto ml-auto mr-2 d-flex\">\n <button type=\"button\" class=\"btn btn-secondary btn-sm py-0 px-1\" (click)=\"openSettings(item); (false)\">...</button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { ProjectService } from '../services/project.service';\nimport { LivePreviewService } from '../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-master-dimmer',\n templateUrl: './master-dimmer.component.html',\n styleUrls: ['./master-dimmer.component.css'],\n standalone: false,\n})\nexport class MasterDimmerComponent implements OnInit {\n constructor(\n public projectService: ProjectService,\n private changeDetectorRef: ChangeDetectorRef,\n private livePreviewService: LivePreviewService\n ) {}\n\n ngOnInit() {}\n\n setValue(value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (value < 0 || value > 1) {\n return;\n }\n\n this.projectService.project.masterDimmerValue = value;\n this.changeDetectorRef.detectChanges();\n this.livePreviewService.previewLive();\n }\n\n getValue(): number {\n return Math.round(this.projectService.project.masterDimmerValue * 100 * 100) / 100;\n }\n}\n","<div class=\"card border-secondary h-100\">\n <!-- For larger screens vertically -->\n <div class=\"d-none d-md-flex card-body h-100\" style=\"flex-direction: column\">\n <div class=\"mb-3 w-100 d-flex\">\n <i class=\"icon-dimmer m-auto\" style=\"font-size: 2em\"></i>\n </div>\n\n <div class=\"mb-4 w-100 d-flex\">\n <input\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"getValue()\"\n (ngModelChange)=\"setValue($event / 100)\"\n style=\"width: 42px; height: 23px; text-align: center; font-size: 12px; font-family: monospace\"\n />\n </div>\n\n <div class=\"h-100 w-100 d-flex\">\n <mv-slider\n class=\"mx-auto\"\n [value]=\"projectService?.project?.masterDimmerValue\"\n (change)=\"setValue($event.newValue)\"\n [orientation]=\"'vertical'\"\n [reversed]=\"true\"\n style=\"height: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"0\"\n [max]=\"1\"\n [step]=\"0.001\"\n ></mv-slider>\n </div>\n </div>\n\n <!-- For smaller screens horizontally -->\n <div class=\"d-flex d-md-none card-body h-100\">\n <div class=\"mb-3 d-flex my-auto\">\n <i class=\"icon-dimmer m-auto\" style=\"font-size: 2em\"></i>\n </div>\n\n <div class=\"h-100 w-100 d-flex my-auto mx-3\">\n <mv-slider\n class=\"mx-auto\"\n [value]=\"projectService?.project?.masterDimmerValue\"\n (change)=\"setValue($event.newValue)\"\n [orientation]=\"'horizontal'\"\n style=\"width: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"0\"\n [max]=\"1\"\n [step]=\"0.001\"\n ></mv-slider>\n </div>\n\n <div class=\"mb-4 d-flex my-auto\">\n <input\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"getValue()\"\n (ngModelChange)=\"setValue($event / 100)\"\n style=\"width: 42px; height: 23px; text-align: center; font-size: 12px; font-family: monospace\"\n />\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { CachedFixtureCapability } from '../../../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../../../models/cached-fixture-channel';\nimport { FixtureProfile } from '../../../models/fixture-profile';\nimport { PresetService } from '../../../services/preset.service';\nimport { LivePreviewService } from '../../../services/live-preview.service';\n\n@Component({\n selector: 'lib-app-fixture-capability-channel',\n templateUrl: './fixture-capability-channel.component.html',\n styleUrls: ['./fixture-capability-channel.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class FixtureCapabilityChannelComponent implements OnInit {\n @ViewChild('sliderValue', { static: false }) sliderValue: ElementRef;\n\n selectedCapability: CachedFixtureCapability;\n _channel: CachedFixtureChannel;\n\n defaultValue = 0;\n value = 0;\n templateValue = 0;\n description: string;\n\n hasRange = false;\n rangeMin = 0;\n rangeMax = 0;\n descriptionStart: string;\n descriptionEnd: string;\n\n valueSetTimer: any;\n\n @Input()\n profile: FixtureProfile;\n\n @Input()\n set channel(value: CachedFixtureChannel) {\n this._channel = value;\n this.updateChannel();\n }\n\n @Input()\n capabilityIndex: number;\n\n constructor(private presetService: PresetService, private livePreviewService: LivePreviewService) {}\n\n private updateChannel() {\n this.selectedCapability = this._channel.capabilities[0];\n\n this.value = this.presetService.getChannelValue(this._channel.name, this.profile.uuid);\n this.calculateTemplateValue();\n\n if (this.value >= 0) {\n for (const capability of this._channel.capabilities) {\n if (\n capability.capability.dmxRange.length > 0 &&\n capability.capability.dmxRange[0] <= this.value &&\n this.value <= capability.capability.dmxRange[1]\n ) {\n this.selectedCapability = capability;\n break;\n }\n }\n }\n\n this.defaultValue = this.getDefaultValue();\n this.description = this.getDescription(this.selectedCapability);\n\n this.hasRange = this.capabilityHasRange();\n this.rangeMin = this.getRangeMin();\n this.rangeMax = this.getRangeMax();\n this.descriptionStart = this.getDescriptionStart(this.selectedCapability);\n this.descriptionEnd = this.getDescriptionEnd(this.selectedCapability);\n }\n\n capabilityHasRange(): boolean {\n if (this._channel?.capabilities?.length === 1) {\n // TODO does this work in all cases? if we have no option, it's always a range?\n return true;\n }\n\n if (\n this.selectedCapability?.capability.angleStart ||\n this.selectedCapability?.capability.speedStart ||\n this.selectedCapability?.capability.brightnessStart ||\n this.selectedCapability?.capability.durationStart ||\n this.selectedCapability?.capability.colorTemperatureStart ||\n this.selectedCapability?.capability.soundSensitivityStart ||\n this.selectedCapability?.capability.horizontalAngleStart ||\n this.selectedCapability?.capability.verticalAngleStart ||\n this.selectedCapability?.capability.distanceStart ||\n this.selectedCapability?.capability.openPercentStart ||\n this.selectedCapability?.capability.frostIntensityStart ||\n this.selectedCapability?.capability.fogOutputStart ||\n this.selectedCapability?.capability.timeStart ||\n this.selectedCapability?.capability.insertionStart ||\n this.selectedCapability?.capability.colorsStart\n ) {\n return true;\n }\n\n return false;\n }\n\n getDescriptionStart(capability: CachedFixtureCapability) {\n if (!capability || !capability.capability) {\n return '';\n }\n return (\n capability.capability.angleStart ||\n capability.capability.speedStart ||\n capability.capability.brightnessStart ||\n capability.capability.durationStart ||\n capability.capability.colorTemperatureStart ||\n capability.capability.soundSensitivityStart ||\n capability.capability.horizontalAngleStart ||\n capability.capability.verticalAngleStart ||\n capability.capability.distanceStart ||\n capability.capability.openPercentStart ||\n capability.capability.frostIntensityStart ||\n capability.capability.fogOutputStart ||\n capability.capability.timeStart ||\n capability.capability.insertionStart ||\n capability.capability.colorsStart\n )?.toString();\n }\n\n getDescriptionEnd(capability: CachedFixtureCapability) {\n if (!capability || !capability.capability) {\n return '';\n }\n return (\n capability.capability.angleEnd ||\n capability.capability.speedEnd ||\n capability.capability.brightnessEnd ||\n capability.capability.durationEnd ||\n capability.capability.colorTemperatureEnd ||\n capability.capability.soundSensitivityEnd ||\n capability.capability.horizontalAngleEnd ||\n capability.capability.verticalAngleEnd ||\n capability.capability.distanceEnd ||\n capability.capability.openPercentEnd ||\n capability.capability.frostIntensityEnd ||\n capability.capability.fogOutputEnd ||\n capability.capability.timeEnd ||\n capability.capability.insertionEnd ||\n capability.capability.colorsEnd\n )?.toString();\n }\n\n getDescription(capability: CachedFixtureCapability) {\n if (!capability || !capability.capability) {\n return '';\n }\n return (\n capability.capability.slotNumber ||\n capability.capability.shutterEffect ||\n capability.capability.angle ||\n capability.capability.speed ||\n capability.capability.brightness ||\n capability.capability.duration ||\n capability.capability.colorTemperature ||\n capability.capability.soundSensitivity ||\n capability.capability.horizontalAngle ||\n capability.capability.verticalAngle ||\n capability.capability.distance ||\n capability.capability.openPercent ||\n capability.capability.frostIntensity ||\n capability.capability.fogOutput ||\n capability.capability.time ||\n capability.capability.insertion\n )?.toString();\n }\n\n private getRangeMin(): number {\n if (this.selectedCapability.capability.dmxRange.length > 0) {\n return this.selectedCapability.capability.dmxRange[0];\n }\n\n return 0;\n }\n\n private getRangeMax(): number {\n if (this.selectedCapability.capability.dmxRange.length > 0) {\n return this.selectedCapability.capability.dmxRange[1];\n }\n\n return this._channel.maxValue;\n }\n\n ngOnInit() {}\n\n setValue(value: any, ignoreCapabilityRange: boolean = false) {\n if (isNaN(value)) {\n return;\n }\n\n if (!ignoreCapabilityRange && (value < this.rangeMin || value > this.rangeMax)) {\n return;\n }\n\n this.value = value;\n this.calculateTemplateValue();\n\n this.presetService.setChannelValue(this._channel.name, this.profile.uuid, value);\n if (this.sliderValue) {\n // update the value without change detector for performance reasons and only in a specific\n // interval. each value set will trigger a layout/reflow event and slow down the performance\n // TODO use the same technique in the dimmer/pan/tilt/color sliders\n if (!this.valueSetTimer) {\n this.valueSetTimer = setTimeout(() => {\n if (this.sliderValue) {\n this.sliderValue.nativeElement.value = this.value;\n }\n this.valueSetTimer = undefined;\n }, 30);\n }\n }\n this.livePreviewService.previewLive();\n }\n\n private calculateTemplateValue() {\n this.templateValue = this.value ? this.value : this.getDefaultValue();\n }\n\n private getDefaultValue(): number {\n if (this._channel.defaultValue) {\n return this._channel.defaultValue;\n }\n\n return 0;\n }\n\n changeActive(active: boolean) {\n if (active) {\n this.setValue(this.getDefaultValue(), true);\n } else {\n this.presetService.deleteChannelValue(this._channel.name, this.profile.uuid);\n this.selectedCapability = this._channel.capabilities[0];\n this.value = undefined;\n this.calculateTemplateValue();\n }\n this.livePreviewService.previewLive();\n }\n\n capabilitySelected() {\n // select the center value of the selected capability\n if (this.capabilityHasRange()) {\n this.setValue(this.selectedCapability.capability.dmxRange[0], true);\n } else {\n this.setValue(this.selectedCapability.centerValue, true);\n }\n this.updateChannel();\n }\n}\n","<div class=\"card border-secondary h-100\" [class.capability-deactivated]=\"value == undefined\" style=\"min-height: 200px\">\n <div class=\"card-header\">\n <div class=\"my-auto\">\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityGeneric{{ capabilityIndex }}Active\"\n [ngModel]=\"value != undefined\"\n (ngModelChange)=\"changeActive($event)\"\n />\n <label class=\"form-check-label\" for=\"capabilityGeneric{{ capabilityIndex }}Active\">\n {{ _channel?.name }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"card-body h-100 d-flex\" style=\"flex-direction: column; overflow: hidden\">\n <div class=\"row h-100\">\n <!-- display all options, if there is more than one -->\n @if (_channel.capabilities?.length > 1) {\n <div class=\"col mr-3\" style=\"overflow-y: auto\">\n @for (capability of _channel.capabilities; track capability; let i = $index) {\n <div class=\"form-check\">\n <input\n [(ngModel)]=\"selectedCapability\"\n (change)=\"capabilitySelected()\"\n class=\"form-check-input\"\n type=\"radio\"\n name=\"capabilityGeneric{{ capabilityIndex }}Option\"\n id=\"capabilityGeneric{{ capabilityIndex }}Option{{ i }}\"\n [value]=\"capability\"\n />\n <label style=\"max-width: 200px\" class=\"form-check-label\" for=\"capabilityGeneric{{ capabilityIndex }}Option{{ i }}\">\n {{ 'designer.fixtureCapabilityType.' + capability.capability.type | translate }}@if (getDescription(capability)) {\n <span> ({{ getDescription(capability) }})</span>\n }<small\n >@for (color of capability.capability.colors; track color) {\n <div class=\"color\" [style.background-color]=\"color\"></div>\n } @if (getDescriptionStart(capability)) {\n <small> ({{ getDescriptionStart(capability) }} to {{ getDescriptionEnd(capability) }})</small>\n } @if (capability.capability.comment) {\n <span> - </span>\n } {{ capability.capability.comment }}</small\n >\n @if (capability.capability.soundControlled) {\n <i\n class=\"fa fa-microphone pl-1\"\n popover=\"{{ 'designer.fixture.capability-sound-controlled' | translate }}\"\n container=\"body\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n aria-hidden=\"true\"\n ></i>\n } @if (capability.capability.randomTiming) {\n <i\n class=\"fa fa-random pl-1\"\n popover=\"{{ 'designer.fixture.capability-random-timing' | translate }}\"\n container=\"body\"\n placement=\"top\"\n triggers=\"mouseenter:mouseleave\"\n aria-hidden=\"true\"\n ></i>\n }\n </label>\n </div>\n }\n </div>\n }\n\n <!-- display a slider to select the value for the currently selected capability, if it has a range -->\n @if (hasRange) {\n <div class=\"col col-auto d-flex mx-auto\" [class.pl-0]=\"_channel.capabilities?.length > 1\" style=\"flex-direction: column\">\n <div class=\"mb-2 w-100 d-flex\">\n <input\n #sliderValue\n class=\"mx-auto\"\n type=\"text\"\n [ngModel]=\"templateValue\"\n (ngModelChange)=\"setValue($event)\"\n style=\"width: 45px; height: 20px; text-align: center; font-size: 12px; font-family: monospace\"\n />\n </div>\n <div class=\"mx-auto mb-2\">{{ descriptionEnd }}</div>\n <div class=\"h-100 w-100 d-flex\">\n <mv-slider\n #slider\n class=\"mx-auto\"\n [value]=\"templateValue\"\n (change)=\"setValue($event.newValue)\"\n [orientation]=\"'vertical'\"\n [reversed]=\"true\"\n style=\"height: 100%\"\n [tooltip]=\"'hide'\"\n [min]=\"rangeMin\"\n [max]=\"rangeMax\"\n [step]=\"1\"\n ></mv-slider>\n </div>\n <div class=\"mx-auto mt-2\">{{ descriptionStart }}</div>\n </div>\n }\n </div>\n </div>\n</div>\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CachedFixtureChannel } from '../../models/cached-fixture-channel';\nimport { FixtureProfile } from '../../models/fixture-profile';\nimport { PresetService } from '../../services/preset.service';\nimport { ProjectService } from '../../services/project.service';\n\n@Component({\n selector: 'lib-app-fixture-channel',\n templateUrl: './fixture-channel.component.html',\n styleUrls: ['./fixture-channel.component.css'],\n standalone: false,\n})\nexport class FixtureChannelComponent implements OnInit, OnDestroy {\n public channelCapabilities: Map<FixtureProfile, CachedFixtureChannel[]> = new Map<FixtureProfile, CachedFixtureChannel[]>();\n public profiles: FixtureProfile[] = [];\n public selectedProfiles: FixtureProfile[] = [];\n\n private fixtureSelectionChangedSubscription: Subscription;\n private previewSelectionChangedSubscription: Subscription;\n\n constructor(public presetService: PresetService, private changeDetectorRef: ChangeDetectorRef, public projectService: ProjectService) {\n this.fixtureSelectionChangedSubscription = this.presetService.fixtureSelectionChanged.subscribe(() => {\n this.calculateProfiles();\n });\n\n this.previewSelectionChangedSubscription = this.presetService.previewSelectionChanged.subscribe(() => {\n this.calculateProfiles();\n });\n }\n\n ngOnInit() {\n this.calculateProfiles();\n }\n\n ngOnDestroy() {\n this.fixtureSelectionChangedSubscription.unsubscribe();\n this.previewSelectionChangedSubscription.unsubscribe();\n }\n\n private calculateChannelCapabilities() {\n this.channelCapabilities = this.presetService.getSelectedProfileChannels(this.selectedProfiles);\n\n this.changeDetectorRef.detectChanges();\n }\n\n private calculateProfiles() {\n // calculate all profiels\n this.profiles = this.presetService.getSelectedProfiles();\n\n // select all profiles by default\n this.selectedProfiles = [...this.profiles];\n\n this.calculateChannelCapabilities();\n }\n\n changeProfileSelection($event: any, profile: FixtureProfile) {\n if (this.selectedProfiles.indexOf(profile) >= 0) {\n this.selectedProfiles.splice(this.selectedProfiles.indexOf(profile), 1);\n } else {\n this.selectedProfiles.push(profile);\n }\n\n this.calculateChannelCapabilities();\n }\n\n isChrome(): boolean {\n if (navigator.appVersion.indexOf('Chrome/') !== -1) {\n return true;\n }\n return false;\n }\n}\n","<div class=\"card border-secondary panel h-100\">\n <div class=\"card-body capability-container d-flex h-100\" style=\"overflow-y: hidden\">\n <!-- h-100 needs to be applied in chrome to avoid performance issues with many layouts (reflows)\n during sliding. But the class must not be applied e.g. in Safari, because the bottom margin is not correct\n anymore afterwards. -->\n @if (presetService.selectedPreset) {\n <div class=\"row m-0 pl-3\" [class.h-100]=\"isChrome()\">\n <!-- profile selection -->\n @if (profiles.length > 1) {\n <div class=\"col col-auto p-3 my-3 mr-3\" style=\"height: calc(100% - 2rem); border: solid 1px #444; border-right: none\">\n @for (profile of profiles; track profile; let i = $index) {\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"capabilityFilter{{ i }}\"\n [ngModel]=\"selectedProfiles.indexOf(profile) >= 0\"\n (ngModelChange)=\"changeProfileSelection($event, profile)\"\n />\n <label class=\"form-check-label\" for=\"capabilityFilter{{ i }}\">\n {{ profile.name }}\n </label>\n </div>\n }\n </div>\n }\n <!-- all channel capabilities -->\n @for (entry of channelCapabilities | keyvalue; track entry; let i = $index) { @for (capability of entry.value; track capability; let j\n = $index) {\n <div class=\"col col-auto p-0 my-3 mr-3\" style=\"height: calc(100% - 2rem)\">\n <lib-app-fixture-capability-channel [profile]=\"entry.key\" [channel]=\"capability\" [capabilityIndex]=\"i * 10000 + j\">\n </lib-app-fixture-capability-channel>\n </div>\n } }\n <!-- fix spacing at the end -->\n <div class=\"col col-auto p-0 my-3 mr-3\">&nbsp;</div>\n </div>\n } @if (projectService.project.fixtures.length == 0) {\n <div class=\"m-auto\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures' | translate }}</p>\n </div>\n } @if ( projectService.project.fixtures.length > 0 && presetService.selectedPreset && presetService.selectedPreset.fixtures.length == 0\n ) {\n <div class=\"m-auto\">\n <p class=\"m-auto\" style=\"color: #717171\">{{ 'designer.fixture.no-fixtures-selected' | translate }}</p>\n </div>\n }\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { IntroService } from '../services/intro.service';\n\n@Component({\n selector: 'lib-app-intro',\n templateUrl: './intro.component.html',\n styleUrls: ['./intro.component.css'],\n standalone: false,\n})\nexport class IntroComponent implements OnInit {\n constructor(public introService: IntroService) {}\n\n ngOnInit() {}\n\n close() {\n this.introService.setShowIntro(false);\n }\n}\n","@if (introService.showIntro) {\n<div\n class=\"card border-secondary h-100 panel card-intro-active\"\n [ngStyle]=\"{\n top: 'calc(' + introService.positionTopPercentage + '% - 150px)',\n left: 'calc(' + introService.positionLeftPercentage + '% - 200px)'\n }\"\n>\n <div class=\"card-header d-flex\">\n <div>\n <i class=\"fa fa-info-circle mr-1\" aria-hidden=\"true\"></i>\n {{ 'designer.intro.title-' + introService.activeStep | translate }}\n </div>\n <div class=\"ml-auto\">\n <a href=\"#\" class=\"btn btn-secondary m-0, p-0\" (click)=\"close(); (false)\"><i class=\"fa fa-times\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n <div class=\"card-body h-100\">\n <p>{{ 'designer.intro.step-' + introService.activeStep | translate }}</p>\n </div>\n <div class=\"card-footer\">\n @if (introService.activeStep != 'start') {\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"introService.back()\">\n <i class=\"fa fa-chevron-left\" aria-hidden=\"true\"></i> {{ 'designer.intro.back' | translate }}\n </button>\n } @if (introService.activeStep != 'finish') {\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"introService.next()\">\n {{ 'designer.intro.next' | translate }} <i class=\"fa fa-chevron-right\" aria-hidden=\"true\"></i>\n </button>\n } @if (introService.activeStep == 'finish') {\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"close()\">\n {{ 'designer.intro.close' | translate }}\n </button>\n }\n </div>\n</div>\n}\n","import { AfterViewInit, Component, HostListener, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { map } from 'rxjs/operators';\nimport Split from 'split.js';\nimport { PreviewComponent } from './preview/preview.component';\nimport { ProjectBrowserComponent } from './project/project-browser/project-browser.component';\nimport { ProjectImportComponent } from './project/project-import/project-import.component';\nimport { ProjectSaveComponent } from './project/project-save/project-save.component';\nimport { ProjectShareComponent } from './project/project-share/project-share.component';\nimport { ConfigService } from './services/config.service';\nimport { ErrorDialogService } from './services/error-dialog.service';\nimport { FixturePoolService } from './services/fixture-pool.service';\nimport { FixtureService } from './services/fixture.service';\nimport { HotkeyTargetExcludeService } from './services/hotkey-target-exclude.service';\nimport { IntroService } from './services/intro.service';\nimport { ProjectLoadService } from './services/project-load.service';\nimport { ProjectService } from './services/project.service';\nimport { TimelineService } from './services/timeline.service';\nimport { UserEnsureLoginService } from './services/user-ensure-login.service';\nimport { UserService } from './services/user.service';\nimport { WarningDialogService } from './services/warning-dialog.service';\nimport { TimelineComponent } from './timeline/timeline.component';\nimport { UserRegisterComponent } from './user/user-register/user-register.component';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { EffectService } from './services/effect.service';\nimport { UniverseConfig } from './models/universe-config';\n\n@Component({\n selector: 'lib-designer',\n templateUrl: './designer.component.html',\n styleUrls: ['./designer.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class DesignerComponent implements OnInit, AfterViewInit {\n @Input()\n set menuHeightPx(value: number) {\n this.configService.menuHeightPx = value;\n this.configService.menuHeightChanged.next();\n }\n\n @Input()\n set externalCompositionsAvailable(value: boolean) {\n this.timelineService.externalCompositionsAvailable = value;\n }\n\n @Input()\n set restUrl(value: string) {\n this.configService.restUrl = value;\n }\n\n @Input()\n set enableMediaLibrary(value: boolean) {\n this.configService.enableMediaLibrary = value;\n }\n\n @Input()\n set loginAvailable(value: boolean) {\n this.configService.loginAvailable = value;\n }\n\n @Input()\n set shareAvailable(value: boolean) {\n this.configService.shareAvailable = value;\n }\n\n @Input()\n set languageSwitch(value: boolean) {\n this.configService.languageSwitch = value;\n }\n\n @Input()\n set livePreview(value: boolean) {\n this.configService.livePreview = value;\n }\n\n @Input()\n set localProfiles(value: boolean) {\n this.configService.localProfiles = value;\n }\n\n @Input()\n set intro(value: boolean) {\n this.configService.intro = value;\n this.introService.refresh();\n }\n\n @Input()\n set uniqueProjectNames(value: boolean) {\n this.configService.uniqueProjectNames = value;\n }\n\n @Input()\n set dropzoneChunking(value: boolean) {\n this.configService.dropzoneChunking = value;\n }\n\n @Input()\n set universes(value: UniverseConfig[]) {\n this.configService.universes = value || [];\n }\n\n @Input()\n set freeUniverseEdit(value: boolean) {\n this.configService.freeUniverseEdit = value;\n }\n\n // the size of the menu used in the designer\n private designerMenuSizePx = 20;\n\n private splitGutterSizePx = 13;\n\n public totalMenuHeightPx = 0;\n\n currentTab = 'properties';\n\n @ViewChild(PreviewComponent)\n previewComponent: PreviewComponent;\n\n @ViewChild(TimelineComponent)\n timelineComponent: TimelineComponent;\n\n constructor(\n private translateService: TranslateService,\n public projectService: ProjectService,\n public configService: ConfigService,\n private fixturePoolService: FixturePoolService,\n private hotkeyTargetExcludeService: HotkeyTargetExcludeService,\n private modalService: BsModalService,\n public userService: UserService,\n private userEnsureLoginService: UserEnsureLoginService,\n private projectLoadService: ProjectLoadService,\n private warningDialogService: WarningDialogService,\n private errorDialogService: ErrorDialogService,\n private fixtureService: FixtureService,\n private timelineService: TimelineService,\n public introService: IntroService,\n private effectService: EffectService\n ) {\n this.configService.menuHeightChanged.subscribe(() => {\n this.calcTotalMenuHeight();\n });\n }\n\n private loadError(response: any) {\n console.error(response);\n let msg = 'designer.project.open-error';\n let error: string;\n if (response instanceof HttpErrorResponse) {\n error = response && response.error ? response.error.error : 'unknown';\n if (error === 'no-permission') {\n msg = 'designer.project.open-no-permission-error';\n error = undefined;\n } else {\n msg = 'designer.project.open-error';\n }\n } else {\n error = response && response.message ? response.message : 'unknown';\n }\n this.errorDialogService.show(msg, error).subscribe(() => {\n this.projectLoadService.new();\n });\n }\n\n ngOnInit() {\n if (localStorage.getItem('language')) {\n this.translateService.use(localStorage.getItem('language'));\n } else {\n this.translateService.use('en');\n }\n\n this.calcTotalMenuHeight();\n\n const urlParams = new URLSearchParams(window.location.search);\n const projectId = urlParams.get('id');\n const projectName = urlParams.get('name');\n let shareToken = urlParams.get('token');\n\n if (projectId) {\n // load a project by query param ID\n if (!shareToken) {\n shareToken = '';\n }\n\n this.projectLoadService.load(Number.parseInt(projectId, 10), projectName, shareToken).subscribe(\n () => {},\n (response) => {\n this.loadError(response);\n }\n );\n } else if (\n (this.userService.isLoggedIn() || !this.configService.loginAvailable) &&\n (this.userService.getAutoLoadProjectId() || this.userService.getAutoLoadProjectName())\n ) {\n // restore the last saved project\n this.projectLoadService.load(this.userService.getAutoLoadProjectId(), this.userService.getAutoLoadProjectName()).subscribe(\n () => {},\n (response) => {\n this.loadError(response);\n }\n );\n } else {\n // load the new project template\n this.projectLoadService.template();\n }\n }\n\n private calcTotalMenuHeight() {\n this.totalMenuHeightPx = this.designerMenuSizePx + this.splitGutterSizePx + this.configService.menuHeightPx;\n }\n\n private onResize() {\n if (this.previewComponent) {\n this.previewComponent.onResize();\n }\n\n if (this.timelineComponent) {\n this.timelineComponent.onResize();\n }\n }\n\n ngAfterViewInit(): void {\n // Set up the splitter\n setTimeout(() => {\n Split(['#row1', '#row2', '#row3'], {\n sizes: [42, 40, 18],\n direction: 'vertical',\n cursor: 'row-resize',\n snapOffset: 0,\n gutterSize: this.splitGutterSizePx,\n onDrag: this.onResize.bind(this),\n });\n\n Split(['#scenes', '#presets', '#preview'], {\n sizes: [20, 20, 60],\n snapOffset: 0,\n gutterSize: this.splitGutterSizePx,\n onDrag: this.onResize.bind(this),\n });\n\n Split(['#capabilities', '#fixtures', '#masterDimmer'], {\n sizes: [70, 24, 6],\n snapOffset: 0,\n gutterSize: this.splitGutterSizePx,\n onDrag: this.onResize.bind(this),\n minSize: 50,\n });\n\n this.onResize();\n });\n }\n\n openTab(tab: string) {\n // open a side tab (e.g. effects, channels, settings, etc.)\n\n if (tab === 'settings') {\n this.fixtureService.settingsSelection = true;\n } else {\n this.fixtureService.settingsSelection = false;\n }\n\n if (tab === 'effects') {\n this.effectService.effectsOpen = true;\n } else {\n this.effectService.effectsOpen = false;\n }\n this.effectService.effectsOpenChanged.next();\n\n this.currentTab = tab;\n }\n\n openFixturePool() {\n this.fixturePoolService.open();\n }\n\n projectNew() {\n this.warningDialogService\n .show('designer.misc.warning-proceed-unsaved')\n .pipe(\n map((result) => {\n if (result) {\n this.projectLoadService.new();\n }\n })\n )\n .subscribe();\n }\n\n projectOpen() {\n this.warningDialogService\n .show('designer.misc.warning-proceed-unsaved')\n .pipe(\n map((result) => {\n if (result) {\n this.userEnsureLoginService.login().subscribe(() => {\n this.modalService.show(ProjectBrowserComponent, { keyboard: true, ignoreBackdropClick: false });\n });\n }\n })\n )\n .subscribe();\n }\n\n projectSave() {\n this.userEnsureLoginService.login().subscribe(() => {\n if (this.projectService.project.name) {\n // this project has been saved before -> just save it again\n this.projectService.save(this.projectService.project);\n } else {\n // this project has not yet been saved -> show the save as-dialog\n this.modalService.show(ProjectSaveComponent, { keyboard: true, ignoreBackdropClick: false });\n }\n });\n }\n\n projectSaveAs() {\n this.userEnsureLoginService.login().subscribe(() => {\n this.modalService.show(ProjectSaveComponent, { keyboard: true, ignoreBackdropClick: false });\n });\n }\n\n userRegister() {\n this.modalService.show(UserRegisterComponent, { keyboard: true, ignoreBackdropClick: false });\n }\n\n projectImport() {\n this.warningDialogService\n .show('designer.misc.warning-proceed-unsaved')\n .pipe(\n map((result) => {\n if (result) {\n this.modalService.show(ProjectImportComponent, { keyboard: true, ignoreBackdropClick: false });\n }\n })\n )\n .subscribe();\n }\n\n projectExport() {\n const json = JSON.stringify(this.projectService.project, null, 2);\n const element = document.createElement('a');\n element.setAttribute('href', 'data:text/json;charset=UTF-8,' + encodeURIComponent(json));\n element.setAttribute('download', this.projectService.project.name + '.rsd');\n element.style.display = 'none';\n document.body.appendChild(element);\n element.click();\n document.body.removeChild(element);\n }\n\n projectShare() {\n if (!this.projectService.project.id) {\n // a save is required first\n this.errorDialogService.show('designer.project.share-no-save').subscribe();\n return;\n }\n\n // ignore backdrop click, because selecting the link text will also close the modal\n this.modalService.show(ProjectShareComponent, { keyboard: true, ignoreBackdropClick: true });\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeyboardEvent(event: any) {\n if (this.hotkeyTargetExcludeService.exclude(event)) {\n return;\n }\n\n if (event.key === 'p') {\n this.openFixturePool();\n\n // prevent checkboxes being toggled, if in focus e.g.\n event.stopPropagation();\n event.preventDefault();\n }\n\n if ((event.ctrlKey || event.metaKey) && event.key === 'n') {\n this.projectNew();\n event.stopPropagation();\n event.preventDefault();\n }\n\n if ((event.ctrlKey || event.metaKey) && event.key === 's') {\n this.projectSave();\n event.stopPropagation();\n event.preventDefault();\n }\n\n if ((event.ctrlKey || event.metaKey) && event.key === 'o') {\n this.projectOpen();\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n switchLanguage(language: string) {\n this.translateService.use(language);\n localStorage.setItem('language', language);\n }\n}\n","<!-- Wrap the whole component inside a div to encapsulate the CSS -->\n\n<!-- 100 % height minus the menu bar above and the gutter size of 13 px -->\n<!-- <div style=\"height: calc(100% - 33px)\"> -->\n<div id=\"designer\" [ngStyle]=\"{ height: 'calc(100% - ' + totalMenuHeightPx + 'px)' }\">\n <!-- Navigation -->\n <nav\n class=\"navbar navbar-expand-lg navbar-light bg-light border-secondary\"\n style=\"border-bottom: 1px solid #444; height: 20px; z-index: 9999\"\n >\n <!-- Menu buttons -->\n <ul class=\"navbar-nav mr-auto\">\n <li class=\"nav-item dropdown\">\n <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"fileDropdown\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n {{ 'designer.navigation.project' | translate }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"fileDropdown\">\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectNew(); (false)\"\n ><i class=\"fa fa-fw fa-file-o\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-new' | translate }}</a\n >\n <a class=\"dropdown-item\" href=\"#\" (click)=\"projectOpen(); (false)\"\n ><i class=\"fa fa-fw fa-folder-open-o\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-open' | translate }}</a\n >\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectSave(); (false)\"\n ><i class=\"fa fa-fw fa-floppy-o\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-save' | translate }}</a\n >\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectSaveAs(); (false)\"\n ><i class=\"fa fa-fw fa-floppy-o\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-save-as' | translate }}</a\n >\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectImport(); (false)\"\n ><i class=\"fa fa-fw fa-download\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-import' | translate }}</a\n >\n <a class=\"dropdown-item d-none d-md-block\" href=\"#\" (click)=\"projectExport(); (false)\"\n ><i class=\"fa fa-fw fa-external-link\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-export' | translate }}</a\n >\n </div>\n </li>\n <li class=\"nav-item dropdown d-none d-md-block\">\n <a\n class=\"nav-link dropdown-toggle\"\n href=\"#\"\n id=\"settingsDropdown\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n {{ 'designer.navigation.settings' | translate }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"settingsDropdown\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"openFixturePool(); (false)\">{{ 'designer.navigation.fixture-pool' | translate }}</a>\n <!-- <a class=\"dropdown-item\" href=\"#\">{{ 'designer.navigation.stage' | translate }}</a> -->\n </div>\n </li>\n <li class=\"nav-item dropdown d-none d-md-block\">\n <a\n class=\"nav-link dropdown-toggle\"\n href=\"#\"\n id=\"settingsDropdown\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n {{ 'designer.navigation.help' | translate }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"settingsDropdown\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"introService.reset(); (false)\">{{ 'designer.navigation.reset-intro' | translate }}</a>\n <a class=\"dropdown-item\" href=\"https://rocketshow.net/support/\" target=\"_blank\">{{\n 'designer.navigation.support' | translate\n }}</a>\n </div>\n </li>\n </ul>\n\n <ul class=\"navbar-nav\">\n @if (configService.shareAvailable) {\n <li class=\"nav-item d-none d-md-flex\" data-toggle=\"collapse\">\n <a class=\"nav-link text-primary\" (click)=\"projectShare(); (false)\" routerLinkActive=\"active\"\n ><i class=\"fa fa-share-alt\" aria-hidden=\"true\"></i> {{ 'designer.navigation.project-share' | translate }}</a\n >\n </li>\n } @if (configService.languageSwitch) {\n <li class=\"nav-item dropdown\">\n <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"settingsDropdown\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"\n ><i class=\"fa fa-globe\" aria-hidden=\"true\"></i>\n {{ 'designer.misc.language' | translate }}\n </a>\n <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"settingsDropdown\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('de'); (false)\" target=\"_blank\">Deutsch</a>\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('en'); (false)\" target=\"_blank\">English</a>\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('es'); (false)\" target=\"_blank\">Español</a>\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('fr'); (false)\" target=\"_blank\">Français</a>\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('it'); (false)\" target=\"_blank\">Italiano</a>\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('pt'); (false)\" target=\"_blank\">Português</a>\n <a class=\"dropdown-item\" href=\"#\" (click)=\"switchLanguage('zh'); (false)\" target=\"_blank\">中文</a>\n </div>\n </li>\n } @if (configService.loginAvailable && !userService.isLoggedIn()) {\n <li class=\"nav-item\" data-toggle=\"collapse\">\n <a class=\"nav-link\" (click)=\"userRegister(); (false)\" routerLinkActive=\"active\"\n ><i class=\"fa fa-user\" aria-hidden=\"true\"></i> {{ 'designer.navigation.login' | translate }}</a\n >\n </li>\n } @if (configService.loginAvailable && userService.isLoggedIn()) {\n <li class=\"nav-item dropdown\">\n <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"settingsDropdown\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"\n ><i class=\"fa fa-user\" aria-hidden=\"true\"></i>\n {{ userService.username }}\n </a>\n <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"settingsDropdown\">\n <a class=\"dropdown-item\" href=\"#\" (click)=\"userService.logout(); (false)\" target=\"_blank\"\n ><i class=\"fa fa-sign-out\" aria-hidden=\"true\"></i> {{ 'designer.navigation.logout' | translate }}</a\n >\n </div>\n </li>\n }\n </ul>\n </nav>\n\n <!-- The main content for larger screens -->\n <div class=\"h-100 d-none d-md-block\">\n <div id=\"row1\" class=\"split split-vertical clearfix pt-3 pl-3\">\n <!-- Scenes -->\n <div id=\"scenes\" class=\"split split-horizontal h-100\">\n @if (projectService.project) {\n <lib-app-scene></lib-app-scene>\n }\n </div>\n\n <!-- Presets -->\n <div id=\"presets\" class=\"split split-horizontal h-100\">\n @if (projectService.project) {\n <lib-app-preset></lib-app-preset>\n }\n </div>\n\n <!-- 3D preview -->\n <div id=\"preview\" class=\"split split-horizontal h-100 pr-3\">\n @if (projectService.project) {\n <div class=\"card border-secondary h-100\" [class.card-intro-active]=\"introService.showStep('preview')\">\n <div class=\"card-body p-0 h-100\">\n <lib-app-preview class=\"h-100\"></lib-app-preview>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div id=\"row2\" class=\"split split-vertical clearfix px-3 d-flex\" style=\"flex-direction: row\">\n <!-- Menu for the capabilities, channels, effects and settings -->\n @if (projectService.project) {\n <div class=\"col col-auto p-0\" style=\"margin-right: -1px\">\n <div class=\"nav flex-column nav-pills\" id=\"v-pills-tab\" role=\"tablist\" aria-orientation=\"vertical\">\n <a\n class=\"nav-link px-3 active\"\n (click)=\"openTab('capabilities')\"\n id=\"v-pills-capabilities-tab\"\n popover=\"{{ 'designer.misc.capabilities' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-capabilities\"\n role=\"tab\"\n aria-controls=\"v-pills-capabilities\"\n aria-selected=\"true\"\n >\n <i class=\"fa fa-bolt fa-fw\" aria-hidden=\"true\"></i>\n </a>\n <a\n class=\"nav-link px-3\"\n (click)=\"openTab('channels')\"\n id=\"v-pills-channels-tab\"\n popover=\"{{ 'designer.misc.channels' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-channels\"\n role=\"tab\"\n aria-controls=\"v-pills-channels\"\n aria-selected=\"false\"\n >\n <i class=\"fa fa-sliders fa-fw\" aria-hidden=\"true\"></i>\n </a>\n <a\n class=\"nav-link px-3\"\n (click)=\"openTab('effects')\"\n id=\"v-pills-effects-tab\"\n popover=\"{{ 'designer.misc.effects' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-effects\"\n role=\"tab\"\n aria-controls=\"v-pills-effects\"\n aria-selected=\"false\"\n >\n <i class=\"fa fa-magic fa-fw\" aria-hidden=\"true\"></i>\n </a>\n <a\n class=\"nav-link px-3\"\n (click)=\"openTab('settings')\"\n id=\"v-pills-settings-tab\"\n popover=\"{{ 'designer.misc.settings' | translate }}\"\n container=\"body\"\n placement=\"right\"\n triggers=\"mouseenter:mouseleave\"\n data-toggle=\"pill\"\n href=\"#v-pills-settings\"\n role=\"tab\"\n aria-controls=\"v-pills-settings\"\n aria-selected=\"false\"\n style=\"border-top: 1px solid #444\"\n >\n <i class=\"fa fa-cog fa-fw\" aria-hidden=\"true\"></i>\n </a>\n </div>\n </div>\n }\n\n <div id=\"capabilities\" class=\"split split-horizontal h-100\" style=\"padding-left: 1rem\">\n @if (projectService.project) {\n <div class=\"row h-100\">\n <!-- Content for the capabilities, channels, effects and settings -->\n <div class=\"col pl-0 h-100\">\n <div class=\"tab-content h-100\" id=\"v-pills-tabContent\">\n <div class=\"tab-pane h-100 show active\" id=\"v-pills-capabilities\" role=\"tabpanel\">\n <lib-app-fixture-capability></lib-app-fixture-capability>\n </div>\n <div class=\"tab-pane h-100 show\" id=\"v-pills-channels\" role=\"tabpanel\">\n <lib-app-fixture-channel></lib-app-fixture-channel>\n </div>\n <div class=\"tab-pane h-100\" id=\"v-pills-effects\" role=\"tabpanel\" aria-labelledby=\"v-pills-profile-tab\">\n <lib-app-effect></lib-app-effect>\n </div>\n <div class=\"tab-pane h-100\" id=\"v-pills-settings\" role=\"tabpanel\" aria-labelledby=\"v-pills-home-tab\">\n <lib-app-fixture-settings></lib-app-fixture-settings>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Fixtures -->\n <div id=\"fixtures\" class=\"split split-horizontal h-100\">\n @if (projectService.project) {\n <lib-app-fixture></lib-app-fixture>\n }\n </div>\n\n <!-- Master dimmer -->\n <div id=\"masterDimmer\" class=\"split split-horizontal h-100\">\n @if (projectService.project) {\n <lib-app-master-dimmer></lib-app-master-dimmer>\n }\n </div>\n </div>\n\n <!-- Timeline -->\n <div id=\"row3\" class=\"split split-vertical clearfix px-3 pb-3\" style=\"padding-bottom: 20px\">\n @if (projectService.project) {\n <lib-app-timeline></lib-app-timeline>\n }\n </div>\n </div>\n\n <!-- The components for small screens -->\n <div class=\"d-md-none p-3\">\n <div>\n @if (projectService.project) {\n <lib-app-master-dimmer></lib-app-master-dimmer>\n }\n </div>\n\n <div class=\"mt-3\">\n @if (projectService.project) {\n <lib-app-scene></lib-app-scene>\n }\n </div>\n </div>\n</div>\n\n<lib-app-intro class=\"d-none d-md-flex\"></lib-app-intro>\n","import { Component, ContentChild, EventEmitter, Input, OnChanges, Output, SimpleChanges, TemplateRef } from '@angular/core';\n\nexport interface TreeNode {\n id?: string | number;\n name?: string;\n isFolder?: boolean;\n expanded?: boolean;\n children?: TreeNode[];\n // allow arbitrary extra payload on a node\n [key: string]: any;\n}\n\nexport type TreeDropZone = 'before' | 'after' | 'inside';\n\ninterface FlatNode {\n node: TreeNode;\n level: number;\n parent: TreeNode | null;\n}\n\n// A resolved drop: where the indicator is drawn vs. where the move is applied.\n// They only differ when dropping \"after a folder, from the outside\" — the line\n// is drawn at the bottom of the folder's last child (its visual end), but the\n// node is inserted after the folder itself, at the folder's own level.\ninterface DropTarget {\n row: TreeNode; // the row the indicator line attaches to\n zone: TreeDropZone; // before / after / inside (line position or outline)\n indent: number; // px the indicator line is indented (= chosen drop level)\n ref: TreeNode; // node the dragged items are inserted relative to\n}\n\n/**\n * A lightweight, dependency-free tree:\n * - collapsible folders (closed/open folder icon)\n * - multi selection (ctrl/cmd to toggle, shift to select a range)\n * - native HTML5 drag & drop, dropping before/after a node or into a folder,\n * moving the whole current selection at once\n */\n@Component({\n selector: 'lib-tree',\n templateUrl: './tree.component.html',\n styleUrls: ['./tree.component.css'],\n standalone: false,\n})\nexport class TreeComponent implements OnChanges {\n // the tree data (mutated in place when nodes are dragged around)\n @Input() nodes: TreeNode[] = [];\n\n // currently selected nodes (two-way bindable)\n @Input() selectedNodes: TreeNode[] = [];\n\n // decide whether a node may be dragged\n @Input() allowDrag: (node: TreeNode) => boolean = () => true;\n\n // decide whether the dragged nodes may be dropped onto a target/zone\n @Input() allowDrop: (dragged: TreeNode[], target: TreeNode, zone: TreeDropZone) => boolean = () => true;\n\n @Output() selectedNodesChange = new EventEmitter<TreeNode[]>();\n\n // a (non-folder) leaf was activated by a plain click\n @Output() activate = new EventEmitter<TreeNode>();\n\n // the tree structure changed because of a drag & drop move\n @Output() nodesChange = new EventEmitter<TreeNode[]>();\n\n // custom node content, provided as <ng-template #nodeTemplate let-node>\n @ContentChild('nodeTemplate') nodeTemplate?: TemplateRef<any>;\n\n // the visible (expanded) nodes, flattened for rendering\n flatNodes: FlatNode[] = [];\n\n // currently dragged nodes and the live drop indicator\n draggingNodes: TreeNode[] = [];\n drop: DropTarget | null = null;\n // hovering the trailing strip drops at the very end of the root level\n dropTail = false;\n\n // indentation of one tree level, in px (must match the template/CSS)\n private static readonly INDENT_STEP = 15;\n private static readonly INDENT_BASE = 4;\n\n private selection = new Set<TreeNode>();\n private lastClickedIndex: number | null = null;\n private flatByNode = new Map<TreeNode, FlatNode>();\n\n indentPx(level: number): string {\n return this.indent(level) + 'px';\n }\n\n private indent(level: number): number {\n return level * TreeComponent.INDENT_STEP + TreeComponent.INDENT_BASE;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['selectedNodes']) {\n this.selection = new Set(this.selectedNodes ?? []);\n }\n this.rebuild();\n }\n\n isSelected(node: TreeNode): boolean {\n return this.selection.has(node);\n }\n\n isDragging(node: TreeNode): boolean {\n return this.draggingNodes.includes(node);\n }\n\n toggleExpand(node: TreeNode): void {\n node.expanded = !node.expanded;\n this.rebuild();\n }\n\n // ---- selection / clicking ----------------------------------------------\n\n onRowClick(flat: FlatNode, event: MouseEvent): void {\n const node = flat.node;\n const index = this.flatNodes.indexOf(flat);\n\n if (event.shiftKey && this.lastClickedIndex !== null) {\n this.selectRange(this.lastClickedIndex, index, event.ctrlKey || event.metaKey);\n } else if (event.ctrlKey || event.metaKey) {\n if (this.selection.has(node)) {\n this.selection.delete(node);\n } else {\n this.selection.add(node);\n }\n this.lastClickedIndex = index;\n } else {\n // plain click: folders toggle, leaves activate; either way select just this row\n if (node.isFolder) {\n this.toggleExpand(node);\n }\n this.selection.clear();\n this.selection.add(node);\n this.lastClickedIndex = index;\n if (!node.isFolder) {\n this.activate.emit(node);\n }\n }\n\n this.selectedNodesChange.emit([...this.selection]);\n }\n\n private selectRange(from: number, to: number, additive: boolean): void {\n if (!additive) {\n this.selection.clear();\n }\n const [lo, hi] = from <= to ? [from, to] : [to, from];\n for (let i = lo; i <= hi && i < this.flatNodes.length; i++) {\n this.selection.add(this.flatNodes[i].node);\n }\n }\n\n // ---- drag & drop --------------------------------------------------------\n\n onDragStart(flat: FlatNode, event: DragEvent): void {\n const node = flat.node;\n if (!this.allowDrag(node)) {\n event.preventDefault();\n return;\n }\n\n // dragging an unselected node makes it the sole selection\n if (!this.selection.has(node)) {\n this.selection.clear();\n this.selection.add(node);\n this.lastClickedIndex = this.flatNodes.indexOf(flat);\n this.selectedNodesChange.emit([...this.selection]);\n }\n\n // drag the whole selection, but never a node together with its own ancestor\n this.draggingNodes = this.removeNested([...this.selection]);\n\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n // required for Firefox to start a native drag\n event.dataTransfer.setData('text/plain', node.name ?? '');\n }\n }\n\n onDragOver(flat: FlatNode, event: DragEvent): void {\n if (!this.draggingNodes.length) {\n return;\n }\n\n const resolved = this.resolveDrop(flat, event.currentTarget as HTMLElement, event.clientX, event.clientY);\n if (!this.canDrop(resolved.ref, resolved.zone)) {\n this.clearIndicator();\n return;\n }\n\n // preventDefault marks this as a valid drop location\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move';\n }\n this.drop = resolved;\n this.dropTail = false;\n }\n\n onDrop(flat: FlatNode, event: DragEvent): void {\n event.preventDefault();\n if (this.drop) {\n this.moveNodes(this.draggingNodes, this.drop.ref, this.drop.zone);\n this.nodesChange.emit(this.nodes);\n }\n this.endDrag();\n }\n\n // The strip below the last row: drop after the last folder, at the root level.\n // (The last folder has no following row to act as a \"before\" drop target.)\n onTailDragOver(event: DragEvent): void {\n if (!this.draggingNodes.length) {\n return;\n }\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move';\n }\n this.drop = null;\n this.dropTail = true;\n }\n\n onTailDrop(event: DragEvent): void {\n event.preventDefault();\n if (this.draggingNodes.length) {\n this.detachAll(this.draggingNodes);\n this.nodes.push(...this.draggingNodes);\n this.nodesChange.emit(this.nodes);\n }\n this.endDrag();\n }\n\n onDragEnd(): void {\n this.endDrag();\n }\n\n private endDrag(): void {\n this.draggingNodes = [];\n this.clearIndicator();\n this.rebuild();\n }\n\n private clearIndicator(): void {\n this.drop = null;\n this.dropTail = false;\n }\n\n // Resolve the hovered row + cursor position into a drop target.\n // - top of a row -> before it\n // - middle of a folder -> inside it\n // - bottom of a row -> after it (see afterRow for the inside/outside choice)\n // An expanded, non-empty folder has no \"after\" band on its header: dropping\n // after such a folder happens at the bottom of its last child instead, so the\n // indicator lands at the folder's visual end rather than under its header.\n private resolveDrop(flat: FlatNode, row: HTMLElement, clientX: number, clientY: number): DropTarget {\n const node = flat.node;\n const rect = row.getBoundingClientRect();\n const offset = clientY - rect.top;\n\n if (node.isFolder) {\n if (offset < rect.height * 0.3) {\n return { row: node, zone: 'before', ref: node, indent: this.indent(flat.level) };\n }\n const expandedWithChildren = !!node.expanded && !!node.children?.length;\n if (expandedWithChildren || offset <= rect.height * 0.7) {\n return { row: node, zone: 'inside', ref: node, indent: this.indent(flat.level) };\n }\n return this.afterRow(flat, clientX, rect.left);\n }\n\n if (offset < rect.height / 2) {\n return { row: node, zone: 'before', ref: node, indent: this.indent(flat.level) };\n }\n return this.afterRow(flat, clientX, rect.left);\n }\n\n // \"after\" the hovered row. When the row is the last child of its subtree, the\n // horizontal cursor position chooses the level: keep the node inside next to\n // the row, or outdent to drop after one of its ancestor folders. The indicator\n // stays at this row's bottom edge but is indented to the chosen level.\n private afterRow(flat: FlatNode, clientX: number, rowLeft: number): DropTarget {\n const next = this.flatNodes[this.flatNodes.indexOf(flat) + 1];\n\n // not the last node of a subtree -> unambiguous \"after this row\"\n if (next && next.level >= flat.level) {\n return { row: flat.node, zone: 'after', ref: flat.node, indent: this.indent(flat.level) };\n }\n\n // last child: pick a drop level between the next visible row's level (how far\n // we may outdent) and this row's own level, from the cursor's x position\n const minLevel = next ? next.level : 0;\n const level = Math.max(\n minLevel,\n Math.min(flat.level, Math.round((clientX - rowLeft - TreeComponent.INDENT_BASE) / TreeComponent.INDENT_STEP))\n );\n\n // walk up to the ancestor sitting at the chosen level\n let ancestor: FlatNode | undefined = flat;\n while (ancestor && ancestor.level > level) {\n ancestor = ancestor.parent ? this.flatByNode.get(ancestor.parent) : undefined;\n }\n\n return { row: flat.node, zone: 'after', ref: ancestor?.node ?? flat.node, indent: this.indent(level) };\n }\n\n private canDrop(ref: TreeNode, zone: TreeDropZone): boolean {\n if (this.draggingNodes.includes(ref)) {\n return false;\n }\n // cannot drop a node into its own subtree\n if (this.draggingNodes.some((dragged) => this.contains(dragged, ref))) {\n return false;\n }\n if (zone === 'inside' && !ref.isFolder) {\n return false;\n }\n return this.allowDrop(this.draggingNodes, ref, zone);\n }\n\n private moveNodes(dragged: TreeNode[], ref: TreeNode, zone: TreeDropZone): void {\n this.detachAll(dragged);\n\n if (zone === 'inside') {\n ref.children = ref.children ?? [];\n ref.children.push(...dragged);\n ref.isFolder = true;\n ref.expanded = true;\n return;\n }\n\n const location = this.locate(ref);\n if (!location) {\n this.nodes.push(...dragged);\n return;\n }\n const insertAt = location.index + (zone === 'after' ? 1 : 0);\n location.list.splice(insertAt, 0, ...dragged);\n }\n\n // detach every dragged node from its current parent (re-locate each time, so\n // indices stay correct while the arrays are being spliced)\n private detachAll(dragged: TreeNode[]): void {\n for (const node of dragged) {\n const location = this.locate(node);\n if (location) {\n location.list.splice(location.index, 1);\n }\n }\n }\n\n // ---- tree helpers -------------------------------------------------------\n\n private rebuild(): void {\n this.flatNodes = [];\n this.flatByNode.clear();\n this.flatten(this.nodes ?? [], 0, null);\n }\n\n private flatten(list: TreeNode[], level: number, parent: TreeNode | null): void {\n for (const node of list) {\n const flat: FlatNode = { node, level, parent };\n this.flatNodes.push(flat);\n this.flatByNode.set(node, flat);\n if (node.isFolder && node.expanded && node.children?.length) {\n this.flatten(node.children, level + 1, node);\n }\n }\n }\n\n // drop nodes that are already contained in another node of the set\n private removeNested(nodes: TreeNode[]): TreeNode[] {\n return nodes.filter((node) => !nodes.some((other) => other !== node && this.contains(other, node)));\n }\n\n // is `node` somewhere inside `ancestor`'s subtree?\n private contains(ancestor: TreeNode, node: TreeNode): boolean {\n if (!ancestor.children) {\n return false;\n }\n for (const child of ancestor.children) {\n if (child === node || this.contains(child, node)) {\n return true;\n }\n }\n return false;\n }\n\n // find the array and index that currently hold `target`\n private locate(target: TreeNode, list: TreeNode[] = this.nodes): { list: TreeNode[]; index: number } | null {\n for (let i = 0; i < list.length; i++) {\n if (list[i] === target) {\n return { list, index: i };\n }\n const children = list[i].children;\n if (children?.length) {\n const found = this.locate(target, children);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n}\n","<div class=\"tree\" (dragend)=\"onDragEnd()\">\n @for (flat of flatNodes; track flat.node) {\n <div\n class=\"tree-node\"\n [class.selected]=\"isSelected(flat.node)\"\n [class.dragging]=\"isDragging(flat.node)\"\n [class.drop-before]=\"drop?.row === flat.node && drop?.zone === 'before'\"\n [class.drop-after]=\"drop?.row === flat.node && drop?.zone === 'after'\"\n [class.drop-inside]=\"drop?.row === flat.node && drop?.zone === 'inside'\"\n [style.--tree-indent]=\"indentPx(flat.level)\"\n [style.--tree-drop-indent]=\"drop?.row === flat.node ? drop.indent + 'px' : null\"\n [attr.draggable]=\"allowDrag(flat.node)\"\n (click)=\"onRowClick(flat, $event)\"\n (dragstart)=\"onDragStart(flat, $event)\"\n (dragover)=\"onDragOver(flat, $event)\"\n (drop)=\"onDrop(flat, $event)\"\n >\n <i\n class=\"tree-icon fa\"\n [class.fa-folder-open-o]=\"flat.node.isFolder && flat.node.expanded\"\n [class.fa-folder-o]=\"flat.node.isFolder && !flat.node.expanded\"\n [class.fa-file-o]=\"!flat.node.isFolder\"\n aria-hidden=\"true\"\n ></i>\n <span class=\"tree-label\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate || defaultTemplate; context: { $implicit: flat.node, node: flat.node }\"></ng-container>\n </span>\n </div>\n }\n\n <div class=\"tree-tail\" [class.drop-tail]=\"dropTail\" (dragover)=\"onTailDragOver($event)\" (drop)=\"onTailDrop($event)\"></div>\n</div>\n\n<ng-template #defaultTemplate let-node>{{ node.name }}</ng-template>\n","import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NgxBootstrapSliderModule } from 'ngx-bootstrap-slider';\nimport { AccordionModule } from 'ngx-bootstrap/accordion';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TypeaheadModule } from 'ngx-bootstrap/typeahead';\nimport { DropzoneModule } from 'ngx-dropzone-wrapper';\nimport { ToastrModule } from 'ngx-toastr';\nimport { ArraySortPipe } from './array-sort-pipe';\nimport { DesignerComponent } from './designer.component';\nimport { EffectCurveComponent } from './effect/effect-curve/effect-curve.component';\nimport { EffectPanTiltComponent } from './effect/effect-pan-tilt/effect-pan-tilt.component';\nimport { EffectComponent } from './effect/effect.component';\nimport { ErrorDialogComponent } from './error-dialog/error-dialog.component';\nimport { FixturePoolCreateFromFileComponent } from './fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component';\nimport { FixturePoolEditUniversesComponent } from './fixture-pool/fixture-pool-edit-universes/fixture-pool-edit-universes.component';\nimport { FixturePoolComponent } from './fixture-pool/fixture-pool.component';\nimport { FixtureCapabilityChannelComponent } from './fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component';\nimport { FixtureCapabilityColorWheelComponent } from './fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component';\nimport { FixtureCapabilityColorComponent } from './fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component';\nimport { FixtureCapabilityDimmerComponent } from './fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component';\nimport { FixtureCapabilityPanTiltComponent } from './fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component';\nimport { FixtureCapabilityComponent } from './fixture/fixture-capability/fixture-capability.component';\nimport { FixtureChannelComponent } from './fixture/fixture-channel/fixture-channel.component';\nimport { FixtureSettingsPositionComponent } from './fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component';\nimport { FixtureSettingsStageComponent } from './fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component';\nimport { FixtureSettingsComponent } from './fixture/fixture-settings/fixture-settings.component';\nimport { FixtureComponent } from './fixture/fixture.component';\nimport { IntroComponent } from './intro/intro.component';\nimport { MasterDimmerComponent } from './master-dimmer/master-dimmer.component';\nimport { PresetSettingsComponent } from './preset/preset-settings/preset-settings.component';\nimport { PresetComponent } from './preset/preset.component';\nimport { PreviewComponent } from './preview/preview.component';\nimport { ProjectBrowserComponent } from './project/project-browser/project-browser.component';\nimport { ProjectImportComponent } from './project/project-import/project-import.component';\nimport { ProjectSaveComponent } from './project/project-save/project-save.component';\nimport { ProjectShareComponent } from './project/project-share/project-share.component';\nimport { SceneSettingsComponent } from './scene/scene-settings/scene-settings.component';\nimport { SceneComponent } from './scene/scene.component';\nimport { CompositionSettingsComponent } from './timeline/composition-settings/composition-settings.component';\nimport { TimelineGridComponent } from './timeline/timeline-grid/timeline-grid.component';\nimport { TimelineComponent } from './timeline/timeline.component';\nimport { UserLoginComponent } from './user/user-login/user-login.component';\nimport { UserRegisterComponent } from './user/user-register/user-register.component';\nimport { WaitDialogComponent } from './wait-dialog/wait-dialog.component';\nimport { WarningDialogComponent } from './warning-dialog/warning-dialog.component';\nimport { DropzoneComponent } from './dropzone/dropzone.component';\nimport { TreeComponent } from './tree/tree.component';\nimport { SortablejsDirective } from './sortablejs/sortablejs.directive';\n\n@NgModule({\n declarations: [\n DesignerComponent,\n WarningDialogComponent,\n PreviewComponent,\n EffectCurveComponent,\n EffectPanTiltComponent,\n SceneComponent,\n TimelineComponent,\n FixtureCapabilityColorComponent,\n FixtureComponent,\n FixtureSettingsPositionComponent,\n FixtureCapabilityComponent,\n FixtureSettingsComponent,\n EffectComponent,\n FixturePoolComponent,\n PresetComponent,\n MasterDimmerComponent,\n FixtureCapabilityDimmerComponent,\n TimelineGridComponent,\n CompositionSettingsComponent,\n ArraySortPipe,\n FixtureCapabilityPanTiltComponent,\n FixtureCapabilityChannelComponent,\n FixtureChannelComponent,\n FixtureCapabilityColorWheelComponent,\n UserLoginComponent,\n UserRegisterComponent,\n ProjectBrowserComponent,\n WaitDialogComponent,\n ProjectImportComponent,\n ProjectShareComponent,\n ErrorDialogComponent,\n FixtureSettingsStageComponent,\n IntroComponent,\n PresetSettingsComponent,\n SceneSettingsComponent,\n ProjectSaveComponent,\n FixturePoolCreateFromFileComponent,\n FixturePoolEditUniversesComponent,\n DropzoneComponent,\n SortablejsDirective,\n TreeComponent,\n ],\n exports: [DesignerComponent],\n imports: [\n RouterModule.forRoot([], {}),\n BrowserModule,\n BrowserAnimationsModule,\n FormsModule,\n NgxBootstrapSliderModule,\n TranslateModule,\n AccordionModule,\n PopoverModule,\n TypeaheadModule,\n DropzoneModule,\n ToastrModule.forRoot({\n newestOnTop: true,\n }),\n ],\n providers: [provideHttpClient(withInterceptorsFromDi())],\n})\nexport class DesignerModule {}\n","/*\n * Public API Surface of designer\n */\n\nexport * from './lib/designer.service';\nexport * from './lib/designer.component';\nexport * from './lib/designer.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2.UserService","i4","i5","i6.ConfigService","i2.ProjectService","i3","i5.UuidService","i6.FixturePixelGroupResolveService","i1.ConfigService","i2","i3.ProjectService","i4.AnimationService","i5.TimelineStateService","i1.EffectService","i2.UuidService","i4.FixtureService","i5.LivePreviewService","i1.UuidService","i2.EffectService","i3.PresetService","i4.ProjectService","i1.SceneService","i2.PresetService","i5.ConfigService","i6.TimelineStateService","i7.LivePreviewService","i1.PresetService","i2.FixtureService","i3.SceneService","i4.TimelineService","i5.ProjectService","i1.FixtureService","i2.PreviewMeshService","i3.AnimationService","i4.PreviewService","i5.TimelineService","i6.ProjectService","i1","i1.ProjectService","i2.PreviewService","i3.FixtureService","i4.PresetService","i5.SceneService","i6","i7.UuidService","i8.TimelineService","i9","i10.WarningDialogService","i11.LivePreviewService","i12.ConfigService","i3.ProjectLoadService","i4.UserService","i5.WarningDialogService","i7","i8.ArraySortPipe","i4.ProjectLoadService","i3.WarningDialogService","i4.ConfigService","i7.ArraySortPipe","i4.SortablejsDirective","i3.UuidService","i5.PreviewService","i8.PresetService","i9.ConfigService","i10.LivePreviewService","i11","i13.SortablejsDirective","i14.ArraySortPipe","i1.UserService","i3.ConfigService","i2.ConfigService","i2.TimelineService","i6.WarningDialogService","i8.ProjectService","i11.DropzoneComponent","i12.ArraySortPipe","i1.TimelineService","i5.HotkeyTargetExcludeService","i8.ConfigService","i9.IntroService","i12","i13","i14","i5.IntroService","i6.SortablejsDirective","i3.FixturePoolService","i6.LivePreviewService","i8.SortablejsDirective","i3.LivePreviewService","i2.LivePreviewService","i4.IntroService","i5.FixtureCapabilityColorComponent","i6.FixtureCapabilityDimmerComponent","i7.FixtureCapabilityPanTiltComponent","i8.FixtureCapabilityColorWheelComponent","i10","i3.PreviewService","i3.FixtureSettingsPositionComponent","i4.FixtureSettingsStageComponent","i2.AnimationService","i5.EffectService","i8","i3.EffectService","i4.WarningDialogService","i7.EffectCurveComponent","i8.EffectPanTiltComponent","i2.SceneService","i7.SortablejsDirective","i4.FixtureCapabilityChannelComponent","i1.IntroService","i4.FixturePoolService","i7.UserService","i8.UserEnsureLoginService","i9.ProjectLoadService","i11.ErrorDialogService","i12.FixtureService","i13.TimelineService","i14.IntroService","i15.EffectService","i16","i17","i18","i19.PreviewComponent","i20.SceneComponent","i21.TimelineComponent","i22.FixtureComponent","i23.FixtureCapabilityComponent","i24.FixtureSettingsComponent","i25.EffectComponent","i26.PresetComponent","i27.MasterDimmerComponent","i28.FixtureChannelComponent","i29.IntroComponent"],"mappings":"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"}