{"version":3,"file":"obliczeniowo-elementary-perspective-slider.mjs","sources":["../../../../projects/components/perspective-slider/components/perspective-slider/perspective-slider.component.ts","../../../../projects/components/perspective-slider/components/perspective-slider/perspective-slider.component.html","../../../../projects/components/perspective-slider/perspective-slider.module.ts","../../../../projects/components/perspective-slider/obliczeniowo-elementary-perspective-slider.ts"],"sourcesContent":["import { ElementaryMath } from '@obliczeniowo/elementary/math';\nimport { Component, OnInit, TemplateRef, ElementRef, HostBinding, ContentChildren, QueryList } from '@angular/core';\nimport { Point2D } from '@obliczeniowo/elementary/classes';\n\n@Component({\n    selector: 'obl-perspective-slider',\n    templateUrl: './perspective-slider.component.html',\n    styleUrls: ['./perspective-slider.component.scss'],\n    standalone: false\n})\nexport class PerspectiveSliderComponent implements OnInit {\n  /** Templates to display aliments */\n  @ContentChildren(TemplateRef) templates!: QueryList<TemplateRef<any>>;\n\n  @HostBinding('style.height.px')\n  protected height: number = 0;\n\n  protected startIndex = 1;\n  protected offset = new Point2D();\n  protected time: any;\n  protected move = new Point2D(70, 15);\n  protected dh = 0;\n  protected angle = 10;\n\n  constructor(protected elementRef: ElementRef<HTMLElement>) { }\n\n  ngOnInit(): void {\n  }\n\n  ngAfterViewChecked(): void {\n    if (this.templates?.length > 1) {\n      const items = Array.from(this.elementRef.nativeElement.querySelectorAll('.item'));\n\n      const size = items.reduce((p, c) => [\n        p[0] < c.clientWidth ? c.clientWidth : p[0],\n        p[1] < c.clientHeight + this.move.y ? c.clientHeight + this.move.y : p[1]\n      ], [0, 0]);\n      size[1] = size[1] + size[0] * Math.sin(Math.PI / 18);\n      if (this.height !== size[1]) {\n        setTimeout(() => {\n          this.height = size[1];\n          this.dh = size[0] * Math.sin(Math.PI / 18);\n        })\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.time) {\n      clearInterval(this.time);\n      this.time = undefined;\n    }\n  }\n\n  protected inRange(index: number) {\n    return this.startIndex <= index && this.startIndex + 3 > index && index > 0;\n  }\n\n  protected add(offset: number) {\n    const previous = this.startIndex;\n    this.startIndex = ElementaryMath.minmax(this.startIndex + offset, -1, this.templates.length - 3);\n    if (previous !== this.startIndex) {\n      this.offset = this.offset.add(new Point2D(this.move.x * offset, this.move.y * offset));\n      if (!this.time) {\n        this.time = setInterval(() => this.animation(), 100);\n      }\n    }\n  }\n\n  protected animation() {\n    this.offset = this.offset.multiply(0.8);\n    if (Math.abs(this.offset.sickLength()) < 1) {\n      this.offset = new Point2D();\n      clearInterval(this.time);\n      this.time = undefined;\n    }\n  }\n\n  protected opacity(index: number): number {\n    const i = Math.min(index - this.startIndex + 1 + this.offset.x / this.move.x, 3);\n\n    return (i * i) / 9;\n  }\n}\n","@for (template of templates; track $index) {\n  @if (inRange($index)) {\n    <div\n      class=\"item\"\n      [style.left.px]=\"($index - startIndex) * move.x + offset.x - move.x\"\n      [style.top.px]=\"($index - startIndex) * move.y + offset.y - move.y + dh / 2\"\n      [style.opacity]=\"opacity($index)\"\n      [style.transform]=\"\n        'skew(' +\n        ((3 - $index + startIndex) / 3 - offset.x / move.x) * angle +\n        'deg, ' +\n        -angle +\n        'deg)'\n      \"\n    >\n      <ng-container [ngTemplateOutlet]=\"template\"></ng-container>\n    </div>\n  }\n}\n\n<button oblButton class=\"next\" (click)=\"add(1)\">\n  <obl-icon [name]=\"'right'\"></obl-icon>\n</button>\n<button oblButton class=\"previous\" (click)=\"add(-1)\">\n  <obl-icon [name]=\"'left'\"></obl-icon>\n</button>\n\n<ng-content></ng-content>\n","import { IconsModule } from '@obliczeniowo/elementary/icons';\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PerspectiveSliderComponent } from './components/perspective-slider/perspective-slider.component';\n\n@NgModule({\n  declarations: [\n    PerspectiveSliderComponent\n  ],\n  imports: [\n    CommonModule,\n    ButtonsModule,\n    IconsModule\n  ],\n  exports: [\n    PerspectiveSliderComponent\n  ]\n})\nexport class PerspectiveSliderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}