{"version":3,"file":"sk-front-lib-image.mjs","sources":["../../../projects/sk-front-lib/image/src/sk-image.component.ts","../../../projects/sk-front-lib/image/src/sk-image.component.html","../../../projects/sk-front-lib/image/src/sk-image.module.ts","../../../projects/sk-front-lib/image/src/sk-front-lib-image.ts"],"sourcesContent":["import { Platform } from '@angular/cdk/platform';\nimport { HttpParams } from '@angular/common/http';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    Input,\n    OnChanges,\n    OnDestroy,\n    SimpleChanges,\n    ViewChild\n} from '@angular/core';\nimport { MatLegacyDialog as MatDialog } from '@angular/material/legacy-dialog';\n\nimport { SkApiService } from 'sk-front-lib/api';\nimport { SkFile } from 'sk-front-lib/model';\n\nimport Viewer from 'viewerjs';\n\ninterface IMetadata {\n    width?: number;\n    height?: number;\n    color?: string;\n}\n\nexport interface SkImageOptions {\n    mode?: 'img' | 'css';\n    width?: number;\n    height?: number;\n    resizeType?: 'ratio_crop' | 'ratio_fill';\n    resizeBgColor?: string;\n    filter?: 'gray' | '';\n    blur?: number;\n    clickable?: boolean;\n    coverBackground?: string;\n    previewColor?: string;\n}\n\n@Component({\n    selector: 'sk-image',\n    templateUrl: './sk-image.component.html',\n    styleUrls: ['./sk-image.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SkImageComponent implements OnChanges, AfterViewInit, OnDestroy {\n\n    mode: 'skfile' | 'imgId' | 'src' | 'fallback' = 'imgId';\n    defaultOption: SkImageOptions = {\n        mode: 'img',\n        width: 0,\n        height: 0,\n        resizeType: 'ratio_crop',\n        resizeBgColor: '',\n        filter: '',\n        blur: 0,\n        clickable: false,\n        coverBackground: null,\n        previewColor: ''\n    };\n    currentOption: SkImageOptions = {};\n\n    apiCompleted = false;\n    isVisible = false;\n\n    @Input() src: string = null;\n    @Input() imgId: number = null;\n    @Input() skfile: SkFile = null;\n    @Input() option: SkImageOptions = {};\n    @Input() alt = '';\n    @Input() imageClass: string[] = [];\n    waitSrc: string = null;\n    activeSrc: string = null;\n    originalSrc: string = null;\n\n    ratio = 100;\n    backgroundColor = '#fff';\n    imageOpacity = 0;\n\n    @ViewChild('imageElement', {static: false}) imageElement: ElementRef;\n    viewerInstance: Viewer;\n    viewerOptions = {\n        navbar: false,\n        backdrop: 'static',\n        className: 'sk-custom-viewerjs',\n        toolbar: {\n            zoomIn: 1,\n            zoomOut: 1,\n            oneToOne: 1,\n            reset: 1,\n        },\n        movable: true,\n        rotatable: false,\n        toggleOnDblclick: false,\n    };\n\n    constructor(private cdRef: ChangeDetectorRef,\n                private platform: Platform,\n                private dialog: MatDialog,\n                private apiService: SkApiService) {\n    }\n\n    // -----------------------------------------------------------------------------------------------------\n    // @ Accessors\n    // ------------------------------------------1-----------------------------------------------------------\n\n    get containerStyle() {\n        if (this.mode === 'imgId' || this.mode === 'skfile') {\n            return {\n                'padding-bottom': this.ratio + '%',\n                height: '0px',\n                overflow: 'hidden',\n                'background-color': this.backgroundColor,\n                cursor: this.currentOption.clickable ? 'pointer' : 'inherit',\n            };\n        } else {\n            return {\n                'padding-bottom': '0px',\n                height: 'auto',\n                overflow: 'hidden',\n                'background-color': this.backgroundColor\n            };\n        }\n    }\n\n    get imageStyle() {\n        if (this.mode === 'imgId') {\n            return {\n                position: 'absolute',\n                width: '100%',\n                top: '0',\n                left: '0',\n                right: '0',\n                bottom: '0',\n                opacity: this.imageOpacity\n            };\n        } else {\n            return {\n                position: 'relative',\n                width: '100%',\n                opacity: this.imageOpacity\n            };\n        }\n    }\n\n    get coverStyle() {\n        if (this.option.coverBackground) {\n            return {\n                background: this.option.coverBackground,\n                opacity: this.imageOpacity\n            }\n        } else {\n            return {};\n        }\n    }\n\n\n    // -----------------------------------------------------------------------------------------------------\n    // @ Lifecycle hooks\n    // -----------------------------------------------------------------------------------------------------\n\n    ngOnChanges(changes: SimpleChanges): void {\n        this._init();\n\n        /**\n         * skfile, imgId, src 순서로 우선권을 가진다.\n         */\n        if (!!changes.skfile && !!changes.skfile.currentValue) {\n            this.mode = 'skfile';\n            this.imgId = this.skfile.id;\n            this.loadImageByFile();\n            return;\n        }\n\n        if (!!changes.imgId) {\n            this.mode = 'imgId';\n            this.loadImageById();\n            return;\n        }\n\n        if (!!changes.src) {\n            this.mode = 'src';\n            this.loadImageBySrc();\n            return;\n        }\n    }\n\n    ngAfterViewInit(): void {\n    }\n\n    ngOnDestroy(): void {\n        if (this.viewerInstance) {\n            this.viewerInstance.destroy();\n        }\n    }\n\n    // -----------------------------------------------------------------------------------------------------\n    // @ Public methods\n    // -----------------------------------------------------------------------------------------------------\n\n    loadImageByFile() {\n        this.waitSrc = `${this.apiService.apiServer}/api/public/images/${this.imgId}?${this.getHttpParam().toString()}`;\n        this.originalSrc = `${this.apiService.apiServer}/api/public/images/${this.imgId}`;\n\n        const metadata = this.skfile as IMetadata;\n        if (this.currentOption.width > 0 && this.currentOption.height > 0) {\n            this.ratio = this.currentOption.height / this.currentOption.width * 100;\n        } else {\n            this.ratio = metadata.height / metadata.width * 100;\n        }\n\n        this.backgroundColor = !!this.currentOption.previewColor ? this.currentOption.previewColor :\n            (this.currentOption.filter === 'gray' ? '#fff' : metadata.color);\n\n        this.apiCompleted = true;\n        this.cdRef.markForCheck();\n        this.startImageLoad();\n    }\n\n    loadImageById() {\n        this.apiService.get<SkFile>(`/api/public/images/${this.imgId}/metadata`)\n            .subscribe(\n                result => {\n                    this.skfile = result.data;\n                    this.loadImageByFile();\n                },\n                error => {\n                    this.showFallbackImage();\n                }\n            );\n    }\n\n    loadImageBySrc() {\n        this.waitSrc = this.src;\n        this.apiCompleted = true;\n    }\n\n    showFallbackImage() {\n        this.mode = 'fallback';\n        this.waitSrc = '/assets/images/no_image_available.jpeg';\n        this.apiCompleted = true;\n    }\n\n    onIntersection(event) {\n        if (event.visible) {\n            this.isVisible = true;\n            if (this.apiCompleted) {\n                this.startImageLoad();\n            }\n        }\n    }\n\n    startImageLoad() {\n        if (!this.activeSrc && this.apiCompleted && this.isVisible) {\n            this.activeSrc = this.waitSrc;\n            this.cdRef.markForCheck();\n        }\n    }\n\n    onImageLoad() {\n        this.imageOpacity = 1;\n        this.cdRef.markForCheck();\n    }\n\n    onImageError() {\n        this.activeSrc = null;\n        this.showFallbackImage();\n        this.startImageLoad();\n    }\n\n    openDialog() {\n        if (this.currentOption.clickable && this.mode !== 'fallback') {\n            if (this.viewerInstance) {\n                this.viewerInstance.destroy();\n            }\n\n            this.viewerInstance = new Viewer(this.imageElement.nativeElement, {\n                // Transitions currently break the Viewer when running optimizations during ng build (i.e in prod mode)\n                // TODO: Find a fix for this so we don't have to force disable transitions\n                transition: false,\n                url: 'src-viewer',\n                ...this.viewerOptions,\n            });\n            this.viewerInstance.show();\n        }\n    }\n\n    // -----------------------------------------------------------------------------------------------------\n    // @ Private methods\n    // -----------------------------------------------------------------------------------------------------\n\n    private _init() {\n        this.mode = 'imgId';\n        this.imageOpacity = 0;\n        this.apiCompleted = false;\n        this.activeSrc = null;\n        Object.assign(this.currentOption, this.defaultOption, this.option);\n\n        this.cdRef.detectChanges();\n    }\n\n    private getHttpParam(): HttpParams {\n        const option: SkImageOptions = this.currentOption;\n\n        return new HttpParams()\n            .append('w', String(option.width))\n            .append('h', String(option.height))\n            .append('resize', option.resizeType)\n            .append('bgcolor', option.resizeBgColor)\n            .append('filter', String(option.filter))\n            .append('blur', String(option.blur));\n    }\n}\n","<div class=\"img-container\" inViewport (inViewportAction)=\"onIntersection($event)\"\n     [ngStyle]=\"containerStyle\" (click)=\"openDialog()\" #imageElement>\n    <div class=\"img-cover\" *ngIf=\"option.coverBackground\" [ngStyle]=\"coverStyle\"></div>\n    <img *ngIf=\"activeSrc && isVisible\" [ngClass]=\"imageClass\"\n         [src]=\"activeSrc\"\n         [attr.src-viewer]=\"originalSrc\"\n         [ngStyle]=\"imageStyle\"\n         [alt]=\"alt\"\n         (load)=\"onImageLoad()\"\n         (error)=\"onImageError()\"\n    />\n</div>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatLegacyDialogModule as MatDialogModule} from '@angular/material/legacy-dialog';\n\nimport {InViewportModule} from 'ng-in-viewport';\n\nimport {SkImageComponent} from './sk-image.component';\nimport {MatLegacyButtonModule as MatButtonModule} from '@angular/material/legacy-button';\nimport {MatIconModule} from '@angular/material/icon';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        InViewportModule,\n        MatDialogModule,\n        MatButtonModule,\n        MatIconModule\n    ],\n    declarations: [\n        SkImageComponent,\n    ],\n    exports: [\n        SkImageComponent\n    ]\n})\nexport class SkImageModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["MatDialogModule","MatButtonModule"],"mappings":"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"}