{"version":3,"file":"dshch-rad-ui-carousel.mjs","sources":["../../../projects/rad-ui/carousel/carousel.component.ts","../../../projects/rad-ui/carousel/carousel.component.html","../../../projects/rad-ui/carousel/module.ts","../../../projects/rad-ui/carousel/dshch-rad-ui-carousel.ts"],"sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { BehaviorSubject, interval, Subject } from 'rxjs';\n\nconst OPTIONS_DEFAULT: CarouselOptions = {\n  slides: [],\n  active: 0,\n  interval: 6000,\n  indicators: true,\n};\n\n/**\n * Carousel slide\n */\nexport interface CarouselSlide {\n  /**\n   * Path to image\n   */\n  src: string;\n\n  /**\n   * Slide title\n   */\n  title: string;\n\n  /**\n   * Slide description\n   */\n  description?: string;\n\n  /**\n   * Slide route\n   */\n  routeConfig?: {\n    route: string[];\n    queryParams?: { [key: string]: string };\n  };\n}\n\n/**\n * Carousel options\n */\nexport interface CarouselOptions {\n  /**\n   * Is active slider\n   */\n  active?: number;\n\n  /**\n   * Show indicators\n   */\n  indicators?: boolean;\n\n  /**\n   * Change interval\n   */\n  interval?: number;\n\n  /**\n   * Promo carousel slides\n   */\n  slides: CarouselSlide[];\n}\n\n@Component({\n  selector: 'rad-ui-carousel',\n  templateUrl: './carousel.component.html',\n  styleUrls: ['./carousel.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CarouselComponent implements OnInit, OnDestroy {\n  /**\n   * Promo carousel options\n   */\n  options?: CarouselOptions;\n\n  /**\n   * Change slide\n   */\n  changeSlide$ = new BehaviorSubject(0);\n\n  @Input() set config(options: Partial<CarouselOptions>) {\n    this.options = { ...OPTIONS_DEFAULT, ...options };\n  }\n\n  private unsubscribe$ = new Subject();\n  constructor(\n    /* tslint:disable-next-line:ban-types */\n    @Inject(PLATFORM_ID) private platformId: Object,\n    private sanitizer: DomSanitizer,\n    private cdr: ChangeDetectorRef,\n  ) {}\n\n  ngOnInit(): void {\n    if (isPlatformBrowser(this.platformId)) {\n      this.changeSlide$\n        .pipe(\n          switchMap((index) => {\n            if (index >= 0 && this.options) {\n              this.options.active = index;\n              this.cdr.detectChanges();\n            }\n            return interval(this.options?.interval).pipe(\n              tap(() => {\n                if (!window.document.hidden && this.options) {\n                  if (<number>this.options.active + 1 === this.options.slides.length) {\n                    this.options.active = 0;\n                  } else {\n                    (<number>this.options.active)++;\n                  }\n                  this.cdr.detectChanges();\n                }\n              }),\n            );\n          }),\n          takeUntil(this.unsubscribe$),\n        )\n        .subscribe((_) => {});\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n\n  getInnerHTML(html: string): SafeHtml {\n    return this.sanitizer.bypassSecurityTrustHtml(html);\n  }\n}\n","<div *ngIf=\"options\" class=\"carousel-slider\">\n  <ng-container *ngFor=\"let slide of options.slides; let index = index\">\n    <a\n      *ngIf=\"slide.routeConfig\"\n      [routerLink]=\"slide.routeConfig.route\"\n      [queryParams]=\"slide.routeConfig.queryParams || {}\"\n      class=\"link link-tdn carousel-slide d-inline-block\"\n      [ngStyle]=\"{ left: (index - (options.active || 0)) * 100 + '%' }\"\n    >\n      <div class=\"carousel-slide-image\" [ngStyle]=\"{ backgroundImage: 'url(' + slide.src + ')' }\"></div>\n      <div class=\"carousel-slide-content\">\n        <div *ngIf=\"slide.title\" class=\"carousel-slide-title\" [innerHTML]=\"getInnerHTML(slide.title)\"></div>\n        <div *ngIf=\"slide.description\" class=\"carousel-slide-description\" [innerHTML]=\"getInnerHTML(slide.description)\"></div>\n      </div>\n    </a>\n  </ng-container>\n\n  <div class=\"carousel-indicators\" *ngIf=\"options?.indicators\">\n    <button\n      type=\"button\"\n      class=\"btn carousel-indicator\"\n      (click)=\"changeSlide$.next(index)\"\n      *ngFor=\"let slide of options?.slides || []; let index = index\"\n      [class.carousel-indicator_active]=\"options.active === index\"\n    ></button>\n  </div>\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { CarouselComponent } from \"./carousel.component\";\nimport { RouterModule } from \"@angular/router\";\n\n@NgModule({\n  imports: [\n    CommonModule,\n    RouterModule,\n  ],\n  exports: [\n    CarouselComponent,\n  ],\n  declarations: [\n    CarouselComponent,\n  ],\n})\nexport class RadUICarouselModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}