@hreimer/angular-image-viewer
Advanced tools
Comparing version 0.9.1 to 0.9.2
@@ -235,3 +235,3 @@ (function (global, factory) { | ||
var DEFAULT_CONFIG = { | ||
btnContainerClass: '', | ||
btnContainerClass: 'btn-container', | ||
btnClass: 'default', | ||
@@ -470,3 +470,3 @@ btnSubClass: 'material-icons', | ||
template: "<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>", | ||
styles: [".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative;bottom:15px}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"] | ||
styles: [".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"] | ||
}), | ||
@@ -473,0 +473,0 @@ __param(0, core.Optional()), __param(0, core.Inject('config')) |
@@ -15,3 +15,3 @@ !function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/common"),require("@angular/forms"),require("@angular/platform-browser"),require("@angular/platform-browser/animations")):"function"==typeof define&&define.amd?define("@hreimer/angular-image-viewer",["exports","@angular/core","@angular/common","@angular/forms","@angular/platform-browser","@angular/platform-browser/animations"],t):t(((n=n||self).hreimer=n.hreimer||{},n.hreimer["angular-image-viewer"]={}),n.ng.core,n.ng.common,n.ng.forms,n.ng.platformBrowser,n.ng.platformBrowser.animations)}(this,(function(n,t,e,o,s,i){"use strict"; | ||
PERFORMANCE OF THIS SOFTWARE. | ||
***************************************************************************** */var a=function(){return(a=Object.assign||function(n){for(var t,e=1,o=arguments.length;e<o;e++)for(var s in t=arguments[e])Object.prototype.hasOwnProperty.call(t,s)&&(n[s]=t[s]);return n}).apply(this,arguments)};function r(n,t,e,o){var s,i=arguments.length,a=i<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,e):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(n,t,e,o);else for(var r=n.length-1;r>=0;r--)(s=n[r])&&(a=(i<3?s(a):i>3?s(t,e,a):s(t,e))||a);return i>3&&a&&Object.defineProperty(t,e,a),a}function c(n,t){return function(e,o){t(e,o,n)}}var l=function(n,t){this.name=n,this.imageIndex=t},g={btnContainerClass:"",btnClass:"default",btnSubClass:"material-icons",zoomFactor:.1,containerBackgroundColor:"#ccc",wheelZoom:!1,allowFullscreen:!0,allowKeyboardNavigation:!0,btnShow:{zoomIn:!0,zoomOut:!0,rotateClockwise:!0,rotateCounterClockwise:!0,next:!0,prev:!0,reset:!0},btnIcons:{zoomIn:{classes:"fa fa-plus",text:"zoom_in"},zoomOut:{classes:"fa fa-minus",text:"zoom_out"},rotateClockwise:{classes:"fa fa-repeat",text:"rotate_right"},rotateCounterClockwise:{classes:"fa fa-undo",text:"rotate_left"},next:{classes:"fa fa-arrow-right",text:"arrow_right"},prev:{classes:"fa fa-arrow-left",text:"arrow_left"},fullscreen:{classes:"fa fa-arrows-alt",text:"fullscreen"},reset:{classes:"fa fa-undo",text:"restore"}}},u=function(){function n(n,e){this.moduleConfig=n,this.sanitizer=e,this.index=0,this.indexChange=new t.EventEmitter,this.configChange=new t.EventEmitter,this.customImageEvent=new t.EventEmitter,this.styleHeight="100%",this.style={transform:"",msTransform:"",oTransform:"",webkitTransform:""},this.fullscreen=!1,this.loading=!0,this.scale=1,this.rotation=0,this.translateX=0,this.translateY=0,this.hovered=!1}return n.prototype.ngOnChanges=function(n){n.screenHeightOccupied&&(this.styleHeight="calc(100% - "+this.screenHeightOccupied+"px)")},n.prototype.ngOnInit=function(){var n=this.mergeConfig(g,this.moduleConfig);this.config=this.mergeConfig(n,this.config),this.triggerConfigBinding()},n.prototype.nextImage=function(n){this.canNavigate(n)&&this.index<this.src.length-1&&(this.loading=!0,this.index++,this.triggerIndexBinding(),this.reset())},n.prototype.prevImage=function(n){this.canNavigate(n)&&this.index>0&&(this.loading=!0,this.index--,this.triggerIndexBinding(),this.reset())},n.prototype.zoomIn=function(){this.scale*=1+this.config.zoomFactor,this.updateStyle()},n.prototype.zoomOut=function(){this.scale>this.config.zoomFactor&&(this.scale/=1+this.config.zoomFactor),this.updateStyle()},n.prototype.scrollZoom=function(n){if(this.config.wheelZoom)return n.deltaY>0?this.zoomOut():this.zoomIn(),!1},n.prototype.rotateClockwise=function(){this.rotation+=90,this.updateStyle()},n.prototype.rotateCounterClockwise=function(){this.rotation-=90,this.updateStyle()},n.prototype.onLoad=function(n){console.log("Loading Image Done:",n),this.loading=!1},n.prototype.onLoadStart=function(n){console.log("Loading Image:",n),this.loading=!0},n.prototype.imageNotFound=function(n){console.log("Image not found Url:",n)},n.prototype.onDragOver=function(n){this.translateX+=n.clientX-this.prevX,this.translateY+=n.clientY-this.prevY,this.prevX=n.clientX,this.prevY=n.clientY,this.updateStyle()},n.prototype.onDragStart=function(n){n.dataTransfer&&n.dataTransfer.setDragImage&&n.dataTransfer.setDragImage(n.target.nextElementSibling,0,0),this.prevX=n.clientX,this.prevY=n.clientY},n.prototype.toggleFullscreen=function(){this.fullscreen=!this.fullscreen,this.fullscreen||this.reset()},n.prototype.triggerIndexBinding=function(){this.indexChange.emit(this.index)},n.prototype.triggerConfigBinding=function(){this.configChange.next(this.config)},n.prototype.fireCustomEvent=function(n,t){this.customImageEvent.emit(new l(n,t))},n.prototype.reset=function(){this.scale=1,this.rotation=0,this.translateX=0,this.translateY=0,this.updateStyle()},n.prototype.onMouseOver=function(){this.hovered=!0},n.prototype.onMouseLeave=function(){this.hovered=!1},n.prototype.canNavigate=function(n){return null==n||this.config.allowKeyboardNavigation&&this.hovered},n.prototype.updateStyle=function(){this.style.transform="translate("+this.translateX+"px, "+this.translateY+"px) rotate("+this.rotation+"deg) scale("+this.scale+")",this.style.msTransform=this.style.transform,this.style.webkitTransform=this.style.transform,this.style.oTransform=this.style.transform},n.prototype.mergeConfig=function(n,t){var e=a({},n);return t&&(e=a(a({},n),t),t.btnIcons&&(e.btnIcons=a(a({},n.btnIcons),t.btnIcons))),e},n.ctorParameters=function(){return[{type:void 0,decorators:[{type:t.Optional},{type:t.Inject,args:["config"]}]},{type:s.DomSanitizer}]},r([t.Input()],n.prototype,"src",void 0),r([t.Input()],n.prototype,"screenHeightOccupied",void 0),r([t.Input()],n.prototype,"index",void 0),r([t.Input()],n.prototype,"config",void 0),r([t.Output()],n.prototype,"indexChange",void 0),r([t.Output()],n.prototype,"configChange",void 0),r([t.Output()],n.prototype,"customImageEvent",void 0),r([t.HostListener("window:keyup.ArrowRight",["$event"])],n.prototype,"nextImage",null),r([t.HostListener("window:keyup.ArrowLeft",["$event"])],n.prototype,"prevImage",null),r([t.HostListener("mouseover")],n.prototype,"onMouseOver",null),r([t.HostListener("mouseleave")],n.prototype,"onMouseLeave",null),n=r([t.Component({selector:"angular-image-viewer",template:'<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 \x3c!-- Div below will be used to hide the \'ghost\' image when dragging --\x3e\n <div></div>\n <div class="spinner-container" *ngIf="loading">\n <div class="spinner"></div>\n </div>\n\n \x3c!-- Button Container --\x3e\n <div class="btn-container" [class]="config.btnContainerClass">\n \x3c!-- Rotate Counter Clockwise --\x3e\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 \x3c!-- Rotate Clockwise --\x3e\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 \x3c!-- Zoom Out --\x3e\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 \x3c!-- Zoom In --\x3e\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 \x3c!-- Fullscreen --\x3e\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 \x3c!-- Reset --\x3e\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 \x3c!-- Custom Buttons --\x3e\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 \x3c!-- Prev / Next Nav Container --\x3e\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>',styles:[".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative;bottom:15px}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"]}),c(0,t.Optional()),c(0,t.Inject("config"))],n)}(),f=function(){function n(n){this.el=n}return n.prototype.ngOnChanges=function(n){var t,e;(console.log("fullscreenState isFirstChange:",n.fullscreenState.isFirstChange()),console.log("fullscreenState",this.fullscreenState),n.fullscreenState.isFirstChange())||(this.fullscreenState?(e=(t=this.el.nativeElement).requestFullscreen||t.webkitRequestFullScreen||t.mozRequestFullScreen||t.msRequestFullScreen)?e.call(t):console.log("FullScreen Request Method Not Supported on this browser."):(e=(t=document).cancelFullscreen||t.webkitExitFullscreen||t.webkitCancelFullScreen||t.mozCancelFullScreen||t.msExitFullScreen)?e.call(t):console.log("FullScreen Cancel Request Method Not Supported on this browser."))},n.prototype.ngOnInit=function(){},n.ctorParameters=function(){return[{type:t.ElementRef}]},r([t.Input("appScreenfull")],n.prototype,"fullscreenState",void 0),n=r([t.Directive({selector:"[appScreenfull]"})],n)}(),p=function(){function n(){}return n=r([t.NgModule({declarations:[u,f],imports:[e.CommonModule,s.BrowserModule,o.FormsModule,i.BrowserAnimationsModule],exports:[u,f]})],n)}();n.AngularImageViewerComponent=u,n.AngularImageViewerModule=p,n.CustomImageEvent=l,n.FullScreenDirective=f,Object.defineProperty(n,"__esModule",{value:!0})})); | ||
***************************************************************************** */var a=function(){return(a=Object.assign||function(n){for(var t,e=1,o=arguments.length;e<o;e++)for(var s in t=arguments[e])Object.prototype.hasOwnProperty.call(t,s)&&(n[s]=t[s]);return n}).apply(this,arguments)};function r(n,t,e,o){var s,i=arguments.length,a=i<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,e):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(n,t,e,o);else for(var r=n.length-1;r>=0;r--)(s=n[r])&&(a=(i<3?s(a):i>3?s(t,e,a):s(t,e))||a);return i>3&&a&&Object.defineProperty(t,e,a),a}function c(n,t){return function(e,o){t(e,o,n)}}var l=function(n,t){this.name=n,this.imageIndex=t},g={btnContainerClass:"btn-container",btnClass:"default",btnSubClass:"material-icons",zoomFactor:.1,containerBackgroundColor:"#ccc",wheelZoom:!1,allowFullscreen:!0,allowKeyboardNavigation:!0,btnShow:{zoomIn:!0,zoomOut:!0,rotateClockwise:!0,rotateCounterClockwise:!0,next:!0,prev:!0,reset:!0},btnIcons:{zoomIn:{classes:"fa fa-plus",text:"zoom_in"},zoomOut:{classes:"fa fa-minus",text:"zoom_out"},rotateClockwise:{classes:"fa fa-repeat",text:"rotate_right"},rotateCounterClockwise:{classes:"fa fa-undo",text:"rotate_left"},next:{classes:"fa fa-arrow-right",text:"arrow_right"},prev:{classes:"fa fa-arrow-left",text:"arrow_left"},fullscreen:{classes:"fa fa-arrows-alt",text:"fullscreen"},reset:{classes:"fa fa-undo",text:"restore"}}},u=function(){function n(n,e){this.moduleConfig=n,this.sanitizer=e,this.index=0,this.indexChange=new t.EventEmitter,this.configChange=new t.EventEmitter,this.customImageEvent=new t.EventEmitter,this.styleHeight="100%",this.style={transform:"",msTransform:"",oTransform:"",webkitTransform:""},this.fullscreen=!1,this.loading=!0,this.scale=1,this.rotation=0,this.translateX=0,this.translateY=0,this.hovered=!1}return n.prototype.ngOnChanges=function(n){n.screenHeightOccupied&&(this.styleHeight="calc(100% - "+this.screenHeightOccupied+"px)")},n.prototype.ngOnInit=function(){var n=this.mergeConfig(g,this.moduleConfig);this.config=this.mergeConfig(n,this.config),this.triggerConfigBinding()},n.prototype.nextImage=function(n){this.canNavigate(n)&&this.index<this.src.length-1&&(this.loading=!0,this.index++,this.triggerIndexBinding(),this.reset())},n.prototype.prevImage=function(n){this.canNavigate(n)&&this.index>0&&(this.loading=!0,this.index--,this.triggerIndexBinding(),this.reset())},n.prototype.zoomIn=function(){this.scale*=1+this.config.zoomFactor,this.updateStyle()},n.prototype.zoomOut=function(){this.scale>this.config.zoomFactor&&(this.scale/=1+this.config.zoomFactor),this.updateStyle()},n.prototype.scrollZoom=function(n){if(this.config.wheelZoom)return n.deltaY>0?this.zoomOut():this.zoomIn(),!1},n.prototype.rotateClockwise=function(){this.rotation+=90,this.updateStyle()},n.prototype.rotateCounterClockwise=function(){this.rotation-=90,this.updateStyle()},n.prototype.onLoad=function(n){console.log("Loading Image Done:",n),this.loading=!1},n.prototype.onLoadStart=function(n){console.log("Loading Image:",n),this.loading=!0},n.prototype.imageNotFound=function(n){console.log("Image not found Url:",n)},n.prototype.onDragOver=function(n){this.translateX+=n.clientX-this.prevX,this.translateY+=n.clientY-this.prevY,this.prevX=n.clientX,this.prevY=n.clientY,this.updateStyle()},n.prototype.onDragStart=function(n){n.dataTransfer&&n.dataTransfer.setDragImage&&n.dataTransfer.setDragImage(n.target.nextElementSibling,0,0),this.prevX=n.clientX,this.prevY=n.clientY},n.prototype.toggleFullscreen=function(){this.fullscreen=!this.fullscreen,this.fullscreen||this.reset()},n.prototype.triggerIndexBinding=function(){this.indexChange.emit(this.index)},n.prototype.triggerConfigBinding=function(){this.configChange.next(this.config)},n.prototype.fireCustomEvent=function(n,t){this.customImageEvent.emit(new l(n,t))},n.prototype.reset=function(){this.scale=1,this.rotation=0,this.translateX=0,this.translateY=0,this.updateStyle()},n.prototype.onMouseOver=function(){this.hovered=!0},n.prototype.onMouseLeave=function(){this.hovered=!1},n.prototype.canNavigate=function(n){return null==n||this.config.allowKeyboardNavigation&&this.hovered},n.prototype.updateStyle=function(){this.style.transform="translate("+this.translateX+"px, "+this.translateY+"px) rotate("+this.rotation+"deg) scale("+this.scale+")",this.style.msTransform=this.style.transform,this.style.webkitTransform=this.style.transform,this.style.oTransform=this.style.transform},n.prototype.mergeConfig=function(n,t){var e=a({},n);return t&&(e=a(a({},n),t),t.btnIcons&&(e.btnIcons=a(a({},n.btnIcons),t.btnIcons))),e},n.ctorParameters=function(){return[{type:void 0,decorators:[{type:t.Optional},{type:t.Inject,args:["config"]}]},{type:s.DomSanitizer}]},r([t.Input()],n.prototype,"src",void 0),r([t.Input()],n.prototype,"screenHeightOccupied",void 0),r([t.Input()],n.prototype,"index",void 0),r([t.Input()],n.prototype,"config",void 0),r([t.Output()],n.prototype,"indexChange",void 0),r([t.Output()],n.prototype,"configChange",void 0),r([t.Output()],n.prototype,"customImageEvent",void 0),r([t.HostListener("window:keyup.ArrowRight",["$event"])],n.prototype,"nextImage",null),r([t.HostListener("window:keyup.ArrowLeft",["$event"])],n.prototype,"prevImage",null),r([t.HostListener("mouseover")],n.prototype,"onMouseOver",null),r([t.HostListener("mouseleave")],n.prototype,"onMouseLeave",null),n=r([t.Component({selector:"angular-image-viewer",template:'<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 \x3c!-- Div below will be used to hide the \'ghost\' image when dragging --\x3e\n <div></div>\n <div class="spinner-container" *ngIf="loading">\n <div class="spinner"></div>\n </div>\n\n \x3c!-- Button Container --\x3e\n <div class="btn-container" [class]="config.btnContainerClass">\n \x3c!-- Rotate Counter Clockwise --\x3e\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 \x3c!-- Rotate Clockwise --\x3e\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 \x3c!-- Zoom Out --\x3e\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 \x3c!-- Zoom In --\x3e\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 \x3c!-- Fullscreen --\x3e\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 \x3c!-- Reset --\x3e\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 \x3c!-- Custom Buttons --\x3e\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 \x3c!-- Prev / Next Nav Container --\x3e\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>',styles:[".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"]}),c(0,t.Optional()),c(0,t.Inject("config"))],n)}(),f=function(){function n(n){this.el=n}return n.prototype.ngOnChanges=function(n){var t,e;(console.log("fullscreenState isFirstChange:",n.fullscreenState.isFirstChange()),console.log("fullscreenState",this.fullscreenState),n.fullscreenState.isFirstChange())||(this.fullscreenState?(e=(t=this.el.nativeElement).requestFullscreen||t.webkitRequestFullScreen||t.mozRequestFullScreen||t.msRequestFullScreen)?e.call(t):console.log("FullScreen Request Method Not Supported on this browser."):(e=(t=document).cancelFullscreen||t.webkitExitFullscreen||t.webkitCancelFullScreen||t.mozCancelFullScreen||t.msExitFullScreen)?e.call(t):console.log("FullScreen Cancel Request Method Not Supported on this browser."))},n.prototype.ngOnInit=function(){},n.ctorParameters=function(){return[{type:t.ElementRef}]},r([t.Input("appScreenfull")],n.prototype,"fullscreenState",void 0),n=r([t.Directive({selector:"[appScreenfull]"})],n)}(),p=function(){function n(){}return n=r([t.NgModule({declarations:[u,f],imports:[e.CommonModule,s.BrowserModule,o.FormsModule,i.BrowserAnimationsModule],exports:[u,f]})],n)}();n.AngularImageViewerComponent=u,n.AngularImageViewerModule=p,n.CustomImageEvent=l,n.FullScreenDirective=f,Object.defineProperty(n,"__esModule",{value:!0})})); | ||
//# sourceMappingURL=hreimer-angular-image-viewer.umd.min.js.map |
@@ -6,3 +6,3 @@ import { __decorate, __param } from "tslib"; | ||
const DEFAULT_CONFIG = { | ||
btnContainerClass: '', | ||
btnContainerClass: 'btn-container', | ||
btnClass: 'default', | ||
@@ -242,3 +242,3 @@ btnSubClass: 'material-icons', | ||
template: "<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>", | ||
styles: [".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative;bottom:15px}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"] | ||
styles: [".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"] | ||
}), | ||
@@ -248,2 +248,2 @@ __param(0, Optional()), __param(0, Inject('config')) | ||
export { AngularImageViewerComponent }; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1pbWFnZS12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhyZWltZXIvYW5ndWxhci1pbWFnZS12aWV3ZXIvIiwic291cmNlcyI6WyJsaWIvYW5ndWxhci1pbWFnZS12aWV3ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUV6SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHekQsTUFBTSxjQUFjLEdBQXNCO0lBQ3hDLGlCQUFpQixFQUFFLEVBQUU7SUFDckIsUUFBUSxFQUFFLFNBQVM7SUFDbkIsV0FBVyxFQUFFLGdCQUFnQjtJQUM3QixVQUFVLEVBQUUsR0FBRztJQUNmLHdCQUF3QixFQUFFLE1BQU07SUFDaEMsU0FBUyxFQUFFLEtBQUs7SUFDaEIsZUFBZSxFQUFFLElBQUk7SUFDckIsdUJBQXVCLEVBQUUsSUFBSTtJQUM3QixPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsZUFBZSxFQUFFLElBQUk7UUFDckIsc0JBQXNCLEVBQUUsSUFBSTtRQUM1QixJQUFJLEVBQUUsSUFBSTtRQUNWLElBQUksRUFBRSxJQUFJO1FBQ1YsS0FBSyxFQUFFLElBQUk7S0FDWjtJQUNELFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRTtZQUNOLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLElBQUksRUFBRSxTQUFTO1NBQ2hCO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsT0FBTyxFQUFFLGFBQWE7WUFDdEIsSUFBSSxFQUFFLFVBQVU7U0FDakI7UUFDRCxlQUFlLEVBQUc7WUFDaEIsT0FBTyxF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LEVBQUUsc0JBQXNCO1FBQ2hDLDhtTUFBb0Q7O0tBRXJELENBQUM7SUFxQ2EsV0FBQSxRQUFRLEVBQUUsQ0FBQSxFQUFFLFdBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0dBcEM5QiwyQkFBMkIsQ0ErTHZDO1NBL0xZLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBIb3N0TGlzdGVuZXIsIE9wdGlvbmFsLCBJbmplY3QsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbWFnZVZpZXdlckNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL2ltYWdlLXZpZXdlci1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgQ3VzdG9tSW1hZ2VFdmVudCB9IGZyb20gJy4vbW9kZWxzL2N1c3RvbS1pbWFnZS1ldmVudC1tb2RlbCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuXG5jb25zdCBERUZBVUxUX0NPTkZJRzogSW1hZ2VWaWV3ZXJDb25maWcgPSB7XG4gIGJ0bkNvbnRhaW5lckNsYXNzOiAnJyxcbiAgYnRuQ2xhc3M6ICdkZWZhdWx0JyxcbiAgYnRuU3ViQ2xhc3M6ICdtYXRlcmlhbC1pY29ucycsXG4gIHpvb21GYWN0b3I6IDAuMSxcbiAgY29udGFpbmVyQmFja2dyb3VuZENvbG9yOiAnI2NjYycsXG4gIHdoZWVsWm9vbTogZmFsc2UsXG4gIGFsbG93RnVsbHNjcmVlbjogdHJ1ZSxcbiAgYWxsb3dLZXlib2FyZE5hdmlnYXRpb246IHRydWUsXG4gIGJ0blNob3c6IHtcbiAgICB6b29tSW46IHRydWUsXG4gICAgem9vbU91dDogdHJ1ZSxcbiAgICByb3RhdGVDbG9ja3dpc2U6IHRydWUsXG4gICAgcm90YXRlQ291bnRlckNsb2Nrd2lzZTogdHJ1ZSxcbiAgICBuZXh0OiB0cnVlLFxuICAgIHByZXY6IHRydWUsXG4gICAgcmVzZXQ6IHRydWVcbiAgfSxcbiAgYnRuSWNvbnM6IHtcbiAgICB6b29tSW46IHtcbiAgICAgIGNsYXNzZXM6ICdmYSBmYS1wbHVzJyxcbiAgICAgIHRleHQ6ICd6b29tX2luJ1xuICAgIH0sXG4gICAgem9vbU91dDoge1xuICAgICAgY2xhc3NlczogJ2ZhIGZhLW1pbnVzJyxcbiAgICAgIHRleHQ6ICd6b29tX291dCdcbiAgICB9LFxuICAgIHJvdGF0ZUNsb2Nrd2lzZTogIHtcbiAgICAgIGNsYXNzZXM6ICdmYSBmYS1yZXBlYXQnLFxuICAgICAgdGV4dDogJ3JvdGF0ZV9yaWdodCdcbiAgICB9LFxuICAgIHJvdGF0ZUNvdW50ZXJDbG9ja3dpc2U6ICB7XG4gICAgICBjbGFzc2VzOiAnZmEgZmEtdW5kbycsXG4gICAgICB0ZXh0OiAncm90YXRlX2xlZnQnXG4gICAgfSxcbiAgICBuZXh0OiAge1xuICAgICAgY2xhc3NlczogJ2ZhIGZhLWFycm93LXJpZ2h0JyxcbiAgICAgIHRleHQ6ICdhcnJvd19yaWdodCdcbiAgICB9LFxuICAgIHByZXY6ICB7XG4gICAgICBjbGFzc2VzOiAnZmEgZmEtYXJyb3ctbGVmdCcsXG4gICAgICB0ZXh0OiAnYXJyb3dfbGVmdCdcbiAgICB9LFxuICAgIGZ1bGxzY3JlZW46ICB7XG4gICAgICBjbGFzc2VzOiAnZmEgZmEtYXJyb3dzLWFsdCcsXG4gICAgICB0ZXh0OiAnZnVsbHNjcmVlbidcbiAgICB9LFxuICAgIHJlc2V0OiAge1xuICAgICAgY2xhc3NlczogJ2ZhIGZhLXVuZG8nLFxuICAgICAgdGV4dDogJ3Jlc3RvcmUnXG4gICAgfSxcbiAgfVxufTtcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhbmd1bGFyLWltYWdlLXZpZXdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbmd1bGFyLWltYWdlLXZpZXdlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FuZ3VsYXItaW1hZ2Utdmlld2VyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhckltYWdlVmlld2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpXG4gIHNyYzogc3RyaW5nW107XG5cbiAgQElucHV0KClcbiAgc2NyZWVuSGVpZ2h0T2NjdXBpZWQ6IDA7ICAgICAgICAgICAgIC8vIEluIFB4XG5cbiAgQElucHV0KClcbiAgaW5kZXggPSAwO1xuXG4gIEBJbnB1dCgpXG4gIGNvbmZpZzogSW1hZ2VWaWV3ZXJDb25maWc7XG5cbiAgQE91dHB1dCgpXG4gIGluZGV4Q2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgY29uZmlnQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SW1hZ2VWaWV3ZXJDb25maWc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBjdXN0b21JbWFnZUV2ZW50OiBFdmVudEVtaXR0ZXI8Q3VzdG9tSW1hZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgc3R5bGVIZWlnaHQgPSAnMTAwJSc7XG5cbiAgcHVibGljIHN0eWxlID0geyB0cmFuc2Zvcm06ICcnLCBtc1RyYW5zZm9ybTogJycsIG9UcmFuc2Zvcm06ICcnLCB3ZWJraXRUcmFuc2Zvcm06ICcnIH07XG4gIHB1YmxpYyBmdWxsc2NyZWVuID0gZmFsc2U7XG4gIHB1YmxpYyBsb2FkaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzY2FsZSA9IDE7XG4gIHByaXZhdGUgcm90YXRpb24gPSAwO1xuICBwcml2YXRlIHRyYW5zbGF0ZVggPSAwO1xuICBwcml2YXRlIHRyYW5zbGF0ZVkgPSAwO1xuICBwcml2YXRlIHByZXZYOiBudW1iZXI7XG4gIHByaXZhdGUgcHJldlk6IG51bWJlcjtcbiAgcHJpdmF0ZSBob3ZlcmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdCgnY29uZmlnJykgcHVibGljIG1vZHVsZUNvbmZpZzogSW1hZ2VWaWV3ZXJDb25maWcsXG4gICAgICAgICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5zY3JlZW5IZWlnaHRPY2N1cGllZCkge1xuICAgICAgdGhpcy5zdHlsZUhlaWdodCA9ICdjYWxjKDEwMCUgLSAnICsgdGhpcy5zY3JlZW5IZWlnaHRPY2N1cGllZCArICdweCknO1xuICAgICAgLy8gY29uc29sZS5sb2coJ1N0eWxlIEhlaWdodDonLCB0aGlzLnN0eWxlSGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBtZXJnZWQgPSB0aGlzLm1lcmdlQ29uZmlnKERFRkFVTFRfQ09ORklHLCB0aGlzLm1vZHVsZUNvbmZpZyk7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLm1lcmdlQ29uZmlnKG1lcmdlZCwgdGhpcy5jb25maWcpO1xuICAgIHRoaXMudHJpZ2dlckNvbmZpZ0JpbmRpbmcoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cC5BcnJvd1JpZ2h0JywgWyckZXZlbnQnXSlcbiAgbmV4dEltYWdlKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuY2FuTmF2aWdhdGUoZXZlbnQpICYmIHRoaXMuaW5kZXggPCB0aGlzLnNyYy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgdGhpcy50cmlnZ2VySW5kZXhCaW5kaW5nKCk7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwLkFycm93TGVmdCcsIFsnJGV2ZW50J10pXG4gIHByZXZJbWFnZShldmVudCkge1xuICAgIGlmICh0aGlzLmNhbk5hdmlnYXRlKGV2ZW50KSAmJiB0aGlzLmluZGV4ID4gMCkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuaW5kZXgtLTtcbiAgICAgIHRoaXMudHJpZ2dlckluZGV4QmluZGluZygpO1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIHpvb21JbigpIHtcbiAgICB0aGlzLnNjYWxlICo9ICgxICsgdGhpcy5jb25maWcuem9vbUZhY3Rvcik7XG4gICAgdGhpcy51cGRhdGVTdHlsZSgpO1xuICB9XG5cbiAgem9vbU91dCgpIHtcbiAgICBpZiAodGhpcy5zY2FsZSA+IHRoaXMuY29uZmlnLnpvb21GYWN0b3IpIHtcbiAgICAgIHRoaXMuc2NhbGUgLz0gKDEgKyB0aGlzLmNvbmZpZy56b29tRmFjdG9yKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTdHlsZSgpO1xuICB9XG5cbiAgc2Nyb2xsWm9vbShldnQpIHtcbiAgICBpZiAodGhpcy5jb25maWcud2hlZWxab29tKSB7XG4gICAgICBldnQuZGVsdGFZID4gMCA/IHRoaXMuem9vbU91dCgpIDogdGhpcy56b29tSW4oKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByb3RhdGVDbG9ja3dpc2UoKSB7XG4gICAgdGhpcy5yb3RhdGlvbiArPSA5MDtcbiAgICB0aGlzLnVwZGF0ZVN0eWxlKCk7XG4gIH1cblxuICByb3RhdGVDb3VudGVyQ2xvY2t3aXNlKCkge1xuICAgIHRoaXMucm90YXRpb24gLT0gOTA7XG4gICAgdGhpcy51cGRhdGVTdHlsZSgpO1xuICB9XG5cbiAgb25Mb2FkKHVybCkge1xuICAgIGNvbnNvbGUubG9nKCdMb2FkaW5nIEltYWdlIERvbmU6JywgdXJsKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG9uTG9hZFN0YXJ0KHVybCkge1xuICAgIGNvbnNvbGUubG9nKCdMb2FkaW5nIEltYWdlOicsIHVybCk7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIGltYWdlTm90Rm91bmQodXJsKSB7XG4gICAgY29uc29sZS5sb2coJ0ltYWdlIG5vdCBmb3VuZCBVcmw6JywgdXJsKTtcbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZ0KSB7XG4gICAgdGhpcy50cmFuc2xhdGVYICs9IChldnQuY2xpZW50WCAtIHRoaXMucHJldlgpO1xuICAgIHRoaXMudHJhbnNsYXRlWSArPSAoZXZ0LmNsaWVudFkgLSB0aGlzLnByZXZZKTtcbiAgICB0aGlzLnByZXZYID0gZXZ0LmNsaWVudFg7XG4gICAgdGhpcy5wcmV2WSA9IGV2dC5jbGllbnRZO1xuICAgIHRoaXMudXBkYXRlU3R5bGUoKTtcbiAgfVxuXG4gIG9uRHJhZ1N0YXJ0KGV2dCkge1xuICAgIGlmIChldnQuZGF0YVRyYW5zZmVyICYmIGV2dC5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKSB7XG4gICAgICBldnQuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShldnQudGFyZ2V0Lm5leHRFbGVtZW50U2libGluZywgMCwgMCk7XG4gICAgfVxuICAgIHRoaXMucHJldlggPSBldnQuY2xpZW50WDtcbiAgICB0aGlzLnByZXZZID0gZXZ0LmNsaWVudFk7XG4gIH1cblxuICB0b2dnbGVGdWxsc2NyZWVuKCkge1xuICAgIHRoaXMuZnVsbHNjcmVlbiA9ICF0aGlzLmZ1bGxzY3JlZW47XG4gICAgaWYgKCF0aGlzLmZ1bGxzY3JlZW4pIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICB0cmlnZ2VySW5kZXhCaW5kaW5nKCkge1xuICAgIHRoaXMuaW5kZXhDaGFuZ2UuZW1pdCh0aGlzLmluZGV4KTtcbiAgfVxuXG4gIHRyaWdnZXJDb25maWdCaW5kaW5nKCkge1xuICAgIHRoaXMuY29uZmlnQ2hhbmdlLm5leHQodGhpcy5jb25maWcpO1xuICB9XG5cbiAgZmlyZUN1c3RvbUV2ZW50KG5hbWUsIGltYWdlSW5kZXgpIHtcbiAgICB0aGlzLmN1c3RvbUltYWdlRXZlbnQuZW1pdChuZXcgQ3VzdG9tSW1hZ2VFdmVudChuYW1lLCBpbWFnZUluZGV4KSk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnNjYWxlID0gMTtcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLnRyYW5zbGF0ZVggPSAwO1xuICAgIHRoaXMudHJhbnNsYXRlWSA9IDA7XG4gICAgdGhpcy51cGRhdGVTdHlsZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VvdmVyJylcbiAgb25Nb3VzZU92ZXIoKSB7XG4gICAgdGhpcy5ob3ZlcmVkID0gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgdGhpcy5ob3ZlcmVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNhbk5hdmlnYXRlKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gZXZlbnQgPT0gbnVsbCB8fCAodGhpcy5jb25maWcuYWxsb3dLZXlib2FyZE5hdmlnYXRpb24gJiYgdGhpcy5ob3ZlcmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3R5bGUoKSB7XG4gICAgdGhpcy5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7dGhpcy50cmFuc2xhdGVYfXB4LCAke3RoaXMudHJhbnNsYXRlWX1weCkgcm90YXRlKCR7dGhpcy5yb3RhdGlvbn1kZWcpIHNjYWxlKCR7dGhpcy5zY2FsZX0pYDtcbiAgICB0aGlzLnN0eWxlLm1zVHJhbnNmb3JtID0gdGhpcy5zdHlsZS50cmFuc2Zvcm07XG4gICAgdGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB0aGlzLnN0eWxlLnRyYW5zZm9ybTtcbiAgICB0aGlzLnN0eWxlLm9UcmFuc2Zvcm0gPSB0aGlzLnN0eWxlLnRyYW5zZm9ybTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VDb25maWcoZGVmYXVsdFZhbHVlczogSW1hZ2VWaWV3ZXJDb25maWcsIG92ZXJyaWRlVmFsdWVzOiBJbWFnZVZpZXdlckNvbmZpZyk6IEltYWdlVmlld2VyQ29uZmlnIHtcbiAgICBsZXQgcmVzdWx0OiBJbWFnZVZpZXdlckNvbmZpZyA9IHsgLi4uZGVmYXVsdFZhbHVlcyB9O1xuICAgIGlmIChvdmVycmlkZVZhbHVlcykge1xuICAgICAgcmVzdWx0ID0geyAuLi5kZWZhdWx0VmFsdWVzLCAuLi5vdmVycmlkZVZhbHVlcyB9O1xuXG4gICAgICBpZiAob3ZlcnJpZGVWYWx1ZXMuYnRuSWNvbnMpIHtcbiAgICAgICAgcmVzdWx0LmJ0bkljb25zID0geyAuLi5kZWZhdWx0VmFsdWVzLmJ0bkljb25zLCAuLi5vdmVycmlkZVZhbHVlcy5idG5JY29ucyB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1pbWFnZS12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhyZWltZXIvYW5ndWxhci1pbWFnZS12aWV3ZXIvIiwic291cmNlcyI6WyJsaWIvYW5ndWxhci1pbWFnZS12aWV3ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUV6SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHekQsTUFBTSxjQUFjLEdBQXNCO0lBQ3hDLGlCQUFpQixFQUFFLGVBQWU7SUFDbEMsUUFBUSxFQUFFLFNBQVM7SUFDbkIsV0FBVyxFQUFFLGdCQUFnQjtJQUM3QixVQUFVLEVBQUUsR0FBRztJQUNmLHdCQUF3QixFQUFFLE1BQU07SUFDaEMsU0FBUyxFQUFFLEtBQUs7SUFDaEIsZUFBZSxFQUFFLElBQUk7SUFDckIsdUJBQXVCLEVBQUUsSUFBSTtJQUM3QixPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsZUFBZSxFQUFFLElBQUk7UUFDckIsc0JBQXNCLEVBQUUsSUFBSTtRQUM1QixJQUFJLEVBQUUsSUFBSTtRQUNWLElBQUksRUFBRSxJQUFJO1FBQ1YsS0FBSyxFQUFFLElBQUk7S0FDWjtJQUNELFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRTtZQUNOLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLElBQUksRUFBRSxTQUFTO1NBQ2hCO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsT0FBTyxFQUFFLGFBQWE7WUFDdEIsSUFBSSxFQUFFLFVBQVU7U0FDakI7UUFDRCxlQUFlLEVBQUc7WUFDaEIsT0FBTyxF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LEVBQUUsc0JBQXNCO1FBQ2hDLDhtTUFBb0Q7O0tBRXJELENBQUM7SUFxQ2EsV0FBQSxRQUFRLEVBQUUsQ0FBQSxFQUFFLFdBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0dBcEM5QiwyQkFBMkIsQ0ErTHZDO1NBL0xZLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBIb3N0TGlzdGVuZXIsIE9wdGlvbmFsLCBJbmplY3QsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbWFnZVZpZXdlckNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL2ltYWdlLXZpZXdlci1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgQ3VzdG9tSW1hZ2VFdmVudCB9IGZyb20gJy4vbW9kZWxzL2N1c3RvbS1pbWFnZS1ldmVudC1tb2RlbCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuXG5jb25zdCBERUZBVUxUX0NPTkZJRzogSW1hZ2VWaWV3ZXJDb25maWcgPSB7XG4gIGJ0bkNvbnRhaW5lckNsYXNzOiAnYnRuLWNvbnRhaW5lcicsXG4gIGJ0bkNsYXNzOiAnZGVmYXVsdCcsXG4gIGJ0blN1YkNsYXNzOiAnbWF0ZXJpYWwtaWNvbnMnLFxuICB6b29tRmFjdG9yOiAwLjEsXG4gIGNvbnRhaW5lckJhY2tncm91bmRDb2xvcjogJyNjY2MnLFxuICB3aGVlbFpvb206IGZhbHNlLFxuICBhbGxvd0Z1bGxzY3JlZW46IHRydWUsXG4gIGFsbG93S2V5Ym9hcmROYXZpZ2F0aW9uOiB0cnVlLFxuICBidG5TaG93OiB7XG4gICAgem9vbUluOiB0cnVlLFxuICAgIHpvb21PdXQ6IHRydWUsXG4gICAgcm90YXRlQ2xvY2t3aXNlOiB0cnVlLFxuICAgIHJvdGF0ZUNvdW50ZXJDbG9ja3dpc2U6IHRydWUsXG4gICAgbmV4dDogdHJ1ZSxcbiAgICBwcmV2OiB0cnVlLFxuICAgIHJlc2V0OiB0cnVlXG4gIH0sXG4gIGJ0bkljb25zOiB7XG4gICAgem9vbUluOiB7XG4gICAgICBjbGFzc2VzOiAnZmEgZmEtcGx1cycsXG4gICAgICB0ZXh0OiAnem9vbV9pbidcbiAgICB9LFxuICAgIHpvb21PdXQ6IHtcbiAgICAgIGNsYXNzZXM6ICdmYSBmYS1taW51cycsXG4gICAgICB0ZXh0OiAnem9vbV9vdXQnXG4gICAgfSxcbiAgICByb3RhdGVDbG9ja3dpc2U6ICB7XG4gICAgICBjbGFzc2VzOiAnZmEgZmEtcmVwZWF0JyxcbiAgICAgIHRleHQ6ICdyb3RhdGVfcmlnaHQnXG4gICAgfSxcbiAgICByb3RhdGVDb3VudGVyQ2xvY2t3aXNlOiAge1xuICAgICAgY2xhc3NlczogJ2ZhIGZhLXVuZG8nLFxuICAgICAgdGV4dDogJ3JvdGF0ZV9sZWZ0J1xuICAgIH0sXG4gICAgbmV4dDogIHtcbiAgICAgIGNsYXNzZXM6ICdmYSBmYS1hcnJvdy1yaWdodCcsXG4gICAgICB0ZXh0OiAnYXJyb3dfcmlnaHQnXG4gICAgfSxcbiAgICBwcmV2OiAge1xuICAgICAgY2xhc3NlczogJ2ZhIGZhLWFycm93LWxlZnQnLFxuICAgICAgdGV4dDogJ2Fycm93X2xlZnQnXG4gICAgfSxcbiAgICBmdWxsc2NyZWVuOiAge1xuICAgICAgY2xhc3NlczogJ2ZhIGZhLWFycm93cy1hbHQnLFxuICAgICAgdGV4dDogJ2Z1bGxzY3JlZW4nXG4gICAgfSxcbiAgICByZXNldDogIHtcbiAgICAgIGNsYXNzZXM6ICdmYSBmYS11bmRvJyxcbiAgICAgIHRleHQ6ICdyZXN0b3JlJ1xuICAgIH0sXG4gIH1cbn07XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYW5ndWxhci1pbWFnZS12aWV3ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYW5ndWxhci1pbWFnZS12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hbmd1bGFyLWltYWdlLXZpZXdlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJJbWFnZVZpZXdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKVxuICBzcmM6IHN0cmluZ1tdO1xuXG4gIEBJbnB1dCgpXG4gIHNjcmVlbkhlaWdodE9jY3VwaWVkOiAwOyAgICAgICAgICAgICAvLyBJbiBQeFxuXG4gIEBJbnB1dCgpXG4gIGluZGV4ID0gMDtcblxuICBASW5wdXQoKVxuICBjb25maWc6IEltYWdlVmlld2VyQ29uZmlnO1xuXG4gIEBPdXRwdXQoKVxuICBpbmRleENoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIGNvbmZpZ0NoYW5nZTogRXZlbnRFbWl0dGVyPEltYWdlVmlld2VyQ29uZmlnPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgY3VzdG9tSW1hZ2VFdmVudDogRXZlbnRFbWl0dGVyPEN1c3RvbUltYWdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHN0eWxlSGVpZ2h0ID0gJzEwMCUnO1xuXG4gIHB1YmxpYyBzdHlsZSA9IHsgdHJhbnNmb3JtOiAnJywgbXNUcmFuc2Zvcm06ICcnLCBvVHJhbnNmb3JtOiAnJywgd2Via2l0VHJhbnNmb3JtOiAnJyB9O1xuICBwdWJsaWMgZnVsbHNjcmVlbiA9IGZhbHNlO1xuICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gIHByaXZhdGUgc2NhbGUgPSAxO1xuICBwcml2YXRlIHJvdGF0aW9uID0gMDtcbiAgcHJpdmF0ZSB0cmFuc2xhdGVYID0gMDtcbiAgcHJpdmF0ZSB0cmFuc2xhdGVZID0gMDtcbiAgcHJpdmF0ZSBwcmV2WDogbnVtYmVyO1xuICBwcml2YXRlIHByZXZZOiBudW1iZXI7XG4gIHByaXZhdGUgaG92ZXJlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoJ2NvbmZpZycpIHB1YmxpYyBtb2R1bGVDb25maWc6IEltYWdlVmlld2VyQ29uZmlnLFxuICAgICAgICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7IH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuc2NyZWVuSGVpZ2h0T2NjdXBpZWQpIHtcbiAgICAgIHRoaXMuc3R5bGVIZWlnaHQgPSAnY2FsYygxMDAlIC0gJyArIHRoaXMuc2NyZWVuSGVpZ2h0T2NjdXBpZWQgKyAncHgpJztcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdTdHlsZSBIZWlnaHQ6JywgdGhpcy5zdHlsZUhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgbWVyZ2VkID0gdGhpcy5tZXJnZUNvbmZpZyhERUZBVUxUX0NPTkZJRywgdGhpcy5tb2R1bGVDb25maWcpO1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5tZXJnZUNvbmZpZyhtZXJnZWQsIHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnRyaWdnZXJDb25maWdCaW5kaW5nKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAuQXJyb3dSaWdodCcsIFsnJGV2ZW50J10pXG4gIG5leHRJbWFnZShldmVudCkge1xuICAgIGlmICh0aGlzLmNhbk5hdmlnYXRlKGV2ZW50KSAmJiB0aGlzLmluZGV4IDwgdGhpcy5zcmMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgIHRoaXMudHJpZ2dlckluZGV4QmluZGluZygpO1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cC5BcnJvd0xlZnQnLCBbJyRldmVudCddKVxuICBwcmV2SW1hZ2UoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5jYW5OYXZpZ2F0ZShldmVudCkgJiYgdGhpcy5pbmRleCA+IDApIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmluZGV4LS07XG4gICAgICB0aGlzLnRyaWdnZXJJbmRleEJpbmRpbmcoKTtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICB6b29tSW4oKSB7XG4gICAgdGhpcy5zY2FsZSAqPSAoMSArIHRoaXMuY29uZmlnLnpvb21GYWN0b3IpO1xuICAgIHRoaXMudXBkYXRlU3R5bGUoKTtcbiAgfVxuXG4gIHpvb21PdXQoKSB7XG4gICAgaWYgKHRoaXMuc2NhbGUgPiB0aGlzLmNvbmZpZy56b29tRmFjdG9yKSB7XG4gICAgICB0aGlzLnNjYWxlIC89ICgxICsgdGhpcy5jb25maWcuem9vbUZhY3Rvcik7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU3R5bGUoKTtcbiAgfVxuXG4gIHNjcm9sbFpvb20oZXZ0KSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLndoZWVsWm9vbSkge1xuICAgICAgZXZ0LmRlbHRhWSA+IDAgPyB0aGlzLnpvb21PdXQoKSA6IHRoaXMuem9vbUluKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcm90YXRlQ2xvY2t3aXNlKCkge1xuICAgIHRoaXMucm90YXRpb24gKz0gOTA7XG4gICAgdGhpcy51cGRhdGVTdHlsZSgpO1xuICB9XG5cbiAgcm90YXRlQ291bnRlckNsb2Nrd2lzZSgpIHtcbiAgICB0aGlzLnJvdGF0aW9uIC09IDkwO1xuICAgIHRoaXMudXBkYXRlU3R5bGUoKTtcbiAgfVxuXG4gIG9uTG9hZCh1cmwpIHtcbiAgICBjb25zb2xlLmxvZygnTG9hZGluZyBJbWFnZSBEb25lOicsIHVybCk7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBvbkxvYWRTdGFydCh1cmwpIHtcbiAgICBjb25zb2xlLmxvZygnTG9hZGluZyBJbWFnZTonLCB1cmwpO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gIH1cblxuICBpbWFnZU5vdEZvdW5kKHVybCkge1xuICAgIGNvbnNvbGUubG9nKCdJbWFnZSBub3QgZm91bmQgVXJsOicsIHVybCk7XG4gIH1cblxuICBvbkRyYWdPdmVyKGV2dCkge1xuICAgIHRoaXMudHJhbnNsYXRlWCArPSAoZXZ0LmNsaWVudFggLSB0aGlzLnByZXZYKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVkgKz0gKGV2dC5jbGllbnRZIC0gdGhpcy5wcmV2WSk7XG4gICAgdGhpcy5wcmV2WCA9IGV2dC5jbGllbnRYO1xuICAgIHRoaXMucHJldlkgPSBldnQuY2xpZW50WTtcbiAgICB0aGlzLnVwZGF0ZVN0eWxlKCk7XG4gIH1cblxuICBvbkRyYWdTdGFydChldnQpIHtcbiAgICBpZiAoZXZ0LmRhdGFUcmFuc2ZlciAmJiBldnQuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSkge1xuICAgICAgZXZ0LmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoZXZ0LnRhcmdldC5uZXh0RWxlbWVudFNpYmxpbmcsIDAsIDApO1xuICAgIH1cbiAgICB0aGlzLnByZXZYID0gZXZ0LmNsaWVudFg7XG4gICAgdGhpcy5wcmV2WSA9IGV2dC5jbGllbnRZO1xuICB9XG5cbiAgdG9nZ2xlRnVsbHNjcmVlbigpIHtcbiAgICB0aGlzLmZ1bGxzY3JlZW4gPSAhdGhpcy5mdWxsc2NyZWVuO1xuICAgIGlmICghdGhpcy5mdWxsc2NyZWVuKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgdHJpZ2dlckluZGV4QmluZGluZygpIHtcbiAgICB0aGlzLmluZGV4Q2hhbmdlLmVtaXQodGhpcy5pbmRleCk7XG4gIH1cblxuICB0cmlnZ2VyQ29uZmlnQmluZGluZygpIHtcbiAgICB0aGlzLmNvbmZpZ0NoYW5nZS5uZXh0KHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIGZpcmVDdXN0b21FdmVudChuYW1lLCBpbWFnZUluZGV4KSB7XG4gICAgdGhpcy5jdXN0b21JbWFnZUV2ZW50LmVtaXQobmV3IEN1c3RvbUltYWdlRXZlbnQobmFtZSwgaW1hZ2VJbmRleCkpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5zY2FsZSA9IDE7XG4gICAgdGhpcy5yb3RhdGlvbiA9IDA7XG4gICAgdGhpcy50cmFuc2xhdGVYID0gMDtcbiAgICB0aGlzLnRyYW5zbGF0ZVkgPSAwO1xuICAgIHRoaXMudXBkYXRlU3R5bGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlb3ZlcicpXG4gIG9uTW91c2VPdmVyKCkge1xuICAgIHRoaXMuaG92ZXJlZCA9IHRydWU7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJylcbiAgb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuaG92ZXJlZCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5OYXZpZ2F0ZShldmVudDogYW55KSB7XG4gICAgcmV0dXJuIGV2ZW50ID09IG51bGwgfHwgKHRoaXMuY29uZmlnLmFsbG93S2V5Ym9hcmROYXZpZ2F0aW9uICYmIHRoaXMuaG92ZXJlZCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0eWxlKCkge1xuICAgIHRoaXMuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3RoaXMudHJhbnNsYXRlWH1weCwgJHt0aGlzLnRyYW5zbGF0ZVl9cHgpIHJvdGF0ZSgke3RoaXMucm90YXRpb259ZGVnKSBzY2FsZSgke3RoaXMuc2NhbGV9KWA7XG4gICAgdGhpcy5zdHlsZS5tc1RyYW5zZm9ybSA9IHRoaXMuc3R5bGUudHJhbnNmb3JtO1xuICAgIHRoaXMuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gdGhpcy5zdHlsZS50cmFuc2Zvcm07XG4gICAgdGhpcy5zdHlsZS5vVHJhbnNmb3JtID0gdGhpcy5zdHlsZS50cmFuc2Zvcm07XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQ29uZmlnKGRlZmF1bHRWYWx1ZXM6IEltYWdlVmlld2VyQ29uZmlnLCBvdmVycmlkZVZhbHVlczogSW1hZ2VWaWV3ZXJDb25maWcpOiBJbWFnZVZpZXdlckNvbmZpZyB7XG4gICAgbGV0IHJlc3VsdDogSW1hZ2VWaWV3ZXJDb25maWcgPSB7IC4uLmRlZmF1bHRWYWx1ZXMgfTtcbiAgICBpZiAob3ZlcnJpZGVWYWx1ZXMpIHtcbiAgICAgIHJlc3VsdCA9IHsgLi4uZGVmYXVsdFZhbHVlcywgLi4ub3ZlcnJpZGVWYWx1ZXMgfTtcblxuICAgICAgaWYgKG92ZXJyaWRlVmFsdWVzLmJ0bkljb25zKSB7XG4gICAgICAgIHJlc3VsdC5idG5JY29ucyA9IHsgLi4uZGVmYXVsdFZhbHVlcy5idG5JY29ucywgLi4ub3ZlcnJpZGVWYWx1ZXMuYnRuSWNvbnMgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG59XG4iXX0= |
@@ -6,3 +6,3 @@ import { __assign, __decorate, __param } from "tslib"; | ||
var DEFAULT_CONFIG = { | ||
btnContainerClass: '', | ||
btnContainerClass: 'btn-container', | ||
btnClass: 'default', | ||
@@ -241,3 +241,3 @@ btnSubClass: 'material-icons', | ||
template: "<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>", | ||
styles: [".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative;bottom:15px}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"] | ||
styles: [".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"] | ||
}), | ||
@@ -249,2 +249,2 @@ __param(0, Optional()), __param(0, Inject('config')) | ||
export { AngularImageViewerComponent }; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1pbWFnZS12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhyZWltZXIvYW5ndWxhci1pbWFnZS12aWV3ZXIvIiwic291cmNlcyI6WyJsaWIvYW5ndWxhci1pbWFnZS12aWV3ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUV6SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHekQsSUFBTSxjQUFjLEdBQXNCO0lBQ3hDLGlCQUFpQixFQUFFLEVBQUU7SUFDckIsUUFBUSxFQUFFLFNBQVM7SUFDbkIsV0FBVyxFQUFFLGdCQUFnQjtJQUM3QixVQUFVLEVBQUUsR0FBRztJQUNmLHdCQUF3QixFQUFFLE1BQU07SUFDaEMsU0FBUyxFQUFFLEtBQUs7SUFDaEIsZUFBZSxFQUFFLElBQUk7SUFDckIsdUJBQXVCLEVBQUUsSUFBSTtJQUM3QixPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsZUFBZSxFQUFFLElBQUk7UUFDckIsc0JBQXNCLEVBQUUsSUFBSTtRQUM1QixJQUFJLEVBQUUsSUFBSTtRQUNWLElBQUksRUFBRSxJQUFJO1FBQ1YsS0FBSyxFQUFFLElBQUk7S0FDWjtJQUNELFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRTtZQUNOLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLElBQUksRUFBRSxTQUFTO1NBQ2hCO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsT0FBTyxFQUFFLGFBQWE7WUFDdEIsSUFBSSxFQUFFLFVBQVU7U0FDakI7UUFDRCxlQUFlLEVBQUc7WUFDaEIsT0FBTyxF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RDtRQURDLFlBQVksQ0FBQyxXQUFXLENBQUM7a0VBR3pCO0lBR0Q7UUFEQyxZQUFZLENBQUMsWUFBWSxDQUFDO21FQUcxQjtJQXRLVSwyQkFBMkI7UUFMdkMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLHNCQUFzQjtZQUNoQyw4bU1BQW9EOztTQUVyRCxDQUFDO1FBcUNhLFdBQUEsUUFBUSxFQUFFLENBQUEsRUFBRSxXQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtPQXBDOUIsMkJBQTJCLENBK0x2QztJQUFELGtDQUFDO0NBQUEsQUEvTEQsSUErTEM7U0EvTFksMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEhvc3RMaXN0ZW5lciwgT3B0aW9uYWwsIEluamVjdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEltYWdlVmlld2VyQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvaW1hZ2Utdmlld2VyLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBDdXN0b21JbWFnZUV2ZW50IH0gZnJvbSAnLi9tb2RlbHMvY3VzdG9tLWltYWdlLWV2ZW50LW1vZGVsJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5cbmNvbnN0IERFRkFVTFRfQ09ORklHOiBJbWFnZVZpZXdlckNvbmZpZyA9IHtcbiAgYnRuQ29udGFpbmVyQ2xhc3M6ICcnLFxuICBidG5DbGFzczogJ2RlZmF1bHQnLFxuICBidG5TdWJDbGFzczogJ21hdGVyaWFsLWljb25zJyxcbiAgem9vbUZhY3RvcjogMC4xLFxuICBjb250YWluZXJCYWNrZ3JvdW5kQ29sb3I6ICcjY2NjJyxcbiAgd2hlZWxab29tOiBmYWxzZSxcbiAgYWxsb3dGdWxsc2NyZWVuOiB0cnVlLFxuICBhbGxvd0tleWJvYXJkTmF2aWdhdGlvbjogdHJ1ZSxcbiAgYnRuU2hvdzoge1xuICAgIHpvb21JbjogdHJ1ZSxcbiAgICB6b29tT3V0OiB0cnVlLFxuICAgIHJvdGF0ZUNsb2Nrd2lzZTogdHJ1ZSxcbiAgICByb3RhdGVDb3VudGVyQ2xvY2t3aXNlOiB0cnVlLFxuICAgIG5leHQ6IHRydWUsXG4gICAgcHJldjogdHJ1ZSxcbiAgICByZXNldDogdHJ1ZVxuICB9LFxuICBidG5JY29uczoge1xuICAgIHpvb21Jbjoge1xuICAgICAgY2xhc3NlczogJ2ZhIGZhLXBsdXMnLFxuICAgICAgdGV4dDogJ3pvb21faW4nXG4gICAgfSxcbiAgICB6b29tT3V0OiB7XG4gICAgICBjbGFzc2VzOiAnZmEgZmEtbWludXMnLFxuICAgICAgdGV4dDogJ3pvb21fb3V0J1xuICAgIH0sXG4gICAgcm90YXRlQ2xvY2t3aXNlOiAge1xuICAgICAgY2xhc3NlczogJ2ZhIGZhLXJlcGVhdCcsXG4gICAgICB0ZXh0OiAncm90YXRlX3JpZ2h0J1xuICAgIH0sXG4gICAgcm90YXRlQ291bnRlckNsb2Nrd2lzZTogIHtcbiAgICAgIGNsYXNzZXM6ICdmYSBmYS11bmRvJyxcbiAgICAgIHRleHQ6ICdyb3RhdGVfbGVmdCdcbiAgICB9LFxuICAgIG5leHQ6ICB7XG4gICAgICBjbGFzc2VzOiAnZmEgZmEtYXJyb3ctcmlnaHQnLFxuICAgICAgdGV4dDogJ2Fycm93X3JpZ2h0J1xuICAgIH0sXG4gICAgcHJldjogIHtcbiAgICAgIGNsYXNzZXM6ICdmYSBmYS1hcnJvdy1sZWZ0JyxcbiAgICAgIHRleHQ6ICdhcnJvd19sZWZ0J1xuICAgIH0sXG4gICAgZnVsbHNjcmVlbjogIHtcbiAgICAgIGNsYXNzZXM6ICdmYSBmYS1hcnJvd3MtYWx0JyxcbiAgICAgIHRleHQ6ICdmdWxsc2NyZWVuJ1xuICAgIH0sXG4gICAgcmVzZXQ6ICB7XG4gICAgICBjbGFzc2VzOiAnZmEgZmEtdW5kbycsXG4gICAgICB0ZXh0OiAncmVzdG9yZSdcbiAgICB9LFxuICB9XG59O1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FuZ3VsYXItaW1hZ2Utdmlld2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FuZ3VsYXItaW1hZ2Utdmlld2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYW5ndWxhci1pbWFnZS12aWV3ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBBbmd1bGFySW1hZ2VWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KClcbiAgc3JjOiBzdHJpbmdbXTtcblxuICBASW5wdXQoKVxuICBzY3JlZW5IZWlnaHRPY2N1cGllZDogMDsgICAgICAgICAgICAgLy8gSW4gUHhcblxuICBASW5wdXQoKVxuICBpbmRleCA9IDA7XG5cbiAgQElucHV0KClcbiAgY29uZmlnOiBJbWFnZVZpZXdlckNvbmZpZztcblxuICBAT3V0cHV0KClcbiAgaW5kZXhDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBjb25maWdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJbWFnZVZpZXdlckNvbmZpZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIGN1c3RvbUltYWdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxDdXN0b21JbWFnZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBzdHlsZUhlaWdodCA9ICcxMDAlJztcblxuICBwdWJsaWMgc3R5bGUgPSB7IHRyYW5zZm9ybTogJycsIG1zVHJhbnNmb3JtOiAnJywgb1RyYW5zZm9ybTogJycsIHdlYmtpdFRyYW5zZm9ybTogJycgfTtcbiAgcHVibGljIGZ1bGxzY3JlZW4gPSBmYWxzZTtcbiAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuICBwcml2YXRlIHNjYWxlID0gMTtcbiAgcHJpdmF0ZSByb3RhdGlvbiA9IDA7XG4gIHByaXZhdGUgdHJhbnNsYXRlWCA9IDA7XG4gIHByaXZhdGUgdHJhbnNsYXRlWSA9IDA7XG4gIHByaXZhdGUgcHJldlg6IG51bWJlcjtcbiAgcHJpdmF0ZSBwcmV2WTogbnVtYmVyO1xuICBwcml2YXRlIGhvdmVyZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KCdjb25maWcnKSBwdWJsaWMgbW9kdWxlQ29uZmlnOiBJbWFnZVZpZXdlckNvbmZpZyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikgeyB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLnNjcmVlbkhlaWdodE9jY3VwaWVkKSB7XG4gICAgICB0aGlzLnN0eWxlSGVpZ2h0ID0gJ2NhbGMoMTAwJSAtICcgKyB0aGlzLnNjcmVlbkhlaWdodE9jY3VwaWVkICsgJ3B4KSc7XG4gICAgICAvLyBjb25zb2xlLmxvZygnU3R5bGUgSGVpZ2h0OicsIHRoaXMuc3R5bGVIZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IG1lcmdlZCA9IHRoaXMubWVyZ2VDb25maWcoREVGQVVMVF9DT05GSUcsIHRoaXMubW9kdWxlQ29uZmlnKTtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMubWVyZ2VDb25maWcobWVyZ2VkLCB0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy50cmlnZ2VyQ29uZmlnQmluZGluZygpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwLkFycm93UmlnaHQnLCBbJyRldmVudCddKVxuICBuZXh0SW1hZ2UoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5jYW5OYXZpZ2F0ZShldmVudCkgJiYgdGhpcy5pbmRleCA8IHRoaXMuc3JjLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmluZGV4Kys7XG4gICAgICB0aGlzLnRyaWdnZXJJbmRleEJpbmRpbmcoKTtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAuQXJyb3dMZWZ0JywgWyckZXZlbnQnXSlcbiAgcHJldkltYWdlKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuY2FuTmF2aWdhdGUoZXZlbnQpICYmIHRoaXMuaW5kZXggPiAwKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5pbmRleC0tO1xuICAgICAgdGhpcy50cmlnZ2VySW5kZXhCaW5kaW5nKCk7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgem9vbUluKCkge1xuICAgIHRoaXMuc2NhbGUgKj0gKDEgKyB0aGlzLmNvbmZpZy56b29tRmFjdG9yKTtcbiAgICB0aGlzLnVwZGF0ZVN0eWxlKCk7XG4gIH1cblxuICB6b29tT3V0KCkge1xuICAgIGlmICh0aGlzLnNjYWxlID4gdGhpcy5jb25maWcuem9vbUZhY3Rvcikge1xuICAgICAgdGhpcy5zY2FsZSAvPSAoMSArIHRoaXMuY29uZmlnLnpvb21GYWN0b3IpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVN0eWxlKCk7XG4gIH1cblxuICBzY3JvbGxab29tKGV2dCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy53aGVlbFpvb20pIHtcbiAgICAgIGV2dC5kZWx0YVkgPiAwID8gdGhpcy56b29tT3V0KCkgOiB0aGlzLnpvb21JbigpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJvdGF0ZUNsb2Nrd2lzZSgpIHtcbiAgICB0aGlzLnJvdGF0aW9uICs9IDkwO1xuICAgIHRoaXMudXBkYXRlU3R5bGUoKTtcbiAgfVxuXG4gIHJvdGF0ZUNvdW50ZXJDbG9ja3dpc2UoKSB7XG4gICAgdGhpcy5yb3RhdGlvbiAtPSA5MDtcbiAgICB0aGlzLnVwZGF0ZVN0eWxlKCk7XG4gIH1cblxuICBvbkxvYWQodXJsKSB7XG4gICAgY29uc29sZS5sb2coJ0xvYWRpbmcgSW1hZ2UgRG9uZTonLCB1cmwpO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgb25Mb2FkU3RhcnQodXJsKSB7XG4gICAgY29uc29sZS5sb2coJ0xvYWRpbmcgSW1hZ2U6JywgdXJsKTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICB9XG5cbiAgaW1hZ2VOb3RGb3VuZCh1cmwpIHtcbiAgICBjb25zb2xlLmxvZygnSW1hZ2Ugbm90IGZvdW5kIFVybDonLCB1cmwpO1xuICB9XG5cbiAgb25EcmFnT3ZlcihldnQpIHtcbiAgICB0aGlzLnRyYW5zbGF0ZVggKz0gKGV2dC5jbGllbnRYIC0gdGhpcy5wcmV2WCk7XG4gICAgdGhpcy50cmFuc2xhdGVZICs9IChldnQuY2xpZW50WSAtIHRoaXMucHJldlkpO1xuICAgIHRoaXMucHJldlggPSBldnQuY2xpZW50WDtcbiAgICB0aGlzLnByZXZZID0gZXZ0LmNsaWVudFk7XG4gICAgdGhpcy51cGRhdGVTdHlsZSgpO1xuICB9XG5cbiAgb25EcmFnU3RhcnQoZXZ0KSB7XG4gICAgaWYgKGV2dC5kYXRhVHJhbnNmZXIgJiYgZXZ0LmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UpIHtcbiAgICAgIGV2dC5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGV2dC50YXJnZXQubmV4dEVsZW1lbnRTaWJsaW5nLCAwLCAwKTtcbiAgICB9XG4gICAgdGhpcy5wcmV2WCA9IGV2dC5jbGllbnRYO1xuICAgIHRoaXMucHJldlkgPSBldnQuY2xpZW50WTtcbiAgfVxuXG4gIHRvZ2dsZUZ1bGxzY3JlZW4oKSB7XG4gICAgdGhpcy5mdWxsc2NyZWVuID0gIXRoaXMuZnVsbHNjcmVlbjtcbiAgICBpZiAoIXRoaXMuZnVsbHNjcmVlbikge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIHRyaWdnZXJJbmRleEJpbmRpbmcoKSB7XG4gICAgdGhpcy5pbmRleENoYW5nZS5lbWl0KHRoaXMuaW5kZXgpO1xuICB9XG5cbiAgdHJpZ2dlckNvbmZpZ0JpbmRpbmcoKSB7XG4gICAgdGhpcy5jb25maWdDaGFuZ2UubmV4dCh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBmaXJlQ3VzdG9tRXZlbnQobmFtZSwgaW1hZ2VJbmRleCkge1xuICAgIHRoaXMuY3VzdG9tSW1hZ2VFdmVudC5lbWl0KG5ldyBDdXN0b21JbWFnZUV2ZW50KG5hbWUsIGltYWdlSW5kZXgpKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuc2NhbGUgPSAxO1xuICAgIHRoaXMucm90YXRpb24gPSAwO1xuICAgIHRoaXMudHJhbnNsYXRlWCA9IDA7XG4gICAgdGhpcy50cmFuc2xhdGVZID0gMDtcbiAgICB0aGlzLnVwZGF0ZVN0eWxlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZW92ZXInKVxuICBvbk1vdXNlT3ZlcigpIHtcbiAgICB0aGlzLmhvdmVyZWQgPSB0cnVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gIG9uTW91c2VMZWF2ZSgpIHtcbiAgICB0aGlzLmhvdmVyZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuTmF2aWdhdGUoZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiBldmVudCA9PSBudWxsIHx8ICh0aGlzLmNvbmZpZy5hbGxvd0tleWJvYXJkTmF2aWdhdGlvbiAmJiB0aGlzLmhvdmVyZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdHlsZSgpIHtcbiAgICB0aGlzLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHt0aGlzLnRyYW5zbGF0ZVh9cHgsICR7dGhpcy50cmFuc2xhdGVZfXB4KSByb3RhdGUoJHt0aGlzLnJvdGF0aW9ufWRlZykgc2NhbGUoJHt0aGlzLnNjYWxlfSlgO1xuICAgIHRoaXMuc3R5bGUubXNUcmFuc2Zvcm0gPSB0aGlzLnN0eWxlLnRyYW5zZm9ybTtcbiAgICB0aGlzLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHRoaXMuc3R5bGUudHJhbnNmb3JtO1xuICAgIHRoaXMuc3R5bGUub1RyYW5zZm9ybSA9IHRoaXMuc3R5bGUudHJhbnNmb3JtO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZUNvbmZpZyhkZWZhdWx0VmFsdWVzOiBJbWFnZVZpZXdlckNvbmZpZywgb3ZlcnJpZGVWYWx1ZXM6IEltYWdlVmlld2VyQ29uZmlnKTogSW1hZ2VWaWV3ZXJDb25maWcge1xuICAgIGxldCByZXN1bHQ6IEltYWdlVmlld2VyQ29uZmlnID0geyAuLi5kZWZhdWx0VmFsdWVzIH07XG4gICAgaWYgKG92ZXJyaWRlVmFsdWVzKSB7XG4gICAgICByZXN1bHQgPSB7IC4uLmRlZmF1bHRWYWx1ZXMsIC4uLm92ZXJyaWRlVmFsdWVzIH07XG5cbiAgICAgIGlmIChvdmVycmlkZVZhbHVlcy5idG5JY29ucykge1xuICAgICAgICByZXN1bHQuYnRuSWNvbnMgPSB7IC4uLmRlZmF1bHRWYWx1ZXMuYnRuSWNvbnMsIC4uLm92ZXJyaWRlVmFsdWVzLmJ0bkljb25zIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxufVxuIl19 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1pbWFnZS12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhyZWltZXIvYW5ndWxhci1pbWFnZS12aWV3ZXIvIiwic291cmNlcyI6WyJsaWIvYW5ndWxhci1pbWFnZS12aWV3ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUV6SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHekQsSUFBTSxjQUFjLEdBQXNCO0lBQ3hDLGlCQUFpQixFQUFFLGVBQWU7SUFDbEMsUUFBUSxFQUFFLFNBQVM7SUFDbkIsV0FBVyxFQUFFLGdCQUFnQjtJQUM3QixVQUFVLEVBQUUsR0FBRztJQUNmLHdCQUF3QixFQUFFLE1BQU07SUFDaEMsU0FBUyxFQUFFLEtBQUs7SUFDaEIsZUFBZSxFQUFFLElBQUk7SUFDckIsdUJBQXVCLEVBQUUsSUFBSTtJQUM3QixPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsZUFBZSxFQUFFLElBQUk7UUFDckIsc0JBQXNCLEVBQUUsSUFBSTtRQUM1QixJQUFJLEVBQUUsSUFBSTtRQUNWLElBQUksRUFBRSxJQUFJO1FBQ1YsS0FBSyxFQUFFLElBQUk7S0FDWjtJQUNELFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRTtZQUNOLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLElBQUksRUFBRSxTQUFTO1NBQ2hCO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsT0FBTyxFQUFFLGFBQWE7WUFDdEIsSUFBSSxFQUFFLFVBQVU7U0FDakI7UUFDRCxlQUFlLEVBQUc7WUFDaEIsT0FBTyxF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RDtRQURDLFlBQVksQ0FBQyxXQUFXLENBQUM7a0VBR3pCO0lBR0Q7UUFEQyxZQUFZLENBQUMsWUFBWSxDQUFDO21FQUcxQjtJQXRLVSwyQkFBMkI7UUFMdkMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLHNCQUFzQjtZQUNoQyw4bU1BQW9EOztTQUVyRCxDQUFDO1FBcUNhLFdBQUEsUUFBUSxFQUFFLENBQUEsRUFBRSxXQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtPQXBDOUIsMkJBQTJCLENBK0x2QztJQUFELGtDQUFDO0NBQUEsQUEvTEQsSUErTEM7U0EvTFksMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEhvc3RMaXN0ZW5lciwgT3B0aW9uYWwsIEluamVjdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEltYWdlVmlld2VyQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvaW1hZ2Utdmlld2VyLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBDdXN0b21JbWFnZUV2ZW50IH0gZnJvbSAnLi9tb2RlbHMvY3VzdG9tLWltYWdlLWV2ZW50LW1vZGVsJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5cbmNvbnN0IERFRkFVTFRfQ09ORklHOiBJbWFnZVZpZXdlckNvbmZpZyA9IHtcbiAgYnRuQ29udGFpbmVyQ2xhc3M6ICdidG4tY29udGFpbmVyJyxcbiAgYnRuQ2xhc3M6ICdkZWZhdWx0JyxcbiAgYnRuU3ViQ2xhc3M6ICdtYXRlcmlhbC1pY29ucycsXG4gIHpvb21GYWN0b3I6IDAuMSxcbiAgY29udGFpbmVyQmFja2dyb3VuZENvbG9yOiAnI2NjYycsXG4gIHdoZWVsWm9vbTogZmFsc2UsXG4gIGFsbG93RnVsbHNjcmVlbjogdHJ1ZSxcbiAgYWxsb3dLZXlib2FyZE5hdmlnYXRpb246IHRydWUsXG4gIGJ0blNob3c6IHtcbiAgICB6b29tSW46IHRydWUsXG4gICAgem9vbU91dDogdHJ1ZSxcbiAgICByb3RhdGVDbG9ja3dpc2U6IHRydWUsXG4gICAgcm90YXRlQ291bnRlckNsb2Nrd2lzZTogdHJ1ZSxcbiAgICBuZXh0OiB0cnVlLFxuICAgIHByZXY6IHRydWUsXG4gICAgcmVzZXQ6IHRydWVcbiAgfSxcbiAgYnRuSWNvbnM6IHtcbiAgICB6b29tSW46IHtcbiAgICAgIGNsYXNzZXM6ICdmYSBmYS1wbHVzJyxcbiAgICAgIHRleHQ6ICd6b29tX2luJ1xuICAgIH0sXG4gICAgem9vbU91dDoge1xuICAgICAgY2xhc3NlczogJ2ZhIGZhLW1pbnVzJyxcbiAgICAgIHRleHQ6ICd6b29tX291dCdcbiAgICB9LFxuICAgIHJvdGF0ZUNsb2Nrd2lzZTogIHtcbiAgICAgIGNsYXNzZXM6ICdmYSBmYS1yZXBlYXQnLFxuICAgICAgdGV4dDogJ3JvdGF0ZV9yaWdodCdcbiAgICB9LFxuICAgIHJvdGF0ZUNvdW50ZXJDbG9ja3dpc2U6ICB7XG4gICAgICBjbGFzc2VzOiAnZmEgZmEtdW5kbycsXG4gICAgICB0ZXh0OiAncm90YXRlX2xlZnQnXG4gICAgfSxcbiAgICBuZXh0OiAge1xuICAgICAgY2xhc3NlczogJ2ZhIGZhLWFycm93LXJpZ2h0JyxcbiAgICAgIHRleHQ6ICdhcnJvd19yaWdodCdcbiAgICB9LFxuICAgIHByZXY6ICB7XG4gICAgICBjbGFzc2VzOiAnZmEgZmEtYXJyb3ctbGVmdCcsXG4gICAgICB0ZXh0OiAnYXJyb3dfbGVmdCdcbiAgICB9LFxuICAgIGZ1bGxzY3JlZW46ICB7XG4gICAgICBjbGFzc2VzOiAnZmEgZmEtYXJyb3dzLWFsdCcsXG4gICAgICB0ZXh0OiAnZnVsbHNjcmVlbidcbiAgICB9LFxuICAgIHJlc2V0OiAge1xuICAgICAgY2xhc3NlczogJ2ZhIGZhLXVuZG8nLFxuICAgICAgdGV4dDogJ3Jlc3RvcmUnXG4gICAgfSxcbiAgfVxufTtcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhbmd1bGFyLWltYWdlLXZpZXdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbmd1bGFyLWltYWdlLXZpZXdlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FuZ3VsYXItaW1hZ2Utdmlld2VyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhckltYWdlVmlld2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpXG4gIHNyYzogc3RyaW5nW107XG5cbiAgQElucHV0KClcbiAgc2NyZWVuSGVpZ2h0T2NjdXBpZWQ6IDA7ICAgICAgICAgICAgIC8vIEluIFB4XG5cbiAgQElucHV0KClcbiAgaW5kZXggPSAwO1xuXG4gIEBJbnB1dCgpXG4gIGNvbmZpZzogSW1hZ2VWaWV3ZXJDb25maWc7XG5cbiAgQE91dHB1dCgpXG4gIGluZGV4Q2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgY29uZmlnQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SW1hZ2VWaWV3ZXJDb25maWc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBjdXN0b21JbWFnZUV2ZW50OiBFdmVudEVtaXR0ZXI8Q3VzdG9tSW1hZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgc3R5bGVIZWlnaHQgPSAnMTAwJSc7XG5cbiAgcHVibGljIHN0eWxlID0geyB0cmFuc2Zvcm06ICcnLCBtc1RyYW5zZm9ybTogJycsIG9UcmFuc2Zvcm06ICcnLCB3ZWJraXRUcmFuc2Zvcm06ICcnIH07XG4gIHB1YmxpYyBmdWxsc2NyZWVuID0gZmFsc2U7XG4gIHB1YmxpYyBsb2FkaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzY2FsZSA9IDE7XG4gIHByaXZhdGUgcm90YXRpb24gPSAwO1xuICBwcml2YXRlIHRyYW5zbGF0ZVggPSAwO1xuICBwcml2YXRlIHRyYW5zbGF0ZVkgPSAwO1xuICBwcml2YXRlIHByZXZYOiBudW1iZXI7XG4gIHByaXZhdGUgcHJldlk6IG51bWJlcjtcbiAgcHJpdmF0ZSBob3ZlcmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdCgnY29uZmlnJykgcHVibGljIG1vZHVsZUNvbmZpZzogSW1hZ2VWaWV3ZXJDb25maWcsXG4gICAgICAgICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5zY3JlZW5IZWlnaHRPY2N1cGllZCkge1xuICAgICAgdGhpcy5zdHlsZUhlaWdodCA9ICdjYWxjKDEwMCUgLSAnICsgdGhpcy5zY3JlZW5IZWlnaHRPY2N1cGllZCArICdweCknO1xuICAgICAgLy8gY29uc29sZS5sb2coJ1N0eWxlIEhlaWdodDonLCB0aGlzLnN0eWxlSGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBtZXJnZWQgPSB0aGlzLm1lcmdlQ29uZmlnKERFRkFVTFRfQ09ORklHLCB0aGlzLm1vZHVsZUNvbmZpZyk7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLm1lcmdlQ29uZmlnKG1lcmdlZCwgdGhpcy5jb25maWcpO1xuICAgIHRoaXMudHJpZ2dlckNvbmZpZ0JpbmRpbmcoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXl1cC5BcnJvd1JpZ2h0JywgWyckZXZlbnQnXSlcbiAgbmV4dEltYWdlKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuY2FuTmF2aWdhdGUoZXZlbnQpICYmIHRoaXMuaW5kZXggPCB0aGlzLnNyYy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgdGhpcy50cmlnZ2VySW5kZXhCaW5kaW5nKCk7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwLkFycm93TGVmdCcsIFsnJGV2ZW50J10pXG4gIHByZXZJbWFnZShldmVudCkge1xuICAgIGlmICh0aGlzLmNhbk5hdmlnYXRlKGV2ZW50KSAmJiB0aGlzLmluZGV4ID4gMCkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuaW5kZXgtLTtcbiAgICAgIHRoaXMudHJpZ2dlckluZGV4QmluZGluZygpO1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIHpvb21JbigpIHtcbiAgICB0aGlzLnNjYWxlICo9ICgxICsgdGhpcy5jb25maWcuem9vbUZhY3Rvcik7XG4gICAgdGhpcy51cGRhdGVTdHlsZSgpO1xuICB9XG5cbiAgem9vbU91dCgpIHtcbiAgICBpZiAodGhpcy5zY2FsZSA+IHRoaXMuY29uZmlnLnpvb21GYWN0b3IpIHtcbiAgICAgIHRoaXMuc2NhbGUgLz0gKDEgKyB0aGlzLmNvbmZpZy56b29tRmFjdG9yKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTdHlsZSgpO1xuICB9XG5cbiAgc2Nyb2xsWm9vbShldnQpIHtcbiAgICBpZiAodGhpcy5jb25maWcud2hlZWxab29tKSB7XG4gICAgICBldnQuZGVsdGFZID4gMCA/IHRoaXMuem9vbU91dCgpIDogdGhpcy56b29tSW4oKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByb3RhdGVDbG9ja3dpc2UoKSB7XG4gICAgdGhpcy5yb3RhdGlvbiArPSA5MDtcbiAgICB0aGlzLnVwZGF0ZVN0eWxlKCk7XG4gIH1cblxuICByb3RhdGVDb3VudGVyQ2xvY2t3aXNlKCkge1xuICAgIHRoaXMucm90YXRpb24gLT0gOTA7XG4gICAgdGhpcy51cGRhdGVTdHlsZSgpO1xuICB9XG5cbiAgb25Mb2FkKHVybCkge1xuICAgIGNvbnNvbGUubG9nKCdMb2FkaW5nIEltYWdlIERvbmU6JywgdXJsKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG9uTG9hZFN0YXJ0KHVybCkge1xuICAgIGNvbnNvbGUubG9nKCdMb2FkaW5nIEltYWdlOicsIHVybCk7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIGltYWdlTm90Rm91bmQodXJsKSB7XG4gICAgY29uc29sZS5sb2coJ0ltYWdlIG5vdCBmb3VuZCBVcmw6JywgdXJsKTtcbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZ0KSB7XG4gICAgdGhpcy50cmFuc2xhdGVYICs9IChldnQuY2xpZW50WCAtIHRoaXMucHJldlgpO1xuICAgIHRoaXMudHJhbnNsYXRlWSArPSAoZXZ0LmNsaWVudFkgLSB0aGlzLnByZXZZKTtcbiAgICB0aGlzLnByZXZYID0gZXZ0LmNsaWVudFg7XG4gICAgdGhpcy5wcmV2WSA9IGV2dC5jbGllbnRZO1xuICAgIHRoaXMudXBkYXRlU3R5bGUoKTtcbiAgfVxuXG4gIG9uRHJhZ1N0YXJ0KGV2dCkge1xuICAgIGlmIChldnQuZGF0YVRyYW5zZmVyICYmIGV2dC5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKSB7XG4gICAgICBldnQuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShldnQudGFyZ2V0Lm5leHRFbGVtZW50U2libGluZywgMCwgMCk7XG4gICAgfVxuICAgIHRoaXMucHJldlggPSBldnQuY2xpZW50WDtcbiAgICB0aGlzLnByZXZZID0gZXZ0LmNsaWVudFk7XG4gIH1cblxuICB0b2dnbGVGdWxsc2NyZWVuKCkge1xuICAgIHRoaXMuZnVsbHNjcmVlbiA9ICF0aGlzLmZ1bGxzY3JlZW47XG4gICAgaWYgKCF0aGlzLmZ1bGxzY3JlZW4pIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICB0cmlnZ2VySW5kZXhCaW5kaW5nKCkge1xuICAgIHRoaXMuaW5kZXhDaGFuZ2UuZW1pdCh0aGlzLmluZGV4KTtcbiAgfVxuXG4gIHRyaWdnZXJDb25maWdCaW5kaW5nKCkge1xuICAgIHRoaXMuY29uZmlnQ2hhbmdlLm5leHQodGhpcy5jb25maWcpO1xuICB9XG5cbiAgZmlyZUN1c3RvbUV2ZW50KG5hbWUsIGltYWdlSW5kZXgpIHtcbiAgICB0aGlzLmN1c3RvbUltYWdlRXZlbnQuZW1pdChuZXcgQ3VzdG9tSW1hZ2VFdmVudChuYW1lLCBpbWFnZUluZGV4KSk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnNjYWxlID0gMTtcbiAgICB0aGlzLnJvdGF0aW9uID0gMDtcbiAgICB0aGlzLnRyYW5zbGF0ZVggPSAwO1xuICAgIHRoaXMudHJhbnNsYXRlWSA9IDA7XG4gICAgdGhpcy51cGRhdGVTdHlsZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VvdmVyJylcbiAgb25Nb3VzZU92ZXIoKSB7XG4gICAgdGhpcy5ob3ZlcmVkID0gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgdGhpcy5ob3ZlcmVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNhbk5hdmlnYXRlKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gZXZlbnQgPT0gbnVsbCB8fCAodGhpcy5jb25maWcuYWxsb3dLZXlib2FyZE5hdmlnYXRpb24gJiYgdGhpcy5ob3ZlcmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3R5bGUoKSB7XG4gICAgdGhpcy5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7dGhpcy50cmFuc2xhdGVYfXB4LCAke3RoaXMudHJhbnNsYXRlWX1weCkgcm90YXRlKCR7dGhpcy5yb3RhdGlvbn1kZWcpIHNjYWxlKCR7dGhpcy5zY2FsZX0pYDtcbiAgICB0aGlzLnN0eWxlLm1zVHJhbnNmb3JtID0gdGhpcy5zdHlsZS50cmFuc2Zvcm07XG4gICAgdGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB0aGlzLnN0eWxlLnRyYW5zZm9ybTtcbiAgICB0aGlzLnN0eWxlLm9UcmFuc2Zvcm0gPSB0aGlzLnN0eWxlLnRyYW5zZm9ybTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VDb25maWcoZGVmYXVsdFZhbHVlczogSW1hZ2VWaWV3ZXJDb25maWcsIG92ZXJyaWRlVmFsdWVzOiBJbWFnZVZpZXdlckNvbmZpZyk6IEltYWdlVmlld2VyQ29uZmlnIHtcbiAgICBsZXQgcmVzdWx0OiBJbWFnZVZpZXdlckNvbmZpZyA9IHsgLi4uZGVmYXVsdFZhbHVlcyB9O1xuICAgIGlmIChvdmVycmlkZVZhbHVlcykge1xuICAgICAgcmVzdWx0ID0geyAuLi5kZWZhdWx0VmFsdWVzLCAuLi5vdmVycmlkZVZhbHVlcyB9O1xuXG4gICAgICBpZiAob3ZlcnJpZGVWYWx1ZXMuYnRuSWNvbnMpIHtcbiAgICAgICAgcmVzdWx0LmJ0bkljb25zID0geyAuLi5kZWZhdWx0VmFsdWVzLmJ0bkljb25zLCAuLi5vdmVycmlkZVZhbHVlcy5idG5JY29ucyB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbn1cbiJdfQ== |
@@ -16,3 +16,3 @@ import { __decorate, __param } from 'tslib'; | ||
const DEFAULT_CONFIG = { | ||
btnContainerClass: '', | ||
btnContainerClass: 'btn-container', | ||
btnClass: 'default', | ||
@@ -252,3 +252,3 @@ btnSubClass: 'material-icons', | ||
template: "<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>", | ||
styles: [".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative;bottom:15px}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"] | ||
styles: [".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"] | ||
}), | ||
@@ -255,0 +255,0 @@ __param(0, Optional()), __param(0, Inject('config')) |
@@ -17,3 +17,3 @@ import { __assign, __decorate, __param } from 'tslib'; | ||
var DEFAULT_CONFIG = { | ||
btnContainerClass: '', | ||
btnContainerClass: 'btn-container', | ||
btnClass: 'default', | ||
@@ -252,3 +252,3 @@ btnSubClass: 'material-icons', | ||
template: "<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>", | ||
styles: [".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative;bottom:15px}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"] | ||
styles: [".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"] | ||
}), | ||
@@ -255,0 +255,0 @@ __param(0, Optional()), __param(0, Inject('config')) |
@@ -1,1 +0,1 @@ | ||
{"__symbolic":"module","version":4,"metadata":{"AngularImageViewerModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":11,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"AngularImageViewerComponent"},{"__symbolic":"reference","name":"FullScreenDirective"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":14,"character":4},{"__symbolic":"reference","module":"@angular/platform-browser","name":"BrowserModule","line":15,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":16,"character":4},{"__symbolic":"reference","module":"@angular/platform-browser/animations","name":"BrowserAnimationsModule","line":17,"character":4}],"exports":[{"__symbolic":"reference","name":"AngularImageViewerComponent"},{"__symbolic":"reference","name":"FullScreenDirective"}]}]}],"members":{}},"AngularImageViewerComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":61,"character":1},"arguments":[{"selector":"angular-image-viewer","template":"<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>","styles":[".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative;bottom:15px}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"]}]}],"members":{"src":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":68,"character":3}}]}],"screenHeightOccupied":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":71,"character":3}}]}],"index":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":74,"character":3}}]}],"config":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"indexChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":80,"character":3}}]}],"configChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":83,"character":3}}]}],"customImageEvent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":86,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":102,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":102,"character":27},"arguments":["config"]}],null],"parameters":[{"__symbolic":"reference","name":"ImageViewerConfig"},{"__symbolic":"reference","module":"@angular/platform-browser","name":"DomSanitizer","line":103,"character":33}]}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"nextImage":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":118,"character":3},"arguments":["window:keyup.ArrowRight",["$event"]]}]}],"prevImage":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":128,"character":3},"arguments":["window:keyup.ArrowLeft",["$event"]]}]}],"zoomIn":[{"__symbolic":"method"}],"zoomOut":[{"__symbolic":"method"}],"scrollZoom":[{"__symbolic":"method"}],"rotateClockwise":[{"__symbolic":"method"}],"rotateCounterClockwise":[{"__symbolic":"method"}],"onLoad":[{"__symbolic":"method"}],"onLoadStart":[{"__symbolic":"method"}],"imageNotFound":[{"__symbolic":"method"}],"onDragOver":[{"__symbolic":"method"}],"onDragStart":[{"__symbolic":"method"}],"toggleFullscreen":[{"__symbolic":"method"}],"triggerIndexBinding":[{"__symbolic":"method"}],"triggerConfigBinding":[{"__symbolic":"method"}],"fireCustomEvent":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"onMouseOver":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":224,"character":3},"arguments":["mouseover"]}]}],"onMouseLeave":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":229,"character":3},"arguments":["mouseleave"]}]}],"canNavigate":[{"__symbolic":"method"}],"updateStyle":[{"__symbolic":"method"}],"mergeConfig":[{"__symbolic":"method"}]}},"ImageViewerConfig":{"__symbolic":"interface"},"CustomImageEvent":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[null,null]}]}},"FullScreenDirective":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":3,"character":1},"arguments":[{"selector":"[appScreenfull]"}]}],"members":{"fullscreenState":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":8,"character":3},"arguments":["appScreenfull"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":10,"character":26}]}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}]}}},"origins":{"AngularImageViewerModule":"./lib/angular-image-viewer.module","AngularImageViewerComponent":"./lib/angular-image-viewer.component","ImageViewerConfig":"./lib/models/image-viewer-config.model","CustomImageEvent":"./lib/models/custom-image-event-model","FullScreenDirective":"./lib/directives/full-screen.directive"},"importAs":"@hreimer/angular-image-viewer"} | ||
{"__symbolic":"module","version":4,"metadata":{"AngularImageViewerModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":11,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"AngularImageViewerComponent"},{"__symbolic":"reference","name":"FullScreenDirective"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":14,"character":4},{"__symbolic":"reference","module":"@angular/platform-browser","name":"BrowserModule","line":15,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":16,"character":4},{"__symbolic":"reference","module":"@angular/platform-browser/animations","name":"BrowserAnimationsModule","line":17,"character":4}],"exports":[{"__symbolic":"reference","name":"AngularImageViewerComponent"},{"__symbolic":"reference","name":"FullScreenDirective"}]}]}],"members":{}},"AngularImageViewerComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":61,"character":1},"arguments":[{"selector":"angular-image-viewer","template":"<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>","styles":[".img-container{width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.img-container .btn-container{position:absolute;z-index:98;text-align:right;bottom:0;right:0;width:100%}.img-container img{max-width:100%;max-height:100%}.img-container a,.img-container button{z-index:99;position:relative}.img-container a:not(:disabled),.img-container button:not(:disabled){cursor:pointer}a.default,button.default{height:40px;width:40px;border:1px solid #555;border-radius:50%;background-color:#fff;opacity:.7;transition:opacity .2s}a.default:hover,button.default:hover{opacity:1}a.default:disabled,button.default:disabled{opacity:.25}.nav-button-container>a,.nav-button-container>button{position:relative;right:0;margin:0 10px}.nav-button-container{text-align:center;position:absolute;z-index:98;bottom:10px;left:0;right:0}.spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:60px;height:60px;margin:auto;padding:10px;background-color:rgba(0,0,0,.4);border-radius:25%}.spinner{border-width:7px;border-style:solid;border-color:#ccc #ccc #222;border-radius:50%;height:100%;width:100%;box-sizing:border-box;-webkit-animation:2s linear infinite rotation;animation:2s linear infinite rotation}@keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(359deg)}}"]}]}],"members":{"src":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":68,"character":3}}]}],"screenHeightOccupied":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":71,"character":3}}]}],"index":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":74,"character":3}}]}],"config":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"indexChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":80,"character":3}}]}],"configChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":83,"character":3}}]}],"customImageEvent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":86,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":102,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":102,"character":27},"arguments":["config"]}],null],"parameters":[{"__symbolic":"reference","name":"ImageViewerConfig"},{"__symbolic":"reference","module":"@angular/platform-browser","name":"DomSanitizer","line":103,"character":33}]}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"nextImage":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":118,"character":3},"arguments":["window:keyup.ArrowRight",["$event"]]}]}],"prevImage":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":128,"character":3},"arguments":["window:keyup.ArrowLeft",["$event"]]}]}],"zoomIn":[{"__symbolic":"method"}],"zoomOut":[{"__symbolic":"method"}],"scrollZoom":[{"__symbolic":"method"}],"rotateClockwise":[{"__symbolic":"method"}],"rotateCounterClockwise":[{"__symbolic":"method"}],"onLoad":[{"__symbolic":"method"}],"onLoadStart":[{"__symbolic":"method"}],"imageNotFound":[{"__symbolic":"method"}],"onDragOver":[{"__symbolic":"method"}],"onDragStart":[{"__symbolic":"method"}],"toggleFullscreen":[{"__symbolic":"method"}],"triggerIndexBinding":[{"__symbolic":"method"}],"triggerConfigBinding":[{"__symbolic":"method"}],"fireCustomEvent":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"onMouseOver":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":224,"character":3},"arguments":["mouseover"]}]}],"onMouseLeave":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":229,"character":3},"arguments":["mouseleave"]}]}],"canNavigate":[{"__symbolic":"method"}],"updateStyle":[{"__symbolic":"method"}],"mergeConfig":[{"__symbolic":"method"}]}},"ImageViewerConfig":{"__symbolic":"interface"},"CustomImageEvent":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[null,null]}]}},"FullScreenDirective":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":3,"character":1},"arguments":[{"selector":"[appScreenfull]"}]}],"members":{"fullscreenState":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":8,"character":3},"arguments":["appScreenfull"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":10,"character":26}]}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}]}}},"origins":{"AngularImageViewerModule":"./lib/angular-image-viewer.module","AngularImageViewerComponent":"./lib/angular-image-viewer.component","ImageViewerConfig":"./lib/models/image-viewer-config.model","CustomImageEvent":"./lib/models/custom-image-event-model","FullScreenDirective":"./lib/directives/full-screen.directive"},"importAs":"@hreimer/angular-image-viewer"} |
{ | ||
"name": "@hreimer/angular-image-viewer", | ||
"version": "0.9.1", | ||
"version": "0.9.2", | ||
"repository": { | ||
@@ -5,0 +5,0 @@ "type": "git", |
@@ -138,4 +138,2 @@ | ||
Note: This package builts on the idea from angular-x-image-viewer (https://github.com/deepakgonda/angular-image-viewer) and adds support for Material Icons as well as introduces a Reset Button and structures the buttons horizontally in another customisable container. | ||
Note: This package builts on the idea from angular-x-image-viewer (https://github.com/deepakgonda/angular-image-viewer) and adds support for Material Icons as well as introduces a Reset Button and structures the buttons horizontally in another customisable container. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
320126
138