@fnxone/ngx-photoswipe
Version:
[](https://www.npmjs.com/package/@fnxone/ngx-photoswipe) [](https://www.npmjs.com/package/@fnxone/n
159 lines (148 loc) • 16.4 kB
JavaScript
import * as i0 from '@angular/core';
import { Injectable, Component, ViewChild, Input, NgModule } from '@angular/core';
import * as PhotoSwipe from 'photoswipe';
import * as PhotoSwipeUI_Default from 'photoswipe/dist/photoswipe-ui-default';
import { CommonModule } from '@angular/common';
/* eslint-disable @typescript-eslint/ban-types */
// eslint-disable-next-line prefer-arrow/prefer-arrow-functions
function ngxPhotoSwipeFactory() {
return new DefaultLightboxAdapter();
}
class LightboxAdapter {
}
LightboxAdapter.ɵprov = i0.ɵɵdefineInjectable({ factory: ngxPhotoSwipeFactory, token: LightboxAdapter, providedIn: "root" });
LightboxAdapter.decorators = [
{ type: Injectable, args: [{ providedIn: 'root', useFactory: ngxPhotoSwipeFactory },] }
];
class DefaultLightboxAdapter extends LightboxAdapter {
constructor() {
super(...arguments);
this.allowPanToNext = true;
this.spacing = 0.12;
this.bgOpacity = 1.0;
this.mouseUsed = false;
this.loop = true;
this.pinchToClose = true;
this.closeOnScroll = true;
this.closeOnVerticalDrag = true;
this.hideAnimationDuration = 333;
this.showAnimationDuration = 333;
this.showHideOpacity = false;
this.escKey = true;
this.arrowKeys = true;
}
}
DefaultLightboxAdapter.decorators = [
{ type: Injectable }
];
class NgxPhotoswipeService {
}
NgxPhotoswipeService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NgxPhotoswipeService_Factory() { return new NgxPhotoswipeService(); }, token: NgxPhotoswipeService, providedIn: "root" });
NgxPhotoswipeService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root',
},] }
];
class LightboxComponent {
constructor(ngxPhotoswipeService) {
this.ngxPhotoswipeService = ngxPhotoswipeService;
}
ngAfterContentInit() {
this.ngxPhotoswipeService.lightboxElement = this.el;
}
}
LightboxComponent.decorators = [
{ type: Component, args: [{
selector: 'ngxps-lightbox',
template: "<div class=\"pswp\" #ngxLightbox tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n <div class=\"pswp__bg\"></div>\n <div class=\"pswp__scroll-wrap\">\n <div class=\"pswp__container\">\n <div class=\"pswp__item\"></div>\n <div class=\"pswp__item\"></div>\n <div class=\"pswp__item\"></div>\n </div>\n <div class=\"pswp__ui pswp__ui--hidden\">\n <div class=\"pswp__top-bar\">\n <div class=\"pswp__counter\"></div>\n <button class=\"pswp__button pswp__button--close\" title=\"Close (Esc)\"></button>\n <button class=\"pswp__button pswp__button--fs\" title=\"Toggle fullscreen\"></button>\n <button class=\"pswp__button pswp__button--zoom\" title=\"Zoom in/out\"></button>\n <div class=\"pswp__preloader\">\n <div class=\"pswp__preloader__icn\">\n <div class=\"pswp__preloader__cut\">\n <div class=\"pswp__preloader__donut\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"pswp__share-modal pswp__share-modal--hidden pswp__single-tap\">\n <div class=\"pswp__share-tooltip\"></div>\n </div>\n <button class=\"pswp__button pswp__button--arrow--left\" title=\"Previous (arrow left)\">\n </button>\n <button class=\"pswp__button pswp__button--arrow--right\" title=\"Next (arrow right)\">\n </button>\n <div class=\"pswp__caption\">\n <div class=\"pswp__caption__center\"></div>\n </div>\n </div>\n </div>\n</div>\n",
styles: [".pswp{display:none;position:absolute;width:100%;height:100%;left:0;top:0;overflow:hidden;touch-action:none;z-index:1500;-webkit-text-size-adjust:100%;-webkit-backface-visibility:hidden;outline:none}.pswp *{box-sizing:border-box}.pswp img{max-width:none}.pswp--animate_opacity{opacity:.001;will-change:opacity;transition:opacity 333ms cubic-bezier(.4,0,.22,1)}.pswp--open{display:block}.pswp--zoom-allowed .pswp__img{cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.pswp--zoomed-in .pswp__img{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.pswp--dragging .pswp__img{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.pswp__bg{position:absolute;left:0;top:0;width:100%;height:100%;background:#000;opacity:0;transform:translateZ(0);-webkit-backface-visibility:hidden;will-change:opacity}.pswp__scroll-wrap{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden}.pswp__container,.pswp__zoom-wrap{touch-action:none;position:absolute;left:0;right:0;top:0;bottom:0}.pswp__container,.pswp__img{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-touch-callout:none}.pswp__zoom-wrap{position:absolute;width:100%;transform-origin:left top;transition:transform 333ms cubic-bezier(.4,0,.22,1)}.pswp__bg{will-change:opacity;transition:opacity 333ms cubic-bezier(.4,0,.22,1)}.pswp--animated-in .pswp__bg,.pswp--animated-in .pswp__zoom-wrap{transition:none}.pswp__container,.pswp__zoom-wrap{-webkit-backface-visibility:hidden}.pswp__item{position:absolute;left:0;right:0;top:0;bottom:0;overflow:hidden}.pswp__img{position:absolute;width:auto;height:auto;top:0;left:0}.pswp__img--placeholder{-webkit-backface-visibility:hidden}.pswp__img--placeholder--blank{background:#222}.pswp--ie .pswp__img{width:100%!important;height:auto!important;left:0;top:0}.pswp__error-msg{position:absolute;left:0;top:50%;width:100%;text-align:center;font-size:14px;line-height:16px;margin-top:-8px;color:#ccc}.pswp__error-msg a{color:#ccc;text-decoration:underline}.pswp__button{width:44px;height:44px;position:relative;background:none;cursor:pointer;overflow:visible;-webkit-appearance:none;display:block;border:0;padding:0;margin:0;float:right;opacity:.75;transition:opacity .2s;box-shadow:none}.pswp__button:focus,.pswp__button:hover{opacity:1}.pswp__button:active{outline:none;opacity:.9}.pswp__button::-moz-focus-inner{padding:0;border:0}.pswp__ui--over-close .pswp__button--close{opacity:1}.pswp__button,.pswp__button--arrow--left:before,.pswp__button--arrow--right:before{background:url(/assets/media/default-skin.png) 0 0 no-repeat;background-size:264px 88px;width:44px;height:44px}@media (-webkit-min-device-pixel-ratio: 1.1),(-webkit-min-device-pixel-ratio: 1.09375),(min-resolution: 105dpi),(min-resolution: 1.1dppx){.pswp--svg .pswp__button,.pswp--svg .pswp__button--arrow--left:before,.pswp--svg .pswp__button--arrow--right:before{background-image:url(/assets/media/default-skin.svg)}.pswp--svg .pswp__button--arrow--left,.pswp--svg .pswp__button--arrow--right{background:none}}.pswp__button--close{background-position:0 -44px}.pswp__button--share{background-position:-44px -44px}.pswp__button--fs{display:none}.pswp--supports-fs .pswp__button--fs{display:block}.pswp--fs .pswp__button--fs{background-position:-44px 0}.pswp__button--zoom{display:none;background-position:-88px 0}.pswp--zoom-allowed .pswp__button--zoom{display:block}.pswp--zoomed-in .pswp__button--zoom{background-position:-132px 0}.pswp--touch .pswp__button--arrow--left,.pswp--touch .pswp__button--arrow--right{visibility:hidden}.pswp__button--arrow--left,.pswp__button--arrow--right{background:none;top:50%;margin-top:-50px;width:70px;height:100px;position:absolute}.pswp__button--arrow--left{left:0}.pswp__button--arrow--right{right:0}.pswp__button--arrow--left:before,.pswp__button--arrow--right:before{content:\"\";top:35px;background-color:#0000004d;height:30px;width:32px;position:absolute}.pswp__button--arrow--left:before{left:6px;background-position:-138px -44px}.pswp__button--arrow--right:before{right:6px;background-position:-94px -44px}.pswp__counter,.pswp__share-modal{-webkit-user-select:none;-moz-user-select:none;user-select:none}.pswp__share-modal{display:block;background:rgba(0,0,0,.5);width:100%;height:100%;top:0;left:0;padding:10px;position:absolute;z-index:1600;opacity:0;transition:opacity .25s ease-out;-webkit-backface-visibility:hidden;will-change:opacity}.pswp__share-modal--hidden{display:none}.pswp__share-tooltip{z-index:1620;position:absolute;background:#FFF;top:56px;border-radius:2px;display:block;width:auto;right:44px;box-shadow:0 2px 5px #00000040;transform:translateY(6px);transition:transform .25s;-webkit-backface-visibility:hidden;will-change:transform}.pswp__share-tooltip a{display:block;padding:8px 12px;color:#000;text-decoration:none;font-size:14px;line-height:18px}.pswp__share-tooltip a:hover{text-decoration:none;color:#000}.pswp__share-tooltip a:first-child{border-radius:2px 2px 0 0}.pswp__share-tooltip a:last-child{border-radius:0 0 2px 2px}.pswp__share-modal--fade-in{opacity:1}.pswp__share-modal--fade-in .pswp__share-tooltip{transform:translateY(0)}.pswp--touch .pswp__share-tooltip a{padding:16px 12px}a.pswp__share--facebook:before{content:\"\";display:block;width:0;height:0;position:absolute;top:-12px;right:15px;border:6px solid rgba(0,0,0,0);border-bottom-color:#fff;-webkit-pointer-events:none;-moz-pointer-events:none;pointer-events:none}a.pswp__share--facebook:hover{background:#3E5C9A;color:#fff}a.pswp__share--facebook:hover:before{border-bottom-color:#3e5c9a}a.pswp__share--twitter:hover{background:#55ACEE;color:#fff}a.pswp__share--pinterest:hover{background:#CCC;color:#ce272d}a.pswp__share--download:hover{background:#DDD}.pswp__counter{position:absolute;left:0;top:0;height:44px;font-size:13px;line-height:44px;color:#fff;opacity:.75;padding:0 10px}.pswp__caption{position:absolute;left:0;bottom:0;width:100%;min-height:44px}.pswp__caption small{font-size:11px;color:#bbb}.pswp__caption__center{text-align:left;max-width:420px;margin:0 auto;font-size:13px;padding:10px;line-height:20px;color:#ccc}.pswp__caption--empty{display:none}.pswp__caption--fake{visibility:hidden}.pswp__preloader{width:44px;height:44px;position:absolute;top:0;left:50%;margin-left:-22px;opacity:0;transition:opacity .25s ease-out;will-change:opacity;direction:ltr}.pswp__preloader__icn{width:20px;height:20px;margin:12px}.pswp__preloader--active{opacity:1}.pswp__preloader--active .pswp__preloader__icn{background:url(/assets/media/preloader.gif) 0 0 no-repeat}.pswp--css_animation .pswp__preloader--active{opacity:1}.pswp--css_animation .pswp__preloader--active .pswp__preloader__icn{-webkit-animation:clockwise .5s linear infinite;animation:clockwise .5s linear infinite}.pswp--css_animation .pswp__preloader--active .pswp__preloader__donut{-webkit-animation:donut-rotate 1s cubic-bezier(.4,0,.22,1) infinite;animation:donut-rotate 1s cubic-bezier(.4,0,.22,1) infinite}.pswp--css_animation .pswp__preloader__icn{background:none;opacity:.75;width:14px;height:14px;position:absolute;left:15px;top:15px;margin:0}.pswp--css_animation .pswp__preloader__cut{position:relative;width:7px;height:14px;overflow:hidden}.pswp--css_animation .pswp__preloader__donut{box-sizing:border-box;width:14px;height:14px;border:2px solid #FFF;border-radius:50%;border-left-color:transparent;border-bottom-color:transparent;position:absolute;top:0;left:0;background:none;margin:0}@media screen and (max-width: 1024px){.pswp__preloader{position:relative;left:auto;top:auto;margin:0;float:right}}@-webkit-keyframes clockwise{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes clockwise{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@-webkit-keyframes donut-rotate{0%{transform:rotate(0)}50%{transform:rotate(-140deg)}to{transform:rotate(0)}}@keyframes donut-rotate{0%{transform:rotate(0)}50%{transform:rotate(-140deg)}to{transform:rotate(0)}}.pswp__ui{-webkit-font-smoothing:auto;visibility:visible;opacity:1;z-index:1550}.pswp__top-bar{position:absolute;left:0;top:0;height:44px;width:100%}.pswp__caption,.pswp__top-bar,.pswp--has_mouse .pswp__button--arrow--left,.pswp--has_mouse .pswp__button--arrow--right{-webkit-backface-visibility:hidden;will-change:opacity;transition:opacity 333ms cubic-bezier(.4,0,.22,1)}.pswp--has_mouse .pswp__button--arrow--left,.pswp--has_mouse .pswp__button--arrow--right{visibility:visible}.pswp__top-bar,.pswp__caption{background-color:#00000080}.pswp__ui--fit .pswp__top-bar,.pswp__ui--fit .pswp__caption{background-color:#0000004d}.pswp__ui--idle .pswp__top-bar{opacity:0}.pswp__ui--idle .pswp__button--arrow--left,.pswp__ui--idle .pswp__button--arrow--right{opacity:0}.pswp__ui--hidden .pswp__top-bar,.pswp__ui--hidden .pswp__caption,.pswp__ui--hidden .pswp__button--arrow--left,.pswp__ui--hidden .pswp__button--arrow--right{opacity:.001}.pswp__ui--one-slide .pswp__button--arrow--left,.pswp__ui--one-slide .pswp__button--arrow--right,.pswp__ui--one-slide .pswp__counter{display:none}.pswp__element--disabled{display:none!important}.pswp--minimal--dark .pswp__top-bar{background:none}\n"]
},] }
];
LightboxComponent.ctorParameters = () => [
{ type: NgxPhotoswipeService }
];
LightboxComponent.propDecorators = {
el: [{ type: ViewChild, args: ['ngxLightbox', { static: true },] }]
};
var GridGap;
(function (GridGap) {
GridGap[GridGap["GAP0"] = 0] = "GAP0";
GridGap[GridGap["GAP1"] = 1] = "GAP1";
GridGap[GridGap["GAP2"] = 2] = "GAP2";
GridGap[GridGap["GAP3"] = 3] = "GAP3";
GridGap[GridGap["GAP4"] = 4] = "GAP4";
GridGap[GridGap["GAP5"] = 5] = "GAP5";
})(GridGap || (GridGap = {}));
class GalleryComponent {
constructor(ngxPhotoswipeService, adapter) {
this.ngxPhotoswipeService = ngxPhotoswipeService;
this.adapter = adapter;
this.gridGap = GridGap.GAP1;
}
onClickImage(data, index) {
data.id = index;
this.openPhotoSwipe(data);
return false;
}
openPhotoSwipe(image) {
this.adapter.galleryUID = Number(this.galleryElement.nativeElement.getAttribute('data-pswp-uid'));
this.adapter.index = image.id;
const PSWP = this.ngxPhotoswipeService.lightboxElement
.nativeElement;
this.pswp = new PhotoSwipe(PSWP, PhotoSwipeUI_Default, this.getImagesAsPhotoSwipe(), this.adapter);
this.pswp.init();
return false;
}
getImagesAsPhotoSwipe() {
return this.images.map((image) => ({
src: image.img,
w: image.width != null ? image.width : 4934,
h: image.height != null ? image.height : 3296,
pid: image.id,
title: image.description,
}));
}
}
GalleryComponent.decorators = [
{ type: Component, args: [{
selector: 'ngxps-gallery',
template: "<div class=\"d-grid ngx-gallery\" [ngClass]=\"'gap-'+gridGap\" #ngxpsGallery>\n <figure class=\"m-0 p-0\" *ngFor=\"let image of images; let idx = index\">\n <a [href]=\"image.img\" data-size=\"4934x3296\" (click)=\"onClickImage(image, idx)\">\n <img class=\"img-fluid rounded-1\" [src]=\"image.thumb\" [alt]=\"image.description\">\n </a>\n </figure>\n\n <ng-content></ng-content>\n</div>\n",
styles: [".ngx-gallery{grid-template-columns:repeat(auto-fill,minmax(16rem,1fr))}.ngx-gallery figure img{cursor:zoom-in;transition:opacity .4s ease-in-out}.ngx-gallery figure img:hover{opacity:.8}\n"]
},] }
];
GalleryComponent.ctorParameters = () => [
{ type: NgxPhotoswipeService },
{ type: LightboxAdapter }
];
GalleryComponent.propDecorators = {
galleryElement: [{ type: ViewChild, args: ['ngxpsGallery', { static: true },] }],
images: [{ type: Input }],
gridGap: [{ type: Input }]
};
class NgxPhotoswipeModule {
}
NgxPhotoswipeModule.decorators = [
{ type: NgModule, args: [{
declarations: [LightboxComponent, GalleryComponent],
imports: [CommonModule],
exports: [LightboxComponent, GalleryComponent],
},] }
];
class Image {
constructor(img, thumb, description, width, height, id) {
this.img = img;
this.thumb = thumb;
this.description = description;
this.width = width;
this.height = height;
this.id = id;
}
}
/*
* Public API Surface of ngx-photoswipe
*/
/**
* Generated bundle index. Do not edit.
*/
export { GalleryComponent, GridGap, Image, LightboxAdapter, NgxPhotoswipeModule, ngxPhotoSwipeFactory as ɵa, DefaultLightboxAdapter as ɵb, LightboxComponent as ɵc, NgxPhotoswipeService as ɵd };
//# sourceMappingURL=fnxone-ngx-photoswipe.js.map