{"version":3,"file":"ngx-acuw.mjs","sources":["../../../projects/ngx-acuw/src/lib/image-as-particles/scripts/touch-texture.ts","../../../projects/ngx-acuw/src/lib/image-as-particles/scripts/shaders.ts","../../../projects/ngx-acuw/src/lib/tween/rxjs-tween.ts","../../../projects/ngx-acuw/src/lib/performance-monitor/performance-monitor.component.ts","../../../projects/ngx-acuw/src/lib/performance-monitor/performance-monitor.component.html","../../../projects/ngx-acuw/src/lib/image-as-particles/image-as-particles.component.ts","../../../projects/ngx-acuw/src/lib/performance-monitor/performance-monitor.module.ts","../../../projects/ngx-acuw/src/lib/image-as-particles/image-as-particles.module.ts","../../../projects/ngx-acuw/src/lib/image-transition/interfaces/direction.ts","../../../projects/ngx-acuw/src/lib/image-transition/shaders/imageTransitionShaders.ts","../../../projects/ngx-acuw/src/lib/image-transition/image-transition.component.ts","../../../projects/ngx-acuw/src/lib/image-transition/image-transition.component.html","../../../projects/ngx-acuw/src/lib/image-transition/image-transition.module.ts","../../../projects/ngx-acuw/src/lib/lightbox/lightbox-overlay.component.ts","../../../projects/ngx-acuw/src/lib/lightbox/lightbox-overlay.component.html","../../../projects/ngx-acuw/src/lib/lightbox/lightbox.component.ts","../../../projects/ngx-acuw/src/lib/lightbox/lightbox.module.ts","../../../projects/ngx-acuw/src/lib/controls/object-controls.ts","../../../projects/ngx-acuw/src/lib/carousel/carousel.component.ts","../../../projects/ngx-acuw/src/lib/carousel/carousel.module.ts","../../../projects/ngx-acuw/src/public-api.ts","../../../projects/ngx-acuw/src/ngx-acuw.ts"],"sourcesContent":["import { Texture } from 'three';\r\nimport { Trail } from './trail';\r\n\r\nexport class TouchTexture {\r\n  // Variables\r\n  private size: number;\r\n  private maxAge: number;\r\n  private radius: number;\r\n  private trail: Trail[];\r\n  private canvas!: HTMLCanvasElement;\r\n  private ctx!: CanvasRenderingContext2D;\r\n  public texture!: Texture;\r\n\r\n  constructor() {\r\n    this.size = 64;\r\n    this.maxAge = 120;\r\n    this.radius = 0.15;\r\n    this.trail = new Array<Trail>();\r\n\r\n    this.initTexture();\r\n  }\r\n\r\n  /**\r\n   * Initializes the texture for the touch area\r\n   */\r\n  initTexture(): void {\r\n    this.canvas = document.createElement('canvas');\r\n    this.canvas.width = this.canvas.height = this.size;\r\n    this.ctx = this.canvas.getContext('2d') as CanvasRenderingContext2D;\r\n    this.ctx.fillStyle = 'black';\r\n    this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\r\n\r\n    this.texture = new Texture(this.canvas);\r\n\r\n    this.canvas.id = 'touchTexture';\r\n    this.canvas.style.width = this.canvas.style.height = `${this.canvas.width}px`;\r\n  }\r\n\r\n  /**\r\n   * Updates the trail\r\n   */\r\n  update(): void {\r\n    this.clear();\r\n\r\n    // age points\r\n    this.trail.forEach((point, i) => {\r\n      point.age++;\r\n      // remove old\r\n      if (point.age > this.maxAge) {\r\n        this.trail.splice(i, 1);\r\n      }\r\n    });\r\n\r\n    this.trail.forEach((point, i) => {\r\n      this.drawTouch(point);\r\n    });\r\n\r\n    this.texture.needsUpdate = true;\r\n  }\r\n\r\n  clear(): void {\r\n    this.ctx.fillStyle = 'black';\r\n    this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\r\n  }\r\n\r\n  addTouch(px: number, py: number): void {\r\n    let force = 0;\r\n    const last = this.trail[this.trail.length - 1];\r\n    if (last) {\r\n      const dx = last.x - px;\r\n      const dy = last.y - py;\r\n      const dd = dx * dx + dy * dy;\r\n      force = Math.min(dd * 10000, 1);\r\n    }\r\n    this.trail.push({ x: px, y: py, age: 0, force });\r\n  }\r\n\r\n  drawTouch(point: Trail): void {\r\n    const pos = {\r\n      x: point.x * this.size,\r\n      y: (1 - point.y) * this.size\r\n    };\r\n\r\n    let intensity = 1;\r\n    if (point.age < this.maxAge * 0.3) {\r\n      intensity = this.easeOutSine(point.age / (this.maxAge * 0.3), 0, 1, 1);\r\n    } else {\r\n      intensity = this.easeOutSine(1 - (point.age - this.maxAge * 0.3) / (this.maxAge * 0.7), 0, 1, 1);\r\n    }\r\n\r\n    intensity *= point.force;\r\n\r\n    const radius = this.size * this.radius * intensity;\r\n    const grd = this.ctx.createRadialGradient(pos.x, pos.y, radius * 0.25, pos.x, pos.y, radius);\r\n    grd.addColorStop(0, `rgba(255, 255, 255, 0.2)`);\r\n    grd.addColorStop(1, 'rgba(0, 0, 0, 0.0)');\r\n\r\n    this.ctx.beginPath();\r\n    this.ctx.fillStyle = grd;\r\n    this.ctx.arc(pos.x, pos.y, radius, 0, Math.PI * 2);\r\n    this.ctx.fill();\r\n  }\r\n\r\n  private easeOutSine(t: number, b: number, c: number, d: number): number {\r\n    return c * Math.sin(t / d * (Math.PI / 2)) + b;\r\n  }\r\n}\r\n","export class Shaders {\r\n    particleVertex = `\r\n    // @author brunoimbrizi / http://brunoimbrizi.com\r\n\r\n    precision highp float;\r\n    #define GLSLIFY 1\r\n\r\n    attribute float pindex;\r\n    attribute vec3 position;\r\n    attribute vec3 offset;\r\n    attribute vec2 uv;\r\n    attribute float angle;\r\n\r\n    uniform mat4 modelViewMatrix;\r\n    uniform mat4 projectionMatrix;\r\n\r\n    uniform float uTime;\r\n    uniform float uRandom;\r\n    uniform float uDepth;\r\n    uniform float uSize;\r\n    uniform vec2 uTextureSize;\r\n    uniform sampler2D uTexture;\r\n    uniform sampler2D uTouch;\r\n\r\n    varying vec2 vPUv;\r\n    varying vec2 vUv;\r\n\r\n    //\r\n    // Description : Array and textureless GLSL 2D simplex noise function.\r\n    //      Author : Ian McEwan, Ashima Arts.\r\n    //  Maintainer : ijm\r\n    //     Lastmod : 20110822 (ijm)\r\n    //     License : Copyright (C) 2011 Ashima Arts. All rights reserved.\r\n    //               Distributed under the MIT License. See LICENSE file.\r\n    //               https://github.com/ashima/webgl-noise\r\n    //\r\n\r\n    vec3 mod289_1_0(vec3 x) {\r\n      return x - floor(x * (1.0 / 289.0)) * 289.0;\r\n    }\r\n\r\n    vec2 mod289_1_0(vec2 x) {\r\n      return x - floor(x * (1.0 / 289.0)) * 289.0;\r\n    }\r\n\r\n    vec3 permute_1_1(vec3 x) {\r\n      return mod289_1_0(((x*34.0)+1.0)*x);\r\n    }\r\n\r\n    float snoise_1_2(vec2 v)\r\n      {\r\n      const vec4 C = vec4(0.211324865405187,  // (3.0-sqrt(3.0))/6.0\r\n                          0.366025403784439,  // 0.5*(sqrt(3.0)-1.0)\r\n                         -0.577350269189626,  // -1.0 + 2.0 * C.x\r\n                          0.024390243902439); // 1.0 / 41.0\r\n    // First corner\r\n      vec2 i  = floor(v + dot(v, C.yy) );\r\n      vec2 x0 = v -   i + dot(i, C.xx);\r\n\r\n    // Other corners\r\n      vec2 i1;\r\n      //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0\r\n      //i1.y = 1.0 - i1.x;\r\n      i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);\r\n      // x0 = x0 - 0.0 + 0.0 * C.xx ;\r\n      // x1 = x0 - i1 + 1.0 * C.xx ;\r\n      // x2 = x0 - 1.0 + 2.0 * C.xx ;\r\n      vec4 x12 = x0.xyxy + C.xxzz;\r\n      x12.xy -= i1;\r\n\r\n     // Permutations\r\n      i = mod289_1_0(i); // Avoid truncation effects in permutation\r\n      vec3 p = permute_1_1( permute_1_1( i.y + vec3(0.0, i1.y, 1.0 ))\r\n        + i.x + vec3(0.0, i1.x, 1.0 ));\r\n\r\n      vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);\r\n      m = m*m ;\r\n      m = m*m ;\r\n\r\n    // Gradients: 41 points uniformly over a line, mapped onto a diamond.\r\n    // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287)\r\n\r\n      vec3 x = 2.0 * fract(p * C.www) - 1.0;\r\n      vec3 h = abs(x) - 0.5;\r\n      vec3 ox = floor(x + 0.5);\r\n      vec3 a0 = x - ox;\r\n\r\n    // Normalise gradients implicitly by scaling m\r\n    // Approximation of: m *= inversesqrt( a0*a0 + h*h );\r\n      m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );\r\n\r\n    // Compute final noise value at P\r\n      vec3 g;\r\n      g.x  = a0.x  * x0.x  + h.x  * x0.y;\r\n      g.yz = a0.yz * x12.xz + h.yz * x12.yw;\r\n      return 130.0 * dot(m, g);\r\n    }\r\n\r\n    float random(float n) {\r\n      return fract(sin(n) * 43758.5453123);\r\n    }\r\n\r\n    void main() {\r\n      vUv = uv;\r\n\r\n      // particle uv\r\n      vec2 puv = offset.xy / uTextureSize;\r\n      vPUv = puv;\r\n\r\n      // pixel color\r\n      vec4 colA = texture2D(uTexture, puv);\r\n      float grey = colA.r * 0.21 + colA.g * 0.71 + colA.b * 0.07;\r\n\r\n      // displacement\r\n      vec3 displaced = offset;\r\n      // randomise\r\n      displaced.xy += vec2(random(pindex) - 0.5, random(offset.x + pindex) - 0.5) * uRandom;\r\n      float rndz = (random(pindex) + snoise_1_2(vec2(pindex * 0.1, uTime * 0.1)));\r\n      displaced.z += rndz * (random(pindex) * 2.0 * uDepth);\r\n      // center\r\n      displaced.xy -= uTextureSize * 0.5;\r\n\r\n      // touch\r\n      float t = texture2D(uTouch, puv).r;\r\n      displaced.z += t * 20.0 * rndz;\r\n      displaced.x += cos(angle) * t * 20.0 * rndz;\r\n      displaced.y += sin(angle) * t * 20.0 * rndz;\r\n\r\n      // particle size\r\n      float psize = (snoise_1_2(vec2(uTime, pindex) * 0.5) + 2.0);\r\n      psize *= max(grey, 0.2);\r\n      psize *= uSize;\r\n\r\n      // final position\r\n      vec4 mvPosition = modelViewMatrix * vec4(displaced, 1.0);\r\n      mvPosition.xyz += position * psize;\r\n      vec4 finalPosition = projectionMatrix * mvPosition;\r\n\r\n      gl_Position = finalPosition;\r\n    }\r\n    `;\r\n\r\n    particleFragment = `\r\n    // @author brunoimbrizi / http://brunoimbrizi.com\r\n\r\n    precision highp float;\r\n    #define GLSLIFY 1\r\n\r\n    uniform sampler2D uTexture;\r\n\r\n    varying vec2 vPUv;\r\n    varying vec2 vUv;\r\n\r\n    void main() {\r\n      vec4 color = vec4(0.0);\r\n      vec2 uv = vUv;\r\n      vec2 puv = vPUv;\r\n\r\n      // pixel color\r\n      vec4 colA = texture2D(uTexture, puv);\r\n\r\n      // greyscale\r\n      float grey = colA.r * 0.21 + colA.g * 0.71 + colA.b * 0.07;\r\n      //vec4 colB = vec4(grey, grey, grey, 1.0);\r\n      vec4 colB = vec4(colA.r, colA.g, colA.b, 1.0);\r\n\r\n      // circle\r\n      float border = 0.3;\r\n      float radius = 0.5;\r\n      float dist = radius - distance(uv, vec2(0.5));\r\n      float t = smoothstep(0.0, border, dist);\r\n\r\n      // final color\r\n      color = colB;\r\n      color.a = t;\r\n\r\n      gl_FragColor = color;\r\n    }\r\n    `;\r\n}\r\n","import { Observable, Observer } from 'rxjs';\r\n\r\nexport module RxjsTween {\r\n    /**\r\n     * Creates an observable that emits samples from an easing function on every animation frame\r\n     * for a duration `d` ms.\r\n     *\r\n     * The first value will be emitted on the next animation frame,\r\n     * and is the value of the easing function at `t = 0`.\r\n     * The final value is guaranteed to be the easing function at `t = d`.\r\n     * The observable completes one frame after the final value was emitted.\r\n     * @param easingFunction the easing fuction to sample\r\n     * @param b beginning value and 2nd parameter of the easing function\r\n     * @param c change in value (or end value) and 3rd parameter of the easing function\r\n     * @param d total duration of the tween in ms and 4th parameter of the easing function\r\n     * @param s 5th parameter of the easing function (optional)\r\n     */\r\n    export function createTween(easingFunction: (t: number, b: number, pc: number, d: number, s?: number) => number,\r\n                                b: number[], c: number[], d: number, s?: number): Observable<number[]>;\r\n    export function createTween(easingFunction: (t: number, b: number, pc: number, d: number, s?: number) => number,\r\n                                b: number, c: number, d: number, s?: number): Observable<number>;\r\n    export function createTween(easingFunction: (t: number, b: number, pc: number, d: number, s?: number) => number,\r\n                                b: any, c: any, d: number, s?: number): Observable<any> {\r\n        return new Observable((observer: Observer<number | number[]>) => {\r\n            let startTime: number;\r\n            const sample = (time: number): void => {\r\n                startTime = startTime || time;\r\n                const t = time - startTime;\r\n                if (t < d) {\r\n                    if (Array.isArray(b) && Array.isArray(c)) {\r\n                        const tweenVals: number[] = new Array<number>();\r\n                        for (let idx = 0; idx < b.length; idx++) {\r\n                            tweenVals.push(easingFunction(t, b[idx], c[idx], d, s));\r\n                        }\r\n                        observer.next(tweenVals);\r\n                    }else {\r\n                        observer.next(easingFunction(t, b, c, d, s));\r\n                    }\r\n                    // Request the animation frame again\r\n                    requestAnimationFrame(sample);\r\n                } else {\r\n                    // End value reached\r\n                    if (Array.isArray(b) && Array.isArray(c)) {\r\n                        const tweenVals: number[] = new Array<number>();\r\n                        for (let idx = 0; idx < b.length; idx++) {\r\n                            tweenVals.push(c[idx]);\r\n                        }\r\n                        // Emitt end value of arry\r\n                        observer.next(tweenVals);\r\n                    }else{\r\n                        // Emitt end value\r\n                        observer.next(c);\r\n                    }\r\n                    // Complete the observable\r\n                    observer.complete();\r\n                }\r\n            }\r\n            // Initially request the animation frame\r\n            requestAnimationFrame(sample);\r\n        });\r\n    }\r\n\r\n    export function linear(t: number, b: number, pc: number, d: number): number {\r\n        const c = pc - b;\r\n        return c * t / d + b;\r\n    }\r\n\r\n    export function easeInOutQuad(t: number, b: number, pc: number, d: number): number {\r\n        const c = pc - b;\r\n        if ((t /= d / 2) < 1) {\r\n            return c / 2 * t * t + b;\r\n        } else {\r\n            return -c / 2 * ((--t) * (t - 2) - 1) + b;\r\n        }\r\n    }\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, ViewChild } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'acuw-performance-monitor',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  templateUrl: './performance-monitor.component.html',\r\n  styleUrls: ['./performance-monitor.component.css']\r\n})\r\nexport class PerformanceMonitorComponent {\r\n\r\n  @ViewChild('chart') chart!: ElementRef;\r\n\r\n  fps = -1;\r\n  fpsMin = -1;\r\n  fpsMax = -1;\r\n  private framesCnt = 0;\r\n  private timeLastFpsCalc = 0;\r\n  private fpsHistory = new Array<number>()\r\n  private readonly maxHistoryLength = 60;\r\n\r\n  constructor(private changeDetector: ChangeDetectorRef) {\r\n  }\r\n\r\n  /**\r\n   * Method to be called at the end of a frame\r\n   */\r\n  end(): void {\r\n    // When called the first time, set the current time and return\r\n    if (this.timeLastFpsCalc === 0) {\r\n      this.timeLastFpsCalc = Date.now();\r\n      return;\r\n    }\r\n    // Increase the frames counter\r\n    this.framesCnt++;\r\n    // Get the milliseconds elapsed since January 1, 1970 for the current frame \r\n    const currentFrameTime = Date.now();\r\n    // Calculate the FPS only every second\r\n    if (currentFrameTime >= this.timeLastFpsCalc + 1000) {\r\n      // Calculate the frames per second\r\n      this.fps = this.framesCnt / (currentFrameTime - this.timeLastFpsCalc) * 1000;\r\n      // Calculate the min. frames per second\r\n      if(this.fpsMin === -1 || this.fps < this.fpsMin){\r\n        this.fpsMin = this.fps;\r\n      }\r\n      // Calculate the max. frames per second\r\n      if(this.fpsMax === -1 || this.fps > this.fpsMax){\r\n        this.fpsMax = this.fps;\r\n      }\r\n      // Trigger the change detection\r\n      this.changeDetector.detectChanges();\r\n      // Set the elapsed time to the timeLastFpsCalc\r\n      this.timeLastFpsCalc = currentFrameTime;\r\n      // Reset the frames counter\r\n      this.framesCnt = 0;\r\n      // Add fps to the history array\r\n      this.fpsHistory.push(this.fps);\r\n      if(this.fpsHistory.length >= this.maxHistoryLength) {\r\n        this.fpsHistory.shift();\r\n      }\r\n      // Create / Update chart\r\n      const canvasEl = this.chart.nativeElement as HTMLCanvasElement;\r\n      const ctx = canvasEl.getContext('2d');\r\n      if(ctx) {\r\n        ctx.fillStyle = 'rgb(30, 30, 30)';\r\n        ctx.fillRect(0, 0, canvasEl.width, canvasEl.height);\r\n        ctx.strokeStyle = 'rgb(255, 255, 255)';\r\n        ctx.fillStyle = 'rgb(255, 255, 255)';\r\n        ctx.beginPath();\r\n        ctx.moveTo(0, canvasEl.height);\r\n        for(let idx = 0; idx <= this.fpsHistory.length; idx++){\r\n          ctx.lineTo(canvasEl.width / this.maxHistoryLength * idx, \r\n            canvasEl.height - (this.fpsHistory[idx] / this.fpsMax * canvasEl.height));\r\n          if(idx === this.fpsHistory.length - 1){\r\n            ctx.lineTo(canvasEl.width / this.maxHistoryLength * idx, canvasEl.height);\r\n          }\r\n        }\r\n        ctx.fill();\r\n      }\r\n    }\r\n  }\r\n}\r\n","<div id=\"pm-container\">\r\n    <div id=\"fps-display-container\">\r\n        <span id=\"fps-display\">FPS: {{ fps != -1 ? (fps | number: '1.0-0') : '-' }}</span>\r\n        <div id=\"min-max-display\">\r\n            <span id=\"max-fps-display\">{{ fpsMax != -1 ? (fpsMax | number: '1.0-0') : '-' }} max</span>\r\n            <span id=\"min-fps-display\">{{ fpsMin != -1 ? (fpsMin | number: '1.0-0') : '-' }} min</span>\r\n        </div>\r\n    </div>\r\n    <canvas #chart width=\"90\" height=\"40\"></canvas>\r\n</div>","import {\r\n  Component,\r\n  ViewChild,\r\n  ElementRef,\r\n  AfterViewInit,\r\n  Input,\r\n  OnDestroy,\r\n  HostListener,\r\n  NgZone,\r\n} from '@angular/core';\r\nimport {\r\n  BufferAttribute,\r\n  Clock,\r\n  InstancedBufferAttribute,\r\n  InstancedBufferGeometry,\r\n  LinearFilter,\r\n  Mesh,\r\n  MeshBasicMaterial,\r\n  PerspectiveCamera,\r\n  PlaneGeometry,\r\n  Raycaster,\r\n  RGBAFormat,\r\n  Scene,\r\n  TextureLoader,\r\n  Vector2,\r\n  WebGLRenderer,\r\n} from 'three';\r\nimport { Object3D, RawShaderMaterial, Texture } from 'three';\r\nimport { TouchTexture } from './scripts/touch-texture';\r\nimport { Shaders } from './scripts/shaders';\r\nimport { RxjsTween } from '../tween/rxjs-tween';\r\nimport { interval, Observable, Subscription } from 'rxjs';\r\nimport { animate, style, transition, trigger } from '@angular/animations';\r\nimport { PerformanceMonitorComponent } from '../performance-monitor/performance-monitor.component';\r\n\r\n@Component({\r\n  selector: 'lib-image-as-particles',\r\n  template: `\r\n    <div\r\n      #container\r\n      class=\"threejs-container\"\r\n      [style.background-color]=\"backgroundColor\"\r\n      [style.justify-content]=\"justifyContent\"\r\n      [style.align-items]=\"alignItems\"\r\n      (mousemove)=\"onMouseMove($event)\"\r\n      (touchmove)=\"onTouchMove($event)\"\r\n    ></div>\r\n    <div\r\n      *ngIf=\"showTouchGestureInfo == true\"\r\n      class=\"touch-gesture-info\"\r\n      [@showHideGestureInformation]\r\n    >\r\n      <div>\r\n        <span>Use two fingers for touch animation</span>\r\n        <svg\r\n          xmlns=\"http://www.w3.org/2000/svg\"\r\n          enable-background=\"new 0 0 24 24\"\r\n          viewBox=\"0 0 24 24\"\r\n          fill=\"white\"\r\n          width=\"18px\"\r\n          height=\"18px\"\r\n        >\r\n          <g><rect fill=\"none\" height=\"24\" width=\"24\" x=\"0\" /></g>\r\n          <g>\r\n            <g>\r\n              <g>\r\n                <path\r\n                  d=\"M9,11.24V7.5C9,6.12,10.12,5,11.5,5S14,6.12,14,7.5v3.74c1.21-0.81,2-2.18,2-3.74C16,5.01,13.99,3,11.5,3S7,5.01,7,7.5 C7,9.06,7.79,10.43,9,11.24z M18.84,15.87l-4.54-2.26c-0.17-0.07-0.35-0.11-0.54-0.11H13v-6C13,6.67,12.33,6,11.5,6 S10,6.67,10,7.5v10.74c-3.6-0.76-3.54-0.75-3.67-0.75c-0.31,0-0.59,0.13-0.79,0.33l-0.79,0.8l4.94,4.94 C9.96,23.83,10.34,24,10.75,24h6.79c0.75,0,1.33-0.55,1.44-1.28l0.75-5.27c0.01-0.07,0.02-0.14,0.02-0.2 C19.75,16.63,19.37,16.09,18.84,15.87z\"\r\n                />\r\n              </g>\r\n            </g>\r\n          </g>\r\n        </svg>\r\n      </div>\r\n    </div>\r\n    <acuw-performance-monitor\r\n      *ngIf=\"showPerformanceMonitor\"\r\n      #performanceMonitor\r\n    ></acuw-performance-monitor>\r\n  `,\r\n  styles: [\r\n    `\r\n      .threejs-container {\r\n        position: relative;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        width: 100%;\r\n        height: 100%;\r\n        background-color: #222222;\r\n      }\r\n\r\n      .touch-gesture-info {\r\n        position: absolute;\r\n        width: 100%;\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: center;\r\n        top: 20px;\r\n        color: white;\r\n      }\r\n\r\n      .touch-gesture-info div {\r\n        background-color: rgba(0, 0, 0, 0.3);\r\n        display: flex;\r\n        flex-direction: row;\r\n        padding: 6px 10px 6px 10px;\r\n        border-radius: 5px;\r\n      }\r\n    `,\r\n  ],\r\n  animations: [\r\n    trigger('showHideGestureInformation', [\r\n      transition(':enter', [\r\n        style({ opacity: '0' }),\r\n        animate('300ms ease-in', style({ opacity: '1' })),\r\n      ]),\r\n      transition(':leave', [\r\n        style({ opacity: '1' }),\r\n        animate('300ms ease-in', style({ opacity: '0' })),\r\n      ]),\r\n    ]),\r\n  ],\r\n})\r\nexport class ImageAsParticlesComponent implements AfterViewInit, OnDestroy {\r\n  // Declare variables\r\n  private renderer: WebGLRenderer = new WebGLRenderer({\r\n    antialias: true,\r\n    alpha: true,\r\n  });\r\n  private scene: Scene = new Scene();\r\n  private camera!: PerspectiveCamera;\r\n  private clock: Clock = new Clock(true);\r\n  private texture: Texture = new Texture();\r\n  private mesh!: Mesh;\r\n  private hitArea!: Mesh;\r\n  private width = 0;\r\n  private height = 0;\r\n  private touch: TouchTexture = new TouchTexture();\r\n  private mouse: Vector2 = new Vector2();\r\n  private raycaster: Raycaster = new Raycaster();\r\n  private pImageUrl = '';\r\n  private pImageChanging = false;\r\n  private gestureInfo$: Observable<number> = interval(2000);\r\n  private gestureInfoSubscription: Subscription = new Subscription();\r\n  showTouchGestureInfo = false;\r\n  justifyContent = 'center';\r\n  alignItems = 'center';\r\n\r\n  // Inputs\r\n  @Input()\r\n  set imageUrl(imageUrl: string) {\r\n    this.pImageUrl = imageUrl;\r\n    if (this.pImageChanging === true) {\r\n      return;\r\n    }\r\n    if (this.mesh != null) {\r\n      this.pImageChanging = true;\r\n      this.triggerImageChange();\r\n    }\r\n  }\r\n  get imageUrl(): string {\r\n    return this.pImageUrl;\r\n  }\r\n  @Input() backgroundColor = '#000000';\r\n  @Input() imageWidth = '100%';\r\n  @Input() imageHeight = '100%';\r\n  @Input()\r\n  set horizontalAlignment(horizontalAlignment: string) {\r\n    switch (horizontalAlignment) {\r\n      case 'start':\r\n        this.justifyContent = 'flex-start';\r\n        break;\r\n      case 'center':\r\n        this.justifyContent = 'center';\r\n        break;\r\n      case 'end':\r\n        this.justifyContent = 'flex-end';\r\n        break;\r\n      default:\r\n        this.justifyContent = 'center';\r\n        break;\r\n    }\r\n  }\r\n  get horizontalAlignment(): string {\r\n    return this.justifyContent;\r\n  }\r\n  @Input()\r\n  set verticalAlignment(verticalAlignment: string) {\r\n    switch (verticalAlignment) {\r\n      case 'top':\r\n        this.alignItems = 'flex-start';\r\n        break;\r\n      case 'center':\r\n        this.alignItems = 'center';\r\n        break;\r\n      case 'bottom':\r\n        this.alignItems = 'flex-end';\r\n        break;\r\n      default:\r\n        this.alignItems = 'center';\r\n        break;\r\n    }\r\n  }\r\n  get verticalAlignment(): string {\r\n    return this.alignItems;\r\n  }\r\n  @Input() animationEnabled = true;\r\n  @Input() showPerformanceMonitor = false;\r\n\r\n  @ViewChild('container') canvasRef!: ElementRef;\r\n  @ViewChild('performanceMonitor')\r\n  performanceMonitor!: PerformanceMonitorComponent;\r\n\r\n  constructor(private ngZone: NgZone) {}\r\n\r\n  ngAfterViewInit(): void {\r\n    if (this.pImageUrl === '') {\r\n      return;\r\n    }\r\n\r\n    const canvasWidth = this.canvasRef.nativeElement.clientWidth;\r\n    const canvasHeight = this.canvasRef.nativeElement.clientHeight;\r\n    // Set camera\r\n    this.camera = new PerspectiveCamera(\r\n      50,\r\n      canvasWidth / canvasHeight,\r\n      1,\r\n      10000\r\n    );\r\n    this.camera.position.z = 300;\r\n    // Init particles\r\n    this.initParticles(this.pImageUrl);\r\n    // Init renderer\r\n    this.renderer.setSize(canvasWidth - 1, canvasHeight);\r\n    this.canvasRef.nativeElement.appendChild(this.renderer.domElement);\r\n    // Start animation\r\n    this.animate();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.scene.clear();\r\n    this.renderer.clear();\r\n    this.texture.dispose();\r\n    this.renderer.dispose();\r\n  }\r\n\r\n  /**\r\n   * Creates the particles depending on the image and initializes the touch canvas\r\n   * @param url url of the image\r\n   */\r\n  private initParticles(url: string): void {\r\n    const loader = new TextureLoader();\r\n    loader.load(url, (texture) => {\r\n      this.texture = texture;\r\n      this.texture.minFilter = LinearFilter;\r\n      this.texture.magFilter = LinearFilter;\r\n      this.texture.format = RGBAFormat;\r\n\r\n      this.width = texture.image.width;\r\n      this.height = texture.image.height;\r\n\r\n      this.initPoints(true);\r\n      this.initHitArea();\r\n      this.initTouch();\r\n      this.resize();\r\n      this.show();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Initializes the points\r\n   * @param discard discard pixels darker than threshold #22\r\n   */\r\n  private initPoints(discard: boolean): void {\r\n    const numPoints: number = this.width * this.height;\r\n\r\n    let numVisible = numPoints;\r\n    let threshold = 0;\r\n    let originalColors = new Float32Array();\r\n\r\n    if (discard) {\r\n      // discard pixels darker than threshold #22\r\n      numVisible = 0;\r\n      threshold = 34;\r\n\r\n      const img = this.texture.image;\r\n      const canvas = document.createElement('canvas');\r\n      const ctx = canvas.getContext('2d');\r\n\r\n      canvas.width = this.width;\r\n      canvas.height = this.height;\r\n      if (ctx != null) {\r\n        ctx.scale(1, -1);\r\n        ctx.drawImage(img, 0, 0, this.width, this.height * -1);\r\n        const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n        originalColors = Float32Array.from(imgData.data);\r\n\r\n        for (let i = 0; i < numPoints; i++) {\r\n          if (originalColors[i * 4 + 0] > threshold) {\r\n            numVisible++;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const uniforms = {\r\n      uTime: { value: 0 },\r\n      uRandom: { value: 1.0 },\r\n      uDepth: { value: 2.0 },\r\n      uSize: { value: 0.0 },\r\n      uTextureSize: { value: new Vector2(this.width, this.height) },\r\n      uTexture: { value: this.texture },\r\n      uTouch: { value: null },\r\n    };\r\n\r\n    const shaders = new Shaders();\r\n    const material = new RawShaderMaterial({\r\n      uniforms,\r\n      vertexShader: shaders.particleVertex,\r\n      fragmentShader: shaders.particleFragment,\r\n      depthTest: false,\r\n      transparent: true,\r\n      // blending: THREE.AdditiveBlending\r\n    });\r\n\r\n    const geometry = new InstancedBufferGeometry();\r\n\r\n    // positions\r\n    const positions = new BufferAttribute(new Float32Array(4 * 3), 3);\r\n    positions.setXYZ(0, -0.5, 0.5, 0.0);\r\n    positions.setXYZ(1, 0.5, 0.5, 0.0);\r\n    positions.setXYZ(2, -0.5, -0.5, 0.0);\r\n    positions.setXYZ(3, 0.5, -0.5, 0.0);\r\n    geometry.setAttribute('position', positions);\r\n\r\n    // uvs\r\n    const uvs = new BufferAttribute(new Float32Array(4 * 2), 2);\r\n    uvs.setXY(0, 0.0, 0.0);\r\n    uvs.setXY(1, 1.0, 0.0);\r\n    uvs.setXY(2, 0.0, 1.0);\r\n    uvs.setXY(3, 1.0, 1.0);\r\n    geometry.setAttribute('uv', uvs);\r\n\r\n    // index\r\n    geometry.setIndex(\r\n      new BufferAttribute(new Uint16Array([0, 2, 1, 2, 3, 1]), 1)\r\n    );\r\n\r\n    const indices = new Uint16Array(numVisible);\r\n    const offsets = new Float32Array(numVisible * 3);\r\n    const angles = new Float32Array(numVisible);\r\n\r\n    for (let i = 0, j = 0; i < numPoints; i++) {\r\n      if (discard && originalColors[i * 4 + 0] <= threshold) {\r\n        continue;\r\n      }\r\n\r\n      offsets[j * 3 + 0] = i % this.width;\r\n      offsets[j * 3 + 1] = Math.floor(i / this.width);\r\n\r\n      indices[j] = i;\r\n\r\n      angles[j] = Math.random() * Math.PI;\r\n\r\n      j++;\r\n    }\r\n\r\n    geometry.setAttribute(\r\n      'pindex',\r\n      new InstancedBufferAttribute(indices, 1, false)\r\n    );\r\n    geometry.setAttribute(\r\n      'offset',\r\n      new InstancedBufferAttribute(offsets, 3, false)\r\n    );\r\n    geometry.setAttribute(\r\n      'angle',\r\n      new InstancedBufferAttribute(angles, 1, false)\r\n    );\r\n\r\n    this.mesh = new Mesh(geometry, material);\r\n    const object3d = new Object3D();\r\n    object3d.add(this.mesh);\r\n    this.scene.add(object3d);\r\n  }\r\n\r\n  /**\r\n   * Initializes the touch area\r\n   */\r\n  private initTouch(): void {\r\n    (this.mesh.material as RawShaderMaterial).uniforms.uTouch.value =\r\n      this.touch.texture;\r\n  }\r\n\r\n  /**\r\n   * Initializes the hit area\r\n   */\r\n  private initHitArea(): void {\r\n    const geometry = new PlaneGeometry(this.width, this.height, 1, 1);\r\n    const material = new MeshBasicMaterial({\r\n      color: 0xffffff,\r\n      wireframe: true,\r\n      depthTest: false,\r\n    });\r\n    material.visible = false;\r\n    this.hitArea = new Mesh(geometry, material);\r\n    this.mesh.add(this.hitArea);\r\n  }\r\n\r\n  /**\r\n   * animation for showing the particles\r\n   * @param time time of animation in ms\r\n   */\r\n  private show(time: number = 1000): void {\r\n    // Tween in\r\n    this.ngZone.runOutsideAngular(() => {\r\n      RxjsTween.createTween(\r\n        RxjsTween.easeInOutQuad,\r\n        [0.5, 0.0, 70.0],\r\n        [1.5, 2.0, 4.0],\r\n        time\r\n      ).subscribe(\r\n        (val) => {\r\n          (this.mesh.material as RawShaderMaterial).uniforms.uSize.value =\r\n            val[0];\r\n          (this.mesh.material as RawShaderMaterial).uniforms.uRandom.value =\r\n            val[1];\r\n          (this.mesh.material as RawShaderMaterial).uniforms.uDepth.value =\r\n            val[2];\r\n        },\r\n        () => {},\r\n        () => {\r\n          this.pImageChanging = false;\r\n        }\r\n      );\r\n    });\r\n  }\r\n\r\n  /**\r\n   * animation for tween out the particles and destroy everything\r\n   * @param time time of animation in ms\r\n   */\r\n  private triggerImageChange(time: number = 1000): void {\r\n    const uSizeStart = (this.mesh.material as RawShaderMaterial).uniforms.uSize\r\n      .value;\r\n    const uRandomStart = (this.mesh.material as RawShaderMaterial).uniforms\r\n      .uRandom.value;\r\n    const uDepth = (this.mesh.material as RawShaderMaterial).uniforms.uDepth\r\n      .value;\r\n    this.ngZone.runOutsideAngular(() => {\r\n      // Tween out\r\n      RxjsTween.createTween(\r\n        RxjsTween.easeInOutQuad,\r\n        [uSizeStart, uRandomStart, uDepth],\r\n        [0.0, 5.0, -20.0],\r\n        time\r\n      ).subscribe(\r\n        (val) => {\r\n          (this.mesh.material as RawShaderMaterial).uniforms.uSize.value =\r\n            val[0];\r\n          (this.mesh.material as RawShaderMaterial).uniforms.uRandom.value =\r\n            val[1];\r\n          (this.mesh.material as RawShaderMaterial).uniforms.uDepth.value =\r\n            val[2];\r\n        },\r\n        () => {},\r\n        () => {\r\n          if (this.mesh != null) {\r\n            if (this.mesh.parent != null) {\r\n              this.mesh.parent.remove(this.mesh);\r\n            }\r\n            this.mesh.geometry.dispose();\r\n            (this.mesh.material as RawShaderMaterial).dispose();\r\n          }\r\n\r\n          if (this.hitArea != null) {\r\n            if (this.hitArea.parent != null) {\r\n              this.hitArea.parent.remove(this.hitArea);\r\n            }\r\n            this.hitArea.geometry.dispose();\r\n            (this.hitArea.material as RawShaderMaterial).dispose();\r\n          }\r\n          this.initParticles(this.pImageUrl);\r\n          this.pImageChanging = false;\r\n        }\r\n      );\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Method for triggering the animation\r\n   */\r\n  private animate(): void {\r\n    this.ngZone.runOutsideAngular(() => {\r\n      window.requestAnimationFrame(() => this.animate());\r\n      if (this.animationEnabled === true) {\r\n        const delta = this.clock.getDelta();\r\n        if (this.mesh != null) {\r\n          if (this.touch) {\r\n            this.touch.update();\r\n          }\r\n          (this.mesh.material as RawShaderMaterial).uniforms.uTime.value +=\r\n            delta;\r\n        }\r\n        this.renderer.render(this.scene, this.camera);\r\n      }\r\n      if (this.performanceMonitor && this.showPerformanceMonitor) {\r\n        this.performanceMonitor.end();\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Handle mouse move event\r\n   * @param event mouse event\r\n   */\r\n  onMouseMove(event: MouseEvent): void {\r\n    // getBoundingClientRect retruns the distance in pixels of the top left corner of the element\r\n    // to the top left corner of the viewport\r\n    const domRect = (\r\n      this.canvasRef.nativeElement as HTMLElement\r\n    ).getBoundingClientRect();\r\n    // get the offset distance between the canvas, which contains the particles, to the outer container element\r\n    const canvasEl: HTMLElement = this.canvasRef.nativeElement\r\n      .children[0] as HTMLElement;\r\n    // Calculate the relative mouse position\r\n    this.mouse.x =\r\n      ((event.clientX - domRect.left - canvasEl.offsetLeft) /\r\n        canvasEl.clientWidth) *\r\n        2 -\r\n      1;\r\n    this.mouse.y =\r\n      (-(event.clientY - domRect.top - canvasEl.offsetTop) /\r\n        canvasEl.clientHeight) *\r\n        2 +\r\n      1;\r\n    // console.info('raw: x= ' + event.clientX + ' , y= ' + event.clientY);\r\n    // console.info('normalized: x= ' + this.mouse.x + ' , y= ' + this.mouse.y);\r\n    this.raycaster.setFromCamera(this.mouse, this.camera);\r\n\r\n    if (this.hitArea === undefined) {\r\n      return;\r\n    }\r\n    const intersects = this.raycaster.intersectObject(this.hitArea);\r\n    if (\r\n      intersects !== undefined &&\r\n      intersects.length > 0 &&\r\n      this.touch &&\r\n      intersects[0].uv !== undefined\r\n    ) {\r\n      this.touch.addTouch(intersects[0].uv.x, intersects[0].uv.y);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle touch move envent\r\n   * @param event mouse event\r\n   */\r\n  onTouchMove(event: TouchEvent): void {\r\n    if (event.touches.length < 2) {\r\n      this.showTouchGestureInfo = true;\r\n      this.gestureInfoSubscription.unsubscribe();\r\n      this.gestureInfoSubscription = this.gestureInfo$.subscribe({\r\n        next: () => {\r\n          this.showTouchGestureInfo = false;\r\n          this.gestureInfoSubscription.unsubscribe();\r\n        },\r\n      });\r\n      return;\r\n    }\r\n    event.preventDefault();\r\n    // getBoundingClientRect retruns the distance in pixels of the top left corner of the element\r\n    // to the top left corner of the viewport\r\n    const domRect = (\r\n      this.canvasRef.nativeElement as HTMLElement\r\n    ).getBoundingClientRect();\r\n    // get the offset distance between the canvas, which contains the particles, to the outer container element\r\n    const canvasEl: HTMLElement = this.canvasRef.nativeElement\r\n      .children[0] as HTMLElement;\r\n    // Calculate the relative mouse position\r\n    this.mouse.x =\r\n      ((event.touches[0].clientX - domRect.left - canvasEl.offsetLeft) /\r\n        canvasEl.clientWidth) *\r\n        2 -\r\n      1;\r\n    this.mouse.y =\r\n      (-(event.touches[0].clientY - domRect.top - canvasEl.offsetTop) /\r\n        canvasEl.clientHeight) *\r\n        2 +\r\n      1;\r\n    this.raycaster.setFromCamera(this.mouse, this.camera);\r\n\r\n    const intersects = this.raycaster.intersectObject(this.hitArea);\r\n    if (\r\n      intersects !== undefined &&\r\n      intersects.length > 0 &&\r\n      this.touch &&\r\n      intersects[0].uv !== undefined\r\n    ) {\r\n      this.touch.addTouch(intersects[0].uv.x, intersects[0].uv.y);\r\n    }\r\n  }\r\n\r\n  @HostListener('window:resize') resize(): void {\r\n    if (this.height !== undefined) {\r\n      this.camera.aspect =\r\n        this.canvasRef.nativeElement.clientWidth /\r\n        this.canvasRef.nativeElement.clientHeight;\r\n      this.camera.updateProjectionMatrix();\r\n      const fovHeight =\r\n        2 *\r\n        Math.tan((this.camera.fov * Math.PI) / 180 / 2) *\r\n        this.camera.position.z;\r\n      const scale = fovHeight / this.height;\r\n      this.mesh.scale.set(scale, scale, 1);\r\n      // this.hitArea.scale.set(scale, scale, 1);\r\n      if (this.renderer !== undefined) {\r\n        const width =\r\n          this.imageWidth == null\r\n            ? this.canvasRef.nativeElement.clientWidth\r\n            : this.distanceAsNumber(\r\n                this.imageWidth,\r\n                this.canvasRef.nativeElement.clientWidth\r\n              );\r\n        const height =\r\n          this.imageHeight == null\r\n            ? this.canvasRef.nativeElement.clientHeight\r\n            : this.distanceAsNumber(\r\n                this.imageHeight,\r\n                this.canvasRef.nativeElement.clientHeight\r\n              );\r\n        this.renderer.setSize(width, height);\r\n      }\r\n    }\r\n  }\r\n\r\n  private distanceAsNumber(distance: string, parentDistance: number): number {\r\n    let returnVal = 0;\r\n    if (distance.includes('px')) {\r\n      returnVal = Number.parseInt(distance.replace('px', ''), 10);\r\n    } else if (distance.includes('%')) {\r\n      returnVal =\r\n        (Number.parseInt(distance.replace('%', ''), 10) / 100) * parentDistance;\r\n    } else {\r\n      returnVal = Number.parseInt(distance, 10);\r\n    }\r\n    return returnVal;\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PerformanceMonitorComponent } from './performance-monitor.component';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    PerformanceMonitorComponent\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ],\r\n  exports: [\r\n    PerformanceMonitorComponent\r\n  ]\r\n})\r\nexport class PerformanceMonitorModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ImageAsParticlesComponent } from './image-as-particles.component';\r\nimport { PerformanceMonitorModule } from '../performance-monitor/performance-monitor.module';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [ImageAsParticlesComponent],\r\n  imports: [\r\n    CommonModule, PerformanceMonitorModule\r\n  ],\r\n  exports: [ImageAsParticlesComponent]\r\n})\r\nexport class ImageAsParticlesModule { }\r\n","export enum Direction {\r\n    forward,\r\n    backward,\r\n  }","export class ImageTransitionShaders{\r\n    vertex = `varying vec2 vUv;void main() {vUv = uv;gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );}`;\r\n    splitTransitionFrag = `\r\n            uniform float progress;\r\n            uniform float intensity;\r\n            uniform sampler2D texture1;\r\n            uniform sampler2D texture2;\r\n            uniform vec4 resolution1;\r\n            uniform vec4 resolution2;\r\n            varying vec2 vUv;\r\n            mat2 rotate(float a) {\r\n              float s = sin(a);\r\n              float c = cos(a);\r\n              return mat2(c, -s, s, c);\r\n            }\r\n            void main()\t{\r\n              vec2 newUV1 = (vUv - vec2(0.5,0.5))*resolution1.zw + vec2(0.5,0.5);\r\n              vec2 newUV2 = (vUv - vec2(0.5,0.5))*resolution2.zw + vec2(0.5,0.5);\r\n              vec2 uvDivided1 = fract(newUV1*vec2(intensity,1.));\r\n              vec2 uvDivided2 = fract(newUV2*vec2(intensity,1.));\r\n              vec2 uvDisplaced1 = newUV1 + rotate(3.1415926/4.)*uvDivided1*progress*0.1;\r\n              vec2 uvDisplaced2 = newUV2 + rotate(3.1415926/4.)*uvDivided2*(1. - progress)*0.1;\r\n              vec4 t1 = texture2D(texture1,uvDisplaced1);\r\n              vec4 t2 = texture2D(texture2,uvDisplaced2);\r\n              // Use black background color\r\n              // Top right\r\n              vec2 tr1 = step(newUV1, vec2(1.0, 1.0));\r\n              vec2 tr2 = step(newUV2, vec2(1.0, 1.0));\r\n              float pct1 = tr1.x * tr1.y;\r\n              float pct2 = tr2.x * tr2.y;\r\n              // Bottom left\r\n              vec2 bl1 = step(vec2(0.0, 0.0), newUV1);\r\n              vec2 bl2 = step(vec2(0.0, 0.0), newUV2);\r\n              pct1 *= bl1.x * bl1.y;\r\n              pct2 *= bl2.x * bl2.y;\r\n              vec4 t1wb = t1 * vec4(pct1,pct1,pct1,1.0);\r\n              vec4 t2wb = t2 * vec4(pct2,pct2,pct2,1.0);\r\n              gl_FragColor = mix(t1wb, t2wb, progress);\r\n            }\r\n    `;\r\n    fadeFrag = `\r\n            uniform float progress;\r\n            uniform sampler2D texture1;\r\n            uniform sampler2D texture2;\r\n            uniform vec4 resolution1;\r\n            uniform vec4 resolution2;\r\n            varying vec2 vUv;\r\n            mat2 rotate(float a) {\r\n              float s = sin(a);\r\n              float c = cos(a);\r\n              return mat2(c, -s, s, c);\r\n            }\r\n            void main()\t{\r\n              vec2 newUV1 = (vUv - vec2(0.5,0.5))*resolution1.zw + vec2(0.5,0.5);\r\n              vec2 newUV2 = (vUv - vec2(0.5,0.5))*resolution2.zw + vec2(0.5,0.5);\r\n              vec2 uvDisplaced1 = newUV1 + vec2(1.0,0)*progress*0.1;\r\n              vec2 uvDisplaced2 = newUV2 + vec2(1.0,0)*(1. - progress)*0.1;\r\n              vec4 t1 = texture2D(texture1,uvDisplaced1);\r\n              vec4 t2 = texture2D(texture2,uvDisplaced2);\r\n              // Use black background color\r\n              // Top right\r\n              vec2 tr1 = step(newUV1, vec2(1.0, 1.0));\r\n              vec2 tr2 = step(newUV2, vec2(1.0, 1.0));\r\n              float pct1 = tr1.x * tr1.y;\r\n              float pct2 = tr2.x * tr2.y;\r\n              // Bottom left\r\n              vec2 bl1 = step(vec2(0.0, 0.0), newUV1);\r\n              vec2 bl2 = step(vec2(0.0, 0.0), newUV2);\r\n              pct1 *= bl1.x * bl1.y;\r\n              pct2 *= bl2.x * bl2.y;\r\n              vec4 t1wb = t1 * vec4(pct1,pct1,pct1,1.0);\r\n              vec4 t2wb = t2 * vec4(pct2,pct2,pct2,1.0);\r\n              gl_FragColor = mix(t1wb, t2wb, progress);\r\n            }\r\n    `;\r\n    noiseFrag = `\r\n\t\tuniform float time;\r\n\t\tuniform float progress;\r\n\t\tuniform float width;\r\n\t\tuniform float scaleX;\r\n\t\tuniform float scaleY;\r\n\t\tuniform sampler2D texture1;\r\n\t\tuniform sampler2D texture2;\r\n\t\tuniform sampler2D displacement;\r\n\t\tuniform vec4 resolution1;\r\n\t\tuniform vec4 resolution2;\r\n\t\tvarying vec2 vUv;\r\n\t\tvarying vec4 vPosition;\r\n\t\t//\tClassic Perlin 3D Noise\r\n\t\t//\tby Stefan Gustavson\r\n\t\t//\r\n\t\tvec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);}\r\n\t\tvec4 taylorInvSqrt(vec4 r){return 1.79284291400159 - 0.85373472095314 * r;}\r\n\t\tvec4 fade(vec4 t) {return t*t*t*(t*(t*6.0-15.0)+10.0);}\r\n\t\tfloat cnoise(vec4 P){\r\n\t\t  ;\r\n\t\t  vec4 Pi0 = floor(P); // Integer part for indexing\r\n\t\t  vec4 Pi1 = Pi0 + 1.0; // Integer part + 1\r\n\t\t  Pi0 = mod(Pi0, 289.0);\r\n\t\t  Pi1 = mod(Pi1, 289.0);\r\n\t\t  vec4 Pf0 = fract(P); // Fractional part for interpolation\r\n\t\t  vec4 Pf1 = Pf0 - 1.0; // Fractional part - 1.0\r\n\t\t  vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\r\n\t\t  vec4 iy = vec4(Pi0.yy, Pi1.yy);\r\n\t\t  vec4 iz0 = vec4(Pi0.zzzz);\r\n\t\t  vec4 iz1 = vec4(Pi1.zzzz);\r\n\t\t  vec4 iw0 = vec4(Pi0.wwww);\r\n\t\t  vec4 iw1 = vec4(Pi1.wwww);\r\n\t\t  vec4 ixy = permute(permute(ix) + iy);\r\n\t\t  vec4 ixy0 = permute(ixy + iz0);\r\n\t\t  vec4 ixy1 = permute(ixy + iz1);\r\n\t\t  vec4 ixy00 = permute(ixy0 + iw0);\r\n\t\t  vec4 ixy01 = permute(ixy0 + iw1);\r\n\t\t  vec4 ixy10 = permute(ixy1 + iw0);\r\n\t\t  vec4 ixy11 = permute(ixy1 + iw1);\r\n\t\t  vec4 gx00 = ixy00 / 7.0;\r\n\t\t  vec4 gy00 = floor(gx00) / 7.0;\r\n\t\t  vec4 gz00 = floor(gy00) / 6.0;\r\n\t\t  gx00 = fract(gx00) - 0.5;\r\n\t\t  gy00 = fract(gy00) - 0.5;\r\n\t\t  gz00 = fract(gz00) - 0.5;\r\n\t\t  vec4 gw00 = vec4(0.75) - abs(gx00) - abs(gy00) - abs(gz00);\r\n\t\t  vec4 sw00 = step(gw00, vec4(0.0));\r\n\t\t  gx00 -= sw00 * (step(0.0, gx00) - 0.5);\r\n\t\t  gy00 -= sw00 * (step(0.0, gy00) - 0.5);\r\n\t\t  vec4 gx01 = ixy01 / 7.0;\r\n\t\t  vec4 gy01 = floor(gx01) / 7.0;\r\n\t\t  vec4 gz01 = floor(gy01) / 6.0;\r\n\t\t  gx01 = fract(gx01) - 0.5;\r\n\t\t  gy01 = fract(gy01) - 0.5;\r\n\t\t  gz01 = fract(gz01) - 0.5;\r\n\t\t  vec4 gw01 = vec4(0.75) - abs(gx01) - abs(gy01) - abs(gz01);\r\n\t\t  vec4 sw01 = step(gw01, vec4(0.0));\r\n\t\t  gx01 -= sw01 * (step(0.0, gx01) - 0.5);\r\n\t\t  gy01 -= sw01 * (step(0.0, gy01) - 0.5);\r\n\t\t  vec4 gx10 = ixy10 / 7.0;\r\n\t\t  vec4 gy10 = floor(gx10) / 7.0;\r\n\t\t  vec4 gz10 = floor(gy10) / 6.0;\r\n\t\t  gx10 = fract(gx10) - 0.5;\r\n\t\t  gy10 = fract(gy10) - 0.5;\r\n\t\t  gz10 = fract(gz10) - 0.5;\r\n\t\t  vec4 gw10 = vec4(0.75) - abs(gx10) - abs(gy10) - abs(gz10);\r\n\t\t  vec4 sw10 = step(gw10, vec4(0.0));\r\n\t\t  gx10 -= sw10 * (step(0.0, gx10) - 0.5);\r\n\t\t  gy10 -= sw10 * (step(0.0, gy10) - 0.5);\r\n\t\t  vec4 gx11 = ixy11 / 7.0;\r\n\t\t  vec4 gy11 = floor(gx11) / 7.0;\r\n\t\t  vec4 gz11 = floor(gy11) / 6.0;\r\n\t\t  gx11 = fract(gx11) - 0.5;\r\n\t\t  gy11 = fract(gy11) - 0.5;\r\n\t\t  gz11 = fract(gz11) - 0.5;\r\n\t\t  vec4 gw11 = vec4(0.75) - abs(gx11) - abs(gy11) - abs(gz11);\r\n\t\t  vec4 sw11 = step(gw11, vec4(0.0));\r\n\t\t  gx11 -= sw11 * (step(0.0, gx11) - 0.5);\r\n\t\t  gy11 -= sw11 * (step(0.0, gy11) - 0.5);\r\n\t\t  vec4 g0000 = vec4(gx00.x,gy00.x,gz00.x,gw00.x);\r\n\t\t  vec4 g1000 = vec4(gx00.y,gy00.y,gz00.y,gw00.y);\r\n\t\t  vec4 g0100 = vec4(gx00.z,gy00.z,gz00.z,gw00.z);\r\n\t\t  vec4 g1100 = vec4(gx00.w,gy00.w,gz00.w,gw00.w);\r\n\t\t  vec4 g0010 = vec4(gx10.x,gy10.x,gz10.x,gw10.x);\r\n\t\t  vec4 g1010 = vec4(gx10.y,gy10.y,gz10.y,gw10.y);\r\n\t\t  vec4 g0110 = vec4(gx10.z,gy10.z,gz10.z,gw10.z);\r\n\t\t  vec4 g1110 = vec4(gx10.w,gy10.w,gz10.w,gw10.w);\r\n\t\t  vec4 g0001 = vec4(gx01.x,gy01.x,gz01.x,gw01.x);\r\n\t\t  vec4 g1001 = vec4(gx01.y,gy01.y,gz01.y,gw01.y);\r\n\t\t  vec4 g0101 = vec4(gx01.z,gy01.z,gz01.z,gw01.z);\r\n\t\t  vec4 g1101 = vec4(gx01.w,gy01.w,gz01.w,gw01.w);\r\n\t\t  vec4 g0011 = vec4(gx11.x,gy11.x,gz11.x,gw11.x);\r\n\t\t  vec4 g1011 = vec4(gx11.y,gy11.y,gz11.y,gw11.y);\r\n\t\t  vec4 g0111 = vec4(gx11.z,gy11.z,gz11.z,gw11.z);\r\n\t\t  vec4 g1111 = vec4(gx11.w,gy11.w,gz11.w,gw11.w);\r\n\t\t  vec4 norm00 = taylorInvSqrt(vec4(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));\r\n\t\t  g0000 *= norm00.x;\r\n\t\t  g0100 *= norm00.y;\r\n\t\t  g1000 *= norm00.z;\r\n\t\t  g1100 *= norm00.w;\r\n\t\t  vec4 norm01 = taylorInvSqrt(vec4(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));\r\n\t\t  g0001 *= norm01.x;\r\n\t\t  g0101 *= norm01.y;\r\n\t\t  g1001 *= norm01.z;\r\n\t\t  g1101 *= norm01.w;\r\n\t\t  vec4 norm10 = taylorInvSqrt(vec4(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));\r\n\t\t  g0010 *= norm10.x;\r\n\t\t  g0110 *= norm10.y;\r\n\t\t  g1010 *= norm10.z;\r\n\t\t  g1110 *= norm10.w;\r\n\t\t  vec4 norm11 = taylorInvSqrt(vec4(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));\r\n\t\t  g0011 *= norm11.x;\r\n\t\t  g0111 *= norm11.y;\r\n\t\t  g1011 *= norm11.z;\r\n\t\t  g1111 *= norm11.w;\r\n\t\t  float n0000 = dot(g0000, Pf0);\r\n\t\t  float n1000 = dot(g1000, vec4(Pf1.x, Pf0.yzw));\r\n\t\t  float n0100 = dot(g0100, vec4(Pf0.x, Pf1.y, Pf0.zw));\r\n\t\t  float n1100 = dot(g1100, vec4(Pf1.xy, Pf0.zw));\r\n\t\t  float n0010 = dot(g0010, vec4(Pf0.xy, Pf1.z, Pf0.w));\r\n\t\t  float n1010 = dot(g1010, vec4(Pf1.x, Pf0.y, Pf1.z, Pf0.w));\r\n\t\t  float n0110 = dot(g0110, vec4(Pf0.x, Pf1.yz, Pf0.w));\r\n\t\t  float n1110 = dot(g1110, vec4(Pf1.xyz, Pf0.w));\r\n\t\t  float n0001 = dot(g0001, vec4(Pf0.xyz, Pf1.w));\r\n\t\t  float n1001 = dot(g1001, vec4(Pf1.x, Pf0.yz, Pf1.w));\r\n\t\t  float n0101 = dot(g0101, vec4(Pf0.x, Pf1.y, Pf0.z, Pf1.w));\r\n\t\t  float n1101 = dot(g1101, vec4(Pf1.xy, Pf0.z, Pf1.w));\r\n\t\t  float n0011 = dot(g0011, vec4(Pf0.xy, Pf1.zw));\r\n\t\t  float n1011 = dot(g1011, vec4(Pf1.x, Pf0.y, Pf1.zw));\r\n\t\t  float n0111 = dot(g0111, vec4(Pf0.x, Pf1.yzw));\r\n\t\t  float n1111 = dot(g1111, Pf1);\r\n\t\t  vec4 fade_xyzw = fade(Pf0);\r\n\t\t  vec4 n_0w = mix(vec4(n0000, n1000, n0100, n1100), vec4(n0001, n1001, n0101, n1101), fade_xyzw.w);\r\n\t\t  vec4 n_1w = mix(vec4(n0010, n1010, n0110, n1110), vec4(n0011, n1011, n0111, n1111), fade_xyzw.w);\r\n\t\t  vec4 n_zw = mix(n_0w, n_1w, fade_xyzw.z);\r\n\t\t  vec2 n_yzw = mix(n_zw.xy, n_zw.zw, fade_xyzw.y);\r\n\t\t  float n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);\r\n\t\t  return 2.2 * n_xyzw;\r\n\t\t}\r\n\t\tfloat map(float value, float min1, float max1, float min2, float max2) {\r\n\t\t  return min2 + (value - min1) * (max2 - min2) / (max1 - min1);\r\n\t\t}\r\n\t\tfloat parabola( float x, float k ) {\r\n\t\t  return pow( 4. * x * ( 1. - x ), k );\r\n\t\t}\r\n\t\tvoid main()\t{\r\n\t\t\tfloat dt = parabola(progress,1.);\r\n\t\t\tfloat border = 1.;\r\n\t\t\tvec2 newUV1 = (vUv - vec2(0.5,0.5))*resolution1.zw + vec2(0.5,0.5);\r\n      \t\tvec2 newUV2 = (vUv - vec2(0.5,0.5))*resolution2.zw + vec2(0.5,0.5);\r\n\t\t\tvec4 t1 = texture2D(texture1,newUV1);\r\n      \t\tvec4 t2 = texture2D(texture2,newUV2);\r\n      \t\t// Use black background color\r\n      \t\t// Top right\r\n      \t\tvec2 tr1 = step(newUV1, vec2(1.0, 1.0));\r\n      \t\tvec2 tr2 = step(newUV2, vec2(1.0, 1.0));\r\n      \t\tfloat pct1 = tr1.x * tr1.y;\r\n      \t\tfloat pct2 = tr2.x * tr2.y;\r\n      \t\t// Bottom left\r\n      \t\tvec2 bl1 = step(vec2(0.0, 0.0), newUV1);\r\n      \t\tvec2 bl2 = step(vec2(0.0, 0.0), newUV2);\r\n      \t\tpct1 *= bl1.x * bl1.y;\r\n      \t\tpct2 *= bl2.x * bl2.y;\r\n      \t\tvec4 t1wb = t1 * vec4(pct1,pct1,pct1,1.0);\r\n      \t\tvec4 t2wb = t2 * vec4(pct2,pct2,pct2,1.0);\r\n\t\t\tfloat realnoise = 0.5*(cnoise(vec4(newUV1.x*scaleX  + 0.*time/3., newUV1.y*scaleY,0.*time/3.,0.)) +1.);\r\n\t\t\tfloat w = width*dt;\r\n\t\t\tfloat maskvalue = smoothstep(1. - w,1.,vUv.x + mix(-w/2., 1. - w/2., progress));\r\n\t\t\tfloat mask = maskvalue + maskvalue*realnoise;\r\n\t\t\tfloat final = smoothstep(border,border+0.01,mask);\r\n\t\t\tgl_FragColor = mix(t1wb,t2wb,final);\r\n\t\t}\r\n\t`;\r\n    blurFrag = `\r\n\t\t// author: gre\r\n\t\t// license: MIT\r\n\t\tuniform float progress;\r\n\t\tuniform float intensity;\r\n\t\tuniform float ratio;\r\n\t\tuniform sampler2D texture1;\r\n\t\tuniform sampler2D texture2;\r\n\t\tuniform vec4 resolution1;\r\n\t\tuniform vec4 resolution2;\r\n\t\tvarying vec2 vUv;\r\n\t\tconst int passes = 6;\r\n\r\n\t\tvoid main() {\r\n\t\t\tvec2 newUV1 = (vUv - vec2(0.5,0.5))*resolution1.zw + vec2(0.5,0.5);\r\n\t\t\tvec2 newUV2 = (vUv - vec2(0.5,0.5))*resolution2.zw + vec2(0.5,0.5);\r\n\r\n\t\t\tvec4 t1 = vec4(0.0);\r\n\t\t\tvec4 t2 = vec4(0.0);\r\n\t\t\tfloat disp = intensity/100.0*(0.5-distance(0.5, progress));\r\n\t\t\tfor (int xi=0; xi<passes; xi++)\r\n\t\t\t{\r\n\t\t\t\tfloat x = float(xi) / float(passes) - 0.5;\r\n\t\t\t\tfor (int yi=0; yi<passes; yi++)\r\n\t\t\t\t{\r\n\t\t\t\t\tfloat y = float(yi) / float(passes) - 0.5;\r\n\t\t\t\t\tvec2 v = vec2(x,y);\r\n\t\t\t\t\tfloat d = disp;\r\n\t\t\t\t\tt1 += texture2D(texture1,newUV1 + d*v);\r\n\t\t\t\t\tt2 += texture2D(texture2,newUV2 + d*v);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tt1 /= float(passes*passes);\r\n\t\t\tt2 /= float(passes*passes);\r\n\r\n\t\t\t// Use black background color\r\n\t\t\t// Top right\r\n\t\t\tvec2 tr1 = step(newUV1, vec2(1.0, 1.0));\r\n\t\t\tvec2 tr2 = step(newUV2, vec2(1.0, 1.0));\r\n\t\t\tfloat pct1 = tr1.x * tr1.y;\r\n\t\t\tfloat pct2 = tr2.x * tr2.y;\r\n\t\t\t// Bottom left\r\n\t\t\tvec2 bl1 = step(vec2(0.0, 0.0), newUV1);\r\n\t\t\tvec2 bl2 = step(vec2(0.0, 0.0), newUV2);\r\n\t\t\tpct1 *= bl1.x * bl1.y;\r\n\t\t\tpct2 *= bl2.x * bl2.y;\r\n\t\t\tvec4 t1wb = t1 * vec4(pct1,pct1,pct1,1.0);\r\n\t\t\tvec4 t2wb = t2 * vec4(pct2,pct2,pct2,1.0);\r\n\t\t\tgl_FragColor = mix(t1wb, t2wb, progress);\r\n\t\t}\r\n\t`;\r\n\tdistortionFrag = `\r\n\tuniform float progress;\r\n\tuniform sampler2D displacementTexture;\r\n\tuniform sampler2D texture1;\r\n    uniform sampler2D texture2;\r\n    uniform vec4 resolution1;\r\n    uniform vec4 resolution2;\r\n\tuniform float angle1;\r\n\tuniform float angle2;\r\n\tuniform float intensity;\r\n\r\n\tvarying vec2 vUv;\r\n\r\n\tmat2 getRotM(float angle) {\r\n\t  float s = sin(angle);\r\n\t  float c = cos(angle);\r\n\t  return mat2(c, -s, s, c);\r\n\t}\r\n\r\n\tvoid main() {\r\n\t  vec2 newUV1 = (vUv - vec2(0.5,0.5))*resolution1.zw + vec2(0.5,0.5);\r\n      vec2 newUV2 = (vUv - vec2(0.5,0.5))*resolution2.zw + vec2(0.5,0.5);\r\n\t  vec4 t1 = texture2D(texture1,newUV1);\r\n      vec4 t2 = texture2D(texture2,newUV2);\r\n\r\n\t  vec4 disp = texture2D(displacementTexture, newUV1);\r\n\t  vec2 dispVec = vec2(disp.r, disp.g);\r\n\r\n\t  vec2 distortedPosition1 = newUV1 + getRotM(angle1) * dispVec * intensity / 100.0 * progress;\r\n\t  vec2 distortedPosition2 = newUV2 + getRotM(angle2) * dispVec * intensity / 100.0 * (1.0 - progress);\r\n\t  vec4 t1d = texture2D(texture1, distortedPosition1);\r\n\t  vec4 t2d = texture2D(texture2, distortedPosition2);\r\n\r\n\t  // Use black background color\r\n\t  // Top right\r\n\t  vec2 tr1 = step(newUV1, vec2(1.0, 1.0));\r\n\t  vec2 tr2 = step(newUV2, vec2(1.0, 1.0));\r\n\t  float pct1 = tr1.x * tr1.y;\r\n\t  float pct2 = tr2.x * tr2.y;\r\n\t  // Bottom left\r\n\t  vec2 bl1 = step(vec2(0.0, 0.0), newUV1);\r\n\t  vec2 bl2 = step(vec2(0.0, 0.0), newUV2);\r\n\t  pct1 *= bl1.x * bl1.y;\r\n\t  pct2 *= bl2.x * bl2.y;\r\n\t  vec4 t1wb = t1d * vec4(pct1,pct1,pct1,1.0);\r\n\t  vec4 t2wb = t2d * vec4(pct2,pct2,pct2,1.0);\r\n\t  gl_FragColor = mix(t1wb, t2wb, progress);\r\n\t}\r\n\t`;\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostListener,\r\n  Input,\r\n  NgZone,\r\n  OnDestroy,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n  interval,\r\n  NEVER,\r\n  Observable,\r\n  of,\r\n  Subject,\r\n  Subscription,\r\n  zip,\r\n} from 'rxjs';\r\nimport { delay, switchMap, tap } from 'rxjs/operators';\r\nimport {\r\n  DoubleSide,\r\n  Mesh,\r\n  PerspectiveCamera,\r\n  PlaneBufferGeometry,\r\n  Scene,\r\n  ShaderMaterial,\r\n  Texture,\r\n  Vector4,\r\n  WebGLRenderer,\r\n} from 'three';\r\nimport { TextureLoader } from 'three';\r\nimport { PerformanceMonitorComponent } from '../performance-monitor/performance-monitor.component';\r\nimport { RxjsTween } from '../tween/rxjs-tween';\r\nimport { Direction } from './interfaces/direction';\r\nimport { ImageTransitionShaders } from './shaders/imageTransitionShaders';\r\n\r\n@Component({\r\n  selector: 'lib-image-transition',\r\n  templateUrl: './image-transition.component.html',\r\n  styleUrls: ['./image-transition.component.css'],\r\n})\r\nexport class ImageTransitionComponent implements AfterViewInit, OnDestroy {\r\n  @Input() imageUrls: string[] = new Array<string>();\r\n\r\n  @Input()\r\n  get displacementImageUrl(): string {\r\n    return this.pDistortionImageUrl;\r\n  }\r\n  set displacementImageUrl(displacementImageUrl: string) {\r\n    this.pDistortionImageUrl = displacementImageUrl;\r\n    if (this.material != null) {\r\n      this.setShaderProperties();\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  get imageSize(): string {\r\n    return this.pImageSize;\r\n  }\r\n  set imageSize(imageSize: string) {\r\n    this.pImageSize = imageSize;\r\n    if (this.mesh != null) {\r\n      this.resize();\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  get autoPlay(): boolean {\r\n    return this.pAutoPlay;\r\n  }\r\n  set autoPlay(autoplay: boolean) {\r\n    this.pAutoPlay = autoplay;\r\n    if (this.mesh != null) {\r\n      if (this.pAutoPlay === true) {\r\n        this.setAutoPlayInterval();\r\n      } else {\r\n        this.stopAutoPlayInterval();\r\n      }\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  get autoPlayInterval(): number {\r\n    return this.pAutoPlayInterval;\r\n  }\r\n  set autoPlayInterval(autoPlayInterval: number) {\r\n    this.pAutoPlayInterval = autoPlayInterval;\r\n    if (this.mesh != null) {\r\n      if (this.pAutoPlay === true) {\r\n        this.setAutoPlayInterval();\r\n      }\r\n    }\r\n  }\r\n\r\n  @Input() transitionDuration = 1000;\r\n\r\n  @Input()\r\n  get transitionType(): string {\r\n    return this.pTransitionType;\r\n  }\r\n  set transitionType(transitionType: string) {\r\n    this.pTransitionType = transitionType;\r\n    if (this.material != null) {\r\n      this.setShaderProperties();\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  get sizeX(): number {\r\n    return this.pScaleX;\r\n  }\r\n  set sizeX(sizeX: number) {\r\n    this.pScaleX = sizeX;\r\n    if (this.material != null) {\r\n      this.setShaderProperties();\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  get sizeY(): number {\r\n    return this.pScaleY;\r\n  }\r\n  set sizeY(sizeY: number) {\r\n    this.pScaleY = sizeY;\r\n    if (this.material != null) {\r\n      this.setShaderProperties();\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  get width(): number {\r\n    return this.pWidth;\r\n  }\r\n  set width(width: number) {\r\n    this.pWidth = width;\r\n    if (this.material != null) {\r\n      this.setShaderProperties();\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  get intensity(): number {\r\n    return this.intensity;\r\n  }\r\n  set intensity(intensity: number) {\r\n    this.pIntensity = intensity;\r\n    if (this.material != null) {\r\n      this.setShaderProperties();\r\n    }\r\n  }\r\n\r\n  @Input() animationEnabled = true;\r\n  @Input() startIndex = 0;\r\n  @Input() showPerformanceMonitor = false;\r\n\r\n  @Output() imageIndexChange = new EventEmitter<number>();\r\n\r\n  private pAutoPlay = false;\r\n  private pAutoPlayInterval = 5000;\r\n  private pImageSize = 'cover';\r\n  private pTransitionType = 'split';\r\n  private pIntensity = 40.0;\r\n  private pScaleX = 50.0;\r\n  private pScaleY = 50.0;\r\n  private pWidth = 0.5;\r\n  private pDistortionImageUrl = '';\r\n\r\n  private animationFrameId!: number;\r\n  private renderer: WebGLRenderer = new WebGLRenderer({\r\n    antialias: true,\r\n    alpha: true,\r\n  });\r\n  private scene: Scene = new Scene();\r\n  private camera!: PerspectiveCamera;\r\n  private mesh!: Mesh;\r\n  private material!: ShaderMaterial;\r\n  private textures: Texture[] = new Array<Texture>();\r\n  private displacementTexture?: Texture;\r\n  private nextImageIndex = 0;\r\n  private tranistionOngoing = false;\r\n  private shaders: ImageTransitionShaders = new ImageTransitionShaders();\r\n  private autoPlay$: Observable<number> = new Observable<number>();\r\n  private autoPlaySubscription = new Subscription();\r\n\r\n  private readonly subscriptions = new Subscription();\r\n\r\n  private readonly basicAssetsLoaded$$ = new Subject<void>();\r\n  private readonly forwardTextureLoaded$$ = new Subject<void>();\r\n  private readonly backwardTextureLoaded$$ = new Subject<void>();\r\n  private readonly showLoadingSpinner$$ = new Subject<boolean>();\r\n  private readonly transitToForwardTexture$$ = new Subject<void>();\r\n  private readonly transitToBackwardTexture$$ = new Subject<void>();\r\n\r\n  // When true -> show spinner after a delay\r\n  // When false -> hide spinner immediatelly\r\n  showLoadingSpinner$ = this.showLoadingSpinner$$.pipe(\r\n    switchMap((show) => {\r\n      if (show) {\r\n        return of(show).pipe(delay(300));\r\n      } else {\r\n        return of(show);\r\n      }\r\n    })\r\n  );\r\n\r\n  @ViewChild('threejsContainer') threejsContainer!: ElementRef;\r\n  @ViewChild('performanceMonitor')\r\n  performanceMonitor!: PerformanceMonitorComponent;\r\n\r\n  constructor(private ngZone: NgZone) {\r\n    this.subscribeToInitScene();\r\n    this.subscribeTransistionToBackwardTexture();\r\n    this.subscribeTransistionToForwardTexture();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (this.imageUrls.length < 2) {\r\n      throw new Error('At least two images are required');\r\n    }\r\n\r\n    // Init camera\r\n    this.camera = new PerspectiveCamera(\r\n      70,\r\n      window.innerWidth / window.innerHeight,\r\n      0.001,\r\n      1000\r\n    );\r\n    this.camera.position.set(0, 0, 2);\r\n\r\n    // Init renderer\r\n    this.renderer.setSize(\r\n      this.threejsContainer.nativeElement.clientWidth,\r\n      this.threejsContainer.nativeElement.clientHeight\r\n    );\r\n    this.renderer.setPixelRatio(window.devicePixelRatio);\r\n    this.threejsContainer.nativeElement.appendChild(this.renderer.domElement);\r\n\r\n    // Create scene\r\n    this.scene = new Scene();\r\n\r\n    // Load currenct, backwards and forwards textures\r\n    this.textures = new Array<Texture>(this.imageUrls.length);\r\n    this.loadBasicAssets();\r\n    const backwardImgIdx =\r\n      this.startIndex === 0 ? this.imageUrls.length - 1 : this.startIndex - 1;\r\n    this.loadTexture(backwardImgIdx, Direction.backward);\r\n    const forwardImgIdx =\r\n      this.startIndex === this.imageUrls.length - 1 ? 0 : this.startIndex + 1;\r\n    this.loadTexture(forwardImgIdx, Direction.forward);\r\n\r\n    // Init autoPlay Observable\r\n    if (this.pAutoPlay === true) {\r\n      this.setAutoPlayInterval();\r\n    }\r\n\r\n    this.animate();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    // Cancel Animation\r\n    cancelAnimationFrame(this.animationFrameId);\r\n    // Stop autoplay animation\r\n    this.stopAutoPlayInterval();\r\n    // Remove threejs container from DOM\r\n    (this.threejsContainer.nativeElement as HTMLCanvasElement).removeChild(\r\n      this.renderer.domElement\r\n    );\r\n    // Dispose textures\r\n    this.textures.forEach((t) => {\r\n      t.dispose();\r\n    });\r\n    // Dispose material\r\n    if (this.material) {\r\n      this.material.dispose();\r\n    }\r\n    // Clear scene\r\n    if (this.scene) {\r\n      this.scene.clear();\r\n    }\r\n    // Dispose renderer\r\n    if (this.renderer) {\r\n      this.renderer.dispose();\r\n    }\r\n\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n\r\n  private subscribeToInitScene(): void {\r\n    this.subscriptions.add(\r\n      this.basicAssetsLoaded$$\r\n        .pipe(tap(() => this.initBasiscScene()))\r\n        .subscribe()\r\n    );\r\n  }\r\n\r\n  private subscribeTransistionToForwardTexture(): void {\r\n    this.subscriptions.add(\r\n      zip(this.transitToForwardTexture$$, this.forwardTextureLoaded$$)\r\n        .pipe(\r\n          tap(() => this.showLoadingSpinner$$.next(false)),\r\n          tap(() => this.prepAndLoadNextImg(Direction.forward))\r\n        )\r\n        .subscribe()\r\n    );\r\n  }\r\n\r\n  private subscribeTransistionToBackwardTexture(): void {\r\n    this.subscriptions.add(\r\n      zip(this.transitToBackwardTexture$$, this.backwardTextureLoaded$$)\r\n        .pipe(\r\n          tap(() => this.showLoadingSpinner$$.next(false)),\r\n          tap(() => this.prepAndLoadNextImg(Direction.backward))\r\n        )\r\n        .subscribe()\r\n    );\r\n  }\r\n\r\n  private loadBasicAssets(): void {\r\n    this.showLoadingSpinner$$.next(true);\r\n    const promises: Promise<any>[] = new Array<Promise<any>>();\r\n    // Initial image to be shown\r\n    promises.push(\r\n      new Promise((resolve) => {\r\n        this.textures[this.startIndex] = new TextureLoader().load(\r\n          this.imageUrls[this.startIndex],\r\n          resolve\r\n        );\r\n      })\r\n    );\r\n\r\n    if (this.displacementImageUrl !== '') {\r\n      promises.push(\r\n        new Promise((resolve) => {\r\n          this.displacementTexture = new TextureLoader().load(\r\n            this.displacementImageUrl,\r\n            resolve\r\n          );\r\n        })\r\n      );\r\n    }\r\n\r\n    Promise.all(promises)\r\n      .then(() => this.basicAssetsLoaded$$.next())\r\n      .catch((err) => console.error(err))\r\n      .finally(() => this.showLoadingSpinner$$.next(false));\r\n  }\r\n\r\n  private loadTexture(index: number, direction: Direction): void {\r\n    new TextureLoader()\r\n      .loadAsync(this.imageUrls[index])\r\n      .then((texture) => {\r\n        this.textures[index] = texture;\r\n        switch (direction) {\r\n          case Direction.forward:\r\n            this.forwardTextureLoaded$$.next();\r\n            break;\r\n          case Direction.backward:\r\n            this.backwardTextureLoaded$$.next();\r\n            break;\r\n        }\r\n      })\r\n      .catch((err) => console.error(err));\r\n  }\r\n\r\n  private initBasiscScene(): void {\r\n    // Create geometry\r\n    const geometry = new PlaneBufferGeometry(1, 1, 2, 2);\r\n\r\n    this.nextImageIndex = this.startIndex;\r\n    // Emit event to set current image index\r\n    this.imageIndexChange.emit(this.nextImageIndex);\r\n\r\n    this.material = new ShaderMaterial({\r\n      side: DoubleSide,\r\n      uniforms: {\r\n        time: { value: 0 },\r\n        progress: { value: 0 },\r\n        border: { value: 0 },\r\n        intensity: { value: 50.0 },\r\n        angle1: { value: Math.PI / 4 },\r\n        angle2: { value: -Math.PI + Math.PI / 4 },\r\n        scaleX: { value: 40.0 },\r\n        scaleY: { value: 40.0 },\r\n        transition: { value: 40.0 },\r\n        swipe: { value: 0 },\r\n        width: { value: 0.5 },\r\n        radius: { value: 0 },\r\n        texture1: { value: this.textures[this.startIndex] },\r\n        texture2: { value: null },\r\n        displacementTexture: { value: this.displacementTexture },\r\n        resolution1: { value: new Vector4() },\r\n        resolution2: { value: new Vector4() },\r\n      },\r\n      // wireframe: true,\r\n      vertexShader: this.shaders.vertex,\r\n    });\r\n\r\n    this.setShaderProperties();\r\n    this.mesh = new Mesh(geometry, this.material);\r\n\r\n    this.scene.add(this.mesh);\r\n\r\n    // Call the resize method once to set the texture resultion correclty\r\n    this.resize();\r\n  }\r\n\r\n  /**\r\n   * Sets the autoPlay interval\r\n   */\r\n  private setAutoPlayInterval(): void {\r\n    this.autoPlay$ = interval(this.pAutoPlayInterval);\r\n    this.autoPlaySubscription = this.autoPlay$.pipe(\r\n      tap(() => this.transitToForwardTexture$$.next())\r\n    ).subscribe();\r\n  }\r\n\r\n  /**\r\n   * Resets the autoPlay interval\r\n   */\r\n  private resetAutoPlayInterval(): void {\r\n    this.autoPlay$ = NEVER;\r\n    this.autoPlaySubscription.unsubscribe();\r\n    this.setAutoPlayInterval();\r\n  }\r\n\r\n  /**\r\n   * Stops the autoPlay interval\r\n   */\r\n  private stopAutoPlayInterval(): void {\r\n    this.autoPlay$ = NEVER;\r\n    this.autoPlaySubscription.unsubscribe();\r\n  }\r\n\r\n  /**\r\n   * Sets the shader properties depending on the transition type\r\n   */\r\n  private setShaderProperties(): void {\r\n    switch (this.transitionType) {\r\n      case 'split':\r\n        this.material.uniforms.intensity.value = this.pIntensity;\r\n        this.material.fragmentShader = this.shaders.splitTransitionFrag;\r\n        break;\r\n      case 'fade':\r\n        this.material.fragmentShader = this.shaders.fadeFrag;\r\n        break;\r\n      case 'noise':\r\n        this.material.uniforms.scaleX.value = this.pScaleX;\r\n        this.material.uniforms.scaleY.value = this.pScaleY;\r\n        this.material.uniforms.width.value = this.pWidth;\r\n        this.material.fragmentShader = this.shaders.noiseFrag;\r\n        break;\r\n      case 'blur':\r\n        this.material.uniforms.intensity.value = this.pIntensity;\r\n        this.material.fragmentShader = this.shaders.blurFrag;\r\n        break;\r\n      case 'distortion':\r\n        this.material.uniforms.displacementTexture.value =\r\n          new TextureLoader().load(this.displacementImageUrl);\r\n        this.material.uniforms.intensity.value = this.pIntensity;\r\n        this.material.fragmentShader = this.shaders.distortionFrag;\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n\r\n    this.material.needsUpdate = true;\r\n  }\r\n\r\n  /**\r\n   * Animation\r\n   */\r\n  private animate(): void {\r\n    if (this.animationEnabled === true) {\r\n      this.renderer.render(this.scene, this.camera);\r\n    }\r\n\r\n    if (this.performanceMonitor && this.showPerformanceMonitor) {\r\n      this.performanceMonitor.end();\r\n    }\r\n\r\n    this.ngZone.runOutsideAngular(() => {\r\n      this.animationFrameId = window.requestAnimationFrame(() =>\r\n        this.animate()\r\n      );\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Resizes the canvas and updates the texture resulution information of the images\r\n   */\r\n  @HostListener('window:resize') private resize(): void {\r\n    // Get the with and height of the container\r\n    const containerWidth = this.threejsContainer.nativeElement.offsetWidth;\r\n    const containerHeight = this.threejsContainer.nativeElement.offsetHeight;\r\n    // return the function, if eihter with or heigth is undefined\r\n    if (!containerHeight || !containerHeight) {\r\n      return;\r\n    }\r\n\r\n    this.renderer.setSize(containerWidth, containerHeight);\r\n    this.camera.aspect = containerWidth / containerHeight;\r\n\r\n    this.updateTextureResolution(this.nextImageIndex, 1);\r\n\r\n    const dist = this.camera.position.z;\r\n    const height = 1;\r\n    this.camera.fov = 2 * (180 / Math.PI) * Math.atan(height / (2 * dist));\r\n\r\n    this.mesh.scale.x = this.camera.aspect;\r\n    this.mesh.scale.y = 1;\r\n\r\n    this.camera.updateProjectionMatrix();\r\n  }\r\n\r\n  /**\r\n   * Updates the resulution of the texture for the shader depending on the image size type\r\n   * @param textureNumber Number of the texture\r\n   */\r\n  private updateTextureResolution(\r\n    textureNumber: number,\r\n    targetGlslTexture: 1 | 2\r\n  ): void {\r\n    const texture = this.textures[textureNumber];\r\n    const containerWidth = this.threejsContainer.nativeElement.offsetWidth;\r\n    const containerHeight = this.threejsContainer.nativeElement.offsetHeight;\r\n\r\n    // Adapt the size of the image\r\n    const imageAspect = texture.image.height / texture.image.width;\r\n    const containerAspect = containerHeight / containerWidth;\r\n    let a1;\r\n    let a2;\r\n    if (this.pImageSize === 'cover') {\r\n      if (containerAspect > imageAspect) {\r\n        a1 = (containerWidth / containerHeight) * imageAspect;\r\n        a2 = 1;\r\n      } else {\r\n        a1 = 1;\r\n        a2 = containerHeight / containerWidth / imageAspect;\r\n      }\r\n    } else if (this.pImageSize === 'contain') {\r\n      if (containerAspect < imageAspect) {\r\n        a1 = (containerWidth / containerHeight) * imageAspect;\r\n        a2 = 1;\r\n      } else {\r\n        a1 = 1;\r\n        a2 = containerHeight / containerWidth / imageAspect;\r\n      }\r\n    }\r\n\r\n    if (targetGlslTexture === 1) {\r\n      this.material.uniforms.resolution1.value.x = containerWidth;\r\n      this.material.uniforms.resolution1.value.y = containerHeight;\r\n      this.material.uniforms.resolution1.value.z = a1;\r\n      this.material.uniforms.resolution1.value.w = a2;\r\n    } else if (targetGlslTexture === 2) {\r\n      this.material.uniforms.resolution2.value.x = containerWidth;\r\n      this.material.uniforms.resolution2.value.y = containerHeight;\r\n      this.material.uniforms.resolution2.value.z = a1;\r\n      this.material.uniforms.resolution2.value.w = a2;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Starts the transition effect to the next image\r\n   * @param posDirection indicator, if the next or previous image should be loaded\r\n   */\r\n  private transitionToNextTexture(direction: Direction): void {\r\n    // EventEmitter\r\n    this.imageIndexChange.emit(this.nextImageIndex);\r\n\r\n    this.ngZone.runOutsideAngular(() => {\r\n      if (direction === Direction.backward) {\r\n        this.material.uniforms.texture2.value =\r\n          this.material.uniforms.texture1.value;\r\n        this.material.uniforms.resolution2.value.x =\r\n          this.material.uniforms.resolution1.value.x;\r\n        this.material.uniforms.resolution2.value.y =\r\n          this.material.uniforms.resolution1.value.y;\r\n        this.material.uniforms.resolution2.value.z =\r\n          this.material.uniforms.resolution1.value.z;\r\n        this.material.uniforms.resolution2.value.w =\r\n          this.material.uniforms.resolution1.value.w;\r\n        this.material.uniforms.progress.value = 1;\r\n        // Set the next image to texture1 and update the resolution\r\n        this.material.uniforms.texture1.value =\r\n          this.textures[this.nextImageIndex];\r\n        this.updateTextureResolution(this.nextImageIndex, 1);\r\n\r\n        // Start the tween for doing the transition\r\n        RxjsTween.createTween(\r\n          RxjsTween.linear,\r\n          1,\r\n          0,\r\n          this.transitionDuration\r\n        ).subscribe({\r\n          next: (val) => {\r\n            this.material.uniforms.progress.value = val;\r\n          },\r\n          complete: () => {\r\n            // Set the transition flag to false to indicate that the transition animation is finished\r\n            this.tranistionOngoing = false;\r\n            // Reset progress to 1, thus the texture from texture 2 needs to be set to texture 1\r\n            this.material.uniforms.texture2.value =\r\n              this.textures[this.nextImageIndex];\r\n            this.updateTextureResolution(this.nextImageIndex, 2);\r\n            this.material.uniforms.progress.value = 0;\r\n          },\r\n        });\r\n      } else {\r\n        // Set the next image to texture2 and update the resolution\r\n        this.material.uniforms.texture2.value =\r\n          this.textures[this.nextImageIndex];\r\n        this.updateTextureResolution(this.nextImageIndex, 2);\r\n\r\n        // Start the tween for doing the transition\r\n        RxjsTween.createTween(\r\n          RxjsTween.linear,\r\n          0,\r\n          1,\r\n          this.transitionDuration\r\n        ).subscribe({\r\n          next: (val) => {\r\n            this.material.uniforms.progress.value = val;\r\n          },\r\n          complete: () => {\r\n            // Set the transition flag to false to indicate that the transition animation is finished\r\n            this.tranistionOngoing = false;\r\n            // Reset progress to 0, thus the texture from texture 2 needs to be set to texture 1\r\n            this.material.uniforms.texture1.value =\r\n              this.textures[this.nextImageIndex];\r\n            this.updateTextureResolution(this.nextImageIndex, 1);\r\n            this.material.uniforms.progress.value = 0;\r\n          },\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  private prepAndLoadNextImg(\r\n    direction: Direction\r\n  ): void {\r\n    // Set the flag to indicate that the transition animation is ongoing\r\n    this.tranistionOngoing = true;\r\n\r\n    let nextButOne = 0;\r\n    if (direction === Direction.forward) {\r\n      // Set the next index\r\n      this.nextImageIndex =\r\n        this.nextImageIndex < this.imageUrls.length - 1\r\n          ? this.nextImageIndex + 1\r\n          : 0;\r\n      // Check if another texture needs to be loaded\r\n      nextButOne =\r\n        this.nextImageIndex + 1 > this.imageUrls.length - 1\r\n          ? 0\r\n          : this.nextImageIndex + 1;\r\n      this.loadTexture(nextButOne, Direction.forward);\r\n    } else {\r\n      // Update the number of the current shown image\r\n      this.nextImageIndex =\r\n        this.nextImageIndex > 0\r\n          ? this.nextImageIndex - 1\r\n          : this.imageUrls.length - 1;\r\n      // Check if another texture needs to be loaded\r\n      nextButOne =\r\n        this.nextImageIndex - 1 < 0\r\n          ? this.imageUrls.length - 1\r\n          : this.nextImageIndex - 1;\r\n      this.loadTexture(nextButOne, Direction.backward);\r\n    }\r\n\r\n    this.transitionToNextTexture(direction);\r\n  }\r\n\r\n  private nextImage(direction: Direction): void {\r\n    if (this.tranistionOngoing) {\r\n      console.warn('cannot go to next image. transition still ongoing.');\r\n      return;\r\n    }\r\n\r\n    if (this.pAutoPlay) {\r\n      this.resetAutoPlayInterval();\r\n    }\r\n\r\n    this.showLoadingSpinner$$.next(true);\r\n    switch(direction) {\r\n      case Direction.backward:\r\n        this.transitToBackwardTexture$$.next();\r\n        break;\r\n      case Direction.forward:\r\n        this.transitToForwardTexture$$.next();\r\n        break;\r\n    }\r\n    \r\n  }\r\n\r\n  //#region public methods\r\n  next(): void {\r\n    this.nextImage(Direction.forward);\r\n  }\r\n\r\n  prev(): void {\r\n    this.nextImage(Direction.backward);\r\n  }\r\n  //#endregion\r\n}\r\n","<div #threejsContainer class=\"threejs-container\">\r\n  <div *ngIf=\"showLoadingSpinner$ | async\" class=\"loading-container\">\r\n    <div class=\"lds-ripple\">\r\n      <div></div>\r\n      <div></div>\r\n    </div>\r\n  </div>\r\n</div>\r\n<acuw-performance-monitor\r\n  *ngIf=\"showPerformanceMonitor\"\r\n  #performanceMonitor\r\n></acuw-performance-monitor>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ImageTransitionComponent } from './image-transition.component';\r\nimport { PerformanceMonitorModule } from '../performance-monitor/performance-monitor.module';\r\n\r\n@NgModule({\r\n  declarations: [ImageTransitionComponent],\r\n  imports: [\r\n    CommonModule, PerformanceMonitorModule\r\n  ],\r\n  exports: [ImageTransitionComponent]\r\n})\r\nexport class ImageTransitionModule { }\r\n","import { OverlayRef } from '@angular/cdk/overlay';\r\nimport { ChangeDetectorRef, Component, HostListener, OnInit, ViewChild } from '@angular/core';\r\nimport { ImageTransitionComponent } from '../image-transition/image-transition.component';\r\n\r\n@Component({\r\n  selector: 'lib-lightbox-overlay',\r\n  templateUrl: './lightbox-overlay.component.html',\r\n  styleUrls: ['./lightbox-overlay.component.css']\r\n})\r\nexport class LightboxOverlayComponent implements OnInit {\r\n\r\n  @ViewChild(ImageTransitionComponent) imageTransition!: ImageTransitionComponent;\r\n\r\n  overlayRef!: OverlayRef;\r\n  imageUrls = new Array<string>();\r\n  displacementImageUrl = '';\r\n  forceFullscreen = false;\r\n  forceShowNavButtons = false;\r\n  imageSize = 'cover';\r\n  autoPlay = false;\r\n  autoPlayInterval = 5000;\r\n  transitionDuration = 1000;\r\n  transitionType = 'split';\r\n  sizeX = 50.0;\r\n  sizeY = 50.0;\r\n  width = 0.5;\r\n  intensity = 40.0;\r\n  startIndex = 0;\r\n  currentImageIndex = 1;\r\n  showPerformanceMonitor = false;\r\n\r\n  swipeCoord = new Array<number>();\r\n  swipeTime = 0;\r\n\r\n  constructor(private changeRef: ChangeDetectorRef) {\r\n  }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  @HostListener('window:keyup', ['$event'])\r\n  keyEvent(event: KeyboardEvent) {\r\n    if (event.key === 'ArrowRight') {\r\n      this.imageTransition.next();\r\n    }\r\n    if (event.key === 'ArrowLeft'){\r\n      this.imageTransition.prev();\r\n    }\r\n    if (event.key === 'Escape'){\r\n      this.close();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Close the lightbox\r\n   */\r\n  close() {\r\n    this.overlayRef?.detach();\r\n  }\r\n\r\n  /**\r\n   * method to set the index counter\r\n   * @param index index of the image\r\n   */\r\n  imageIndexChange(index: number) {\r\n    this.currentImageIndex = index + 1;\r\n    this.changeRef.detectChanges();\r\n  }\r\n\r\n  /**\r\n   * Listen to touche events for gestures (mobile)\r\n   * @param e touch event\r\n   * @param when indicator if 'start' or 'end'\r\n   */\r\n  swipe(e: TouchEvent, when: string): void {\r\n\r\n    const coord: [number, number] = [e.changedTouches[0].clientX, e.changedTouches[0].clientY];\r\n    const time = new Date().getTime();\r\n\r\n    if (when === 'start') {\r\n      this.swipeCoord = coord;\r\n      this.swipeTime = time;\r\n    } else if (when === 'end') {\r\n      const direction = [coord[0] - this.swipeCoord[0], coord[1] - this.swipeCoord[1]];\r\n      const duration = time - this.swipeTime;\r\n\r\n      if (duration < 1000 && Math.abs(direction[0]) > 30 // Long enough\r\n        && Math.abs(direction[0]) > Math.abs(direction[1] * 3)) { // Horizontal enough\r\n        const swipe = direction[0] < 0 ? 'next' : 'previous';\r\n\r\n        if (swipe === 'next') {\r\n          this.imageTransition.next();\r\n        } else if (swipe === 'previous') {\r\n          this.imageTransition.prev();\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","<div [ngClass]=\"{'full-container': forceFullscreen === true, 'auto-container': forceFullscreen === false }\">\r\n    <div class=\"index-indicator\">\r\n        <span>{{ currentImageIndex }}</span>\r\n        <span>/</span>\r\n        <span>{{ imageUrls.length }}</span>\r\n    </div>\r\n    <svg class=\"ligthbox-button close-button\" (click)=\"close()\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"white\">\r\n        <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n        <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n    </svg>\r\n\r\n    <svg [ngClass]=\"{'auto-visibility': forceShowNavButtons === false}\" \r\n        class=\"ligthbox-button prev-button\" (click)=\"imageTransition.prev()\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"white\">\r\n        <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n        <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\r\n    </svg>\r\n\r\n    <svg [ngClass]=\"{'auto-visibility': forceShowNavButtons === false}\" \r\n        class=\"ligthbox-button next-button\" (click)=\"imageTransition.next()\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"white\">\r\n        <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n        <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\r\n    </svg>\r\n    <lib-image-transition #imageTransition [imageUrls]=\"imageUrls\" [startIndex]=\"startIndex\" (imageIndexChange)=\"imageIndexChange($event)\"\r\n        [imageSize]=\"imageSize\" [autoPlay]=\"autoPlay\" [autoPlayInterval]=\"autoPlayInterval\" [transitionDuration]=\"transitionDuration\"\r\n        [transitionType]=\"transitionType\" [sizeX]=\"sizeX\" [sizeY]=\"sizeY\" [width]=\"width\" [intensity]=\"intensity\"\r\n        (touchstart)=\"swipe($event, 'start')\" (touchend)=\"swipe($event, 'end')\"\r\n        [displacementImageUrl]=\"displacementImageUrl\" [showPerformanceMonitor]=\"showPerformanceMonitor\">\r\n    </lib-image-transition>\r\n</div>","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { LightboxOverlayComponent } from './lightbox-overlay.component';\r\n\r\n@Component({\r\n  selector: 'lib-lightbox',\r\n  template: ''\r\n})\r\nexport class LightboxComponent implements OnInit {\r\n\r\n  @Input() imageUrls = new Array<string>();\r\n  @Input() displacementImageUrl = '';\r\n  @Input() forceFullscreen = false;\r\n  @Input() forceShowNavButtons = false;\r\n  @Input() imageSize = 'cover';\r\n  @Input() autoPlay = false;\r\n  @Input() autoPlayInterval = 5000;\r\n  @Input() transitionDuration = 1000;\r\n  @Input() transitionType = 'split';\r\n  @Input() sizeX = 50.0;\r\n  @Input() sizeY = 50.0;\r\n  @Input() width = 0.5;\r\n  @Input() intensity = 40.0;\r\n  @Input() showPerformanceMonitor = false;\r\n\r\n  private overlayRef?: OverlayRef;\r\n\r\n  constructor(private overlay: Overlay) { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  open(index = 0) {\r\n    // Define settings of the overlay\r\n    this.overlayRef = this.overlay.create({\r\n      hasBackdrop: true,\r\n      positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\r\n      scrollStrategy: this.overlay.scrollStrategies.block()\r\n    });\r\n\r\n    // Listen to backdrop event for detaching the overlay\r\n    this.overlayRef.backdropClick().subscribe({\r\n      next: () => { this.overlayRef?.detach(); }\r\n    });\r\n\r\n    // Attach the LightboxOverlayComponent to the overlayRef instance\r\n    const lightboxOverlayRef = this.overlayRef.attach(new ComponentPortal(LightboxOverlayComponent));\r\n\r\n    // Pass data to the LightboxOverlayComponent\r\n    lightboxOverlayRef.instance.overlayRef = this.overlayRef;\r\n    lightboxOverlayRef.instance.imageUrls = this.imageUrls;\r\n    lightboxOverlayRef.instance.displacementImageUrl = this.displacementImageUrl;\r\n    lightboxOverlayRef.instance.forceFullscreen = this.forceFullscreen;\r\n    lightboxOverlayRef.instance.forceShowNavButtons = this.forceShowNavButtons;\r\n    lightboxOverlayRef.instance.imageSize = this.imageSize;\r\n    lightboxOverlayRef.instance.autoPlay = this.autoPlay;\r\n    lightboxOverlayRef.instance.autoPlayInterval = this.autoPlayInterval;\r\n    lightboxOverlayRef.instance.transitionDuration = this.transitionDuration;\r\n    lightboxOverlayRef.instance.transitionType = this.transitionType;\r\n    lightboxOverlayRef.instance.sizeX = this.sizeX;\r\n    lightboxOverlayRef.instance.sizeY = this.sizeY;\r\n    lightboxOverlayRef.instance.width = this.width;\r\n    lightboxOverlayRef.instance.intensity = this.intensity;\r\n    lightboxOverlayRef.instance.startIndex = index;\r\n    lightboxOverlayRef.instance.showPerformanceMonitor = this.showPerformanceMonitor;\r\n  }\r\n\r\n  close() {\r\n    this.overlayRef?.detach();\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { LightboxComponent } from './lightbox.component';\r\nimport { ImageTransitionModule } from '../image-transition/image-transition.module';\r\nimport { LightboxOverlayComponent } from './lightbox-overlay.component';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { PerformanceMonitorModule } from '../performance-monitor/performance-monitor.module';\r\n\r\n@NgModule({\r\n    declarations: [LightboxComponent, LightboxOverlayComponent],\r\n    imports: [\r\n        CommonModule,\r\n        ImageTransitionModule,\r\n        OverlayModule,\r\n        PerformanceMonitorModule\r\n    ],\r\n    exports: [LightboxComponent]\r\n})\r\nexport class LightboxModule { }\r\n","import { Observable, Subject } from 'rxjs';\r\nimport { Euler, Quaternion } from 'three';\r\nimport { Object3D, Vector2 } from 'three';\r\nimport { RxjsTween } from '../tween/rxjs-tween';\r\n\r\nexport class ObjectControls {\r\n\r\n    // ============= Private Properties =============\r\n    private isUserInteracting: boolean = false;\r\n    private restoringAnimationOngoing: boolean = false;\r\n    private restoringOriginPosTimeout = 0;\r\n    private startDraggingPosition: Vector2;\r\n    private rendererDom: HTMLElement;\r\n    private touchArea: HTMLElement;\r\n    private obj: THREE.Mesh | THREE.Group;\r\n    private userInteracted: boolean = false;\r\n    private userInteractedSubject: Subject<boolean> = new Subject();\r\n\r\n    // ============= Public Properties =============\r\n    rotationSpeed = 1;\r\n    verticalRotation = true;\r\n    horizontalRotation = true;\r\n    autoRotationY = false;\r\n    autoRotationX = false;\r\n    autoRotationZ = false;\r\n    restoreOriginPosition = false;\r\n    autoRotationSpeed = 0.002;\r\n    userInteracted$: Observable<boolean> = this.userInteractedSubject.asObservable();\r\n    controlsEnabled = true;\r\n\r\n    constructor(rendererDom: HTMLElement, object: THREE.Mesh | THREE.Group, touchArea?: HTMLElement) {\r\n        this.rendererDom = rendererDom;\r\n        this.obj = object;\r\n        this.touchArea = touchArea != null ? touchArea : this.rendererDom;\r\n\r\n        this.startDraggingPosition = new Vector2(0, 0);\r\n\r\n        this.addEventlisteners();\r\n    }\r\n\r\n    // ============= Public Methods =============\r\n\r\n    /**\r\n     * Method, which needs to be called, in case autorotation is used\r\n     */\r\n    update(): void {\r\n        if (this.isUserInteracting || this.restoringAnimationOngoing || this.userInteracted) return;\r\n\r\n        var rotationY = this.autoRotationY == true ? this.autoRotationSpeed : 0;\r\n        var rotationX = this.autoRotationX == true ? this.autoRotationSpeed : 0;\r\n        var rorationZ = this.autoRotationZ == true ? this.autoRotationSpeed : 0;\r\n\r\n        var deltaRotationQuaternion = new Quaternion().setFromEuler(new Euler(\r\n            rotationX,\r\n            rotationY,\r\n            rorationZ,\r\n            'XYZ'\r\n        ));\r\n        this.obj.quaternion.multiplyQuaternions(deltaRotationQuaternion, this.obj.quaternion);\r\n    }\r\n\r\n    /**\r\n     * Removes the event listners\r\n     */\r\n    removeEventlisteners(): void {\r\n        // desktop events\r\n        this.touchArea.removeEventListener('mousedown', this.mouseDown, false);\r\n        this.touchArea.removeEventListener('mousemove', this.mouseMove, false);\r\n        this.touchArea.removeEventListener('mouseup', this.mouseUp, false);\r\n        // mobile events\r\n        this.touchArea.removeEventListener('touchstart', this.onTouchStart, false);\r\n        this.touchArea.removeEventListener('touchmove', this.onTouchMove, false);\r\n        this.touchArea.removeEventListener('touchend', this.onTouchEnd, false);\r\n    }\r\n\r\n    resetUserInteractionFlag(): void {\r\n        this.userInteracted = false,\r\n            this.userInteractedSubject.next(this.userInteracted);\r\n    }\r\n\r\n    // ============= Private Methods =============\r\n\r\n    /**\r\n     * Adds the event listeners\r\n     */\r\n    private addEventlisteners(): void {\r\n        // desktop events\r\n        this.touchArea.addEventListener('mousedown', this.mouseDown, false);\r\n        // mobile events\r\n        this.touchArea.addEventListener('touchend', this.onTouchEnd, false);\r\n        this.touchArea.addEventListener('touchstart', this.onTouchStart, false);\r\n        this.touchArea.addEventListener('touchmove', this.onTouchMove, false);\r\n    }\r\n\r\n    /**\r\n     * Reset the mouse position to x=0 and y=0\r\n     */\r\n    private resetMousePosition(): void {\r\n        this.startDraggingPosition.set(0, 0);\r\n    }\r\n\r\n    /******************  MOUSE interaction functions - desktop  *****/\r\n    /**\r\n     * Prepares everything, when the mouse is clicked\r\n     * @param e mouse event\r\n     */\r\n    private mouseDown = (e: MouseEvent) => {\r\n        // Ignore mouse down interaction, if the controls are not enabled\r\n        // Ignore mouse down interaction, if the restoration animation is ongoing\r\n        if (this.controlsEnabled === false || this.restoringAnimationOngoing === true) return;\r\n        // Reset restoration animation timout\r\n        window.clearTimeout(this.restoringOriginPosTimeout);\r\n\r\n        this.isUserInteracting = true;\r\n        this.startDraggingPosition = new Vector2(0, 0);\r\n        this.startDraggingPosition.set(e.offsetX, e.offsetY);\r\n\r\n        this.touchArea.addEventListener('pointermove', this.mouseMove, false);\r\n        this.touchArea.addEventListener('pointerup', this.mouseUp, false);\r\n    }\r\n\r\n    /**\r\n     * Calculates the x and y rotation of the object depending on the mouse movement\r\n     * @param e MouseEvent\r\n     */\r\n    private mouseMove = (e: MouseEvent) => {\r\n        // Ignore mouse movement interaction, if the controls are not enabled\r\n        // Ignore mouse movement interaction, if the restoration animation is ongoing\r\n        if (this.controlsEnabled === false || this.restoringAnimationOngoing) return;\r\n        if (this.isUserInteracting) {\r\n            if (this.userInteracted == false) {\r\n                this.userInteracted = true;\r\n                this.userInteractedSubject.next(this.userInteracted);\r\n            }\r\n\r\n            const deltaMove = new Vector2(\r\n                e.offsetX - this.startDraggingPosition.x,\r\n                e.offsetY - this.startDraggingPosition.y\r\n            );\r\n            this.startDraggingPosition.set(e.offsetX, e.offsetY);\r\n\r\n            const rotationX = this.verticalRotation == true ? (deltaMove.x * Math.PI / 180 * this.rotationSpeed) : 0;\r\n            const rotationY = this.horizontalRotation == true ? (deltaMove.y * Math.PI / 180 * this.rotationSpeed) : 0;\r\n\r\n            var deltaRotationQuaternion = new Quaternion().setFromEuler(new Euler(\r\n                rotationY,\r\n                rotationX,\r\n                0,\r\n                'XYZ'\r\n            ));\r\n\r\n            this.obj.quaternion.multiplyQuaternions(deltaRotationQuaternion, this.obj.quaternion);\r\n\r\n            //console.log(`rotX: ${Math.round(THREE.MathUtils.radToDeg(this.obj.rotation.x))}, rotY: ${Math.round(THREE.MathUtils.radToDeg(this.obj.rotation.y))}, rotZ: ${Math.round(THREE.MathUtils.radToDeg(this.obj.rotation.z))}`);\r\n        }\r\n    }\r\n\r\n    private mouseUp = () => {\r\n        // Ignore mouse movement interaction, if the controls are not enabled\r\n        // Ignore mouse up interaction, if the restoration animation is ongoing\r\n        if (this.controlsEnabled === false || this.restoringAnimationOngoing) return;\r\n        this.resetMousePosition();\r\n        this.isUserInteracting = false;\r\n        if (this.restoreOriginPosition) this.restoreOriginalPosition();\r\n\r\n        this.touchArea.removeEventListener('mousemove', this.mouseMove, false);\r\n        this.touchArea.removeEventListener('mouseup', this.mouseUp, false);\r\n    }\r\n\r\n    /****************** TOUCH interaction functions - mobile  *****/\r\n    private onTouchStart = (e: TouchEvent) => {\r\n        // Ignore mouse movement interaction, if the controls are not enabled\r\n        // Ignore touch start interaction, if the restoration animation is ongoing\r\n        if (this.controlsEnabled === false || this.restoringAnimationOngoing) return;\r\n        // Reset restoration animation timout\r\n        window.clearTimeout(this.restoringOriginPosTimeout);\r\n\r\n        //e.preventDefault();\r\n        this.isUserInteracting = true;\r\n        this.restoringAnimationOngoing = false;\r\n        this.startDraggingPosition.set(\r\n            e.touches[0].pageX, e.touches[0].pageY\r\n        )\r\n    }\r\n\r\n    private onTouchMove = (e: TouchEvent) => {\r\n        // Ignore mouse movement interaction, if the controls are not enabled\r\n        // Ignore mouse move interaction, if the restoration animation is ongoing\r\n        if (this.controlsEnabled === false || this.restoringAnimationOngoing) return;\r\n        //e.preventDefault();\r\n        if (this.isUserInteracting && !this.restoringAnimationOngoing) {\r\n            if (this.userInteracted == false) {\r\n                this.userInteracted = true;\r\n                this.userInteractedSubject.next(this.userInteracted);\r\n            }\r\n\r\n            const deltaMove = new Vector2(\r\n                e.touches[0].pageX - this.startDraggingPosition.x,\r\n                e.touches[0].pageY - this.startDraggingPosition.y\r\n            );\r\n\r\n            this.startDraggingPosition.set(e.touches[0].pageX, e.touches[0].pageY);\r\n\r\n            const rotationX = this.verticalRotation == true ? (deltaMove.x * Math.PI / 180 * this.rotationSpeed) : 0;\r\n            const rotationY = this.horizontalRotation == true ? (deltaMove.y * Math.PI / 180 * this.rotationSpeed) : 0;\r\n\r\n            var deltaRotationQuaternion = new Quaternion().setFromEuler(new Euler(\r\n                rotationY,\r\n                rotationX,\r\n                0,\r\n                'XYZ'\r\n            ));\r\n\r\n            this.obj.quaternion.multiplyQuaternions(deltaRotationQuaternion, this.obj.quaternion);\r\n        }\r\n    }\r\n\r\n    private onTouchEnd = (e: TouchEvent) => {\r\n        // Ignore mouse movement interaction, if the controls are not enabled\r\n        // Ignore mouse up interaction, if the restoration animation is ongoing\r\n        if (this.controlsEnabled === false || this.restoringAnimationOngoing) return;\r\n        //e.preventDefault();\r\n        this.isUserInteracting = false;\r\n        this.resetMousePosition();\r\n        if (this.restoreOriginPosition) this.restoreOriginalPosition();\r\n    }\r\n\r\n    /**\r\n     * Rotates the object to the position 0,0,0 after a some timeout\r\n     */\r\n    private restoreOriginalPosition(): void {\r\n        this.restoringOriginPosTimeout = window.setTimeout(() => {\r\n            var objSet = new Object3D();\r\n            objSet.position.set(0, 0, 0);\r\n            objSet.rotation.set(0, 0, 0);\r\n\r\n            RxjsTween.createTween(RxjsTween.linear, [this.obj.position.x, this.obj.position.y, this.obj.position.z],\r\n                [objSet.position.x, objSet.position.y, objSet.position.z], 1000).subscribe({\r\n                    next: tweenVal => {\r\n                        if (this.restoringAnimationOngoing == false) this.restoringAnimationOngoing = true;\r\n                        this.obj.rotation.set(tweenVal[0], tweenVal[1], tweenVal[2]);\r\n                    },\r\n                    complete: () => {\r\n                        this.restoringAnimationOngoing = false;\r\n                        this.resetUserInteractionFlag();\r\n                    }\r\n                });\r\n        }, 5000);\r\n    }\r\n}\r\n","import { animate, AnimationBuilder, AnimationPlayer, query, stagger, state, style, transition, trigger } from '@angular/animations';\r\nimport { AfterViewInit, Component, ContentChildren, Directive, ElementRef, EventEmitter, HostListener, Input, NgZone, OnChanges, OnDestroy, Output, QueryList, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { Euler, Group, Object3D, PerspectiveCamera, Quaternion, Scene } from 'three';\r\nimport { Vector3 } from 'three';\r\nimport { CSS3DObject, CSS3DRenderer } from 'three/examples/jsm/renderers/CSS3DRenderer';\r\nimport { ObjectControls } from '../controls/object-controls';\r\nimport { PerformanceMonitorComponent } from '../performance-monitor/performance-monitor.component';\r\nimport { RxjsTween } from '../tween/rxjs-tween';\r\n\r\n@Directive({\r\n  selector: `acuw-carousel-item`,\r\n  host: {\r\n    'class': 'acuw-carousel-item',\r\n  }\r\n})\r\nexport class CarouselItem {\r\n\r\n  htmlElement: HTMLElement;\r\n\r\n  constructor(private el: ElementRef) {\r\n    this.htmlElement = this.el.nativeElement;\r\n  }\r\n}\r\n\r\n@Component({\r\n  selector: 'acuw-carousel',\r\n  template: `\r\n    <div class=\"carousel-container\">\r\n      <div #threejsContainer class=\"threejs-container\"></div>\r\n      <!-- dots -->\r\n      <div #indicationDots class=\"dots\" [ngStyle]=\"{'visibility': showDots ? 'visible' : 'hidden'}\">\r\n        <svg *ngFor=\"let carouselTemplate of carouselItemTemplates; index as i\" viewBox=\"0 0 100 100\">\r\n            <circle cx=\"50\" cy=\"50\" r=\"45\" [ngStyle]=\"{'fill': activeCarouselElement===i ? activeDotColor : dotColor}\"/>\r\n            <path id=\"{{i}}\" fill=\"none\" stroke-linecap=\"round\" stroke-width=\"20\" \r\n            [ngStyle]=\"{'stroke': dotAnimationCircleColor, 'visibility': activeCarouselElement===i && autoPlay ? 'visible' : 'hidden'}\"\r\n                  d=\"M50 10 a 40 40 0 0 1 0 80 a 40 40 0 0 1 0 -80\"/>\r\n          </svg>\r\n      </div>\r\n     <acuw-performance-monitor *ngIf=\"showPerformanceMonitor\" #performanceMonitor></acuw-performance-monitor>\r\n    </div>\r\n    \r\n  `,\r\n  styleUrls: ['./carousel.component.css'],\r\n  animations: [\r\n    trigger('dotsAnimation', [\r\n      transition(':enter', [\r\n        query('svg', [\r\n          style({ opacity: 0, transform: 'translateY(200%)' }),\r\n          stagger(100, [\r\n            animate('300ms ease-in', style({ opacity: 1, transform: 'none' }))\r\n          ])\r\n        ], { optional: true })\r\n      ]),\r\n      transition(':leave', [\r\n        query('svg', [\r\n          stagger(100, [\r\n            animate('300ms ease-in', style({ opacity: 0, transform: 'translateY(200%)' }))\r\n          ])\r\n        ], { optional: true })\r\n      ])\r\n    ]),\r\n    trigger('autoPlayAnimation', [\r\n      state('false', style({ strokeDasharray: '0,250.2' })),\r\n      state('true', style({ strokeDasharray: '250.2,250.2' })),\r\n      transition('false => true', animate(5000))\r\n    ])\r\n  ]\r\n})\r\nexport class CarouselComponent implements AfterViewInit, OnDestroy, OnChanges {\r\n\r\n  @Input() showDots = true;\r\n  @Input() dotColor = '#fff';\r\n  @Input() activeDotColor = '#3f51b5';\r\n  @Input() dotAnimationCircleColor = '#fff';\r\n  @Input() activeCarouselElement: number = 0;\r\n  @Input() initAnimation = true;\r\n  @Input() radius = 200;\r\n  @Input() yPosition = 0;\r\n  @Input() cameraFov = 65;\r\n  @Input() cameraDistance = 600;\r\n  @Input() autoPlay = false;\r\n  @Input() autoPlayInterval = 5000;\r\n  @Input() rotationDuration = 500;\r\n  @Input() showPerformanceMonitor = false;\r\n\r\n  @Output() activeElementChanged = new EventEmitter<number>();\r\n\r\n  @ViewChild('threejsContainer') threejsContainer!: ElementRef;\r\n  @ViewChild('indicationDots') dots!: ElementRef;\r\n  @ViewChild('performanceMonitor') performanceMonitor!: PerformanceMonitorComponent;\r\n\r\n  @ContentChildren(CarouselItem) carouselItemTemplates!: QueryList<CarouselItem>;\r\n\r\n  private animationFrameId!: number;\r\n  private css3dRenderer = new CSS3DRenderer();\r\n  private scene = new Scene();\r\n  private camera!: THREE.PerspectiveCamera;\r\n  private objectControls!: ObjectControls;\r\n  private carouselElements!: CSS3DObject[];\r\n  private carouselGroup = new Group();\r\n  private carouselObjSubsciptions: Subscription[] = new Array<Subscription>();\r\n  private rotationSubscription: Subscription = new Subscription();\r\n  private animation = true;\r\n  userMove = false;\r\n  private dotAnimationPlayer!: AnimationPlayer | null;\r\n\r\n  constructor(private ngZone: NgZone, private animationBuilder: AnimationBuilder) { }\r\n\r\n  ngAfterViewInit(): void {\r\n    // Init camera\r\n    this.camera = new PerspectiveCamera(this.cameraFov, window.innerWidth / window.innerHeight, 0.1, 1000);\r\n    this.camera.position.set(0.0, 0.0, this.cameraDistance);\r\n\r\n    // Get the with and heigth of the threejs renderer\r\n    const divWidth = this.threejsContainer.nativeElement.clientWidth;\r\n    const divHeight = this.threejsContainer.nativeElement.clientHeight;\r\n\r\n    // Create CSS3D Renderer\r\n    this.css3dRenderer = new CSS3DRenderer();\r\n    this.css3dRenderer.setSize(divWidth, divHeight);\r\n    this.css3dRenderer.domElement.style.position = 'absolute';\r\n    this.css3dRenderer.domElement.style.top = '0';\r\n    this.threejsContainer.nativeElement.appendChild(this.css3dRenderer.domElement);\r\n\r\n    // Init carousel elements\r\n    this.initCarouselObjects();\r\n\r\n    // Object-Controls\r\n    this.objectControls = new ObjectControls(this.css3dRenderer.domElement, this.carouselGroup, this.threejsContainer.nativeElement);\r\n    this.objectControls.userInteracted$.subscribe({\r\n      next: val => {\r\n        this.userMove = val;\r\n        // Cancel the rotation, if running\r\n        this.rotationSubscription.unsubscribe();\r\n      }\r\n    });\r\n\r\n    // Initialize the animation of the inidcation dots\r\n    if (this.autoPlay) {\r\n      this.startDotAnimation(this.activeCarouselElement);\r\n    }\r\n\r\n    // Animate\r\n    this.animate();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    let change = changes['activeCarouselElement'];\r\n    if (change && !change.firstChange && this.carouselGroup) {\r\n      this.rotateTo(change.currentValue, true);\r\n    }\r\n    change = changes['radius'];\r\n    if (change && !change.firstChange && this.carouselGroup) {\r\n      this.updateRadius();\r\n    }\r\n    change = changes['cameraFov'];\r\n    if (change && !change.firstChange && this.camera) {\r\n      this.camera.fov = this.cameraFov;\r\n      this.camera.updateProjectionMatrix();\r\n    }\r\n    change = changes['cameraDistance'];\r\n    if (change && !change.firstChange && this.camera) {\r\n      this.camera.position.set(0, 0, this.cameraDistance);\r\n      this.camera.updateProjectionMatrix();\r\n    }\r\n    change = changes['autoPlay'];\r\n    if (change && this.carouselGroup) {\r\n      if (change.currentValue === true) {\r\n        this.startDotAnimation(this.activeCarouselElement);\r\n      } else {\r\n        this.resetDotAnimation();\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    // Cancel Animation\r\n    cancelAnimationFrame(this.animationFrameId);\r\n    // Unsubscribe Subscriptions\r\n    this.rotationSubscription.unsubscribe();\r\n    // Remove threejs container from DOM\r\n    (this.threejsContainer.nativeElement as HTMLCanvasElement).removeChild(this.css3dRenderer.domElement);\r\n    // Clear scene\r\n    this.scene.clear();\r\n  }\r\n\r\n  /**\r\n   * Resizes the canvas and updates the texture resulution information of the images\r\n   */\r\n  @HostListener('window:resize') resize(): void {\r\n    // Get width and heigh of the threejs dom element after window resize\r\n    const divWidth = this.threejsContainer.nativeElement.clientWidth;\r\n    const divHeight = this.threejsContainer.nativeElement.clientHeight;\r\n    // Define aspect ratio\r\n    this.camera.aspect = divWidth / divHeight;\r\n    this.camera.updateProjectionMatrix();\r\n    this.css3dRenderer.setSize(divWidth, divHeight);\r\n  }\r\n\r\n  /**\r\n   * Animation\r\n   */\r\n  private animate(): void {\r\n    // Only render if the animation flat is true\r\n    if (this.animation == true) {\r\n      this.css3dRenderer.render(this.scene, this.camera);\r\n    }\r\n\r\n    if (this.performanceMonitor && this.showPerformanceMonitor) {\r\n      this.performanceMonitor.end();\r\n    }\r\n\r\n    this.ngZone.runOutsideAngular(() => {\r\n      this.animationFrameId = window.requestAnimationFrame(() => this.animate());\r\n    });\r\n  }\r\n\r\n  /**\r\n   * starts the animation of the indication dots\r\n   * @param index index number for which dot the animation should be started\r\n   * @returns \r\n   */\r\n  private startDotAnimation(index: number): void {\r\n    if (this.dotAnimationPlayer || !this.dots) {\r\n      // Animation is already ongoing\r\n      return;\r\n    }\r\n    // Define the animation\r\n    let autoPlayAnimation;\r\n    if(this.showDots){\r\n      autoPlayAnimation = this.animationBuilder.build([\r\n        style({ strokeDasharray: '0,250.2', visibility: 'visible' }),\r\n        animate(this.autoPlayInterval, style({ strokeDasharray: '250.2,250.2', visibility: 'hidden' }))\r\n      ]);\r\n    }else{\r\n      autoPlayAnimation = this.animationBuilder.build([\r\n        style({ strokeDasharray: '0,250.2', visibility: 'hidden' }),\r\n        animate(this.autoPlayInterval, style({ strokeDasharray: '250.2,250.2', visibility: 'hidden' }))\r\n      ]);\r\n    }\r\n    \r\n    // Get the element for, which the animation should be applied\r\n    const path = (this.dots.nativeElement as HTMLElement).children[index].getElementsByTagName('path')[0];\r\n    this.dotAnimationPlayer = autoPlayAnimation.create(path);\r\n    // Start the animation\r\n    this.dotAnimationPlayer.play();\r\n    // Switch to the next carousel, as soon as the animation is finished\r\n    this.dotAnimationPlayer.onDone(() => {\r\n      this.dotAnimationPlayer = null;\r\n      this.next();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Resets the dot animation\r\n   */\r\n  private resetDotAnimation(): void {\r\n    if (this.dotAnimationPlayer && this.dotAnimationPlayer.hasStarted()) {\r\n      this.dotAnimationPlayer.reset();\r\n      this.dotAnimationPlayer = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Initialize the carousel objects\r\n   */\r\n  private initCarouselObjects(animation = true): void {\r\n    this.carouselElements = new Array<CSS3DObject>();\r\n    for (let idx = 0; idx < this.carouselItemTemplates.length; idx++) {\r\n      let copiedElement = (this.carouselItemTemplates.get(idx)?.htmlElement);\r\n      if (copiedElement) {\r\n        var object = new CSS3DObject(copiedElement);\r\n        object.element.style.pointerEvents = 'none';\r\n        // Add element to global variable\r\n        this.carouselElements.push(object);\r\n        // Create subscription for tween animation\r\n        this.carouselObjSubsciptions.push(new Subscription());\r\n      }\r\n    }\r\n\r\n    // Clear the carousel group\r\n    this.carouselGroup.clear();\r\n\r\n    var yOrientation = -((this.activeCarouselElement) * Math.PI * 2 / this.carouselElements.length);\r\n    this.carouselGroup.rotation.set(0, yOrientation, 0);\r\n    var index = 0;\r\n    const elementsCnt = this.carouselElements.length;\r\n\r\n    this.carouselElements.forEach(obj => {\r\n      // Unsubscribe previously subscription\r\n      this.carouselObjSubsciptions[index].unsubscribe();\r\n\r\n      // Define final position\r\n      let tweenObj = new Object3D();\r\n      let theta = index * 2 * (Math.PI / elementsCnt);\r\n      tweenObj.position.setFromCylindricalCoords(this.radius, theta, this.yPosition);\r\n      let vector = new Vector3(tweenObj.position.x * 2, tweenObj.position.y, tweenObj.position.z * 2);\r\n      tweenObj.lookAt(vector);\r\n\r\n      // Set roattion\r\n      obj.rotation.x = tweenObj.rotation.x;\r\n      obj.rotation.y = tweenObj.rotation.y;\r\n      obj.rotation.z = tweenObj.rotation.z;\r\n\r\n      if (this.initAnimation === true && animation === true) {\r\n        // Set random position\r\n        obj.position.x = Math.random() * 2000 - 1000;\r\n        obj.position.y = Math.random() * 500;\r\n        obj.position.z = Math.random() * 500;\r\n\r\n        // Add the objects to the portfolio group\r\n        this.carouselGroup.add(obj);\r\n\r\n        // Tween to final position\r\n        this.ngZone.runOutsideAngular(() => {\r\n          this.carouselObjSubsciptions[index] = RxjsTween.createTween(RxjsTween.easeInOutQuad, [obj.position.x, obj.position.y, obj.position.z],\r\n            [tweenObj.position.x, tweenObj.position.y, tweenObj.position.z], 2000).subscribe({\r\n              next: tweenPos => {\r\n                obj.position.set(tweenPos[0], tweenPos[1], tweenPos[2]);\r\n              }\r\n            });\r\n        });\r\n      } else {\r\n        obj.position.x = tweenObj.position.x;\r\n        obj.position.y = tweenObj.position.y;\r\n        obj.position.z = tweenObj.position.z;\r\n\r\n        // Add the objects to the portfolio group\r\n        this.carouselGroup.add(obj);\r\n      }\r\n\r\n      index = index + 1;\r\n    });\r\n\r\n    //add the group to the scene\r\n    this.scene.add(this.carouselGroup);\r\n  }\r\n\r\n  /**\r\n   * Rotate to next carousel item\r\n   * @returns Promise with the new active element number \r\n   */\r\n  next(): Promise<number> {\r\n    let nextElement = this.activeCarouselElement >= this.carouselElements.length - 1 ? 0 : this.activeCarouselElement + 1;\r\n    return this.rotateTo(nextElement);\r\n  }\r\n\r\n  /**\r\n   * Rotate to previous carousel item#\r\n   * @returns Promise with the new active element number\r\n   */\r\n  previous(): Promise<number> {\r\n    let nextElement = this.activeCarouselElement == 0 ? this.carouselElements.length - 1 : this.activeCarouselElement - 1;\r\n    return this.rotateTo(nextElement);\r\n  }\r\n\r\n  /**\r\n   * Rotates to a sepcific carousel item\r\n   * @param targetIndex index of the carousel item\r\n   */\r\n  rotateTo(targetIndex: number, skipAnimation = false): Promise<number> {\r\n    return new Promise((resolve, reject) => {\r\n      if (targetIndex > this.carouselElements.length - 1) {\r\n        console.error('target index is greater than available carousel items');\r\n        reject('target index is greater than available carousel items');\r\n      }\r\n\r\n      this.resetDotAnimation();\r\n\r\n      if (targetIndex > this.activeCarouselElement) {\r\n        // In case the current elment is the first again, reset the orientation\r\n        if (this.activeCarouselElement == 0 && (this.carouselGroup.rotation.y != 0\r\n          && this.carouselGroup.rotation.x == 0 && this.carouselGroup.rotation.z == 0)) {\r\n          this.carouselGroup.rotation.set(0, 0, 0);\r\n        }\r\n      } else if (targetIndex == this.carouselElements.length - 1) {\r\n        // Set position of the first element to y = -2*PI\r\n        if (this.activeCarouselElement == 0 && (this.carouselGroup.rotation.y == 0\r\n          && this.carouselGroup.rotation.x == 0 && this.carouselGroup.rotation.z == 0)) {\r\n          this.carouselGroup.rotation.set(0, -2 * Math.PI, 0);\r\n        }\r\n      }\r\n\r\n      const startQuaternion = this.carouselGroup.quaternion.clone();\r\n      // Calculate the orientation of the target item\r\n      const yOrientation = -((targetIndex) * Math.PI * 2 / this.carouselElements.length);\r\n      let targetQuaternion = new Quaternion().setFromEuler(new Euler(0, yOrientation, 0, 'XYZ'));\r\n\r\n      if (skipAnimation) {\r\n        this.carouselGroup.quaternion.slerpQuaternions(startQuaternion, targetQuaternion, 1)\r\n        this.rotationCompleted(targetIndex);\r\n        resolve(this.activeCarouselElement);\r\n      } else {\r\n        this.rotationSubscription.unsubscribe();\r\n        // Run rotation animation outsie zgZone\r\n        this.ngZone.runOutsideAngular(() => {\r\n          this.rotationSubscription = RxjsTween.createTween(RxjsTween.easeInOutQuad, 0, 1, this.rotationDuration).subscribe({\r\n            next: x => {\r\n              this.carouselGroup.quaternion.slerpQuaternions(startQuaternion, targetQuaternion, x);\r\n            },\r\n            complete: () => {\r\n              this.carouselGroup.quaternion.slerpQuaternions(startQuaternion, targetQuaternion, 1);\r\n              this.ngZone.run(() => {\r\n                this.rotationCompleted(targetIndex);\r\n                resolve(this.activeCarouselElement);\r\n              });\r\n            }\r\n          });\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * things to do when rotation is completed\r\n   * @param targetIndex \r\n   */\r\n  private rotationCompleted(targetIndex: number): void {\r\n    this.activeCarouselElement = targetIndex;\r\n    this.activeElementChanged.emit(this.activeCarouselElement);\r\n    this.objectControls.resetUserInteractionFlag();\r\n    if (this.autoPlay) {\r\n      this.startDotAnimation(this.activeCarouselElement);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Updates and reinits the carousel items\r\n   */\r\n  public updateCarouselItems(): void {\r\n    this.initCarouselObjects(false);\r\n  }\r\n\r\n  /**\r\n   * Updates the radius of the carousel items\r\n   */\r\n  private updateRadius(): void {\r\n    for (let idx = 0; idx < this.carouselGroup.children.length; idx++) {\r\n      let theta = idx * 2 * (Math.PI / this.carouselGroup.children.length);\r\n      this.carouselGroup.children[idx].position.setFromCylindricalCoords(this.radius, theta, this.yPosition);\r\n    }\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CarouselComponent, CarouselItem } from './carousel.component';\r\nimport { PerformanceMonitorModule } from '../performance-monitor/performance-monitor.module';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [CarouselComponent, CarouselItem],\r\n  imports: [\r\n    CommonModule,\r\n    PerformanceMonitorModule\r\n  ],\r\n  exports: [CarouselComponent, CarouselItem]\r\n})\r\nexport class CarouselModule { }\r\n","/*\r\n * Public API Surface of ngx-acuw\r\n */\r\n\r\nexport * from './lib/image-as-particles/image-as-particles.component';\r\nexport * from './lib/image-as-particles/image-as-particles.module';\r\nexport * from './lib/image-transition/image-transition.component';\r\nexport * from './lib/image-transition/image-transition.module';\r\nexport * from './lib/lightbox/lightbox.component';\r\nexport * from './lib/lightbox/lightbox.module';\r\nexport * from './lib/carousel/carousel.component';\r\nexport * from './lib/carousel/carousel.module';\r\nexport * from './lib/performance-monitor/performance-monitor.component';\r\nexport * from './lib/performance-monitor/performance-monitor.module';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}