{"version":3,"file":"ngx-image-zoom.mjs","sources":["../../src/lib/ngx-image-zoom.service.ts","../../src/lib/zoom-modes/click-zoom-mode.ts","../../src/lib/zoom-modes/hover-freeze-zoom-mode.ts","../../src/lib/zoom-modes/hover-zoom-mode.ts","../../src/lib/zoom-modes/toggle-click-zoom-mode.ts","../../src/lib/zoom-modes/toggle-freeze-zoom-mode.ts","../../src/lib/zoom-modes/toggle-zoom-mode.ts","../../src/lib/ngx-image-zoom.component.ts","../../src/lib/ngx-image-zoom.component.html","../../src/lib/ngx-image-zoom.module.ts","../../src/public-api.ts","../../src/ngx-image-zoom.ts"],"sourcesContent":["import { ChangeDetectorRef, Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Coord } from './ngx-image-zoom.component';\n\n@Injectable()\nexport class NgxImageZoomService {\n    public zoomDisplay = 'none';\n    public thumbWidth = 0;\n    public thumbHeight = 0;\n    public fullImageTop = 0;\n    public fullImageLeft = 0;\n    public lensWidth = 100;\n    public lensHeight = 100;\n    public lensTop = 0;\n    public lensLeft = 0;\n    public magnifiedWidth = 0;\n    public magnifiedHeight = 0;\n    public zoomPosition = new BehaviorSubject<Coord>(null);\n\n    public zoomingEnabled = false;\n    public isReady = false;\n    public enableLens = false;\n    public baseRatio?: number;\n    public minZoomRatio = 1;\n    public maxZoomRatio = 2;\n    public magnification = 1;\n\n    public fullImageLoaded: boolean;\n\n    public fullWidth = 0;\n    public fullHeight = 0;\n    private xRatio = 0;\n    private yRatio = 0;\n    private latestMouseLeft = -1;\n    private latestMouseTop = -1;\n\n    constructor(private changeDetectorRef: ChangeDetectorRef) {}\n\n    public zoomOn(event: MouseEvent) {\n        if (this.isReady) {\n            this.zoomingEnabled = true;\n            this.calculateRatioAndOffset();\n            this.zoomDisplay = 'block';\n            this.calculateZoomPosition(event);\n            this.changeDetectorRef.markForCheck();\n        }\n    }\n\n    public zoomOff() {\n        this.zoomingEnabled = false;\n        this.zoomDisplay = 'none';\n        this.changeDetectorRef.markForCheck();\n    }\n\n    public markForCheck() {\n        this.changeDetectorRef.markForCheck();\n    }\n\n    calculateRatioAndOffset() {\n        // If lens is disabled, set lens size to equal thumb size and position it on top of the thumb\n        if (!this.enableLens) {\n            this.lensWidth = this.thumbWidth;\n            this.lensHeight = this.thumbHeight;\n            this.lensLeft = 0;\n            this.lensTop = 0;\n        }\n\n        if (this.fullImageLoaded) {\n            this.baseRatio = Math.max(this.thumbWidth / this.fullWidth, this.thumbHeight / this.fullHeight);\n\n            // Don't allow zooming to smaller than thumbnail size\n            this.minZoomRatio = Math.max(this.minZoomRatio || 0, this.baseRatio || 0);\n\n            this.calculateRatio();\n        }\n    }\n\n    calculateRatio() {\n        this.magnifiedWidth = this.fullWidth * this.magnification;\n        this.magnifiedHeight = this.fullHeight * this.magnification;\n\n        this.xRatio = (this.magnifiedWidth - this.thumbWidth) / this.thumbWidth;\n        this.yRatio = (this.magnifiedHeight - this.thumbHeight) / this.thumbHeight;\n    }\n\n    calculateZoomPosition(event: MouseEvent) {\n        const newLeft = Math.max(Math.min(event.offsetX, this.thumbWidth), 0);\n        const newTop = Math.max(Math.min(event.offsetY, this.thumbHeight), 0);\n\n        this.setZoomPosition(newLeft, newTop);\n\n        this.calculateImageAndLensPosition();\n\n        this.changeDetectorRef.markForCheck();\n    }\n\n    calculateImageAndLensPosition() {\n        let lensLeftMod = 0;\n        let lensTopMod = 0;\n\n        if (this.enableLens && this.latestMouseLeft > 0) {\n            lensLeftMod = this.latestMouseLeft - this.lensWidth / 2;\n            lensTopMod = this.latestMouseTop - this.lensHeight / 2;\n            this.lensLeft = lensLeftMod;\n            this.lensTop = lensTopMod;\n        }\n\n        this.fullImageLeft = this.latestMouseLeft * -this.xRatio - lensLeftMod;\n        this.fullImageTop = this.latestMouseTop * -this.yRatio - lensTopMod;\n    }\n\n    private setZoomPosition(left: number, top: number) {\n        this.latestMouseLeft = Number(left) || this.latestMouseLeft;\n        this.latestMouseTop = Number(top) || this.latestMouseTop;\n\n        const newPosition: Coord = {\n            x: this.latestMouseLeft,\n            y: this.latestMouseTop,\n        };\n        this.zoomPosition.next(newPosition);\n    }\n}\n","import { ZoomMode } from './zoom-mode';\nimport { NgxImageZoomService } from '../ngx-image-zoom.service';\n\nexport class ClickZoomMode implements ZoomMode {\n    constructor(private zoomService: NgxImageZoomService) {}\n\n    onClick(event: MouseEvent): void {\n        if (this.zoomService.zoomingEnabled === false) {\n            this.zoomService.zoomOn(event);\n        }\n    }\n\n    onMouseEnter(): void {\n        // NOP\n    }\n\n    onMouseLeave(): void {\n        this.zoomService.zoomOff();\n    }\n\n    onMouseMove(event: MouseEvent): void {\n        if (this.zoomService.zoomingEnabled) {\n            this.zoomService.calculateZoomPosition(event);\n        }\n    }\n\n    onMouseWheel(): boolean {\n        return true;\n    }\n}\n","import { ZoomMode } from './zoom-mode';\nimport { NgxImageZoomService } from '../ngx-image-zoom.service';\n\nexport class HoverFreezeZoomMode implements ZoomMode {\n    private zoomFrozen = false;\n    constructor(private zoomService: NgxImageZoomService) {}\n\n    onClick(event: MouseEvent): void {\n        if (this.zoomService.zoomingEnabled && this.zoomFrozen) {\n            this.zoomFrozen = false;\n        } else if (this.zoomService.zoomingEnabled) {\n            this.zoomFrozen = true;\n            this.zoomService.markForCheck();\n        } else {\n            this.zoomService.zoomOn(event);\n        }\n    }\n\n    onMouseEnter(event: MouseEvent): void {\n        if (!this.zoomFrozen) {\n            this.zoomService.zoomOn(event);\n        }\n    }\n\n    onMouseLeave(): void {\n        if (this.zoomService.zoomingEnabled && !this.zoomFrozen) {\n            this.zoomService.zoomOff();\n        }\n    }\n\n    onMouseMove(event: MouseEvent): void {\n        if (this.zoomService.zoomingEnabled && !this.zoomFrozen) {\n            this.zoomService.calculateZoomPosition(event);\n        }\n    }\n\n    onMouseWheel(): boolean {\n        // Prevent scroll zoom if we're frozen\n        return !this.zoomFrozen;\n    }\n}\n","import { ZoomMode } from './zoom-mode';\nimport { NgxImageZoomService } from '../ngx-image-zoom.service';\n\nexport class HoverZoomMode implements ZoomMode {\n    constructor(private zoomService: NgxImageZoomService) {}\n\n    onClick(): void {\n        // NOP\n    }\n\n    onMouseEnter(event: MouseEvent): void {\n        this.zoomService.zoomOn(event);\n    }\n\n    onMouseLeave(): void {\n        this.zoomService.zoomOff();\n    }\n\n    onMouseMove(event: MouseEvent): void {\n        this.zoomService.calculateZoomPosition(event);\n    }\n\n    onMouseWheel(): boolean {\n        return true;\n    }\n}\n","import { ZoomMode } from './zoom-mode';\nimport { NgxImageZoomService } from '../ngx-image-zoom.service';\n\nexport class ToggleClickZoomMode implements ZoomMode {\n    constructor(private zoomService: NgxImageZoomService) {}\n\n    onClick(event: MouseEvent): void {\n        if (this.zoomService.zoomingEnabled) {\n            this.zoomService.zoomOff();\n        } else {\n            this.zoomService.zoomOn(event);\n        }\n    }\n\n    onMouseEnter(): void {\n        // NOP\n    }\n\n    onMouseLeave(): void {\n        this.zoomService.zoomOff();\n    }\n\n    onMouseMove(event: MouseEvent): void {\n        if (this.zoomService.zoomingEnabled) {\n            this.zoomService.calculateZoomPosition(event);\n        }\n    }\n\n    onMouseWheel(): boolean {\n        return true;\n    }\n}\n","import { ZoomMode } from './zoom-mode';\nimport { NgxImageZoomService } from '../ngx-image-zoom.service';\n\nexport class ToggleFreezeZoomMode implements ZoomMode {\n    private zoomFrozen = false;\n    constructor(private zoomService: NgxImageZoomService) {}\n\n    onClick(event: MouseEvent): void {\n        if (this.zoomService.zoomingEnabled && this.zoomFrozen) {\n            this.zoomFrozen = false;\n            this.zoomService.zoomOff();\n        } else if (this.zoomService.zoomingEnabled) {\n            this.zoomFrozen = true;\n            this.zoomService.markForCheck();\n        } else {\n            this.zoomService.zoomOn(event);\n        }\n    }\n\n    onMouseEnter(): void {\n        // NOP\n    }\n\n    onMouseLeave(): void {\n        if (this.zoomService.zoomingEnabled && !this.zoomFrozen) {\n            this.zoomService.zoomOff();\n        }\n    }\n\n    onMouseMove(event: MouseEvent): void {\n        if (this.zoomService.zoomingEnabled && !this.zoomFrozen) {\n            this.zoomService.calculateZoomPosition(event);\n        }\n    }\n\n    onMouseWheel(): boolean {\n        // Prevent scroll zoom if we're frozen\n        return !this.zoomFrozen;\n    }\n}\n","import { ZoomMode } from './zoom-mode';\nimport { NgxImageZoomService } from '../ngx-image-zoom.service';\n\nexport class ToggleZoomMode implements ZoomMode {\n    constructor(private zoomService: NgxImageZoomService) {}\n\n    onClick(event: MouseEvent): void {\n        if (this.zoomService.zoomingEnabled) {\n            this.zoomService.zoomOff();\n        } else {\n            this.zoomService.zoomOn(event);\n        }\n    }\n\n    onMouseEnter(): void {\n        // NOP\n    }\n    onMouseLeave(): void {\n        // NOP\n    }\n    onMouseMove(): void {\n        // NOP\n    }\n    onMouseWheel(): boolean {\n        return true;\n    }\n}\n","import {\n    Component,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    Renderer2,\n    ViewChild,\n} from '@angular/core';\nimport { SafeUrl } from '@angular/platform-browser';\nimport { Subscription } from 'rxjs';\nimport { NgxImageZoomService } from './ngx-image-zoom.service';\nimport { ClickZoomMode } from './zoom-modes/click-zoom-mode';\nimport { HoverFreezeZoomMode } from './zoom-modes/hover-freeze-zoom-mode';\nimport { HoverZoomMode } from './zoom-modes/hover-zoom-mode';\nimport { ToggleClickZoomMode } from './zoom-modes/toggle-click-zoom-mode';\nimport { ToggleFreezeZoomMode } from './zoom-modes/toggle-freeze-zoom-mode';\nimport { ToggleZoomMode } from './zoom-modes/toggle-zoom-mode';\nimport { ZoomMode } from './zoom-modes/zoom-mode';\n\nexport interface Coord {\n    x: number;\n    y: number;\n}\n\n@Component({\n    selector: 'lib-ngx-image-zoom',\n    templateUrl: './ngx-image-zoom.component.html',\n    styleUrls: ['./ngx-image-zoom.component.css'],\n    providers: [NgxImageZoomService],\n})\nexport class NgxImageZoomComponent implements OnInit, OnChanges, OnDestroy {\n    private static readonly validZoomModes: string[] = [\n        'hover',\n        'toggle',\n        'click',\n        'toggle-click',\n        'toggle-freeze',\n        'hover-freeze',\n    ];\n\n    @ViewChild('zoomContainer', { static: true }) zoomContainer!: ElementRef;\n    @ViewChild('imageThumbnail', { static: true }) imageThumbnail!: ElementRef;\n    @ViewChild('fullSizeImage', { static: true }) fullSizeImage!: ElementRef;\n\n    @Output() zoomScroll = new EventEmitter<number>();\n    @Output() zoomPosition = new EventEmitter<Coord>();\n    @Output() imagesLoaded = new EventEmitter<boolean>();\n\n    public thumbImage?: string | SafeUrl | null;\n    public fullImage?: string | SafeUrl | null;\n    public lensBorderRadius = 0;\n\n    private zoomMode = 'hover';\n    private enableScrollZoom = false;\n    private scrollStepSize = 0.1;\n    private circularLens = false;\n\n    private thumbImageLoaded = false;\n\n    private zoomInstance: ZoomMode | undefined;\n    private subscriptions: Array<Subscription> = [];\n    private eventListeners: (() => void)[] = [];\n\n    private zoomModesMap = new Map<string, new (zoomService: NgxImageZoomService) => ZoomMode>([\n        ['click', ClickZoomMode],\n        ['hover-freeze', HoverFreezeZoomMode],\n        ['hover', HoverZoomMode],\n        ['toggle-click', ToggleClickZoomMode],\n        ['toggle-freeze', ToggleFreezeZoomMode],\n        ['toggle', ToggleZoomMode],\n    ]);\n\n    constructor(public zoomService: NgxImageZoomService, private renderer: Renderer2) {}\n\n    @Input('thumbImage')\n    public set setThumbImage(thumbImage: string | SafeUrl | null) {\n        this.thumbImageLoaded = false;\n        this.setIsReady(false);\n        this.thumbImage = thumbImage;\n    }\n\n    @Input('fullImage')\n    public set setFullImage(fullImage: string | SafeUrl | null) {\n        this.zoomService.fullImageLoaded = false;\n        this.setIsReady(false);\n        this.fullImage = fullImage;\n    }\n\n    @Input('zoomMode')\n    public set setZoomMode(zoomMode: string) {\n        if (NgxImageZoomComponent.validZoomModes.some((m) => m === zoomMode)) {\n            this.zoomMode = zoomMode;\n        }\n    }\n\n    @Input('magnification')\n    public set setMagnification(magnification: number) {\n        this.zoomService.magnification = Number(magnification) || this.zoomService.magnification;\n        this.zoomScroll.emit(this.zoomService.magnification);\n    }\n\n    @Input('minZoomRatio')\n    public set setMinZoomRatio(minZoomRatio: number) {\n        const ratio = Number(minZoomRatio) || this.zoomService.minZoomRatio || this.zoomService.baseRatio || 0;\n        this.zoomService.minZoomRatio = Math.max(ratio, this.zoomService.baseRatio || 0);\n    }\n\n    @Input('maxZoomRatio')\n    public set setMaxZoomRatio(maxZoomRatio: number) {\n        this.zoomService.maxZoomRatio = Number(maxZoomRatio) || this.zoomService.maxZoomRatio;\n    }\n\n    @Input('scrollStepSize')\n    public set setScrollStepSize(stepSize: number) {\n        this.scrollStepSize = Number(stepSize) || this.scrollStepSize;\n    }\n\n    @Input('enableLens')\n    public set setEnableLens(enable: boolean) {\n        this.zoomService.enableLens = Boolean(enable);\n    }\n\n    @Input('lensWidth')\n    public set setLensWidth(width: number) {\n        this.zoomService.lensWidth = Number(width) || this.zoomService.lensWidth;\n    }\n\n    @Input('lensHeight')\n    public set setLensHeight(height: number) {\n        this.zoomService.lensHeight = Number(height) || this.zoomService.lensHeight;\n    }\n\n    @Input('circularLens')\n    public set setCircularLens(enable: boolean) {\n        this.circularLens = Boolean(enable);\n    }\n\n    @Input('enableScrollZoom')\n    public set setEnableScrollZoom(enable: boolean) {\n        this.enableScrollZoom = Boolean(enable);\n    }\n\n    @Input() altText = '';\n    @Input() titleText = '';\n\n    ngOnInit(): void {\n        // If no full size image is defined, we add the thumbnail as the full size too.\n        if (this.fullImage === undefined) {\n            this.fullImage = this.thumbImage;\n        }\n\n        this.registerServiceSubscriptions();\n\n        // Load zoom mode and set up configuration.\n        this.loadZoomMode();\n        this.registerEventListeners();\n        this.calculateLensBorder();\n    }\n\n    ngOnChanges() {\n        this.calculateLensBorder();\n        this.zoomService.calculateRatioAndOffset();\n        this.zoomService.calculateImageAndLensPosition();\n    }\n\n    ngOnDestroy(): void {\n        this.subscriptions.forEach((subscription) => subscription.unsubscribe());\n        this.eventListeners.forEach((destroyFn) => destroyFn());\n    }\n\n    private registerServiceSubscriptions() {\n        this.subscriptions.push(\n            this.zoomService.zoomPosition.subscribe((position) => this.zoomPosition.emit(position))\n        );\n    }\n\n    private loadZoomMode(): void {\n        const ZoomModeClass = this.zoomModesMap.get(this.zoomMode);\n        if (ZoomModeClass) {\n            this.zoomInstance = new ZoomModeClass(this.zoomService);\n        } else {\n            console.error(`Unsupported zoom mode: ${this.zoomMode}`);\n        }\n    }\n\n    private registerEventListeners(): void {\n        if (this.zoomInstance) {\n            const nativeElement = this.zoomContainer.nativeElement;\n\n            this.eventListeners.push(\n                this.renderer.listen(nativeElement, 'mouseenter', (event) => this.zoomInstance.onMouseEnter(event)),\n                this.renderer.listen(nativeElement, 'mouseleave', (event) => this.zoomInstance.onMouseLeave(event)),\n                this.renderer.listen(nativeElement, 'mousemove', (event) => this.zoomInstance.onMouseMove(event)),\n                this.renderer.listen(nativeElement, 'click', (event) => this.zoomInstance.onClick(event)),\n\n                // Chrome: 'mousewheel', Firefox: 'DOMMouseScroll', IE: 'onmousewheel'\n                this.renderer.listen(nativeElement, 'mousewheel', (event) => {\n                    if (this.zoomInstance.onMouseWheel(event)) {\n                        this.onMouseWheel(event);\n                    }\n                }),\n                this.renderer.listen(nativeElement, 'DOMMouseScroll', (event) => {\n                    if (this.zoomInstance.onMouseWheel(event)) {\n                        this.onMouseWheel(event);\n                    }\n                }),\n                this.renderer.listen(nativeElement, 'onmousewheel', (event) => {\n                    if (this.zoomInstance.onMouseWheel(event)) {\n                        this.onMouseWheel(event);\n                    }\n                })\n            );\n        }\n    }\n\n    /**\n     * Template helper methods\n     */\n    onThumbImageLoaded() {\n        // Pass along image sizes to the service.\n        this.zoomService.thumbWidth = this.imageThumbnail.nativeElement.width;\n        this.zoomService.thumbHeight = this.imageThumbnail.nativeElement.height;\n        this.thumbImageLoaded = true;\n        this.checkImagesLoaded();\n    }\n\n    onFullImageLoaded() {\n        // Pass along image sizes to the service.\n        this.zoomService.fullWidth = this.fullSizeImage.nativeElement.naturalWidth;\n        this.zoomService.fullHeight = this.fullSizeImage.nativeElement.naturalHeight;\n        this.zoomService.fullImageLoaded = true;\n        this.checkImagesLoaded();\n    }\n\n    private calculateLensBorder() {\n        if (this.zoomService.enableLens) {\n            if (this.circularLens) {\n                this.lensBorderRadius = this.zoomService.lensWidth / 2;\n            } else {\n                this.lensBorderRadius = 0;\n            }\n        }\n    }\n\n    private checkImagesLoaded() {\n        this.zoomService.calculateRatioAndOffset();\n        if (this.thumbImageLoaded && this.zoomService.fullImageLoaded) {\n            this.zoomService.calculateImageAndLensPosition();\n            this.setIsReady(true);\n        }\n    }\n\n    private setIsReady(value: boolean) {\n        this.zoomService.isReady = value;\n        this.imagesLoaded.emit(value);\n    }\n\n    /**\n     * Mouse wheel event\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    private onMouseWheel(event: any) {\n        // Don't eat events if scrollZoom or zooming isn't active\n        if (!this.enableScrollZoom || !this.zoomService.zoomingEnabled) {\n            return;\n        }\n\n        event = window.event || event; // old IE\n        const direction = Math.max(Math.min(event.wheelDelta || -event.detail, 1), -1);\n        if (direction > 0) {\n            // up\n            this.setMagnification = Math.min(\n                this.zoomService.magnification + this.scrollStepSize,\n                this.zoomService.maxZoomRatio\n            );\n        } else {\n            // down\n            this.setMagnification = Math.max(\n                this.zoomService.magnification - this.scrollStepSize,\n                this.zoomService.minZoomRatio\n            );\n        }\n        this.zoomService.calculateRatio();\n        this.zoomService.calculateZoomPosition(event);\n\n        // Prevent scrolling on page.\n        event.returnValue = false; // IE\n        if (event.preventDefault) {\n            event.preventDefault(); // Chrome & FF\n        }\n    }\n}\n","<div\n    #zoomContainer\n    class=\"ngxImageZoomContainer\"\n    [style.width.px]=\"this.zoomService.thumbWidth\"\n    [style.height.px]=\"this.zoomService.thumbHeight\"\n>\n    <img\n        #imageThumbnail\n        class=\"ngxImageZoomThumbnail\"\n        [alt]=\"altText\"\n        [title]=\"titleText\"\n        [src]=\"thumbImage\"\n        (load)=\"onThumbImageLoaded()\"\n    />\n\n    <div\n        [ngClass]=\"{\n            ngxImageZoomFullContainer: true,\n            ngxImageZoomLensEnabled: this.zoomService.enableLens\n        }\"\n        [style.display]=\"this.zoomService.zoomDisplay\"\n        [style.top.px]=\"this.zoomService.lensTop\"\n        [style.left.px]=\"this.zoomService.lensLeft\"\n        [style.width.px]=\"this.zoomService.lensWidth\"\n        [style.height.px]=\"this.zoomService.lensHeight\"\n        [style.border-radius.px]=\"this.lensBorderRadius\"\n    >\n        <img\n            #fullSizeImage\n            class=\"ngxImageZoomFull\"\n            [alt]=\"altText\"\n            [title]=\"titleText\"\n            [src]=\"fullImage\"\n            (load)=\"onFullImageLoaded()\"\n            [style.display]=\"this.zoomService.zoomDisplay\"\n            [style.top.px]=\"this.zoomService.fullImageTop\"\n            [style.left.px]=\"this.zoomService.fullImageLeft\"\n            [style.width.px]=\"this.zoomService.magnifiedWidth\"\n            [style.height.px]=\"this.zoomService.magnifiedHeight\"\n        />\n    </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { NgxImageZoomComponent } from './ngx-image-zoom.component';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n    declarations: [NgxImageZoomComponent],\n    imports: [CommonModule],\n    exports: [NgxImageZoomComponent],\n})\nexport class NgxImageZoomModule {}\n","/*\n * Public API Surface of ngx-image-zoom\n */\n\nexport * from './lib/ngx-image-zoom.component';\nexport * from './lib/ngx-image-zoom.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxImageZoomService"],"mappings":"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"}