{"version":3,"file":"sowatech-shared-lightbox.mjs","sources":["../../../projects/shared/lightbox/lightbox.component.ts","../../../projects/shared/lightbox/lightbox.component.html","../../../projects/shared/lightbox/lightbox.module.ts","../../../projects/shared/lightbox/sowatech-shared-lightbox.ts"],"sourcesContent":["/* eslint-disable @angular-eslint/no-output-on-prefix */\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n    selector: 'lightbox',\r\n    templateUrl: './lightbox.component.html',\r\n    styleUrls: ['./lightbox.component.scss'],\r\n    standalone: false\r\n})\r\nexport class LightboxComponent {\r\n    public currentImage: ILightBoxImage;\r\n\r\n    public get currentImageIndex(): number {\r\n        return this.currentImage ? this.images.indexOf(this.currentImage) : -1;\r\n    }\r\n\r\n    @Input()\r\n    public images: ILightBoxImage[];\r\n    @Input()\r\n    public thumbSize = '50px';\r\n    @Input()\r\n    public actions: LightboxActions;\r\n    @Input()\r\n    public hideGallery: boolean;\r\n    @Input()\r\n    public showImageName: boolean;\r\n    @Output()\r\n    public imageClosed = new EventEmitter<void>();\r\n    @Output()\r\n    public onButtonClicked = new EventEmitter<LightboxButtonEvent>();\r\n    @Output()\r\n    public onImageClicked = new EventEmitter<ILightBoxImage>();\r\n\r\n    public opened = false;\r\n\r\n    private set scrollingDisabled(value: boolean) {\r\n        document.body.style.overflowY = value ? 'hidden' : 'unset';\r\n    }\r\n\r\n    public closeImage() {\r\n        this.opened = false;\r\n        this.scrollingDisabled = false;\r\n        this.imageClosed.emit(null);\r\n    }\r\n\r\n    public prevImage() {\r\n        let imageIndex = this.images.indexOf(this.currentImage);\r\n        imageIndex = imageIndex > 0 ? imageIndex - 1 : this.images.length - 1;\r\n        this.currentImage = this.images[imageIndex];\r\n        this.openImage();\r\n    }\r\n\r\n    public nextImage() {\r\n        let imageIndex = this.images.indexOf(this.currentImage);\r\n        imageIndex = imageIndex === this.images.length - 1 ? 0 : imageIndex + 1;\r\n        this.currentImage = this.images[imageIndex];\r\n        this.openImage();\r\n    }\r\n\r\n    public openImage(imageName?: string) {\r\n        if (imageName) this.currentImage = this.images.find(img => img.imageName === imageName);\r\n        this.opened = true;\r\n        this.scrollingDisabled = true;\r\n        this.onImageClicked.emit(this.currentImage);\r\n        this.setCurrentImageUrl(this.currentImage);\r\n    }\r\n\r\n    public openImageWithIndex(index: number) {\r\n        this.currentImage = this.images[index];\r\n        this.openImage();\r\n    }\r\n\r\n    public buttonClicked(ident: string, image: ILightBoxImage) {\r\n        const btnEvent: LightboxButtonEvent = { ident, imageName: image.imageName };\r\n        this.onButtonClicked.emit(btnEvent);\r\n    }\r\n\r\n    private async setCurrentImageUrl(image: ILightBoxImage) {\r\n        if (image.imageUrl) return;\r\n\r\n        image.imageUrl = await image.getImage();\r\n    }\r\n}\r\n\r\nexport interface ILightBoxImage {\r\n    imageUrl: string;\r\n    thumbUrl: string;\r\n    imageName: string;\r\n    getImage?: () => Promise<string>;\r\n}\r\n\r\nexport class LightboxActions {\r\n    /** eigentlich \"galleryButtons\". Name bleibt für Abwärtskompatibilität */\r\n    public imageButtons?: LightboxImageButton[];\r\n    public overlayButtons?: LightboxImageButton[];\r\n}\r\n\r\nexport class LightboxButtonEvent {\r\n    public ident: string;\r\n    public imageName: string;\r\n}\r\n\r\nexport class LightboxImageButton {\r\n    public ident?: string;\r\n    public text?: string;\r\n    public tooltip?: string;\r\n    public buttonClass?: string;\r\n    public iconClass?: string;\r\n}\r\n","@if (!hideGallery) {\r\n  <div class=\"ng-gallery\">\r\n    @for (image of images; track image; let index = $index) {\r\n      <div class=\"img-wrap\">\r\n        <span class=\"lightboxBtn\">\r\n          <span>\r\n            @for (btn of actions?.imageButtons; track btn) {\r\n              <button type=\"button\" class=\"btn m-r-xs {{btn.buttonClass}}\"\r\n                [title]=\"btn.tooltip\" (click)=\"buttonClicked(btn.ident, image)\">\r\n                @if (btn.iconClass) {\r\n                  <i class=\"fa {{btn.iconClass}}\"></i>\r\n                }\r\n                {{btn.text}}\r\n              </button>\r\n            }\r\n          </span>\r\n        </span>\r\n        <div [style.width]=\"thumbSize\" [style.height]=\"thumbSize\" class=\"ng-thumb\">\r\n          <img [src]=\"image.thumbUrl\" [style.max-width]=\"thumbSize\" (click)=\"openImage(image.imageName)\"\r\n            alt=\"Bild {{ index + 1 }}\" />\r\n          </div>\r\n        </div>\r\n      }\r\n    </div>\r\n  }\r\n  @if (opened) {\r\n    <div class=\"ng-overlay\">\r\n      <div class=\"ng-gallery-content\">\r\n        @if (!currentImage || !currentImage.imageUrl) {\r\n          <div class=\"uil-ring-css\">\r\n            <div></div>\r\n          </div>\r\n        }\r\n        <a class=\"close-popup\" (click)=\"closeImage()\"><i class=\"fa fa-times\"></i></a>\r\n        @if (images.length >1) {\r\n          <a class=\"nav-left\" (click)=\"prevImage()\"><i class=\"fa fa-angle-left\"></i></a>\r\n        }\r\n        @if (currentImage && currentImage.imageUrl) {\r\n          <img [src]=\"currentImage.imageUrl\" (click)=\"nextImage()\"\r\n            class=\"effect\" />\r\n        }\r\n        @if (images.length >1) {\r\n          <a class=\"nav-right\" (click)=\"nextImage()\"><i class=\"fa fa-angle-right\"></i></a>\r\n        }\r\n        @if (showImageName) {\r\n          <span class=\"info-text image-name\">{{currentImage?.imageName}}</span>\r\n        }\r\n        <span class=\"info-text\">{{ currentImageIndex + 1 }}/{{ images.length }} - Bild {{currentImageIndex+1}}</span>\r\n        <span class=\"overlay-buttons-container\">\r\n          @for (btn of actions?.overlayButtons; track btn) {\r\n            <button type=\"button\" class=\"btn m-r-xs {{btn.buttonClass}}\"\r\n              [title]=\"btn.tooltip\" (click)=\"buttonClicked(btn.ident, currentImage)\">\r\n              @if (btn.iconClass) {\r\n                <i class=\"fa {{btn.iconClass}}\"></i>\r\n              }\r\n              {{btn.text}}\r\n            </button>\r\n          }\r\n        </span>\r\n      </div>\r\n    </div>\r\n  }\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { LightboxComponent } from './lightbox.component';\r\n\r\n@NgModule({\r\n    imports: [\r\n        CommonModule\r\n    ],\r\n    declarations: [\r\n        LightboxComponent\r\n    ],\r\n    exports: [\r\n        LightboxComponent\r\n    ]\r\n})\r\nexport class LightboxModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}