{"version":3,"file":"hreimer-angular-image-viewer.mjs","sources":["../../../projects/angular-image-viewer/src/lib/models/custom-image-event-model.ts","../../../projects/angular-image-viewer/src/lib/directives/full-screen.directive.ts","../../../projects/angular-image-viewer/src/lib/angular-image-viewer.component.ts","../../../projects/angular-image-viewer/src/lib/angular-image-viewer.component.html","../../../projects/angular-image-viewer/src/lib/angular-image-viewer.module.ts","../../../projects/angular-image-viewer/src/public-api.ts","../../../projects/angular-image-viewer/src/hreimer-angular-image-viewer.ts"],"sourcesContent":["export class CustomImageEvent {\n    name: string;\n    imageIndex: number;\n\n    constructor(name, imageIndex) {\n        this.name = name;\n        this.imageIndex = imageIndex;\n    }\n}\n","import { Directive, Input, ElementRef, OnChanges, OnInit, SimpleChanges } from '@angular/core';\n// import * as screenfull from 'screenfull';\n\n@Directive({\n  selector: '[appScreenfull]'\n})\nexport class FullScreenDirective implements OnChanges, OnInit {\n\n  @Input('appScreenfull') fullscreenState: boolean;\n\n  constructor(private el: ElementRef) { }\n\n  ngOnChanges(changes: SimpleChanges) {\n    // console.log('fullscreenState isFirstChange:', changes[\"fullscreenState\"].isFirstChange());\n    // console.log('fullscreenState', this.fullscreenState);\n    // if (screenfull.isEnabled) {\n    //   screenfull.toggle(this.el.nativeElement);\n    // }\n    // if (this.fullscreenState && screenfull.isEnabled) {\n    //   screenfull.request(this.el.nativeElement);\n    // } else if (screenfull.isEnabled) {\n    //   screenfull.exit();\n    // }\n\n    // tslint:disable-next-line: no-string-literal\n    if (!changes['fullscreenState'].isFirstChange()) {\n\n      if (this.fullscreenState) {\n        const element: any = this.el.nativeElement;\n\n        // tslint:disable-next-line: max-line-length\n        const requestMethod = element.requestFullscreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen;\n\n        if (requestMethod) { // Native full screen.\n          requestMethod.call(element);\n        } else {\n          console.log('FullScreen Request Method Not Supported on this browser.');\n        }\n      } else {\n        const element: any = document;\n\n        // tslint:disable-next-line: max-line-length\n        const requestMethod = element.cancelFullscreen || element.webkitExitFullscreen || element.webkitCancelFullScreen || element.mozCancelFullScreen || element.msExitFullScreen;\n\n        if (requestMethod) { // Native Cancel full screen.\n          requestMethod.call(element);\n        } else {\n          console.log('FullScreen Cancel Request Method Not Supported on this browser.');\n        }\n      }\n    }\n\n  }\n\n  ngOnInit() {\n\n  }\n\n}\n","import { Component, OnInit, HostListener, Optional, Inject, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { ImageViewerConfig } from './models/image-viewer-config.model';\nimport { CustomImageEvent } from './models/custom-image-event-model';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n\nconst DEFAULT_CONFIG: ImageViewerConfig = {\n  btnContainerClass: 'btn-container',\n  btnClass: 'default',\n  btnSubClass: 'material-icons',\n  zoomFactor: 0.1,\n  containerBackgroundColor: '#ccc',\n  wheelZoom: false,\n  allowFullscreen: true,\n  allowKeyboardNavigation: true,\n  btnShow: {\n    zoomIn: true,\n    zoomOut: true,\n    rotateClockwise: true,\n    rotateCounterClockwise: true,\n    next: true,\n    prev: true,\n    reset: true\n  },\n  btnIcons: {\n    zoomIn: {\n      classes: 'fa fa-plus',\n      text: 'zoom_in'\n    },\n    zoomOut: {\n      classes: 'fa fa-minus',\n      text: 'zoom_out'\n    },\n    rotateClockwise:  {\n      classes: 'fa fa-repeat',\n      text: 'rotate_right'\n    },\n    rotateCounterClockwise:  {\n      classes: 'fa fa-undo',\n      text: 'rotate_left'\n    },\n    next:  {\n      classes: 'fa fa-arrow-right',\n      text: 'arrow_right'\n    },\n    prev:  {\n      classes: 'fa fa-arrow-left',\n      text: 'arrow_left'\n    },\n    fullscreen:  {\n      classes: 'fa fa-arrows-alt',\n      text: 'fullscreen'\n    },\n    reset:  {\n      classes: 'fa fa-undo',\n      text: 'restore'\n    },\n  }\n};\n\n\n@Component({\n  selector: 'angular-image-viewer',\n  templateUrl: './angular-image-viewer.component.html',\n  styleUrls: ['./angular-image-viewer.component.scss']\n})\nexport class AngularImageViewerComponent implements OnInit, OnChanges {\n\n  @Input()\n  src: string[];\n\n  @Input()\n  screenHeightOccupied: 0;             // In Px\n\n  @Input()\n  index = 0;\n\n  @Input()\n  config: ImageViewerConfig;\n\n  @Output()\n  indexChange: EventEmitter<number> = new EventEmitter();\n\n  @Output()\n  configChange: EventEmitter<ImageViewerConfig> = new EventEmitter();\n\n  @Output()\n  customImageEvent: EventEmitter<CustomImageEvent> = new EventEmitter();\n\n  styleHeight = '100%';\n\n  public style = { transform: '', msTransform: '', oTransform: '', webkitTransform: '' };\n  public fullscreen = false;\n  public loading = true;\n  private scale = 1;\n  private rotation = 0;\n  private translateX = 0;\n  private translateY = 0;\n  private prevX: number;\n  private prevY: number;\n  private hovered = false;\n\n  constructor(@Optional() @Inject('config') public moduleConfig: ImageViewerConfig,\n              private sanitizer: DomSanitizer) { }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.screenHeightOccupied) {\n      this.styleHeight = 'calc(100% - ' + this.screenHeightOccupied + 'px)';\n      // console.log('Style Height:', this.styleHeight);\n    }\n  }\n\n  ngOnInit() {\n    const merged = this.mergeConfig(DEFAULT_CONFIG, this.moduleConfig);\n    this.config = this.mergeConfig(merged, this.config);\n    this.triggerConfigBinding();\n  }\n\n  @HostListener('window:keyup.ArrowRight', ['$event'])\n  nextImage(event) {\n    if (this.canNavigate(event) && this.index < this.src.length - 1) {\n      this.loading = true;\n      this.index++;\n      this.triggerIndexBinding();\n      this.reset();\n    }\n  }\n\n  @HostListener('window:keyup.ArrowLeft', ['$event'])\n  prevImage(event) {\n    if (this.canNavigate(event) && this.index > 0) {\n      this.loading = true;\n      this.index--;\n      this.triggerIndexBinding();\n      this.reset();\n    }\n  }\n\n  zoomIn() {\n    this.scale *= (1 + this.config.zoomFactor);\n    this.updateStyle();\n  }\n\n  zoomOut() {\n    if (this.scale > this.config.zoomFactor) {\n      this.scale /= (1 + this.config.zoomFactor);\n    }\n    this.updateStyle();\n  }\n\n  scrollZoom(evt) {\n    if (this.config.wheelZoom) {\n      evt.deltaY > 0 ? this.zoomOut() : this.zoomIn();\n      return false;\n    }\n  }\n\n  rotateClockwise() {\n    this.rotation += 90;\n    this.updateStyle();\n  }\n\n  rotateCounterClockwise() {\n    this.rotation -= 90;\n    this.updateStyle();\n  }\n\n  onLoad(url) {\n    // console.log('Loading Image Done:', url);\n    this.loading = false;\n  }\n\n  onLoadStart(url) {\n    // console.log('Loading Image:', url);\n    this.loading = true;\n  }\n\n  imageNotFound(url) {\n    // console.log('Image not found Url:', url);\n  }\n\n  onDragOver(evt) {\n    this.translateX += (evt.clientX - this.prevX);\n    this.translateY += (evt.clientY - this.prevY);\n    this.prevX = evt.clientX;\n    this.prevY = evt.clientY;\n    this.updateStyle();\n  }\n\n  onDragStart(evt) {\n    if (evt.dataTransfer && evt.dataTransfer.setDragImage) {\n      evt.dataTransfer.setDragImage(evt.target.nextElementSibling, 0, 0);\n    }\n    this.prevX = evt.clientX;\n    this.prevY = evt.clientY;\n  }\n\n  toggleFullscreen() {\n    this.fullscreen = !this.fullscreen;\n    if (!this.fullscreen) {\n      this.reset();\n    }\n  }\n\n  triggerIndexBinding() {\n    this.indexChange.emit(this.index);\n  }\n\n  triggerConfigBinding() {\n    this.configChange.next(this.config);\n  }\n\n  fireCustomEvent(name, imageIndex) {\n    this.customImageEvent.emit(new CustomImageEvent(name, imageIndex));\n  }\n\n  reset() {\n    this.scale = 1;\n    this.rotation = 0;\n    this.translateX = 0;\n    this.translateY = 0;\n    this.updateStyle();\n  }\n\n  @HostListener('mouseover')\n  onMouseOver() {\n    this.hovered = true;\n  }\n\n  @HostListener('mouseleave')\n  onMouseLeave() {\n    this.hovered = false;\n  }\n\n  private canNavigate(event: any) {\n    return event == null || (this.config.allowKeyboardNavigation && this.hovered);\n  }\n\n  private updateStyle() {\n    this.style.transform = `translate(${this.translateX}px, ${this.translateY}px) rotate(${this.rotation}deg) scale(${this.scale})`;\n    this.style.msTransform = this.style.transform;\n    this.style.webkitTransform = this.style.transform;\n    this.style.oTransform = this.style.transform;\n  }\n\n  private mergeConfig(defaultValues: ImageViewerConfig, overrideValues: ImageViewerConfig): ImageViewerConfig {\n    let result: ImageViewerConfig = { ...defaultValues };\n    if (overrideValues) {\n      result = { ...defaultValues, ...overrideValues };\n\n      if (overrideValues.btnIcons) {\n        result.btnIcons = { ...defaultValues.btnIcons, ...overrideValues.btnIcons };\n      }\n    }\n    return result;\n  }\n\n}\n","<div [appScreenfull]=\"fullscreen\" class=\"img-container\" [style.height]=\"styleHeight\"\n    [style.backgroundColor]=\"config.containerBackgroundColor\" (wheel)=\"scrollZoom($event)\"\n    (dragover)=\"onDragOver($event)\">\n    <img [src]=\"src[index]\" [ngStyle]=\"style\" alt=\"Image not found...\" (dragstart)=\"onDragStart($event)\"\n        (load)=\"onLoad(src[index])\" (error)=\"imageNotFound(src[index])\" (loadstart)=\"onLoadStart(src[index])\" />\n    <!-- Div below will be used to hide the 'ghost' image when dragging -->\n    <div></div>\n    <div class=\"spinner-container\" *ngIf=\"loading\">\n        <div class=\"spinner\"></div>\n    </div>\n\n    <!-- Button Container -->\n    <div class=\"btn-container\" [class]=\"config.btnContainerClass\">\n        <!-- Rotate Counter Clockwise -->\n        <ng-container *ngIf=\"config.btnShow.rotateCounterClockwise\">\n            <button type=\"button\" [class]=\"config.btnClass\"\n                (click)=\"rotateCounterClockwise()\" *ngIf=\"config.btnIcons.rotateCounterClockwise.classes\" >\n                <span [class]=\"config.btnIcons.rotateCounterClockwise.classes\"></span>\n            </button>\n            <a [class]=\"config.btnClass\" *ngIf=\"config.btnIcons.rotateCounterClockwise.text\" (click)=\"rotateCounterClockwise()\">\n                <span [class]=\"config.btnSubClass\">{{config.btnIcons.rotateCounterClockwise.text}}</span>\n            </a>\n        </ng-container>\n\n        <!-- Rotate Clockwise -->\n        <ng-container *ngIf=\"config.btnShow.rotateClockwise\">\n            <button type=\"button\" [class]=\"config.btnClass\"\n                (click)=\"rotateClockwise()\" *ngIf=\"config.btnIcons.rotateClockwise.classes\" >\n                <span [class]=\"config.btnIcons.rotateClockwise.classes\"></span>\n            </button>\n            <a [class]=\"config.btnClass\" *ngIf=\"config.btnIcons.rotateClockwise.text\" (click)=\"rotateClockwise()\">\n                <span [class]=\"config.btnSubClass\">{{config.btnIcons.rotateClockwise.text}}</span>\n            </a>\n        </ng-container>\n\n        <!-- Zoom Out -->\n        <ng-container *ngIf=\"config.btnShow.zoomOut\">\n            <button type=\"button\" [class]=\"config.btnClass\"\n                (click)=\"zoomOut()\" *ngIf=\"config.btnIcons.zoomOut.classes\" >\n                <span [class]=\"config.btnIcons.zoomOut.classes\"></span>\n            </button>\n            <a [class]=\"config.btnClass\" *ngIf=\"config.btnIcons.zoomOut.text\" (click)=\"zoomOut()\">\n                <span [class]=\"config.btnSubClass\">{{config.btnIcons.zoomOut.text}}</span>\n            </a>\n        </ng-container>\n\n        <!-- Zoom In -->\n        <ng-container *ngIf=\"config.btnShow.zoomIn\">\n            <button type=\"button\" [class]=\"config.btnClass\"\n                (click)=\"zoomIn()\" *ngIf=\"config.btnIcons.zoomIn.classes\" >\n                <span [class]=\"config.btnIcons.zoomIn.classes\"></span>\n            </button>\n            <a [class]=\"config.btnClass\" *ngIf=\"config.btnIcons.zoomIn.text\" (click)=\"zoomIn()\">\n                <span [class]=\"config.btnSubClass\">{{config.btnIcons.zoomIn.text}}</span>\n            </a>\n        </ng-container>\n\n        <!-- Fullscreen -->\n        <ng-container *ngIf=\"config.allowFullscreen\">\n            <button type=\"button\" [class]=\"config.btnClass\"\n                (click)=\"toggleFullscreen()\" *ngIf=\"config.btnIcons.fullscreen.classes\" >\n                <span [class]=\"config.btnIcons.fullscreen.classes\"></span>\n            </button>\n            <a [class]=\"config.btnClass\" *ngIf=\"config.btnIcons.fullscreen.text\" (click)=\"toggleFullscreen()\">\n                <span [class]=\"config.btnSubClass\">{{config.btnIcons.fullscreen.text}}</span>\n            </a>\n        </ng-container>\n\n        <!-- Reset -->\n        <ng-container *ngIf=\"config.btnShow.reset\">\n            <button type=\"button\" [class]=\"config.btnClass\"\n                (click)=\"reset()\" *ngIf=\"config.btnIcons.reset.classes\" >\n                <span [class]=\"config.btnIcons.reset.classes\"></span>\n            </button>\n            <a [class]=\"config.btnClass\" *ngIf=\"config.btnIcons.reset.text\" (click)=\"reset()\">\n                <span [class]=\"config.btnSubClass\">{{config.btnIcons.reset.text}}</span>\n            </a>\n        </ng-container>\n\n        <!-- Custom Buttons -->\n        <ng-container *ngFor=\"let cBtn of config.customBtns\">\n            <button *ngIf=\"cBtn.icon.classes\" type=\"button\" [class]=\"config.btnClass\"\n                (click)=\"fireCustomEvent(cBtn.name, index)\">\n                <span *ngIf=\"cBtn.icon.classes\" [class]=\"cBtn.icon.classes\"></span>\n            </button>\n            <ng-container *ngIf=\"cBtn.icon.text\">\n                <a [class]=\"config.btnClass\" *ngIf=\"cBtn.icon.text\" (click)=\"fireCustomEvent(cBtn.name, index)\">\n                    <span [class]=\"config.btnSubClass\">{{cBtn.icon.text}}</span>\n                </a>\n            </ng-container>\n        </ng-container>\n    </div>\n\n    <!-- Prev / Next Nav Container -->\n    <div class=\"nav-button-container\" *ngIf=\"src.length > 1\">\n        <button *ngIf=\"config.btnShow.next\" type=\"button\" [class]=\"config.btnClass\" (click)=\"prevImage($event)\" [disabled]=\"index === 0\">\n            <span *ngIf=\"config.btnIcons.prev.classes\" [class]=\"config.btnIcons.prev.classes\"></span>\n        </button>\n        <a [class]=\"config.btnClass\" *ngIf=\"config.btnIcons.prev.text\" (click)=\"prevImage($event)\">\n            <span [class]=\"config.btnSubClass\">{{config.btnIcons.prev.text}}</span>\n        </a>\n        <button *ngIf=\"config.btnShow.next\" type=\"button\" [class]=\"config.btnClass\" (click)=\"nextImage($event)\"\n            [disabled]=\"index === src.length - 1\">\n            <span *ngIf=\"config.btnIcons.next.classes\" [class]=\"config.btnIcons.next.classes\"></span>\n        </button>\n        <a [class]=\"config.btnClass\" *ngIf=\"config.btnIcons.next.text\" (click)=\"nextImage($event)\">\n            <span [class]=\"config.btnSubClass\">{{config.btnIcons.next.text}}</span>\n        </a>\n    </div>\n</div>","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { AngularImageViewerComponent } from './angular-image-viewer.component';\nimport { FullScreenDirective } from './directives/full-screen.directive';\n// import { ImageViewerConfig } from 'dist/angular-image-viewer/public-api';\n\n\n\n@NgModule({\n  declarations: [AngularImageViewerComponent, FullScreenDirective],\n  imports: [\n    CommonModule,\n    BrowserModule,\n    FormsModule,\n    BrowserAnimationsModule,\n  ],\n  exports: [AngularImageViewerComponent, FullScreenDirective]\n})\nexport class AngularImageViewerModule {\n  /**\n   * forRoot\n   * @returns A module with its provider dependencies\n   */\n  // static forRoot(imageViewerConfig: ImageViewerConfig): ModuleWithProviders {\n  //   return {\n  //     ngModule: AngularImageViewerModule,\n  //     providers: [\n  //       {\n  //         provide: imageViewerConfig,\n  //         useValue: imageViewerConfig\n  //       }\n  //     ]\n  //   };\n  // }\n}\n","/*\n * Public API Surface of angular-image-viewer\n */\n\nexport * from './lib/angular-image-viewer.module';\nexport { AngularImageViewerComponent } from './lib/angular-image-viewer.component';\nexport { ImageViewerConfig} from './lib/models/image-viewer-config.model';\nexport { CustomImageEvent } from './lib/models/custom-image-event-model';\nexport { FullScreenDirective } from './lib/directives/full-screen.directive';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.FullScreenDirective"],"mappings":"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"}