lightgallery 2.9.0 → 3.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +690 -0
- package/README.md +31 -21
- package/dist/README.md +229 -0
- package/{css → dist/css}/lg-autoplay.css +7 -4
- package/{css → dist/css}/lg-autoplay.css.map +1 -1
- package/{css → dist/css}/lg-comments.css +0 -6
- package/{css → dist/css}/lg-comments.css.map +1 -1
- package/dist/css/lg-fullscreen.css +11 -0
- package/dist/css/lg-fullscreen.css.map +1 -0
- package/dist/css/lg-justified.css +37 -0
- package/dist/css/lg-justified.css.map +1 -0
- package/{css → dist/css}/lg-pager.css.map +1 -1
- package/{css → dist/css}/lg-rotate.css +0 -16
- package/{css → dist/css}/lg-rotate.css.map +1 -1
- package/dist/css/lg-rtl.css +94 -0
- package/dist/css/lg-rtl.css.map +1 -0
- package/{css → dist/css}/lg-share.css +4 -32
- package/dist/css/lg-share.css.map +1 -0
- package/{css → dist/css}/lg-thumbnail.css +7 -3
- package/dist/css/lg-thumbnail.css.map +1 -0
- package/{css → dist/css}/lg-transitions.css +10 -0
- package/dist/css/lg-transitions.css.map +1 -0
- package/{css → dist/css}/lg-zoom.css +20 -9
- package/dist/css/lg-zoom.css.map +1 -0
- package/{css → dist/css}/lightgallery-bundle.css +150 -118
- package/dist/css/lightgallery-bundle.css.map +1 -0
- package/dist/css/lightgallery-bundle.min.css +1 -0
- package/{css → dist/css}/lightgallery-core.css +49 -7
- package/dist/css/lightgallery-core.css.map +1 -0
- package/{css → dist/css}/lightgallery.css +105 -44
- package/dist/css/lightgallery.css.map +1 -0
- package/dist/lightgallery.es5.js +3797 -0
- package/dist/lightgallery.es5.js.map +1 -0
- package/dist/lightgallery.min.js +1 -0
- package/dist/lightgallery.umd.js +3800 -0
- package/dist/lightgallery.umd.js.map +1 -0
- package/dist/package.json +33 -0
- package/dist/plugins/autoplay/lg-autoplay.es5.js +193 -0
- package/dist/plugins/autoplay/lg-autoplay.es5.js.map +1 -0
- package/dist/plugins/autoplay/lg-autoplay.min.js +1 -0
- package/dist/plugins/autoplay/lg-autoplay.umd.js +196 -0
- package/dist/plugins/autoplay/lg-autoplay.umd.js.map +1 -0
- package/dist/plugins/autoplay/package.json +7 -0
- package/dist/plugins/comment/lg-comment.es5.js +136 -0
- package/dist/plugins/comment/lg-comment.es5.js.map +1 -0
- package/dist/plugins/comment/lg-comment.min.js +1 -0
- package/dist/plugins/comment/lg-comment.umd.js +139 -0
- package/dist/plugins/comment/lg-comment.umd.js.map +1 -0
- package/dist/plugins/comment/package.json +7 -0
- package/dist/plugins/fullscreen/lg-fullscreen.es5.js +114 -0
- package/dist/plugins/fullscreen/lg-fullscreen.es5.js.map +1 -0
- package/dist/plugins/fullscreen/lg-fullscreen.min.js +1 -0
- package/dist/plugins/fullscreen/lg-fullscreen.umd.js +117 -0
- package/dist/plugins/fullscreen/lg-fullscreen.umd.js.map +1 -0
- package/dist/plugins/fullscreen/package.json +7 -0
- package/dist/plugins/hash/lg-hash.es5.js +207 -0
- package/dist/plugins/hash/lg-hash.es5.js.map +1 -0
- package/dist/plugins/hash/lg-hash.min.js +1 -0
- package/dist/plugins/hash/lg-hash.umd.js +210 -0
- package/dist/plugins/hash/lg-hash.umd.js.map +1 -0
- package/dist/plugins/hash/package.json +7 -0
- package/dist/plugins/justified/lg-justified.es5.js +415 -0
- package/dist/plugins/justified/lg-justified.es5.js.map +1 -0
- package/dist/plugins/justified/lg-justified.min.js +1 -0
- package/dist/plugins/justified/lg-justified.umd.js +418 -0
- package/dist/plugins/justified/lg-justified.umd.js.map +1 -0
- package/dist/plugins/justified/package.json +7 -0
- package/dist/plugins/mediumZoom/lg-medium-zoom.es5.js +95 -0
- package/dist/plugins/mediumZoom/lg-medium-zoom.es5.js.map +1 -0
- package/dist/plugins/mediumZoom/lg-medium-zoom.min.js +1 -0
- package/dist/plugins/mediumZoom/lg-medium-zoom.umd.js +98 -0
- package/dist/plugins/mediumZoom/lg-medium-zoom.umd.js.map +1 -0
- package/dist/plugins/mediumZoom/package.json +7 -0
- package/dist/plugins/originCrop/lg-origin-crop.es5.js +622 -0
- package/dist/plugins/originCrop/lg-origin-crop.es5.js.map +1 -0
- package/dist/plugins/originCrop/lg-origin-crop.min.js +1 -0
- package/dist/plugins/originCrop/lg-origin-crop.umd.js +625 -0
- package/dist/plugins/originCrop/lg-origin-crop.umd.js.map +1 -0
- package/dist/plugins/pager/lg-pager.es5.js +96 -0
- package/dist/plugins/pager/lg-pager.es5.js.map +1 -0
- package/dist/plugins/pager/lg-pager.min.js +1 -0
- package/dist/plugins/pager/lg-pager.umd.js +99 -0
- package/dist/plugins/pager/lg-pager.umd.js.map +1 -0
- package/dist/plugins/pager/package.json +7 -0
- package/dist/plugins/relativeCaption/lg-relative-caption.es5.js +98 -0
- package/dist/plugins/relativeCaption/lg-relative-caption.es5.js.map +1 -0
- package/dist/plugins/relativeCaption/lg-relative-caption.min.js +1 -0
- package/dist/plugins/relativeCaption/lg-relative-caption.umd.js +101 -0
- package/dist/plugins/relativeCaption/lg-relative-caption.umd.js.map +1 -0
- package/dist/plugins/relativeCaption/package.json +7 -0
- package/dist/plugins/rotate/lg-rotate.es5.js +226 -0
- package/dist/plugins/rotate/lg-rotate.es5.js.map +1 -0
- package/dist/plugins/rotate/lg-rotate.min.js +1 -0
- package/dist/plugins/rotate/lg-rotate.umd.js +229 -0
- package/dist/plugins/rotate/lg-rotate.umd.js.map +1 -0
- package/dist/plugins/rotate/package.json +7 -0
- package/dist/plugins/share/lg-share.es5.js +309 -0
- package/dist/plugins/share/lg-share.es5.js.map +1 -0
- package/dist/plugins/share/lg-share.min.js +1 -0
- package/dist/plugins/share/lg-share.umd.js +312 -0
- package/dist/plugins/share/lg-share.umd.js.map +1 -0
- package/dist/plugins/share/package.json +7 -0
- package/dist/plugins/thumbnail/lg-thumbnail.es5.js +792 -0
- package/dist/plugins/thumbnail/lg-thumbnail.es5.js.map +1 -0
- package/dist/plugins/thumbnail/lg-thumbnail.min.js +1 -0
- package/dist/plugins/thumbnail/lg-thumbnail.umd.js +795 -0
- package/dist/plugins/thumbnail/lg-thumbnail.umd.js.map +1 -0
- package/dist/plugins/thumbnail/package.json +7 -0
- package/dist/plugins/video/lg-video.es5.js +518 -0
- package/dist/plugins/video/lg-video.es5.js.map +1 -0
- package/dist/plugins/video/lg-video.min.js +1 -0
- package/dist/plugins/video/lg-video.umd.js +521 -0
- package/dist/plugins/video/lg-video.umd.js.map +1 -0
- package/dist/plugins/video/package.json +7 -0
- package/dist/plugins/vimeoThumbnail/lg-vimeo-thumbnail.es5.js +72 -0
- package/dist/plugins/vimeoThumbnail/lg-vimeo-thumbnail.es5.js.map +1 -0
- package/dist/plugins/vimeoThumbnail/lg-vimeo-thumbnail.min.js +1 -0
- package/dist/plugins/vimeoThumbnail/lg-vimeo-thumbnail.umd.js +75 -0
- package/dist/plugins/vimeoThumbnail/lg-vimeo-thumbnail.umd.js.map +1 -0
- package/dist/plugins/vimeoThumbnail/package.json +7 -0
- package/dist/plugins/zoom/lg-zoom.es5.js +1412 -0
- package/dist/plugins/zoom/lg-zoom.es5.js.map +1 -0
- package/dist/plugins/zoom/lg-zoom.min.js +1 -0
- package/dist/plugins/zoom/lg-zoom.umd.js +1415 -0
- package/dist/plugins/zoom/lg-zoom.umd.js.map +1 -0
- package/dist/plugins/zoom/package.json +7 -0
- package/{scss → dist/scss}/_lg-theme-default.scss +68 -18
- package/{scss → dist/scss}/_lg-variables.scss +0 -1
- package/{scss → dist/scss}/lg-autoplay.scss +10 -4
- package/{scss → dist/scss}/lg-comments.scss +0 -8
- package/dist/scss/lg-fullscreen.scss +15 -0
- package/dist/scss/lg-justified.scss +63 -0
- package/{scss → dist/scss}/lg-rotate.scss +0 -24
- package/dist/scss/lg-rtl.scss +145 -0
- package/{scss → dist/scss}/lg-share.scss +6 -33
- package/{scss → dist/scss}/lg-thumbnail.scss +16 -5
- package/{scss → dist/scss}/lg-zoom.scss +46 -9
- package/{scss → dist/scss}/lightgallery-bundle.scss +0 -1
- package/{scss → dist/scss}/lightgallery-core.scss +73 -6
- package/{scss → dist/scss}/lightgallery.scss +0 -1
- package/{scss → dist/scss}/transitions/_lg-scale-up.scss +6 -0
- package/{scss → dist/scss}/transitions/_lg-slide-circular-vertical.scss +6 -0
- package/{scss → dist/scss}/transitions/_lg-slide-circular.scss +6 -0
- package/{scss → dist/scss}/transitions/_lg-soft-zoom.scss +6 -0
- package/{scss → dist/scss}/transitions/_lg-zoom-in-big.scss +6 -0
- package/{scss → dist/scss}/transitions/_lg-zoom-in-out.scss +6 -0
- package/{scss → dist/scss}/transitions/_lg-zoom-in.scss +6 -0
- package/{scss → dist/scss}/transitions/_lg-zoom-out-big.scss +6 -0
- package/{scss → dist/scss}/transitions/_lg-zoom-out-in.scss +6 -0
- package/{scss → dist/scss}/transitions/_lg-zoom-out.scss +6 -0
- package/dist/types/headless/announce.d.ts +22 -0
- package/dist/types/headless/emitter.d.ts +14 -0
- package/dist/types/headless/gestures.d.ts +128 -0
- package/dist/types/headless/hash-driver.d.ts +77 -0
- package/dist/types/headless/icons.d.ts +56 -0
- package/dist/types/headless/index.d.ts +34 -0
- package/dist/types/headless/items.d.ts +92 -0
- package/dist/types/headless/justified-layout.d.ts +71 -0
- package/dist/types/headless/license.d.ts +35 -0
- package/dist/types/headless/origin-crop.d.ts +135 -0
- package/dist/types/headless/origin.d.ts +65 -0
- package/dist/types/headless/plugin-slices.d.ts +64 -0
- package/dist/types/headless/preload.d.ts +36 -0
- package/dist/types/headless/responsive.d.ts +90 -0
- package/dist/types/headless/settings.d.ts +268 -0
- package/dist/types/headless/share-urls.d.ts +60 -0
- package/dist/types/headless/spring.d.ts +42 -0
- package/dist/types/headless/state.d.ts +63 -0
- package/dist/types/headless/thumb-math.d.ts +85 -0
- package/dist/types/headless/toolbar-overflow.d.ts +61 -0
- package/dist/types/headless/transition.d.ts +33 -0
- package/dist/types/headless/velocity.d.ts +31 -0
- package/dist/types/headless/video-urls.d.ts +64 -0
- package/dist/types/headless/zoom-math.d.ts +89 -0
- package/{index.d.ts → dist/types/index.d.ts} +9 -4
- package/{lg-events.d.ts → dist/types/lg-events.d.ts} +300 -300
- package/dist/types/lg-icons.d.ts +27 -0
- package/{lg-plugin.d.ts → dist/types/lg-plugin.d.ts} +7 -7
- package/{lg-settings.d.ts → dist/types/lg-settings.d.ts} +549 -425
- package/dist/types/lg-spring-runner.d.ts +14 -0
- package/dist/types/lg-toolbar-overflow.d.ts +36 -0
- package/{lg-utils.d.ts → dist/types/lg-utils.d.ts} +236 -228
- package/{lgQuery.d.ts → dist/types/lgQuery.d.ts} +56 -56
- package/{lightgallery.d.ts → dist/types/lightgallery.d.ts} +384 -305
- package/{plugins → dist/types/plugins}/autoplay/lg-autoplay-settings.d.ts +41 -38
- package/{plugins → dist/types/plugins}/autoplay/lg-autoplay.d.ts +22 -22
- package/{plugins → dist/types/plugins}/comment/lg-comment-settings.d.ts +36 -33
- package/{plugins → dist/types/plugins}/comment/lg-comment.d.ts +25 -25
- package/{plugins → dist/types/plugins}/fullscreen/lg-fullscreen-settings.d.ts +17 -14
- package/{plugins → dist/types/plugins}/fullscreen/lg-fullscreen.d.ts +16 -16
- package/dist/types/plugins/hash/lg-hash-settings.d.ts +28 -0
- package/{plugins → dist/types/plugins}/hash/lg-hash.d.ts +25 -23
- package/dist/types/plugins/justified/lg-justified-settings.d.ts +42 -0
- package/dist/types/plugins/justified/lg-justified.d.ts +55 -0
- package/{plugins → dist/types/plugins}/mediumZoom/lg-medium-zoom-settings.d.ts +16 -16
- package/{plugins → dist/types/plugins}/mediumZoom/lg-medium-zoom.d.ts +12 -12
- package/dist/types/plugins/originCrop/lg-origin-crop-settings.d.ts +12 -0
- package/dist/types/plugins/originCrop/lg-origin-crop.d.ts +79 -0
- package/{plugins → dist/types/plugins}/pager/lg-pager-settings.d.ts +7 -7
- package/{plugins → dist/types/plugins}/pager/lg-pager.d.ts +13 -13
- package/{plugins → dist/types/plugins}/relativeCaption/lg-relative-caption-settings.d.ts +7 -7
- package/{plugins → dist/types/plugins}/relativeCaption/lg-relative-caption.d.ts +14 -14
- package/{plugins → dist/types/plugins}/rotate/lg-rotate-settings.d.ts +47 -45
- package/{plugins → dist/types/plugins}/rotate/lg-rotate.d.ts +25 -24
- package/{plugins → dist/types/plugins}/share/lg-fb-share-utils.d.ts +2 -2
- package/{plugins → dist/types/plugins}/share/lg-pinterest-share-utils.d.ts +2 -2
- package/{plugins → dist/types/plugins}/share/lg-share-settings.d.ts +71 -56
- package/dist/types/plugins/share/lg-share.d.ts +33 -0
- package/dist/types/plugins/share/lg-twitter-share-utils.d.ts +4 -0
- package/{plugins → dist/types/plugins}/share/types.d.ts +6 -6
- package/{plugins → dist/types/plugins}/thumbnail/lg-thumbnail-settings.d.ts +85 -70
- package/dist/types/plugins/thumbnail/lg-thumbnail.d.ts +88 -0
- package/{plugins → dist/types/plugins}/video/lg-video-settings.d.ts +94 -71
- package/{plugins → dist/types/plugins}/video/lg-video.d.ts +116 -104
- package/{plugins → dist/types/plugins}/video/types.d.ts +8 -8
- package/{plugins → dist/types/plugins}/vimeoThumbnail/lg-vimeo-thumbnail-settings.d.ts +11 -11
- package/{plugins → dist/types/plugins}/vimeoThumbnail/lg-vimeo-thumbnail.d.ts +14 -14
- package/{plugins → dist/types/plugins}/zoom/lg-zoom-settings.d.ts +54 -51
- package/{plugins → dist/types/plugins}/zoom/lg-zoom.d.ts +145 -108
- package/{types.d.ts → dist/types/types.d.ts} +40 -40
- package/package.json +222 -8
- package/angular/10/README.md +0 -24
- package/angular/10/bundles/lightgallery-angular-10.umd.js +0 -289
- package/angular/10/bundles/lightgallery-angular-10.umd.js.map +0 -1
- package/angular/10/bundles/lightgallery-angular-10.umd.min.js +0 -2
- package/angular/10/bundles/lightgallery-angular-10.umd.min.js.map +0 -1
- package/angular/10/esm2015/lib/lightgallery-angular.component.js +0 -225
- package/angular/10/esm2015/lib/lightgallery-angular.module.js +0 -17
- package/angular/10/esm2015/lib/lightgallery-angular.service.js +0 -14
- package/angular/10/esm2015/lightgallery-angular-10.js +0 -5
- package/angular/10/esm2015/public-api.js +0 -7
- package/angular/10/fesm2015/lightgallery-angular-10.js +0 -261
- package/angular/10/fesm2015/lightgallery-angular-10.js.map +0 -1
- package/angular/10/lib/lightgallery-angular.component.d.ts +0 -39
- package/angular/10/lib/lightgallery-angular.component.d.ts.map +0 -1
- package/angular/10/lib/lightgallery-angular.module.d.ts +0 -7
- package/angular/10/lib/lightgallery-angular.module.d.ts.map +0 -1
- package/angular/10/lib/lightgallery-angular.service.d.ts +0 -7
- package/angular/10/lib/lightgallery-angular.service.d.ts.map +0 -1
- package/angular/10/lightgallery-angular-10.d.ts +0 -6
- package/angular/10/lightgallery-angular-10.d.ts.map +0 -1
- package/angular/10/package.json +0 -21
- package/angular/10/public-api.d.ts +0 -4
- package/angular/10/public-api.d.ts.map +0 -1
- package/angular/11/README.md +0 -24
- package/angular/11/bundles/lightgallery-angular-11.umd.js +0 -290
- package/angular/11/bundles/lightgallery-angular-11.umd.js.map +0 -1
- package/angular/11/bundles/lightgallery-angular-11.umd.min.js +0 -2
- package/angular/11/bundles/lightgallery-angular-11.umd.min.js.map +0 -1
- package/angular/11/esm2015/lib/lightgallery-angular.component.js +0 -225
- package/angular/11/esm2015/lib/lightgallery-angular.module.js +0 -18
- package/angular/11/esm2015/lib/lightgallery-angular.service.js +0 -14
- package/angular/11/esm2015/lightgallery-angular-11.js +0 -5
- package/angular/11/esm2015/public-api.js +0 -7
- package/angular/11/fesm2015/lightgallery-angular-11.js +0 -262
- package/angular/11/fesm2015/lightgallery-angular-11.js.map +0 -1
- package/angular/11/lib/lightgallery-angular.component.d.ts +0 -39
- package/angular/11/lib/lightgallery-angular.component.d.ts.map +0 -1
- package/angular/11/lib/lightgallery-angular.module.d.ts +0 -8
- package/angular/11/lib/lightgallery-angular.module.d.ts.map +0 -1
- package/angular/11/lib/lightgallery-angular.service.d.ts +0 -7
- package/angular/11/lib/lightgallery-angular.service.d.ts.map +0 -1
- package/angular/11/lightgallery-angular-11.d.ts +0 -6
- package/angular/11/lightgallery-angular-11.d.ts.map +0 -1
- package/angular/11/package.json +0 -21
- package/angular/11/public-api.d.ts +0 -4
- package/angular/11/public-api.d.ts.map +0 -1
- package/angular/12/README.md +0 -24
- package/angular/12/bundles/lightgallery-angular-12.umd.js +0 -296
- package/angular/12/bundles/lightgallery-angular-12.umd.js.map +0 -1
- package/angular/12/esm2015/lib/lightgallery-angular.component.js +0 -221
- package/angular/12/esm2015/lib/lightgallery-angular.module.js +0 -17
- package/angular/12/esm2015/lib/lightgallery-angular.service.js +0 -14
- package/angular/12/esm2015/lightgallery-angular-12.js +0 -5
- package/angular/12/esm2015/public-api.js +0 -7
- package/angular/12/fesm2015/lightgallery-angular-12.js +0 -258
- package/angular/12/fesm2015/lightgallery-angular-12.js.map +0 -1
- package/angular/12/lib/lightgallery-angular.component.d.ts +0 -38
- package/angular/12/lib/lightgallery-angular.module.d.ts +0 -7
- package/angular/12/lib/lightgallery-angular.service.d.ts +0 -6
- package/angular/12/lightgallery-angular-12.d.ts +0 -5
- package/angular/12/package.json +0 -18
- package/angular/12/public-api.d.ts +0 -3
- package/angular/13/README.md +0 -24
- package/angular/13/esm2020/lib/lightgallery-angular.component.mjs +0 -221
- package/angular/13/esm2020/lib/lightgallery-angular.module.mjs +0 -17
- package/angular/13/esm2020/lib/lightgallery-angular.service.mjs +0 -14
- package/angular/13/esm2020/lightgallery-angular-13.mjs +0 -5
- package/angular/13/esm2020/public-api.mjs +0 -7
- package/angular/13/fesm2015/lightgallery-angular-13.mjs +0 -258
- package/angular/13/fesm2015/lightgallery-angular-13.mjs.map +0 -1
- package/angular/13/fesm2020/lightgallery-angular-13.mjs +0 -258
- package/angular/13/fesm2020/lightgallery-angular-13.mjs.map +0 -1
- package/angular/13/lib/lightgallery-angular.component.d.ts +0 -38
- package/angular/13/lib/lightgallery-angular.module.d.ts +0 -7
- package/angular/13/lib/lightgallery-angular.service.d.ts +0 -6
- package/angular/13/lightgallery-angular-13.d.ts +0 -5
- package/angular/13/package.json +0 -31
- package/angular/13/public-api.d.ts +0 -3
- package/angular/14/README.md +0 -24
- package/angular/14/esm2020/lib/lightgallery-angular.component.mjs +0 -217
- package/angular/14/esm2020/lib/lightgallery-angular.module.mjs +0 -17
- package/angular/14/esm2020/lib/lightgallery-angular.service.mjs +0 -14
- package/angular/14/esm2020/lightgallery-angular-14.mjs +0 -5
- package/angular/14/esm2020/public-api.mjs +0 -7
- package/angular/14/fesm2015/lightgallery-angular-14.mjs +0 -254
- package/angular/14/fesm2015/lightgallery-angular-14.mjs.map +0 -1
- package/angular/14/fesm2020/lightgallery-angular-14.mjs +0 -254
- package/angular/14/fesm2020/lightgallery-angular-14.mjs.map +0 -1
- package/angular/14/index.d.ts +0 -5
- package/angular/14/lib/lightgallery-angular.component.d.ts +0 -38
- package/angular/14/lib/lightgallery-angular.module.d.ts +0 -7
- package/angular/14/lib/lightgallery-angular.service.d.ts +0 -6
- package/angular/14/package.json +0 -31
- package/angular/14/public-api.d.ts +0 -3
- package/angular/15/README.md +0 -24
- package/angular/15/esm2022/lib/lightgallery-angular.component.mjs +0 -218
- package/angular/15/esm2022/lib/lightgallery-angular.module.mjs +0 -18
- package/angular/15/esm2022/lib/lightgallery-angular.service.mjs +0 -15
- package/angular/15/esm2022/lightgallery-angular-15.mjs +0 -5
- package/angular/15/esm2022/public-api.mjs +0 -7
- package/angular/15/fesm2022/lightgallery-angular-15.mjs +0 -254
- package/angular/15/fesm2022/lightgallery-angular-15.mjs.map +0 -1
- package/angular/15/index.d.ts +0 -5
- package/angular/15/lib/lightgallery-angular.component.d.ts +0 -38
- package/angular/15/lib/lightgallery-angular.module.d.ts +0 -7
- package/angular/15/lib/lightgallery-angular.service.d.ts +0 -6
- package/angular/15/package.json +0 -25
- package/angular/15/public-api.d.ts +0 -3
- package/angular/16/README.md +0 -24
- package/angular/16/esm2022/lib/lightgallery-angular.component.mjs +0 -218
- package/angular/16/esm2022/lib/lightgallery-angular.module.mjs +0 -18
- package/angular/16/esm2022/lib/lightgallery-angular.service.mjs +0 -15
- package/angular/16/esm2022/lightgallery-angular-16.mjs +0 -5
- package/angular/16/esm2022/public-api.mjs +0 -7
- package/angular/16/fesm2022/lightgallery-angular-16.mjs +0 -254
- package/angular/16/fesm2022/lightgallery-angular-16.mjs.map +0 -1
- package/angular/16/index.d.ts +0 -5
- package/angular/16/lib/lightgallery-angular.component.d.ts +0 -38
- package/angular/16/lib/lightgallery-angular.module.d.ts +0 -7
- package/angular/16/lib/lightgallery-angular.service.d.ts +0 -6
- package/angular/16/package.json +0 -25
- package/angular/16/public-api.d.ts +0 -3
- package/angular/9/README.md +0 -24
- package/angular/9/bundles/lightgallery-angular-9.umd.js +0 -271
- package/angular/9/bundles/lightgallery-angular-9.umd.js.map +0 -1
- package/angular/9/bundles/lightgallery-angular-9.umd.min.js +0 -2
- package/angular/9/bundles/lightgallery-angular-9.umd.min.js.map +0 -1
- package/angular/9/esm2015/lib/lightgallery-angular.component.js +0 -225
- package/angular/9/esm2015/lib/lightgallery-angular.module.js +0 -17
- package/angular/9/esm2015/lib/lightgallery-angular.service.js +0 -14
- package/angular/9/esm2015/lightgallery-angular-9.js +0 -5
- package/angular/9/esm2015/public-api.js +0 -7
- package/angular/9/esm5/lib/lightgallery-angular.component.js +0 -228
- package/angular/9/esm5/lib/lightgallery-angular.module.js +0 -21
- package/angular/9/esm5/lib/lightgallery-angular.service.js +0 -17
- package/angular/9/esm5/lightgallery-angular-9.js +0 -5
- package/angular/9/esm5/public-api.js +0 -7
- package/angular/9/fesm2015/lightgallery-angular-9.js +0 -261
- package/angular/9/fesm2015/lightgallery-angular-9.js.map +0 -1
- package/angular/9/fesm5/lightgallery-angular-9.js +0 -268
- package/angular/9/fesm5/lightgallery-angular-9.js.map +0 -1
- package/angular/9/lib/lightgallery-angular.component.d.ts +0 -38
- package/angular/9/lib/lightgallery-angular.module.d.ts +0 -6
- package/angular/9/lib/lightgallery-angular.service.d.ts +0 -6
- package/angular/9/lightgallery-angular-9.d.ts +0 -5
- package/angular/9/package.json +0 -23
- package/angular/9/public-api.d.ts +0 -3
- package/angular/README.md +0 -24
- package/angular/esm2022/lib/lightgallery-angular.component.mjs +0 -218
- package/angular/esm2022/lib/lightgallery-angular.module.mjs +0 -18
- package/angular/esm2022/lib/lightgallery-angular.service.mjs +0 -15
- package/angular/esm2022/lightgallery-angular.mjs +0 -5
- package/angular/esm2022/public-api.mjs +0 -7
- package/angular/fesm2022/lightgallery-angular.mjs +0 -254
- package/angular/fesm2022/lightgallery-angular.mjs.map +0 -1
- package/angular/index.d.ts +0 -5
- package/angular/lib/lightgallery-angular.component.d.ts +0 -38
- package/angular/lib/lightgallery-angular.module.d.ts +0 -7
- package/angular/lib/lightgallery-angular.service.d.ts +0 -6
- package/angular/package.json +0 -25
- package/angular/public-api.d.ts +0 -3
- package/css/lg-fullscreen.css +0 -8
- package/css/lg-fullscreen.css.map +0 -1
- package/css/lg-share.css.map +0 -1
- package/css/lg-thumbnail.css.map +0 -1
- package/css/lg-transitions.css.map +0 -1
- package/css/lg-zoom.css.map +0 -1
- package/css/lightgallery-bundle.css.map +0 -1
- package/css/lightgallery-bundle.min.css +0 -1
- package/css/lightgallery-core.css.map +0 -1
- package/css/lightgallery.css.map +0 -1
- package/fonts/lg.svg +0 -54
- package/fonts/lg.ttf +0 -0
- package/fonts/lg.woff +0 -0
- package/fonts/lg.woff2 +0 -0
- package/lib/index.js +0 -8
- package/lib/index.js.map +0 -1
- package/lib/lg-events.js +0 -37
- package/lib/lg-events.js.map +0 -1
- package/lib/lg-plugin.js +0 -13
- package/lib/lg-plugin.js.map +0 -1
- package/lib/lg-settings.js +0 -83
- package/lib/lg-settings.js.map +0 -1
- package/lib/lg-utils.js +0 -328
- package/lib/lg-utils.js.map +0 -1
- package/lib/lgQuery.js +0 -385
- package/lib/lgQuery.js.map +0 -1
- package/lib/lightgallery.js +0 -1949
- package/lib/lightgallery.js.map +0 -1
- package/lib/plugins/autoplay/lg-autoplay-settings.js +0 -16
- package/lib/plugins/autoplay/lg-autoplay-settings.js.map +0 -1
- package/lib/plugins/autoplay/lg-autoplay.js +0 -184
- package/lib/plugins/autoplay/lg-autoplay.js.map +0 -1
- package/lib/plugins/comment/lg-comment-settings.js +0 -17
- package/lib/plugins/comment/lg-comment-settings.js.map +0 -1
- package/lib/plugins/comment/lg-comment.js +0 -140
- package/lib/plugins/comment/lg-comment.js.map +0 -1
- package/lib/plugins/fullscreen/lg-fullscreen-settings.js +0 -10
- package/lib/plugins/fullscreen/lg-fullscreen-settings.js.map +0 -1
- package/lib/plugins/fullscreen/lg-fullscreen.js +0 -108
- package/lib/plugins/fullscreen/lg-fullscreen.js.map +0 -1
- package/lib/plugins/hash/lg-hash-settings.js +0 -9
- package/lib/plugins/hash/lg-hash-settings.js.map +0 -1
- package/lib/plugins/hash/lg-hash.js +0 -139
- package/lib/plugins/hash/lg-hash.js.map +0 -1
- package/lib/plugins/mediumZoom/lg-medium-zoom-settings.js +0 -9
- package/lib/plugins/mediumZoom/lg-medium-zoom-settings.js.map +0 -1
- package/lib/plugins/mediumZoom/lg-medium-zoom.js +0 -73
- package/lib/plugins/mediumZoom/lg-medium-zoom.js.map +0 -1
- package/lib/plugins/pager/lg-pager-settings.js +0 -7
- package/lib/plugins/pager/lg-pager-settings.js.map +0 -1
- package/lib/plugins/pager/lg-pager.js +0 -82
- package/lib/plugins/pager/lg-pager.js.map +0 -1
- package/lib/plugins/relativeCaption/lg-relative-caption-settings.js +0 -7
- package/lib/plugins/relativeCaption/lg-relative-caption-settings.js.map +0 -1
- package/lib/plugins/relativeCaption/lg-relative-caption.js +0 -97
- package/lib/plugins/relativeCaption/lg-relative-caption.js.map +0 -1
- package/lib/plugins/rotate/lg-rotate-settings.js +0 -18
- package/lib/plugins/rotate/lg-rotate-settings.js.map +0 -1
- package/lib/plugins/rotate/lg-rotate.js +0 -206
- package/lib/plugins/rotate/lg-rotate.js.map +0 -1
- package/lib/plugins/share/lg-fb-share-utils.js +0 -10
- package/lib/plugins/share/lg-fb-share-utils.js.map +0 -1
- package/lib/plugins/share/lg-pinterest-share-utils.js +0 -17
- package/lib/plugins/share/lg-pinterest-share-utils.js.map +0 -1
- package/lib/plugins/share/lg-share-settings.js +0 -15
- package/lib/plugins/share/lg-share-settings.js.map +0 -1
- package/lib/plugins/share/lg-share.js +0 -130
- package/lib/plugins/share/lg-share.js.map +0 -1
- package/lib/plugins/share/lg-twitter-share-utils.js +0 -11
- package/lib/plugins/share/lg-twitter-share-utils.js.map +0 -1
- package/lib/plugins/share/types.js +0 -3
- package/lib/plugins/share/types.js.map +0 -1
- package/lib/plugins/thumbnail/lg-thumbnail-settings.js +0 -23
- package/lib/plugins/thumbnail/lg-thumbnail-settings.js.map +0 -1
- package/lib/plugins/thumbnail/lg-thumbnail.js +0 -414
- package/lib/plugins/thumbnail/lg-thumbnail.js.map +0 -1
- package/lib/plugins/video/lg-video-settings.js +0 -15
- package/lib/plugins/video/lg-video-settings.js.map +0 -1
- package/lib/plugins/video/lg-video-utils.js +0 -84
- package/lib/plugins/video/lg-video-utils.js.map +0 -1
- package/lib/plugins/video/lg-video.js +0 -411
- package/lib/plugins/video/lg-video.js.map +0 -1
- package/lib/plugins/video/types.js +0 -3
- package/lib/plugins/video/types.js.map +0 -1
- package/lib/plugins/vimeoThumbnail/lg-vimeo-thumbnail-settings.js +0 -8
- package/lib/plugins/vimeoThumbnail/lg-vimeo-thumbnail-settings.js.map +0 -1
- package/lib/plugins/vimeoThumbnail/lg-vimeo-thumbnail.js +0 -122
- package/lib/plugins/vimeoThumbnail/lg-vimeo-thumbnail.js.map +0 -1
- package/lib/plugins/zoom/lg-zoom-settings.js +0 -21
- package/lib/plugins/zoom/lg-zoom-settings.js.map +0 -1
- package/lib/plugins/zoom/lg-zoom.js +0 -909
- package/lib/plugins/zoom/lg-zoom.js.map +0 -1
- package/lib/types.js +0 -3
- package/lib/types.js.map +0 -1
- package/lightgallery-2.9.0.tgz +0 -0
- package/lightgallery.es5.js +0 -2786
- package/lightgallery.es5.js.map +0 -1
- package/lightgallery.min.js +0 -8
- package/lightgallery.umd.js +0 -2794
- package/lightgallery.umd.js.map +0 -1
- package/lit/custom-elements.json +0 -82
- package/lit/lightgallery.esm.js +0 -59
- package/lit/lightgallery.umd.js +0 -37
- package/lit/package.json +0 -8
- package/plugins/autoplay/lg-autoplay.es5.js +0 -250
- package/plugins/autoplay/lg-autoplay.es5.js.map +0 -1
- package/plugins/autoplay/lg-autoplay.min.js +0 -8
- package/plugins/autoplay/lg-autoplay.umd.js +0 -258
- package/plugins/autoplay/lg-autoplay.umd.js.map +0 -1
- package/plugins/autoplay/package.json +0 -7
- package/plugins/comment/lg-comment.es5.js +0 -205
- package/plugins/comment/lg-comment.es5.js.map +0 -1
- package/plugins/comment/lg-comment.min.js +0 -8
- package/plugins/comment/lg-comment.umd.js +0 -213
- package/plugins/comment/lg-comment.umd.js.map +0 -1
- package/plugins/comment/package.json +0 -7
- package/plugins/fullscreen/lg-fullscreen.es5.js +0 -135
- package/plugins/fullscreen/lg-fullscreen.es5.js.map +0 -1
- package/plugins/fullscreen/lg-fullscreen.min.js +0 -8
- package/plugins/fullscreen/lg-fullscreen.umd.js +0 -143
- package/plugins/fullscreen/lg-fullscreen.umd.js.map +0 -1
- package/plugins/fullscreen/package.json +0 -7
- package/plugins/hash/lg-hash-settings.d.ts +0 -16
- package/plugins/hash/lg-hash.es5.js +0 -198
- package/plugins/hash/lg-hash.es5.js.map +0 -1
- package/plugins/hash/lg-hash.min.js +0 -8
- package/plugins/hash/lg-hash.umd.js +0 -206
- package/plugins/hash/lg-hash.umd.js.map +0 -1
- package/plugins/hash/package.json +0 -7
- package/plugins/mediumZoom/lg-medium-zoom.es5.js +0 -132
- package/plugins/mediumZoom/lg-medium-zoom.es5.js.map +0 -1
- package/plugins/mediumZoom/lg-medium-zoom.min.js +0 -8
- package/plugins/mediumZoom/lg-medium-zoom.umd.js +0 -140
- package/plugins/mediumZoom/lg-medium-zoom.umd.js.map +0 -1
- package/plugins/mediumZoom/package.json +0 -7
- package/plugins/pager/lg-pager.es5.js +0 -139
- package/plugins/pager/lg-pager.es5.js.map +0 -1
- package/plugins/pager/lg-pager.min.js +0 -8
- package/plugins/pager/lg-pager.umd.js +0 -147
- package/plugins/pager/lg-pager.umd.js.map +0 -1
- package/plugins/pager/package.json +0 -7
- package/plugins/relativeCaption/lg-relative-caption.es5.js +0 -154
- package/plugins/relativeCaption/lg-relative-caption.es5.js.map +0 -1
- package/plugins/relativeCaption/lg-relative-caption.min.js +0 -8
- package/plugins/relativeCaption/lg-relative-caption.umd.js +0 -162
- package/plugins/relativeCaption/lg-relative-caption.umd.js.map +0 -1
- package/plugins/relativeCaption/package.json +0 -7
- package/plugins/rotate/lg-rotate.es5.js +0 -274
- package/plugins/rotate/lg-rotate.es5.js.map +0 -1
- package/plugins/rotate/lg-rotate.min.js +0 -8
- package/plugins/rotate/lg-rotate.umd.js +0 -282
- package/plugins/rotate/lg-rotate.umd.js.map +0 -1
- package/plugins/rotate/package.json +0 -7
- package/plugins/share/lg-share.d.ts +0 -15
- package/plugins/share/lg-share.es5.js +0 -219
- package/plugins/share/lg-share.es5.js.map +0 -1
- package/plugins/share/lg-share.min.js +0 -8
- package/plugins/share/lg-share.umd.js +0 -227
- package/plugins/share/lg-share.umd.js.map +0 -1
- package/plugins/share/lg-twitter-share-utils.d.ts +0 -2
- package/plugins/share/package.json +0 -7
- package/plugins/thumbnail/lg-thumbnail.d.ts +0 -48
- package/plugins/thumbnail/lg-thumbnail.es5.js +0 -487
- package/plugins/thumbnail/lg-thumbnail.es5.js.map +0 -1
- package/plugins/thumbnail/lg-thumbnail.min.js +0 -8
- package/plugins/thumbnail/lg-thumbnail.umd.js +0 -495
- package/plugins/thumbnail/lg-thumbnail.umd.js.map +0 -1
- package/plugins/thumbnail/package.json +0 -7
- package/plugins/video/lg-video-utils.d.ts +0 -10
- package/plugins/video/lg-video.es5.js +0 -545
- package/plugins/video/lg-video.es5.js.map +0 -1
- package/plugins/video/lg-video.min.js +0 -8
- package/plugins/video/lg-video.umd.js +0 -553
- package/plugins/video/lg-video.umd.js.map +0 -1
- package/plugins/video/package.json +0 -7
- package/plugins/vimeoThumbnail/lg-vimeo-thumbnail.es5.js +0 -182
- package/plugins/vimeoThumbnail/lg-vimeo-thumbnail.es5.js.map +0 -1
- package/plugins/vimeoThumbnail/lg-vimeo-thumbnail.min.js +0 -8
- package/plugins/vimeoThumbnail/lg-vimeo-thumbnail.umd.js +0 -190
- package/plugins/vimeoThumbnail/lg-vimeo-thumbnail.umd.js.map +0 -1
- package/plugins/vimeoThumbnail/package.json +0 -7
- package/plugins/zoom/lg-zoom.es5.js +0 -980
- package/plugins/zoom/lg-zoom.es5.js.map +0 -1
- package/plugins/zoom/lg-zoom.min.js +0 -8
- package/plugins/zoom/lg-zoom.umd.js +0 -988
- package/plugins/zoom/lg-zoom.umd.js.map +0 -1
- package/plugins/zoom/package.json +0 -7
- package/react/Lightgallery.d.ts +0 -33
- package/react/Lightgallery.es5.js +0 -2988
- package/react/Lightgallery.es5.js.map +0 -1
- package/react/Lightgallery.umd.js +0 -2994
- package/react/Lightgallery.umd.js.map +0 -1
- package/react/package.json +0 -7
- package/scss/_lg-fonts.scss +0 -27
- package/scss/lg-fullscreen.scss +0 -9
- package/vue/LightGallery.vue.d.ts +0 -37
- package/vue/LightGalleryVue.common.js +0 -9343
- package/vue/LightGalleryVue.common.js.map +0 -1
- package/vue/LightGalleryVue.umd.js +0 -9353
- package/vue/LightGalleryVue.umd.js.map +0 -1
- package/vue/LightGalleryVue.umd.min.js +0 -8
- package/vue/LightGalleryVue.umd.min.js.map +0 -1
- package/vue/package.json +0 -7
- /package/{css → dist/css}/lg-medium-zoom.css +0 -0
- /package/{css → dist/css}/lg-medium-zoom.css.map +0 -0
- /package/{css → dist/css}/lg-pager.css +0 -0
- /package/{css → dist/css}/lg-relative-caption.css +0 -0
- /package/{css → dist/css}/lg-relative-caption.css.map +0 -0
- /package/{css → dist/css}/lg-video.css +0 -0
- /package/{css → dist/css}/lg-video.css.map +0 -0
- /package/{images → dist/images}/loading.gif +0 -0
- /package/{scss → dist/scss}/_lg-mixins.scss +0 -0
- /package/{scss → dist/scss}/lg-medium-zoom.scss +0 -0
- /package/{scss → dist/scss}/lg-pager.scss +0 -0
- /package/{scss → dist/scss}/lg-relative-caption.scss +0 -0
- /package/{scss → dist/scss}/lg-transitions.scss +0 -0
- /package/{scss → dist/scss}/lg-video.scss +0 -0
- /package/{scss → dist/scss}/transitions/_index.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-lollipop-rev.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-lollipop.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-rotate-rev.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-rotate.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-skew-cross-rev.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-skew-cross.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-skew-only-rev.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-skew-only-y-rev.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-skew-only-y.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-skew-only.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-skew-rev.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-skew-ver-cross-rev.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-skew-ver-cross.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-skew-ver-rev.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-skew-ver.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-skew.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-vertical-growth.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-slide-vertical.scss +0 -0
- /package/{scss → dist/scss}/transitions/_lg-tube.scss +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lg-origin-crop.umd.js","sources":["../../../packages/headless/src/origin.ts","../../../packages/headless/src/origin-crop.ts","../../../src/lg-events.ts","../../../src/plugins/originCrop/lg-origin-crop-settings.ts","../../../src/plugins/originCrop/lg-origin-crop.ts"],"sourcesContent":["/**\n * Zoom-from-origin math, ported from 2.x `utils.getSize`/`utils.getTransform`\n * (`src/lg-utils.ts`) as pure rect arithmetic. The framework layer measures\n * the DOM (trigger/container bounding rects) and passes plain numbers in.\n *\n * Note: this module is an addition to the ADR 0001 §1 table — it\n * follows the standing rule that pure functions needed by React live in\n * headless. It is distinct from `zoom-math.ts` (zoom plugin).\n */\n\nexport interface ImageSize {\n width: number;\n height: number;\n}\n\nexport interface RectLike {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\n/**\n * Parse an item's `lgSize` value (`\"1920-1280\"`, or a responsive list like\n * `\"240-160-375, 1600-1067\"` where the third number is the max viewport\n * width the entry applies to).\n */\nexport function parseImageSize(\n lgSize: string | undefined,\n viewportWidth: number,\n): ImageSize | undefined {\n if (!lgSize) {\n return undefined;\n }\n let size = lgSize;\n const responsiveSizes = lgSize.split(',');\n if (responsiveSizes[1]) {\n for (let i = 0; i < responsiveSizes.length; i++) {\n const candidate = responsiveSizes[i]!.trim();\n const responsiveWidth = parseInt(candidate.split('-')[2]!, 10);\n if (responsiveWidth > viewportWidth) {\n size = candidate;\n break;\n }\n if (i === responsiveSizes.length - 1) {\n size = candidate;\n }\n }\n }\n const parts = size.trim().split('-');\n const width = parseInt(parts[0]!, 10);\n const height = parseInt(parts[1]!, 10);\n if (!Number.isFinite(width) || !Number.isFinite(height)) {\n return undefined;\n }\n return { width, height };\n}\n\n/**\n * Fit a natural image size into the available container box, preserving\n * aspect ratio and never scaling up (2.x `utils.getSize` math).\n */\nexport function fitImageSize(\n size: ImageSize,\n containerWidth: number,\n containerHeight: number,\n): ImageSize {\n const maxWidth = Math.min(containerWidth, size.width);\n const maxHeight = Math.min(containerHeight, size.height);\n const ratio = Math.min(maxWidth / size.width, maxHeight / size.height);\n return { width: size.width * ratio, height: size.height * ratio };\n}\n\n/**\n * Whether a measured trigger rect can anchor the zoom-from-origin flight.\n * A trigger that is hidden (`display: none`, the `hidden` attribute),\n * detached or collapsed measures 0×0 at the viewport origin; a flight\n * aimed at it would shrink the slide into the top-left corner.\n */\nexport function isUsableOriginRect(\n rect: RectLike | null | undefined,\n): rect is RectLike {\n return (\n !!rect &&\n Number.isFinite(rect.left) &&\n Number.isFinite(rect.top) &&\n rect.width > 0 &&\n rect.height > 0\n );\n}\n\n/** Scale the closing slide shrinks to when it has no trigger to return to. */\nexport const CENTER_CLOSE_SCALE = 0.5;\n\n/**\n * Close transform for a slide without a usable origin (hidden or\n * collapsed trigger, no `lgSize`): shrink in place about the stage centre,\n * the mirror of the `lg-start-zoom` open. The runtime pairs it with the\n * `lg-close-to-center` class, which fades the slide out over the same\n * duration.\n */\nexport function getCenterCloseTransform(scale = CENTER_CLOSE_SCALE): string {\n return `translate3d(0, 0, 0) scale3d(${scale}, ${scale}, 1)`;\n}\n\nexport interface OriginTransformInput {\n /** Bounding rect of the trigger thumbnail image, viewport coordinates. */\n triggerRect: RectLike;\n\n /** Bounding rect of the gallery outer element, viewport coordinates. */\n containerRect: RectLike;\n\n /** Media container top offset (toolbar height), px. */\n top: number;\n\n /** Media container bottom offset (caption + thumb strip height), px. */\n bottom: number;\n\n /** Final displayed image size (see {@link fitImageSize}). */\n imageSize: ImageSize;\n}\n\n/**\n * CSS transform that places the (centered, final-size) slide image exactly\n * over the trigger thumbnail — the starting point of the zoom-from-origin\n * open animation and the end point of the close animation.\n */\nexport function getOriginTransform(input: OriginTransformInput): string {\n const { triggerRect, containerRect, top, bottom, imageSize } = input;\n\n const availableWidth = containerRect.width;\n const availableHeight = containerRect.height - (top + bottom);\n\n const x =\n (availableWidth - triggerRect.width) / 2 -\n triggerRect.left +\n containerRect.left;\n const y =\n (availableHeight - triggerRect.height) / 2 - triggerRect.top + top;\n\n const scaleX = triggerRect.width / imageSize.width;\n const scaleY = triggerRect.height / imageSize.height;\n\n return `translate3d(${-x}px, ${-y}px, 0) scale3d(${scaleX}, ${scaleY}, 1)`;\n}\n","/**\n * Math for the origin crop plugin: zoom-from-origin flights from cropped\n * thumbnails. A grid tile cropped with `object-fit: cover` (or\n * `background-size: cover`) shows only a window of the image. The plugin\n * grows that window from the tile at a uniform scale while two boxes\n * around the slides crop the rest of the image, revealed as the flight\n * lands. Pure rect arithmetic: the plugin measures the DOM and passes\n * plain numbers in. The core flight (`origin.ts`) never imports this.\n */\n\nimport { isUsableOriginRect, type ImageSize, type RectLike } from './origin';\n\n/** A region of an image as fractions of its width and height (0..1). */\nexport interface FractionRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/** The whole image: the window of an uncropped thumbnail. */\nexport const WHOLE_IMAGE: FractionRect = { x: 0, y: 0, width: 1, height: 1 };\n\nconst FRACTION_EPSILON = 0.001;\n\n/** Whether a region covers the whole image (within rounding). */\nexport function isWholeImage(rect: FractionRect): boolean {\n return (\n Math.abs(rect.x) < FRACTION_EPSILON &&\n Math.abs(rect.y) < FRACTION_EPSILON &&\n Math.abs(rect.width - 1) < FRACTION_EPSILON &&\n Math.abs(rect.height - 1) < FRACTION_EPSILON\n );\n}\n\n/**\n * How a trigger paints its thumbnail file into its box: the CSS\n * `object-fit` of an `<img>`, or the `background-size` keyword of an\n * element with a background image.\n */\nexport type ThumbFit = 'fill' | 'contain' | 'cover' | 'none' | 'scale-down';\n\n/**\n * One axis of a CSS `object-position`/`background-position`: a share of\n * the free space (the box minus the painted image) plus a px offset.\n */\nexport interface CssPositionAxis {\n percent: number;\n px: number;\n}\n\nexport interface CssPosition {\n x: CssPositionAxis;\n y: CssPositionAxis;\n}\n\nconst CENTER_AXIS: CssPositionAxis = { percent: 50, px: 0 };\n\n/** The CSS default, `50% 50%`. */\nexport const CSS_POSITION_CENTER: CssPosition = {\n x: CENTER_AXIS,\n y: CENTER_AXIS,\n};\n\nconst POSITION_KEYWORDS: Record<string, number> = {\n left: 0,\n top: 0,\n center: 50,\n right: 100,\n bottom: 100,\n};\n\nfunction parsePositionAxis(token: string): CssPositionAxis | undefined {\n const keyword = POSITION_KEYWORDS[token];\n if (keyword !== undefined) {\n return { percent: keyword, px: 0 };\n }\n const percent = /^(-?\\d*\\.?\\d+)%$/.exec(token);\n if (percent) {\n return { percent: parseFloat(percent[1]!), px: 0 };\n }\n const px = /^(-?\\d*\\.?\\d+)px$/.exec(token);\n if (px) {\n return { percent: 0, px: parseFloat(px[1]!) };\n }\n // `right 10px` computes to `calc(100% - 10px)`.\n const calc =\n /^calc\\(\\s*(-?\\d*\\.?\\d+)%\\s*([+-])\\s*(-?\\d*\\.?\\d+)px\\s*\\)$/.exec(token);\n if (calc) {\n const sign = calc[2] === '-' ? -1 : 1;\n return {\n percent: parseFloat(calc[1]!),\n px: sign * parseFloat(calc[3]!),\n };\n }\n return undefined;\n}\n\n/**\n * Parse a computed `object-position` or `background-position` value\n * (`\"50% 50%\"`, `\"10px 20px\"`, `\"calc(100% - 10px) 0%\"`, keywords).\n * Unparseable values fall back to the centre. Only the first layer of a\n * multi-layer background is read.\n */\nexport function parseCssPosition(value: string | undefined): CssPosition {\n const layer = (value ?? '').split(',')[0]!.trim().toLowerCase();\n if (!layer) {\n return CSS_POSITION_CENTER;\n }\n const tokens = layer.match(/calc\\([^)]*\\)|\\S+/g) ?? [];\n // `top left` orders the axes by keyword, not by position.\n if (\n tokens.length === 2 &&\n (tokens[0] === 'top' || tokens[0] === 'bottom') &&\n (tokens[1] === 'left' || tokens[1] === 'right')\n ) {\n tokens.reverse();\n }\n const x = parsePositionAxis(tokens[0] ?? '');\n const y =\n tokens[1] === undefined ? CENTER_AXIS : parsePositionAxis(tokens[1]);\n if (!x || !y) {\n return CSS_POSITION_CENTER;\n }\n return { x, y };\n}\n\n/** Parse a computed `object-fit` value; the CSS default is `fill`. */\nexport function parseObjectFit(value: string | undefined): ThumbFit {\n const fit = (value ?? '').trim().toLowerCase();\n switch (fit) {\n case 'contain':\n case 'cover':\n case 'none':\n case 'scale-down':\n return fit;\n default:\n return 'fill';\n }\n}\n\n/**\n * Parse a computed `background-size` value into the fit it paints like:\n * `cover` and `contain` as themselves, `auto` as `none` (natural size),\n * `100% 100%` as `fill`. Explicit lengths cannot be modelled and return\n * undefined. Only the first layer of a multi-layer background is read.\n */\nexport function parseBackgroundFit(\n value: string | undefined,\n): ThumbFit | undefined {\n const layer = (value ?? '').split(',')[0]!.trim().toLowerCase();\n switch (layer) {\n case 'cover':\n case 'contain':\n return layer;\n case 'auto':\n case 'auto auto':\n return 'none';\n case '100% 100%':\n return 'fill';\n default:\n return undefined;\n }\n}\n\n/** The first URL of a computed `background-image` value, if any. */\nexport function parseCssUrl(value: string | undefined): string | undefined {\n const match = /url\\(\\s*([\"']?)(.*?)\\1\\s*\\)/.exec(value ?? '');\n const url = match?.[2]?.trim();\n return url || undefined;\n}\n\nexport interface OriginWindowInput {\n /** Rendered box of the trigger (thumbnail img or background element), viewport px. */\n box: RectLike;\n\n /** The full image; only its aspect ratio matters. */\n imageSize: ImageSize;\n\n /**\n * Natural size of the thumbnail file when known (an `<img>`'s\n * `naturalWidth`/`naturalHeight`). A file with a different aspect ratio\n * than the image is taken as a centred crop of it. Unknown (a background\n * image, an unloaded img) assumes the image's own aspect ratio.\n */\n thumbSize?: ImageSize;\n\n /** How the file is painted into the box. Defaults to `fill`. */\n fit?: ThumbFit;\n\n /** Where the painted file sits in the box. Defaults to the centre. */\n position?: CssPosition;\n}\n\nexport interface OriginWindow {\n /**\n * The part of the trigger box that shows thumbnail pixels, viewport px:\n * the box itself unless the file is letterboxed inside it.\n */\n rect: RectLike;\n\n /** The part of the image visible in `rect`, as fractions of the image. */\n window: FractionRect;\n\n /**\n * The part of the image the thumbnail file covers, as fractions: the\n * whole image unless the file is pre-cropped. Sizes the flight's\n * dummy, which shows the file, so its pixels land where they belong.\n */\n region: FractionRect;\n}\n\nconst ASPECT_EPSILON = 0.01;\n\nfunction aspectOf(size: ImageSize): number {\n return size.width / size.height;\n}\n\nfunction sameAspect(a: number, b: number): boolean {\n return Math.abs(a / b - 1) < ASPECT_EPSILON;\n}\n\n/**\n * The centred crop of an image with aspect `imageAspect` at aspect\n * `cropAspect`, as fractions of the image (the CSS `cover` fit).\n */\nfunction centeredCrop(imageAspect: number, cropAspect: number): FractionRect {\n if (sameAspect(imageAspect, cropAspect)) {\n return WHOLE_IMAGE;\n }\n if (cropAspect > imageAspect) {\n const height = imageAspect / cropAspect;\n return { x: 0, y: (1 - height) / 2, width: 1, height };\n }\n const width = cropAspect / imageAspect;\n return { x: (1 - width) / 2, y: 0, width, height: 1 };\n}\n\nfunction resolvePositionAxis(axis: CssPositionAxis, freeSpace: number): number {\n return (freeSpace * axis.percent) / 100 + axis.px;\n}\n\nconst uncropped = (box: RectLike): OriginWindow => ({\n rect: box,\n window: WHOLE_IMAGE,\n region: WHOLE_IMAGE,\n});\n\n/**\n * Where a thumbnail's visible pixels sit in the full image. Models the CSS\n * fit and position of the file inside its box, and a pre-cropped file as a\n * centred crop of the image.\n */\nexport function getOriginWindow(input: OriginWindowInput): OriginWindow {\n const { box, imageSize, thumbSize, position = CSS_POSITION_CENTER } = input;\n let fit = input.fit ?? 'fill';\n if (\n !isUsableOriginRect(box) ||\n !(imageSize.width > 0) ||\n !(imageSize.height > 0)\n ) {\n return uncropped(box);\n }\n const imageAspect = aspectOf(imageSize);\n const knownThumb =\n thumbSize && thumbSize.width > 0 && thumbSize.height > 0\n ? thumbSize\n : undefined;\n // Natural-size fits need the file's real size; without it, fall back\n // to the stretch the built-in flight assumes.\n if (!knownThumb && (fit === 'none' || fit === 'scale-down')) {\n fit = 'fill';\n }\n const thumb = knownThumb ?? imageSize;\n const region = centeredCrop(imageAspect, aspectOf(thumb));\n\n // The painted file inside the box.\n let scaleX: number;\n let scaleY: number;\n switch (fit) {\n case 'fill':\n scaleX = box.width / thumb.width;\n scaleY = box.height / thumb.height;\n break;\n case 'cover':\n scaleX = scaleY = Math.max(\n box.width / thumb.width,\n box.height / thumb.height,\n );\n break;\n case 'contain':\n scaleX = scaleY = Math.min(\n box.width / thumb.width,\n box.height / thumb.height,\n );\n break;\n case 'none':\n scaleX = scaleY = 1;\n break;\n case 'scale-down':\n scaleX = scaleY = Math.min(\n 1,\n box.width / thumb.width,\n box.height / thumb.height,\n );\n break;\n }\n const paintedWidth = thumb.width * scaleX;\n const paintedHeight = thumb.height * scaleY;\n const offsetX = resolvePositionAxis(position.x, box.width - paintedWidth);\n const offsetY = resolvePositionAxis(position.y, box.height - paintedHeight);\n\n // The visible part: the painted file clipped by the box.\n const visibleLeft = Math.max(0, offsetX);\n const visibleTop = Math.max(0, offsetY);\n const visibleRight = Math.min(box.width, offsetX + paintedWidth);\n const visibleBottom = Math.min(box.height, offsetY + paintedHeight);\n if (visibleRight <= visibleLeft || visibleBottom <= visibleTop) {\n return uncropped(box);\n }\n const rect: RectLike = {\n left: box.left + visibleLeft,\n top: box.top + visibleTop,\n width: visibleRight - visibleLeft,\n height: visibleBottom - visibleTop,\n };\n\n // The visible part as fractions of the file, then of the image.\n const fileX = (visibleLeft - offsetX) / paintedWidth;\n const fileY = (visibleTop - offsetY) / paintedHeight;\n const window: FractionRect = {\n x: region.x + fileX * region.width,\n y: region.y + fileY * region.height,\n width: (rect.width / paintedWidth) * region.width,\n height: (rect.height / paintedHeight) * region.height,\n };\n\n return { rect, window, region };\n}\n\nexport interface OriginCropFlightInput {\n /**\n * The part of the trigger showing thumbnail pixels\n * ({@link OriginWindow.rect}), viewport px.\n */\n triggerRect: RectLike;\n\n /** Bounding rect of the gallery outer element, viewport coordinates. */\n containerRect: RectLike;\n\n /** Media container top offset (toolbar height), px. */\n top: number;\n\n /** Media container bottom offset (caption + thumb strip height), px. */\n bottom: number;\n\n /** Final displayed image size (see `fitImageSize`). */\n imageSize: ImageSize;\n\n /** The part of the image the trigger shows ({@link OriginWindow.window}). */\n window: FractionRect;\n}\n\nexport interface OriginCropFlight {\n /**\n * The slide's transform: the window lands on the trigger, at a uniform\n * scale, inside the translated stage boxes.\n */\n transform: string;\n\n /** The outer stage box: its bottom-right corner on the trigger's. */\n outer: string;\n\n /** The inner stage box: its top-left corner on the trigger's. */\n inner: string;\n}\n\n/**\n * The start of a flight from a cropped thumbnail (and the end of the flight\n * back to it). Two stage-sized, overflow-hidden boxes wrap the slides: the\n * outer one translates so that its bottom-right corner sits on the\n * trigger's, the inner one so that its top-left corner sits on the\n * trigger's, and their intersection is exactly the trigger's box. As both\n * transition back to rest with the slide, the crop's edges move linearly on\n * screen out to the whole stage, and only transforms animate.\n */\nexport function getOriginCropFlight(\n input: OriginCropFlightInput,\n): OriginCropFlight {\n const { triggerRect, containerRect, top, bottom, imageSize, window } =\n input;\n\n const stageLeft = containerRect.left;\n const stageTop = containerRect.top + top;\n const stageWidth = containerRect.width;\n const stageHeight = containerRect.height - (top + bottom);\n\n const outerX =\n triggerRect.left + triggerRect.width - (stageLeft + stageWidth);\n const outerY =\n triggerRect.top + triggerRect.height - (stageTop + stageHeight);\n const innerX = stageWidth - triggerRect.width;\n const innerY = stageHeight - triggerRect.height;\n\n const scaleX = triggerRect.width / (imageSize.width * window.width);\n const scaleY = triggerRect.height / (imageSize.height * window.height);\n\n // The window's centre, relative to the image centre (the slide's\n // transform origin), in final-size px.\n const windowX = imageSize.width * (window.x + window.width / 2 - 0.5);\n const windowY = imageSize.height * (window.y + window.height / 2 - 0.5);\n\n // The inner box's top-left corner sits on the trigger's, so the slide\n // centres the window in a trigger-sized box at its own top-left.\n const x = (triggerRect.width - stageWidth) / 2 - windowX * scaleX;\n const y = (triggerRect.height - stageHeight) / 2 - windowY * scaleY;\n\n return {\n transform: `translate3d(${x}px, ${y}px, 0) scale3d(${scaleX}, ${scaleY}, 1)`,\n outer: `translate3d(${outerX}px, ${outerY}px, 0)`,\n inner: `translate3d(${innerX}px, ${innerY}px, 0)`,\n };\n}\n","import { LightGallery } from './lightgallery';\nimport { VideoSource } from './plugins/video/types';\n\n/**\n * List of lightGallery events\n * All events should be documented here\n * Below interfaces are used to build the website documentations\n * */\nexport const lGEvents: {\n [key: string]: string;\n} = {\n afterAppendSlide: 'lgAfterAppendSlide',\n init: 'lgInit',\n hasVideo: 'lgHasVideo',\n containerResize: 'lgContainerResize',\n updateSlides: 'lgUpdateSlides',\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\n beforeOpen: 'lgBeforeOpen',\n afterOpen: 'lgAfterOpen',\n slideItemLoad: 'lgSlideItemLoad',\n beforeSlide: 'lgBeforeSlide',\n afterSlide: 'lgAfterSlide',\n posterClick: 'lgPosterClick',\n dragStart: 'lgDragStart',\n dragMove: 'lgDragMove',\n dragEnd: 'lgDragEnd',\n beforeNextSlide: 'lgBeforeNextSlide',\n beforePrevSlide: 'lgBeforePrevSlide',\n beforeClose: 'lgBeforeClose',\n afterClose: 'lgAfterClose',\n rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\n autoplay: 'lgAutoplay',\n autoplayStart: 'lgAutoplayStart',\n autoplayStop: 'lgAutoplayStop',\n};\n\n// Follow the below format for the event documentation\n// @method is the method name when event is used with Angular/React components\n\n/**\n * Fired only once when lightGallery is initialized\n * @name lgInit\n * @method onInit\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action on lightGallery initialization.\n * // Init event returns the plugin instance that can be used to call any lightGalley public method\n * let pluginInstance = null;\n * lg.addEventListener('lgInit', (event) => {\n * pluginInstance = event.detail.instance;\n * });\n * lightGallery(lg);\n * @see <a href=\"/docs/methods/\">Methods</a>\n */\nexport interface InitDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired when the slide content has been inserted into it's slide container.\n * @name lgAfterAppendSlide\n * @method onAfterAppendSlide\n */\nexport interface AfterAppendSlideEventDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired immediately before opening the gallery\n * @name lgBeforeOpen\n * @method onBeforeOpen\n */\nexport interface BeforeOpenDetail {}\n\n/**\n * Fired immediately after opening the gallery\n * @name lgAfterOpen\n * @method onAfterOpen\n */\nexport interface AfterOpenDetail {}\n\n/**\n * Fired once the media inside the slide has been completely loaded .\n * @name lgSlideItemLoad\n * @method onSlideItemLoad\n */\nexport interface SlideItemLoadDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * For the first slide, lightGallery adds some delay for displaying the loaded slide item.\n * This delay is required for the transition effect when the slide item is displayed\n * Respect the delay when you use this event\n */\n delay: number;\n\n // Will be true for the first slide\n isFirstSlide: boolean;\n}\n\n/**\n * Fired immediately before each slide transition.\n * @name lgBeforeSlide\n * @method onBeforeSlide\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action before each slide transition\n * lg.addEventListener('lgBeforeSlide', (event) => {\n * const { index, prevIndex } = event.detail;\n * alert(index, prevIndex);\n * });\n * lightGallery(lg);\n */\nexport interface BeforeSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired immediately after each slide transition.\n * @name lgAfterSlide\n * @method onAfterSlide\n */\nexport interface AfterSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired when the video poster is clicked.\n * @name lgPosterClick\n * @method onPosterClick\n */\nexport interface PosterClickDetail {}\n\n/**\n * Fired when the drag event to move to different slide starts.\n * @name lgDragStart\n * @method onDragStart\n */\nexport interface DragStartDetail {}\n\n/**\n * Fired periodically during the drag operation.\n * @name lgDragMove\n * @method onDragMove\n */\nexport interface DragMoveDetail {}\n\n/**\n * Fired when the user has finished the drag operation\n * @name lgDragEnd\n * @method onDragEnd\n */\nexport interface DragEndDetail {}\n\n/**\n * Fired immediately before the start of the close process.\n * @name lgBeforeClose\n * @method onBeforeClose\n */\nexport interface BeforeCloseDetail {}\n\n/**\n * Fired immediately once lightGallery is closed.\n * @name lgAfterClose\n * @method onAfterClose\n */\nexport interface AfterCloseDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired immediately before each \"next\" slide transition\n * @name lgBeforeNextSlide\n * @method onBeforeNextSlide\n */\nexport interface BeforeNextSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired immediately before each \"prev\" slide transition\n * @name lgBeforePrevSlide\n * @method onBeforePrevSlide\n */\nexport interface BeforePrevSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired when the sub-html content (ex : title/ description) has been appended into the slide.\n * @name lgAfterAppendSubHtml\n * @method onAfterAppendSubHtml\n */\nexport interface AfterAppendSubHtmlDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the lightGallery container has been resized.\n * @name lgContainerResize\n * @method onContainerResize\n */\nexport interface ContainerResizeDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when lightGallery detects video slide\n * @name lgHasVideo\n * @method onHasVideo\n */\nexport interface HasVideoDetail {\n /**\n * Index of the slide,\n */\n index: number;\n /**\n * Video source\n */\n src: string;\n /**\n * HTML5 video source if available\n * <p>\n HTML5 video source = source: {\n src: string;\n type: string;\n }[];\n attributes: HTMLVideoElement;\n * </p>\n */\n html5Video: VideoSource;\n /**\n * True if video has poster\n */\n hasPoster: boolean;\n}\n\n/**\n * Fired when the image is rotated in anticlockwise direction\n * @name lgRotateLeft\n * @method onRotateLeft\n */\nexport interface RotateLeftDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is rotated in clockwise direction\n * @name lgRotateRight\n * @method onRotateRight\n */\nexport interface RotateRightDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped horizontally\n * @name lgFlipHorizontal\n * @method onFlipHorizontal\n */\nexport interface FlipHorizontalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped vertically\n * @name lgFlipVertical\n * @method onFlipVertical\n */\nexport interface FlipVerticalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n","export interface OriginCropSettings {\n /**\n * Enable/Disable the origin crop plugin: zoom-from-origin flights from\n * cropped thumbnails (<code>object-fit: cover</code>,\n * <code>background-size: cover</code>) start from the part of the image\n * the thumbnail shows, at a uniform scale, and reveal the rest around it.\n * See <a href=\"/demos/zoom-from-origin/\">Zoom from origin</a>.\n * @version 3.0.0\n */\n originCrop: boolean;\n}\n\nexport const originCropSettings: OriginCropSettings = {\n originCrop: true,\n};\n","import {\n getOriginCropFlight,\n getOriginTransform,\n getOriginWindow,\n isUsableOriginRect,\n isWholeImage,\n parseBackgroundFit,\n parseCssPosition,\n parseCssUrl,\n parseObjectFit,\n type FractionRect,\n type OriginWindowInput,\n type RectLike,\n} from '@lightgallery/headless';\n\nimport { lGEvents } from '../../lg-events';\nimport { ImageSize } from '../../lg-utils';\nimport { LightGallery } from '../../lightgallery';\nimport {\n OriginCropSettings,\n originCropSettings,\n} from './lg-origin-crop-settings';\n\n/**\n * A flight the built-in one cannot land exactly: from a cropped thumbnail,\n * one letterboxed in its box, or a background thumbnail.\n */\ninterface CropFlight {\n /** The trigger the flight leaves from or returns to. */\n element: HTMLElement;\n\n /** The slide's transform on the thumbnail. */\n transform: string;\n\n /**\n * The stage boxes' transforms that crop the slide to the thumbnail's\n * box, for a cropped thumbnail.\n */\n stage?: { outer: string; inner: string };\n\n /** The part of the image the thumbnail file covers: sizes the dummy. */\n region: FractionRect;\n\n /** A background thumbnail's image, which flies as the dummy. */\n dummySrc?: string;\n}\n\ninterface Transition {\n duration: string;\n easing: string;\n}\n\n// The stage boxes at rest: the end of an opening flight, the start of a\n// closing one.\nconst STAGE_REST = 'translate3d(0, 0, 0)';\n\n// How the core rests the slide when it flips an opening flight.\nconst SLIDE_REST = /^(none|translate3d\\(0(px)?,\\s*0(px)?,\\s*0(px)?\\))$/;\n\n// An opening flight whose flip was never seen lets go of the crop this\n// long after the flight's duration, so the image never stays cropped.\nconst FLIP_GRACE = 300;\n\n// The timing functions of a computed list (`cubic-bezier(0, 0, 0.25, 1), ease`).\nconst TIMING_FUNCTIONS = /[a-z-]+\\([^)]*\\)|[a-z-]+/gi;\n\nconst RECT_EPSILON = 0.5;\n\nfunction sameRect(a: RectLike, b: RectLike): boolean {\n return (\n Math.abs(a.left - b.left) < RECT_EPSILON &&\n Math.abs(a.top - b.top) < RECT_EPSILON &&\n Math.abs(a.width - b.width) < RECT_EPSILON &&\n Math.abs(a.height - b.height) < RECT_EPSILON\n );\n}\n\n/**\n * How a trigger paints its thumbnail: an img's object-fit/-position and\n * natural size, or the size/position keywords of a background image.\n */\nfunction getThumbPaint(\n thumb: HTMLElement,\n style: CSSStyleDeclaration,\n): Pick<OriginWindowInput, 'thumbSize' | 'fit' | 'position'> {\n if (thumb instanceof HTMLImageElement) {\n return {\n thumbSize:\n thumb.naturalWidth > 0\n ? {\n width: thumb.naturalWidth,\n height: thumb.naturalHeight,\n }\n : undefined,\n fit: parseObjectFit(style.getPropertyValue('object-fit')),\n position: parseCssPosition(\n style.getPropertyValue('object-position'),\n ),\n };\n }\n return {\n fit:\n parseBackgroundFit(style.getPropertyValue('background-size')) ||\n 'fill',\n position: parseCssPosition(\n style.getPropertyValue('background-position'),\n ),\n };\n}\n\n/** The duration and easing an element's transform transitions with. */\nfunction getTransformTransition(\n el: HTMLElement,\n fallbackDuration: string,\n): Transition {\n const style = window.getComputedStyle(el);\n const properties = style\n .getPropertyValue('transition-property')\n .split(',')\n .map((property) => property.trim());\n const durations = style\n .getPropertyValue('transition-duration')\n .split(',')\n .map((duration) => duration.trim());\n const easings =\n style\n .getPropertyValue('transition-timing-function')\n .match(TIMING_FUNCTIONS) || [];\n let index = properties.indexOf('transform');\n if (index < 0) {\n index = Math.max(0, properties.indexOf('all'));\n }\n return {\n duration: durations[index % durations.length] || fallbackDuration,\n easing: easings.length ? easings[index % easings.length] : 'ease',\n };\n}\n\n// A stage box fills the stage (.lg-content) as .lg-inner does. Styled\n// inline, so the plugin needs no stylesheet.\nfunction createStageBox(): HTMLElement {\n const box = document.createElement('div');\n box.className = 'lg-origin-crop';\n box.style.position = 'absolute';\n box.style.top = '0';\n box.style.right = '0';\n box.style.bottom = '0';\n box.style.left = '0';\n return box;\n}\n\n/**\n * Zoom-from-origin flights from cropped thumbnails. A grid tile cropped\n * with `object-fit: cover` (or `background-size: cover`) shows a window of\n * the image, and the built-in flight squashes the whole image into the\n * tile. With this plugin the window grows from the tile at a uniform\n * scale while two boxes around the slides crop the rest of the image,\n * revealed as the flight lands; the close flies back the same way. The\n * plugin reads the thumbnail's computed fit and position, so no markup is\n * needed. Thumbnails the built-in flight lands exactly keep it.\n *\n * The core's flight is untouched: the plugin replaces the flight's\n * transform through `getOriginTransform` and follows each of the core's\n * flight steps with the crop, in the same task.\n */\nexport default class OriginCrop {\n core: LightGallery;\n settings: OriginCropSettings;\n\n // Two boxes around .lg-inner, inside the stage. Inert at rest; during a\n // flight from a cropped thumbnail they hide their overflow and\n // translate against each other so that their intersection is the\n // thumbnail's box. The core's own elements are never styled.\n private outerBox?: HTMLElement;\n private innerBox?: HTMLElement;\n\n // The flight the core asked for last: the opening one, or the closing\n // one once `closing` is set.\n private flight?: CropFlight;\n private closing = false;\n private stageMoved = false;\n\n private observer?: MutationObserver;\n private flipGrace?: ReturnType<typeof setTimeout>;\n\n private restoreCore?: () => void;\n\n constructor(instance: LightGallery) {\n // get lightGallery core plugin instance\n this.core = instance;\n\n // extend module default settings with lightGallery core settings\n this.settings = { ...originCropSettings, ...this.core.settings };\n\n return this;\n }\n\n init(): void {\n if (!this.settings.originCrop) {\n return;\n }\n this.wrapStage();\n this.patchCore();\n this.core.LGel.on(`${lGEvents.beforeOpen}.originCrop`, () =>\n this.onBeforeOpen(),\n );\n this.core.LGel.on(`${lGEvents.beforeClose}.originCrop`, () =>\n this.onBeforeClose(),\n );\n this.core.LGel.on(`${lGEvents.afterClose}.originCrop`, () =>\n this.onAfterClose(),\n );\n }\n\n destroy(): void {\n this.stopFollowing();\n this.core.LGel.off('.originCrop');\n this.resetStage();\n this.unwrapStage();\n if (this.restoreCore) {\n this.restoreCore();\n this.restoreCore = undefined;\n }\n this.flight = undefined;\n }\n\n /**\n * Takes over the core's flight hooks: the flight's transform, and the\n * dummy that flies in place of the loading image.\n */\n private patchCore(): void {\n const core = this.core;\n const getCoreTransform = core.getOriginTransform;\n const getCoreDummyStyles = core.getDummyImgStyles;\n const getCoreDummy = core.getDummyImageContent;\n\n core.getOriginTransform = (element, imageSize) => {\n const flight = this.getFlight(element, imageSize);\n this.flight = flight;\n if (this.closing) {\n this.followClose();\n }\n return flight\n ? flight.transform\n : getCoreTransform.call(core, element, imageSize);\n };\n\n // A pre-cropped thumbnail file covers only a region of the image:\n // the dummy showing it covers that region of the image box.\n core.getDummyImgStyles = (imageSize) => {\n const region = this.flight && this.flight.region;\n if (!imageSize || !region || isWholeImage(region)) {\n return getCoreDummyStyles.call(core, imageSize);\n }\n return `width:${imageSize.width * region.width}px;\n margin-left: ${imageSize.width * (region.x - 0.5)}px;\n margin-top: ${imageSize.height * (region.y - 0.5)}px;\n height:${imageSize.height * region.height}px`;\n };\n\n // A background thumbnail has no img for the core to fly: its\n // background image flies as the dummy.\n core.getDummyImageContent = ($currentSlide, index, alt) => {\n const content = getCoreDummy.call(core, $currentSlide, index, alt);\n const flight = this.flight;\n if (\n content ||\n !flight ||\n !flight.dummySrc ||\n core.items[index] !== flight.element\n ) {\n return content;\n }\n const dummy = document.createElement('img');\n dummy.alt = alt || '';\n dummy.src = flight.dummySrc;\n dummy.className = 'lg-dummy-img';\n dummy.style.cssText = core.getDummyImgStyles(core.currentImageSize);\n $currentSlide.addClass('lg-first-slide');\n core.outer.addClass('lg-first-slide-loading');\n return dummy;\n };\n\n this.restoreCore = () => {\n core.getOriginTransform = getCoreTransform;\n core.getDummyImgStyles = getCoreDummyStyles;\n core.getDummyImageContent = getCoreDummy;\n };\n }\n\n /**\n * The flight from (or back to) a trigger, when the built-in flight\n * cannot land it exactly: a cropped thumbnail, one letterboxed in its\n * box, or a background thumbnail. Undefined otherwise, and the core\n * flies as it always does.\n */\n private getFlight(\n element: HTMLElement,\n imageSize?: ImageSize,\n ): CropFlight | undefined {\n if (!imageSize || !(imageSize.width > 0) || !(imageSize.height > 0)) {\n return;\n }\n const img = element.querySelector('img');\n const thumb: HTMLElement = img || element;\n const bounds = thumb.getBoundingClientRect();\n const box: RectLike = {\n left: bounds.left,\n top: bounds.top,\n width: bounds.width,\n height: bounds.height,\n };\n // A hidden or collapsed trigger: the core opens or closes about\n // the stage centre.\n if (!isUsableOriginRect(box)) {\n return;\n }\n const style = window.getComputedStyle(thumb);\n const dummySrc = img\n ? undefined\n : parseCssUrl(style.getPropertyValue('background-image'));\n if (!img && !dummySrc) {\n return;\n }\n const origin = getOriginWindow({\n box,\n imageSize,\n ...getThumbPaint(thumb, style),\n });\n const cropped = !isWholeImage(origin.window);\n if (img && !cropped && sameRect(origin.rect, box)) {\n return;\n }\n\n const outerRect = this.core.outer.get().getBoundingClientRect();\n const containerRect: RectLike = {\n left: outerRect.left,\n top: outerRect.top,\n width: outerRect.width,\n // Element height, as the core measures it.\n height: this.core.outer.height(),\n };\n const { top, bottom } = this.core.mediaContainerPosition;\n const flight = { element, region: origin.region, dummySrc };\n if (!cropped) {\n return {\n ...flight,\n transform: getOriginTransform({\n triggerRect: origin.rect,\n containerRect,\n top,\n bottom,\n imageSize,\n }),\n };\n }\n const crop = getOriginCropFlight({\n triggerRect: origin.rect,\n containerRect,\n top,\n bottom,\n imageSize,\n window: origin.window,\n });\n return {\n ...flight,\n transform: crop.transform,\n stage: { outer: crop.outer, inner: crop.inner },\n };\n }\n\n /**\n * The opening flight, whose transform the core has just asked for. For\n * a cropped thumbnail the stage crops to the thumbnail before anything\n * shows (the gallery is still transparent), then follows the slide.\n */\n private onBeforeOpen(): void {\n const stage = this.flight && this.flight.stage;\n if (!stage || !this.outerBox) {\n return;\n }\n this.setStage(stage.outer, stage.inner);\n // Commit the crop now, so that the stage's transition, set at the\n // flip, runs from it. The slide is not current yet, so this style\n // flush cannot start a transition on it.\n this.outerBox.getBoundingClientRect();\n this.followOpen(this.core.getSlideItem(this.core.index).get());\n }\n\n /**\n * Follows the opening slide with the stage. Mutation records are\n * delivered at the end of the task that made them, before the browser\n * renders, so the stage moves in the same frame as each of the core's\n * steps: when the core flips the slide to rest, the stage opens with it\n * on the slide's duration and easing; when the core settles the flight,\n * the stage lets go.\n */\n private followOpen(slide: HTMLElement): void {\n this.stopFollowing();\n let flipped = false;\n this.observer = new MutationObserver(() => {\n const flying = slide.classList.contains('lg-start-end-progress');\n if (\n !flipped &&\n flying &&\n SLIDE_REST.test(slide.style.transform.trim())\n ) {\n flipped = true;\n clearTimeout(this.flipGrace);\n this.setStage(\n STAGE_REST,\n STAGE_REST,\n this.getSlideTransition(slide),\n );\n } else if (flipped && !flying) {\n this.stopFollowing();\n this.resetStage();\n }\n });\n this.observer.observe(slide, {\n attributes: true,\n attributeFilter: ['class', 'style'],\n });\n this.flipGrace = setTimeout(() => {\n if (!flipped) {\n this.stopFollowing();\n this.resetStage();\n }\n }, this.core.settings.startAnimationDuration + FLIP_GRACE);\n }\n\n private onBeforeClose(): void {\n // An opening flight still running hands the stage over to the close.\n this.stopFollowing();\n this.closing = true;\n }\n\n /**\n * The closing flight, whose transform the core has just asked for. The\n * core puts the slide on it right after, in the same task; once it has,\n * the stage follows on the slide's duration and easing: onto the\n * thumbnail's box for a cropped thumbnail, else back to rest if an\n * opening flight left it cropped.\n */\n private followClose(): void {\n const stage = this.flight && this.flight.stage;\n if (!stage && !this.stageMoved) {\n return;\n }\n void Promise.resolve().then(() => {\n const slide = this.core.getSlideItem(this.core.index).get();\n if (!this.closing || !slide) {\n return;\n }\n this.setStage(\n stage ? stage.outer : STAGE_REST,\n stage ? stage.inner : STAGE_REST,\n this.getSlideTransition(slide),\n );\n });\n }\n\n private onAfterClose(): void {\n this.resetStage();\n this.closing = false;\n this.flight = undefined;\n }\n\n private getSlideTransition(slide: HTMLElement): Transition {\n return getTransformTransition(\n slide,\n this.core.settings.startAnimationDuration + 'ms',\n );\n }\n\n /**\n * Crops the stage: both boxes hide their overflow and take their\n * transforms, instantly or on a transition.\n */\n private setStage(\n outer: string,\n inner: string,\n transition?: Transition,\n ): void {\n const boxes: [HTMLElement | undefined, string][] = [\n [this.outerBox, outer],\n [this.innerBox, inner],\n ];\n boxes.forEach(([box, transform]) => {\n if (!box) {\n return;\n }\n box.style.overflow = 'hidden';\n box.style.transitionProperty = transition ? 'transform' : 'none';\n box.style.transitionDuration = transition\n ? transition.duration\n : '';\n box.style.transitionTimingFunction = transition\n ? transition.easing\n : '';\n box.style.transform = transform;\n });\n this.stageMoved = true;\n }\n\n /** Lets go of the crop: the boxes are inert again. */\n private resetStage(): void {\n [this.outerBox, this.innerBox].forEach((box) => {\n if (!box) {\n return;\n }\n box.style.overflow = '';\n box.style.transitionProperty = '';\n box.style.transitionDuration = '';\n box.style.transitionTimingFunction = '';\n box.style.transform = '';\n });\n this.stageMoved = false;\n }\n\n private stopFollowing(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = undefined;\n }\n clearTimeout(this.flipGrace);\n this.flipGrace = undefined;\n }\n\n private wrapStage(): void {\n const inner = this.core.$inner.get();\n const parent = inner && inner.parentNode;\n if (!parent) {\n return;\n }\n this.outerBox = createStageBox();\n this.innerBox = createStageBox();\n parent.insertBefore(this.outerBox, inner);\n this.outerBox.appendChild(this.innerBox);\n this.innerBox.appendChild(inner);\n }\n\n private unwrapStage(): void {\n const inner = this.core.$inner.get();\n const outerBox = this.outerBox;\n if (outerBox && inner && outerBox.parentNode) {\n outerBox.parentNode.insertBefore(inner, outerBox);\n outerBox.remove();\n }\n this.outerBox = undefined;\n this.innerBox = undefined;\n }\n}\n"],"names":["window"],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* lightgallery | 3.0.0-beta.3 | October 1st 2026
|
|
3
|
+
* http://www.lightgalleryjs.com/
|
|
4
|
+
* Copyright (c) 2020 Sachin Neravath;
|
|
5
|
+
* @license GPLv3
|
|
6
|
+
*/
|
|
7
|
+
const lGEvents = {
|
|
8
|
+
updateSlides: "lgUpdateSlides",
|
|
9
|
+
beforeSlide: "lgBeforeSlide"
|
|
10
|
+
};
|
|
11
|
+
const pagerSettings = {
|
|
12
|
+
pager: true
|
|
13
|
+
};
|
|
14
|
+
var __defProp = Object.defineProperty;
|
|
15
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
16
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
17
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
18
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
19
|
+
var __spreadValues = (a, b) => {
|
|
20
|
+
for (var prop in b || (b = {}))
|
|
21
|
+
if (__hasOwnProp.call(b, prop))
|
|
22
|
+
__defNormalProp(a, prop, b[prop]);
|
|
23
|
+
if (__getOwnPropSymbols)
|
|
24
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
25
|
+
if (__propIsEnum.call(b, prop))
|
|
26
|
+
__defNormalProp(a, prop, b[prop]);
|
|
27
|
+
}
|
|
28
|
+
return a;
|
|
29
|
+
};
|
|
30
|
+
class Pager {
|
|
31
|
+
constructor(instance, $LG) {
|
|
32
|
+
this.core = instance;
|
|
33
|
+
this.$LG = $LG;
|
|
34
|
+
this.settings = __spreadValues(__spreadValues({}, pagerSettings), this.core.settings);
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
getPagerHtml(items) {
|
|
38
|
+
let pagerList = "";
|
|
39
|
+
for (let i = 0; i < items.length; i++) {
|
|
40
|
+
pagerList += `<span data-lg-item-id="${i}" class="lg-pager-cont">
|
|
41
|
+
<span data-lg-item-id="${i}" class="lg-pager"></span>
|
|
42
|
+
<div class="lg-pager-thumb-cont"><span class="lg-caret"></span> <img src="${items[i].thumb}" alt="${items[i].alt || ""}" /></div>
|
|
43
|
+
</span>`;
|
|
44
|
+
}
|
|
45
|
+
return pagerList;
|
|
46
|
+
}
|
|
47
|
+
init() {
|
|
48
|
+
if (!this.settings.pager) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
let timeout;
|
|
52
|
+
this.core.$lgComponents.prepend('<div class="lg-pager-outer"></div>');
|
|
53
|
+
const $pagerOuter = this.core.outer.find(".lg-pager-outer");
|
|
54
|
+
$pagerOuter.html(this.getPagerHtml(this.core.galleryItems));
|
|
55
|
+
$pagerOuter.first().on("click.lg touchend.lg", (event) => {
|
|
56
|
+
const $target = this.$LG(event.target);
|
|
57
|
+
if (!$target.hasAttribute("data-lg-item-id")) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const index = parseInt($target.attr("data-lg-item-id"));
|
|
61
|
+
this.core.slide(index, false, true, false);
|
|
62
|
+
});
|
|
63
|
+
$pagerOuter.first().on("mouseover.lg", () => {
|
|
64
|
+
clearTimeout(timeout);
|
|
65
|
+
$pagerOuter.addClass("lg-pager-hover");
|
|
66
|
+
});
|
|
67
|
+
$pagerOuter.first().on("mouseout.lg", () => {
|
|
68
|
+
timeout = setTimeout(() => {
|
|
69
|
+
$pagerOuter.removeClass("lg-pager-hover");
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
this.core.LGel.on(`${lGEvents.beforeSlide}.pager`, (event) => {
|
|
73
|
+
const { index } = event.detail;
|
|
74
|
+
this.manageActiveClass.call(this, index);
|
|
75
|
+
});
|
|
76
|
+
this.core.LGel.on(`${lGEvents.updateSlides}.pager`, () => {
|
|
77
|
+
$pagerOuter.empty();
|
|
78
|
+
$pagerOuter.html(this.getPagerHtml(this.core.galleryItems));
|
|
79
|
+
this.manageActiveClass(this.core.index);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
manageActiveClass(index) {
|
|
83
|
+
const $pagerCont = this.core.outer.find(".lg-pager-cont");
|
|
84
|
+
$pagerCont.removeClass("lg-pager-active");
|
|
85
|
+
$pagerCont.eq(index).addClass("lg-pager-active");
|
|
86
|
+
}
|
|
87
|
+
destroy() {
|
|
88
|
+
this.core.outer.find(".lg-pager-outer").remove();
|
|
89
|
+
this.core.LGel.off(".lg.pager");
|
|
90
|
+
this.core.LGel.off(".pager");
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export {
|
|
94
|
+
Pager as default
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=lg-pager.es5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lg-pager.es5.js","sources":["../../../src/lg-events.ts","../../../src/plugins/pager/lg-pager-settings.ts","../../../src/plugins/pager/lg-pager.ts"],"sourcesContent":["import { LightGallery } from './lightgallery';\nimport { VideoSource } from './plugins/video/types';\n\n/**\n * List of lightGallery events\n * All events should be documented here\n * Below interfaces are used to build the website documentations\n * */\nexport const lGEvents: {\n [key: string]: string;\n} = {\n afterAppendSlide: 'lgAfterAppendSlide',\n init: 'lgInit',\n hasVideo: 'lgHasVideo',\n containerResize: 'lgContainerResize',\n updateSlides: 'lgUpdateSlides',\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\n beforeOpen: 'lgBeforeOpen',\n afterOpen: 'lgAfterOpen',\n slideItemLoad: 'lgSlideItemLoad',\n beforeSlide: 'lgBeforeSlide',\n afterSlide: 'lgAfterSlide',\n posterClick: 'lgPosterClick',\n dragStart: 'lgDragStart',\n dragMove: 'lgDragMove',\n dragEnd: 'lgDragEnd',\n beforeNextSlide: 'lgBeforeNextSlide',\n beforePrevSlide: 'lgBeforePrevSlide',\n beforeClose: 'lgBeforeClose',\n afterClose: 'lgAfterClose',\n rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\n autoplay: 'lgAutoplay',\n autoplayStart: 'lgAutoplayStart',\n autoplayStop: 'lgAutoplayStop',\n};\n\n// Follow the below format for the event documentation\n// @method is the method name when event is used with Angular/React components\n\n/**\n * Fired only once when lightGallery is initialized\n * @name lgInit\n * @method onInit\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action on lightGallery initialization.\n * // Init event returns the plugin instance that can be used to call any lightGalley public method\n * let pluginInstance = null;\n * lg.addEventListener('lgInit', (event) => {\n * pluginInstance = event.detail.instance;\n * });\n * lightGallery(lg);\n * @see <a href=\"/docs/methods/\">Methods</a>\n */\nexport interface InitDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired when the slide content has been inserted into it's slide container.\n * @name lgAfterAppendSlide\n * @method onAfterAppendSlide\n */\nexport interface AfterAppendSlideEventDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired immediately before opening the gallery\n * @name lgBeforeOpen\n * @method onBeforeOpen\n */\nexport interface BeforeOpenDetail {}\n\n/**\n * Fired immediately after opening the gallery\n * @name lgAfterOpen\n * @method onAfterOpen\n */\nexport interface AfterOpenDetail {}\n\n/**\n * Fired once the media inside the slide has been completely loaded .\n * @name lgSlideItemLoad\n * @method onSlideItemLoad\n */\nexport interface SlideItemLoadDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * For the first slide, lightGallery adds some delay for displaying the loaded slide item.\n * This delay is required for the transition effect when the slide item is displayed\n * Respect the delay when you use this event\n */\n delay: number;\n\n // Will be true for the first slide\n isFirstSlide: boolean;\n}\n\n/**\n * Fired immediately before each slide transition.\n * @name lgBeforeSlide\n * @method onBeforeSlide\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action before each slide transition\n * lg.addEventListener('lgBeforeSlide', (event) => {\n * const { index, prevIndex } = event.detail;\n * alert(index, prevIndex);\n * });\n * lightGallery(lg);\n */\nexport interface BeforeSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired immediately after each slide transition.\n * @name lgAfterSlide\n * @method onAfterSlide\n */\nexport interface AfterSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired when the video poster is clicked.\n * @name lgPosterClick\n * @method onPosterClick\n */\nexport interface PosterClickDetail {}\n\n/**\n * Fired when the drag event to move to different slide starts.\n * @name lgDragStart\n * @method onDragStart\n */\nexport interface DragStartDetail {}\n\n/**\n * Fired periodically during the drag operation.\n * @name lgDragMove\n * @method onDragMove\n */\nexport interface DragMoveDetail {}\n\n/**\n * Fired when the user has finished the drag operation\n * @name lgDragEnd\n * @method onDragEnd\n */\nexport interface DragEndDetail {}\n\n/**\n * Fired immediately before the start of the close process.\n * @name lgBeforeClose\n * @method onBeforeClose\n */\nexport interface BeforeCloseDetail {}\n\n/**\n * Fired immediately once lightGallery is closed.\n * @name lgAfterClose\n * @method onAfterClose\n */\nexport interface AfterCloseDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired immediately before each \"next\" slide transition\n * @name lgBeforeNextSlide\n * @method onBeforeNextSlide\n */\nexport interface BeforeNextSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired immediately before each \"prev\" slide transition\n * @name lgBeforePrevSlide\n * @method onBeforePrevSlide\n */\nexport interface BeforePrevSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired when the sub-html content (ex : title/ description) has been appended into the slide.\n * @name lgAfterAppendSubHtml\n * @method onAfterAppendSubHtml\n */\nexport interface AfterAppendSubHtmlDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the lightGallery container has been resized.\n * @name lgContainerResize\n * @method onContainerResize\n */\nexport interface ContainerResizeDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when lightGallery detects video slide\n * @name lgHasVideo\n * @method onHasVideo\n */\nexport interface HasVideoDetail {\n /**\n * Index of the slide,\n */\n index: number;\n /**\n * Video source\n */\n src: string;\n /**\n * HTML5 video source if available\n * <p>\n HTML5 video source = source: {\n src: string;\n type: string;\n }[];\n attributes: HTMLVideoElement;\n * </p>\n */\n html5Video: VideoSource;\n /**\n * True if video has poster\n */\n hasPoster: boolean;\n}\n\n/**\n * Fired when the image is rotated in anticlockwise direction\n * @name lgRotateLeft\n * @method onRotateLeft\n */\nexport interface RotateLeftDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is rotated in clockwise direction\n * @name lgRotateRight\n * @method onRotateRight\n */\nexport interface RotateRightDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped horizontally\n * @name lgFlipHorizontal\n * @method onFlipHorizontal\n */\nexport interface FlipHorizontalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped vertically\n * @name lgFlipVertical\n * @method onFlipVertical\n */\nexport interface FlipVerticalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n","export interface PagerSettings {\n /**\n * Enable/Disable pager option\n */\n pager: boolean;\n}\n\nexport const pagerSettings: PagerSettings = {\n pager: true,\n};\n","import { lGEvents } from '../../lg-events';\nimport { GalleryItem } from '../../lg-utils';\nimport { LgQuery } from '../../lgQuery';\nimport { LightGallery } from '../../lightgallery';\nimport { PagerSettings, pagerSettings } from './lg-pager-settings';\n\nexport default class Pager {\n core: LightGallery;\n settings: PagerSettings;\n private $LG!: LgQuery;\n constructor(instance: LightGallery, $LG: LgQuery) {\n // get lightGallery core plugin instance\n this.core = instance;\n this.$LG = $LG;\n // extend module default settings with lightGallery core settings\n this.settings = { ...pagerSettings, ...this.core.settings };\n\n return this;\n }\n\n private getPagerHtml(items: GalleryItem[]): string {\n let pagerList = '';\n for (let i = 0; i < items.length; i++) {\n pagerList += `<span data-lg-item-id=\"${i}\" class=\"lg-pager-cont\"> \n <span data-lg-item-id=\"${i}\" class=\"lg-pager\"></span>\n <div class=\"lg-pager-thumb-cont\"><span class=\"lg-caret\"></span> <img src=\"${\n items[i].thumb\n }\" alt=\"${items[i].alt || ''}\" /></div>\n </span>`;\n }\n return pagerList;\n }\n\n public init(): void {\n if (!this.settings.pager) {\n return;\n }\n let timeout: any;\n this.core.$lgComponents.prepend('<div class=\"lg-pager-outer\"></div>');\n\n const $pagerOuter = this.core.outer.find('.lg-pager-outer');\n\n $pagerOuter.html(this.getPagerHtml(this.core.galleryItems));\n\n // @todo enable click\n $pagerOuter.first().on('click.lg touchend.lg', (event: MouseEvent) => {\n const $target = this.$LG(event.target);\n if (!$target.hasAttribute('data-lg-item-id')) {\n return;\n }\n const index = parseInt($target.attr('data-lg-item-id'));\n this.core.slide(index, false, true, false);\n });\n\n $pagerOuter.first().on('mouseover.lg', () => {\n clearTimeout(timeout);\n $pagerOuter.addClass('lg-pager-hover');\n });\n\n $pagerOuter.first().on('mouseout.lg', () => {\n timeout = setTimeout(() => {\n $pagerOuter.removeClass('lg-pager-hover');\n });\n });\n\n this.core.LGel.on(`${lGEvents.beforeSlide}.pager`, (event) => {\n const { index } = event.detail;\n this.manageActiveClass.call(this, index);\n });\n\n this.core.LGel.on(`${lGEvents.updateSlides}.pager`, () => {\n $pagerOuter.empty();\n $pagerOuter.html(this.getPagerHtml(this.core.galleryItems));\n this.manageActiveClass(this.core.index);\n });\n }\n\n private manageActiveClass(index: number): void {\n const $pagerCont = this.core.outer.find('.lg-pager-cont');\n $pagerCont.removeClass('lg-pager-active');\n $pagerCont.eq(index).addClass('lg-pager-active');\n }\n\n destroy(): void {\n this.core.outer.find('.lg-pager-outer').remove();\n this.core.LGel.off('.lg.pager');\n this.core.LGel.off('.pager');\n }\n}\n"],"names":[],"mappings":";;;;;;AAQO,MAAM,WAET;AAAA,EAKA,cAAc;AAAA,EAKd,aAAa;AAiBjB;AC9BO,MAAM,gBAA+B;AAAA,EACxC,OAAO;AACX;;;;;;;;;;;;;;;;;ACHA,MAAqB,MAAM;AAAA,EAIvB,YAAY,UAAwB,KAAc;AAE9C,SAAK,OAAO;AACZ,SAAK,MAAM;AAEX,SAAK,WAAW,eAAA,eAAA,CAAA,GAAK,aAAA,GAAkB,KAAK,KAAK,QAAA;AAEjD,WAAO;AAAA,EACX;AAAA,EAEQ,aAAa,OAA8B;AAC/C,QAAI,YAAY;AAChB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,mBAAa,2BAA2B,CAAC;AAAA,6CACR,CAAC;AAAA,gGAEtB,MAAM,CAAC,EAAE,KACb,UAAU,MAAM,CAAC,EAAE,OAAO,EAAE;AAAA;AAAA,IAExC;AACA,WAAO;AAAA,EACX;AAAA,EAEO,OAAa;AAChB,QAAI,CAAC,KAAK,SAAS,OAAO;AACtB;AAAA,IACJ;AACA,QAAI;AACJ,SAAK,KAAK,cAAc,QAAQ,oCAAoC;AAEpE,UAAM,cAAc,KAAK,KAAK,MAAM,KAAK,iBAAiB;AAE1D,gBAAY,KAAK,KAAK,aAAa,KAAK,KAAK,YAAY,CAAC;AAG1D,gBAAY,MAAA,EAAQ,GAAG,wBAAwB,CAAC,UAAsB;AAClE,YAAM,UAAU,KAAK,IAAI,MAAM,MAAM;AACrC,UAAI,CAAC,QAAQ,aAAa,iBAAiB,GAAG;AAC1C;AAAA,MACJ;AACA,YAAM,QAAQ,SAAS,QAAQ,KAAK,iBAAiB,CAAC;AACtD,WAAK,KAAK,MAAM,OAAO,OAAO,MAAM,KAAK;AAAA,IAC7C,CAAC;AAED,gBAAY,MAAA,EAAQ,GAAG,gBAAgB,MAAM;AACzC,mBAAa,OAAO;AACpB,kBAAY,SAAS,gBAAgB;AAAA,IACzC,CAAC;AAED,gBAAY,MAAA,EAAQ,GAAG,eAAe,MAAM;AACxC,gBAAU,WAAW,MAAM;AACvB,oBAAY,YAAY,gBAAgB;AAAA,MAC5C,CAAC;AAAA,IACL,CAAC;AAED,SAAK,KAAK,KAAK,GAAG,GAAG,SAAS,WAAW,UAAU,CAAC,UAAU;AAC1D,YAAM,EAAE,UAAU,MAAM;AACxB,WAAK,kBAAkB,KAAK,MAAM,KAAK;AAAA,IAC3C,CAAC;AAED,SAAK,KAAK,KAAK,GAAG,GAAG,SAAS,YAAY,UAAU,MAAM;AACtD,kBAAY,MAAA;AACZ,kBAAY,KAAK,KAAK,aAAa,KAAK,KAAK,YAAY,CAAC;AAC1D,WAAK,kBAAkB,KAAK,KAAK,KAAK;AAAA,IAC1C,CAAC;AAAA,EACL;AAAA,EAEQ,kBAAkB,OAAqB;AAC3C,UAAM,aAAa,KAAK,KAAK,MAAM,KAAK,gBAAgB;AACxD,eAAW,YAAY,iBAAiB;AACxC,eAAW,GAAG,KAAK,EAAE,SAAS,iBAAiB;AAAA,EACnD;AAAA,EAEA,UAAgB;AACZ,SAAK,KAAK,MAAM,KAAK,iBAAiB,EAAE,OAAA;AACxC,SAAK,KAAK,KAAK,IAAI,WAAW;AAC9B,SAAK,KAAK,KAAK,IAAI,QAAQ;AAAA,EAC/B;AACJ;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).lgPager=t()}(this,function(){"use strict";const e="lgUpdateSlides",t="lgBeforeSlide",r={pager:!0};var s=Object.defineProperty,a=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,l=Object.prototype.propertyIsEnumerable,o=(e,t,r)=>t in e?s(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,n=(e,t)=>{for(var r in t||(t={}))i.call(t,r)&&o(e,r,t[r]);if(a)for(var r of a(t))l.call(t,r)&&o(e,r,t[r]);return e};return class{constructor(e,t){return this.core=e,this.$LG=t,this.settings=n(n({},r),this.core.settings),this}getPagerHtml(e){let t="";for(let r=0;r<e.length;r++)t+=`<span data-lg-item-id="${r}" class="lg-pager-cont"> \n <span data-lg-item-id="${r}" class="lg-pager"></span>\n <div class="lg-pager-thumb-cont"><span class="lg-caret"></span> <img src="${e[r].thumb}" alt="${e[r].alt||""}" /></div>\n </span>`;return t}init(){if(!this.settings.pager)return;let r;this.core.$lgComponents.prepend('<div class="lg-pager-outer"></div>');const s=this.core.outer.find(".lg-pager-outer");s.html(this.getPagerHtml(this.core.galleryItems)),s.first().on("click.lg touchend.lg",e=>{const t=this.$LG(e.target);if(!t.hasAttribute("data-lg-item-id"))return;const r=parseInt(t.attr("data-lg-item-id"));this.core.slide(r,!1,!0,!1)}),s.first().on("mouseover.lg",()=>{clearTimeout(r),s.addClass("lg-pager-hover")}),s.first().on("mouseout.lg",()=>{r=setTimeout(()=>{s.removeClass("lg-pager-hover")})}),this.core.LGel.on(`${t}.pager`,e=>{const{index:t}=e.detail;this.manageActiveClass.call(this,t)}),this.core.LGel.on(`${e}.pager`,()=>{s.empty(),s.html(this.getPagerHtml(this.core.galleryItems)),this.manageActiveClass(this.core.index)})}manageActiveClass(e){const t=this.core.outer.find(".lg-pager-cont");t.removeClass("lg-pager-active"),t.eq(e).addClass("lg-pager-active")}destroy(){this.core.outer.find(".lg-pager-outer").remove(),this.core.LGel.off(".lg.pager"),this.core.LGel.off(".pager")}}});
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
(function(global, factory) {
|
|
2
|
+
typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, global.lgPager = factory());
|
|
3
|
+
})(this, function() {
|
|
4
|
+
"use strict";/*!
|
|
5
|
+
* lightgallery | 3.0.0-beta.3 | October 1st 2026
|
|
6
|
+
* http://www.lightgalleryjs.com/
|
|
7
|
+
* Copyright (c) 2020 Sachin Neravath;
|
|
8
|
+
* @license GPLv3
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const lGEvents = {
|
|
12
|
+
updateSlides: "lgUpdateSlides",
|
|
13
|
+
beforeSlide: "lgBeforeSlide"
|
|
14
|
+
};
|
|
15
|
+
const pagerSettings = {
|
|
16
|
+
pager: true
|
|
17
|
+
};
|
|
18
|
+
var __defProp = Object.defineProperty;
|
|
19
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
20
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
21
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
22
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
23
|
+
var __spreadValues = (a, b) => {
|
|
24
|
+
for (var prop in b || (b = {}))
|
|
25
|
+
if (__hasOwnProp.call(b, prop))
|
|
26
|
+
__defNormalProp(a, prop, b[prop]);
|
|
27
|
+
if (__getOwnPropSymbols)
|
|
28
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
29
|
+
if (__propIsEnum.call(b, prop))
|
|
30
|
+
__defNormalProp(a, prop, b[prop]);
|
|
31
|
+
}
|
|
32
|
+
return a;
|
|
33
|
+
};
|
|
34
|
+
class Pager {
|
|
35
|
+
constructor(instance, $LG) {
|
|
36
|
+
this.core = instance;
|
|
37
|
+
this.$LG = $LG;
|
|
38
|
+
this.settings = __spreadValues(__spreadValues({}, pagerSettings), this.core.settings);
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
getPagerHtml(items) {
|
|
42
|
+
let pagerList = "";
|
|
43
|
+
for (let i = 0; i < items.length; i++) {
|
|
44
|
+
pagerList += `<span data-lg-item-id="${i}" class="lg-pager-cont">
|
|
45
|
+
<span data-lg-item-id="${i}" class="lg-pager"></span>
|
|
46
|
+
<div class="lg-pager-thumb-cont"><span class="lg-caret"></span> <img src="${items[i].thumb}" alt="${items[i].alt || ""}" /></div>
|
|
47
|
+
</span>`;
|
|
48
|
+
}
|
|
49
|
+
return pagerList;
|
|
50
|
+
}
|
|
51
|
+
init() {
|
|
52
|
+
if (!this.settings.pager) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
let timeout;
|
|
56
|
+
this.core.$lgComponents.prepend('<div class="lg-pager-outer"></div>');
|
|
57
|
+
const $pagerOuter = this.core.outer.find(".lg-pager-outer");
|
|
58
|
+
$pagerOuter.html(this.getPagerHtml(this.core.galleryItems));
|
|
59
|
+
$pagerOuter.first().on("click.lg touchend.lg", (event) => {
|
|
60
|
+
const $target = this.$LG(event.target);
|
|
61
|
+
if (!$target.hasAttribute("data-lg-item-id")) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const index = parseInt($target.attr("data-lg-item-id"));
|
|
65
|
+
this.core.slide(index, false, true, false);
|
|
66
|
+
});
|
|
67
|
+
$pagerOuter.first().on("mouseover.lg", () => {
|
|
68
|
+
clearTimeout(timeout);
|
|
69
|
+
$pagerOuter.addClass("lg-pager-hover");
|
|
70
|
+
});
|
|
71
|
+
$pagerOuter.first().on("mouseout.lg", () => {
|
|
72
|
+
timeout = setTimeout(() => {
|
|
73
|
+
$pagerOuter.removeClass("lg-pager-hover");
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
this.core.LGel.on(`${lGEvents.beforeSlide}.pager`, (event) => {
|
|
77
|
+
const { index } = event.detail;
|
|
78
|
+
this.manageActiveClass.call(this, index);
|
|
79
|
+
});
|
|
80
|
+
this.core.LGel.on(`${lGEvents.updateSlides}.pager`, () => {
|
|
81
|
+
$pagerOuter.empty();
|
|
82
|
+
$pagerOuter.html(this.getPagerHtml(this.core.galleryItems));
|
|
83
|
+
this.manageActiveClass(this.core.index);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
manageActiveClass(index) {
|
|
87
|
+
const $pagerCont = this.core.outer.find(".lg-pager-cont");
|
|
88
|
+
$pagerCont.removeClass("lg-pager-active");
|
|
89
|
+
$pagerCont.eq(index).addClass("lg-pager-active");
|
|
90
|
+
}
|
|
91
|
+
destroy() {
|
|
92
|
+
this.core.outer.find(".lg-pager-outer").remove();
|
|
93
|
+
this.core.LGel.off(".lg.pager");
|
|
94
|
+
this.core.LGel.off(".pager");
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return Pager;
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=lg-pager.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lg-pager.umd.js","sources":["../../../src/lg-events.ts","../../../src/plugins/pager/lg-pager-settings.ts","../../../src/plugins/pager/lg-pager.ts"],"sourcesContent":["import { LightGallery } from './lightgallery';\nimport { VideoSource } from './plugins/video/types';\n\n/**\n * List of lightGallery events\n * All events should be documented here\n * Below interfaces are used to build the website documentations\n * */\nexport const lGEvents: {\n [key: string]: string;\n} = {\n afterAppendSlide: 'lgAfterAppendSlide',\n init: 'lgInit',\n hasVideo: 'lgHasVideo',\n containerResize: 'lgContainerResize',\n updateSlides: 'lgUpdateSlides',\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\n beforeOpen: 'lgBeforeOpen',\n afterOpen: 'lgAfterOpen',\n slideItemLoad: 'lgSlideItemLoad',\n beforeSlide: 'lgBeforeSlide',\n afterSlide: 'lgAfterSlide',\n posterClick: 'lgPosterClick',\n dragStart: 'lgDragStart',\n dragMove: 'lgDragMove',\n dragEnd: 'lgDragEnd',\n beforeNextSlide: 'lgBeforeNextSlide',\n beforePrevSlide: 'lgBeforePrevSlide',\n beforeClose: 'lgBeforeClose',\n afterClose: 'lgAfterClose',\n rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\n autoplay: 'lgAutoplay',\n autoplayStart: 'lgAutoplayStart',\n autoplayStop: 'lgAutoplayStop',\n};\n\n// Follow the below format for the event documentation\n// @method is the method name when event is used with Angular/React components\n\n/**\n * Fired only once when lightGallery is initialized\n * @name lgInit\n * @method onInit\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action on lightGallery initialization.\n * // Init event returns the plugin instance that can be used to call any lightGalley public method\n * let pluginInstance = null;\n * lg.addEventListener('lgInit', (event) => {\n * pluginInstance = event.detail.instance;\n * });\n * lightGallery(lg);\n * @see <a href=\"/docs/methods/\">Methods</a>\n */\nexport interface InitDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired when the slide content has been inserted into it's slide container.\n * @name lgAfterAppendSlide\n * @method onAfterAppendSlide\n */\nexport interface AfterAppendSlideEventDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired immediately before opening the gallery\n * @name lgBeforeOpen\n * @method onBeforeOpen\n */\nexport interface BeforeOpenDetail {}\n\n/**\n * Fired immediately after opening the gallery\n * @name lgAfterOpen\n * @method onAfterOpen\n */\nexport interface AfterOpenDetail {}\n\n/**\n * Fired once the media inside the slide has been completely loaded .\n * @name lgSlideItemLoad\n * @method onSlideItemLoad\n */\nexport interface SlideItemLoadDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * For the first slide, lightGallery adds some delay for displaying the loaded slide item.\n * This delay is required for the transition effect when the slide item is displayed\n * Respect the delay when you use this event\n */\n delay: number;\n\n // Will be true for the first slide\n isFirstSlide: boolean;\n}\n\n/**\n * Fired immediately before each slide transition.\n * @name lgBeforeSlide\n * @method onBeforeSlide\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action before each slide transition\n * lg.addEventListener('lgBeforeSlide', (event) => {\n * const { index, prevIndex } = event.detail;\n * alert(index, prevIndex);\n * });\n * lightGallery(lg);\n */\nexport interface BeforeSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired immediately after each slide transition.\n * @name lgAfterSlide\n * @method onAfterSlide\n */\nexport interface AfterSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired when the video poster is clicked.\n * @name lgPosterClick\n * @method onPosterClick\n */\nexport interface PosterClickDetail {}\n\n/**\n * Fired when the drag event to move to different slide starts.\n * @name lgDragStart\n * @method onDragStart\n */\nexport interface DragStartDetail {}\n\n/**\n * Fired periodically during the drag operation.\n * @name lgDragMove\n * @method onDragMove\n */\nexport interface DragMoveDetail {}\n\n/**\n * Fired when the user has finished the drag operation\n * @name lgDragEnd\n * @method onDragEnd\n */\nexport interface DragEndDetail {}\n\n/**\n * Fired immediately before the start of the close process.\n * @name lgBeforeClose\n * @method onBeforeClose\n */\nexport interface BeforeCloseDetail {}\n\n/**\n * Fired immediately once lightGallery is closed.\n * @name lgAfterClose\n * @method onAfterClose\n */\nexport interface AfterCloseDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired immediately before each \"next\" slide transition\n * @name lgBeforeNextSlide\n * @method onBeforeNextSlide\n */\nexport interface BeforeNextSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired immediately before each \"prev\" slide transition\n * @name lgBeforePrevSlide\n * @method onBeforePrevSlide\n */\nexport interface BeforePrevSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired when the sub-html content (ex : title/ description) has been appended into the slide.\n * @name lgAfterAppendSubHtml\n * @method onAfterAppendSubHtml\n */\nexport interface AfterAppendSubHtmlDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the lightGallery container has been resized.\n * @name lgContainerResize\n * @method onContainerResize\n */\nexport interface ContainerResizeDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when lightGallery detects video slide\n * @name lgHasVideo\n * @method onHasVideo\n */\nexport interface HasVideoDetail {\n /**\n * Index of the slide,\n */\n index: number;\n /**\n * Video source\n */\n src: string;\n /**\n * HTML5 video source if available\n * <p>\n HTML5 video source = source: {\n src: string;\n type: string;\n }[];\n attributes: HTMLVideoElement;\n * </p>\n */\n html5Video: VideoSource;\n /**\n * True if video has poster\n */\n hasPoster: boolean;\n}\n\n/**\n * Fired when the image is rotated in anticlockwise direction\n * @name lgRotateLeft\n * @method onRotateLeft\n */\nexport interface RotateLeftDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is rotated in clockwise direction\n * @name lgRotateRight\n * @method onRotateRight\n */\nexport interface RotateRightDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped horizontally\n * @name lgFlipHorizontal\n * @method onFlipHorizontal\n */\nexport interface FlipHorizontalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped vertically\n * @name lgFlipVertical\n * @method onFlipVertical\n */\nexport interface FlipVerticalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n","export interface PagerSettings {\n /**\n * Enable/Disable pager option\n */\n pager: boolean;\n}\n\nexport const pagerSettings: PagerSettings = {\n pager: true,\n};\n","import { lGEvents } from '../../lg-events';\nimport { GalleryItem } from '../../lg-utils';\nimport { LgQuery } from '../../lgQuery';\nimport { LightGallery } from '../../lightgallery';\nimport { PagerSettings, pagerSettings } from './lg-pager-settings';\n\nexport default class Pager {\n core: LightGallery;\n settings: PagerSettings;\n private $LG!: LgQuery;\n constructor(instance: LightGallery, $LG: LgQuery) {\n // get lightGallery core plugin instance\n this.core = instance;\n this.$LG = $LG;\n // extend module default settings with lightGallery core settings\n this.settings = { ...pagerSettings, ...this.core.settings };\n\n return this;\n }\n\n private getPagerHtml(items: GalleryItem[]): string {\n let pagerList = '';\n for (let i = 0; i < items.length; i++) {\n pagerList += `<span data-lg-item-id=\"${i}\" class=\"lg-pager-cont\"> \n <span data-lg-item-id=\"${i}\" class=\"lg-pager\"></span>\n <div class=\"lg-pager-thumb-cont\"><span class=\"lg-caret\"></span> <img src=\"${\n items[i].thumb\n }\" alt=\"${items[i].alt || ''}\" /></div>\n </span>`;\n }\n return pagerList;\n }\n\n public init(): void {\n if (!this.settings.pager) {\n return;\n }\n let timeout: any;\n this.core.$lgComponents.prepend('<div class=\"lg-pager-outer\"></div>');\n\n const $pagerOuter = this.core.outer.find('.lg-pager-outer');\n\n $pagerOuter.html(this.getPagerHtml(this.core.galleryItems));\n\n // @todo enable click\n $pagerOuter.first().on('click.lg touchend.lg', (event: MouseEvent) => {\n const $target = this.$LG(event.target);\n if (!$target.hasAttribute('data-lg-item-id')) {\n return;\n }\n const index = parseInt($target.attr('data-lg-item-id'));\n this.core.slide(index, false, true, false);\n });\n\n $pagerOuter.first().on('mouseover.lg', () => {\n clearTimeout(timeout);\n $pagerOuter.addClass('lg-pager-hover');\n });\n\n $pagerOuter.first().on('mouseout.lg', () => {\n timeout = setTimeout(() => {\n $pagerOuter.removeClass('lg-pager-hover');\n });\n });\n\n this.core.LGel.on(`${lGEvents.beforeSlide}.pager`, (event) => {\n const { index } = event.detail;\n this.manageActiveClass.call(this, index);\n });\n\n this.core.LGel.on(`${lGEvents.updateSlides}.pager`, () => {\n $pagerOuter.empty();\n $pagerOuter.html(this.getPagerHtml(this.core.galleryItems));\n this.manageActiveClass(this.core.index);\n });\n }\n\n private manageActiveClass(index: number): void {\n const $pagerCont = this.core.outer.find('.lg-pager-cont');\n $pagerCont.removeClass('lg-pager-active');\n $pagerCont.eq(index).addClass('lg-pager-active');\n }\n\n destroy(): void {\n this.core.outer.find('.lg-pager-outer').remove();\n this.core.LGel.off('.lg.pager');\n this.core.LGel.off('.pager');\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;AAQO,QAAM,WAET;AAAA,IAKA,cAAc;AAAA,IAKd,aAAa;AAAA,EAiBjB;AC9BO,QAAM,gBAA+B;AAAA,IACxC,OAAO;AAAA,EACX;;;;;;;;;;;;;;;;;ECHA,MAAqB,MAAM;AAAA,IAIvB,YAAY,UAAwB,KAAc;AAE9C,WAAK,OAAO;AACZ,WAAK,MAAM;AAEX,WAAK,WAAW,eAAA,eAAA,CAAA,GAAK,aAAA,GAAkB,KAAK,KAAK,QAAA;AAEjD,aAAO;AAAA,IACX;AAAA,IAEQ,aAAa,OAA8B;AAC/C,UAAI,YAAY;AAChB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,qBAAa,2BAA2B,CAAC;AAAA,6CACR,CAAC;AAAA,gGAEtB,MAAM,CAAC,EAAE,KACb,UAAU,MAAM,CAAC,EAAE,OAAO,EAAE;AAAA;AAAA,MAExC;AACA,aAAO;AAAA,IACX;AAAA,IAEO,OAAa;AAChB,UAAI,CAAC,KAAK,SAAS,OAAO;AACtB;AAAA,MACJ;AACA,UAAI;AACJ,WAAK,KAAK,cAAc,QAAQ,oCAAoC;AAEpE,YAAM,cAAc,KAAK,KAAK,MAAM,KAAK,iBAAiB;AAE1D,kBAAY,KAAK,KAAK,aAAa,KAAK,KAAK,YAAY,CAAC;AAG1D,kBAAY,MAAA,EAAQ,GAAG,wBAAwB,CAAC,UAAsB;AAClE,cAAM,UAAU,KAAK,IAAI,MAAM,MAAM;AACrC,YAAI,CAAC,QAAQ,aAAa,iBAAiB,GAAG;AAC1C;AAAA,QACJ;AACA,cAAM,QAAQ,SAAS,QAAQ,KAAK,iBAAiB,CAAC;AACtD,aAAK,KAAK,MAAM,OAAO,OAAO,MAAM,KAAK;AAAA,MAC7C,CAAC;AAED,kBAAY,MAAA,EAAQ,GAAG,gBAAgB,MAAM;AACzC,qBAAa,OAAO;AACpB,oBAAY,SAAS,gBAAgB;AAAA,MACzC,CAAC;AAED,kBAAY,MAAA,EAAQ,GAAG,eAAe,MAAM;AACxC,kBAAU,WAAW,MAAM;AACvB,sBAAY,YAAY,gBAAgB;AAAA,QAC5C,CAAC;AAAA,MACL,CAAC;AAED,WAAK,KAAK,KAAK,GAAG,GAAG,SAAS,WAAW,UAAU,CAAC,UAAU;AAC1D,cAAM,EAAE,UAAU,MAAM;AACxB,aAAK,kBAAkB,KAAK,MAAM,KAAK;AAAA,MAC3C,CAAC;AAED,WAAK,KAAK,KAAK,GAAG,GAAG,SAAS,YAAY,UAAU,MAAM;AACtD,oBAAY,MAAA;AACZ,oBAAY,KAAK,KAAK,aAAa,KAAK,KAAK,YAAY,CAAC;AAC1D,aAAK,kBAAkB,KAAK,KAAK,KAAK;AAAA,MAC1C,CAAC;AAAA,IACL;AAAA,IAEQ,kBAAkB,OAAqB;AAC3C,YAAM,aAAa,KAAK,KAAK,MAAM,KAAK,gBAAgB;AACxD,iBAAW,YAAY,iBAAiB;AACxC,iBAAW,GAAG,KAAK,EAAE,SAAS,iBAAiB;AAAA,IACnD;AAAA,IAEA,UAAgB;AACZ,WAAK,KAAK,MAAM,KAAK,iBAAiB,EAAE,OAAA;AACxC,WAAK,KAAK,KAAK,IAAI,WAAW;AAC9B,WAAK,KAAK,KAAK,IAAI,QAAQ;AAAA,IAC/B;AAAA,EACJ;;;"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* lightgallery | 3.0.0-beta.3 | October 1st 2026
|
|
3
|
+
* http://www.lightgalleryjs.com/
|
|
4
|
+
* Copyright (c) 2020 Sachin Neravath;
|
|
5
|
+
* @license GPLv3
|
|
6
|
+
*/
|
|
7
|
+
const lGEvents = {
|
|
8
|
+
containerResize: "lgContainerResize",
|
|
9
|
+
slideItemLoad: "lgSlideItemLoad",
|
|
10
|
+
beforeSlide: "lgBeforeSlide",
|
|
11
|
+
afterSlide: "lgAfterSlide"
|
|
12
|
+
};
|
|
13
|
+
const relativeCaptionSettings = {
|
|
14
|
+
relativeCaption: false
|
|
15
|
+
};
|
|
16
|
+
var __defProp = Object.defineProperty;
|
|
17
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
18
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
19
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
20
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
21
|
+
var __spreadValues = (a, b) => {
|
|
22
|
+
for (var prop in b || (b = {}))
|
|
23
|
+
if (__hasOwnProp.call(b, prop))
|
|
24
|
+
__defNormalProp(a, prop, b[prop]);
|
|
25
|
+
if (__getOwnPropSymbols)
|
|
26
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
27
|
+
if (__propIsEnum.call(b, prop))
|
|
28
|
+
__defNormalProp(a, prop, b[prop]);
|
|
29
|
+
}
|
|
30
|
+
return a;
|
|
31
|
+
};
|
|
32
|
+
class RelativeCaption {
|
|
33
|
+
constructor(instance) {
|
|
34
|
+
this.core = instance;
|
|
35
|
+
const defaultSettings = {
|
|
36
|
+
addClass: this.core.settings.addClass + " lg-relative-caption"
|
|
37
|
+
};
|
|
38
|
+
this.core.settings = __spreadValues(__spreadValues({}, this.core.settings), defaultSettings);
|
|
39
|
+
this.settings = __spreadValues(__spreadValues(__spreadValues({}, relativeCaptionSettings), this.core.settings), defaultSettings);
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
init() {
|
|
43
|
+
if (!this.settings.relativeCaption) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.core.LGel.on(`${lGEvents.slideItemLoad}.caption`, (event) => {
|
|
47
|
+
const { index, delay } = event.detail;
|
|
48
|
+
setTimeout(() => {
|
|
49
|
+
if (index === this.core.index) {
|
|
50
|
+
this.setRelativeCaption(index);
|
|
51
|
+
}
|
|
52
|
+
}, delay);
|
|
53
|
+
});
|
|
54
|
+
this.core.LGel.on(`${lGEvents.afterSlide}.caption`, (event) => {
|
|
55
|
+
const { index } = event.detail;
|
|
56
|
+
setTimeout(() => {
|
|
57
|
+
const slide = this.core.getSlideItem(index);
|
|
58
|
+
if (slide.hasClass("lg-complete")) {
|
|
59
|
+
this.setRelativeCaption(index);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
this.core.LGel.on(`${lGEvents.beforeSlide}.caption`, (event) => {
|
|
64
|
+
const { index } = event.detail;
|
|
65
|
+
setTimeout(() => {
|
|
66
|
+
const slide = this.core.getSlideItem(index);
|
|
67
|
+
slide.removeClass("lg-show-caption");
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
this.core.LGel.on(`${lGEvents.containerResize}.caption`, (event) => {
|
|
71
|
+
this.setRelativeCaption(this.core.index);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
setCaptionStyle(index, rect, slideWrapRect) {
|
|
75
|
+
const $subHtmlInner = this.core.getSlideItem(index).find(".lg-relative-caption-item");
|
|
76
|
+
const $subHtml = this.core.getSlideItem(index).find(".lg-sub-html");
|
|
77
|
+
$subHtml.css("width", `${rect.width}px`).css("left", `${rect.left}px`);
|
|
78
|
+
const subHtmlRect = $subHtmlInner.get().getBoundingClientRect();
|
|
79
|
+
const bottom = slideWrapRect.bottom - rect.bottom - subHtmlRect.height;
|
|
80
|
+
$subHtml.css("top", `auto`).css("bottom", `${Math.max(bottom, 0)}px`);
|
|
81
|
+
}
|
|
82
|
+
setRelativeCaption(index) {
|
|
83
|
+
const slide = this.core.getSlideItem(index);
|
|
84
|
+
if (slide.hasClass("lg-current")) {
|
|
85
|
+
const rect = this.core.getSlideItem(index).find(".lg-object").get().getBoundingClientRect();
|
|
86
|
+
const slideWrapRect = this.core.getSlideItem(index).get().getBoundingClientRect();
|
|
87
|
+
this.setCaptionStyle(index, rect, slideWrapRect);
|
|
88
|
+
slide.addClass("lg-show-caption");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
destroy() {
|
|
92
|
+
this.core.LGel.off(".caption");
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export {
|
|
96
|
+
RelativeCaption as default
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=lg-relative-caption.es5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lg-relative-caption.es5.js","sources":["../../../src/lg-events.ts","../../../src/plugins/relativeCaption/lg-relative-caption-settings.ts","../../../src/plugins/relativeCaption/lg-relative-caption.ts"],"sourcesContent":["import { LightGallery } from './lightgallery';\nimport { VideoSource } from './plugins/video/types';\n\n/**\n * List of lightGallery events\n * All events should be documented here\n * Below interfaces are used to build the website documentations\n * */\nexport const lGEvents: {\n [key: string]: string;\n} = {\n afterAppendSlide: 'lgAfterAppendSlide',\n init: 'lgInit',\n hasVideo: 'lgHasVideo',\n containerResize: 'lgContainerResize',\n updateSlides: 'lgUpdateSlides',\n afterAppendSubHtml: 'lgAfterAppendSubHtml',\n beforeOpen: 'lgBeforeOpen',\n afterOpen: 'lgAfterOpen',\n slideItemLoad: 'lgSlideItemLoad',\n beforeSlide: 'lgBeforeSlide',\n afterSlide: 'lgAfterSlide',\n posterClick: 'lgPosterClick',\n dragStart: 'lgDragStart',\n dragMove: 'lgDragMove',\n dragEnd: 'lgDragEnd',\n beforeNextSlide: 'lgBeforeNextSlide',\n beforePrevSlide: 'lgBeforePrevSlide',\n beforeClose: 'lgBeforeClose',\n afterClose: 'lgAfterClose',\n rotateLeft: 'lgRotateLeft',\n rotateRight: 'lgRotateRight',\n flipHorizontal: 'lgFlipHorizontal',\n flipVertical: 'lgFlipVertical',\n autoplay: 'lgAutoplay',\n autoplayStart: 'lgAutoplayStart',\n autoplayStop: 'lgAutoplayStop',\n};\n\n// Follow the below format for the event documentation\n// @method is the method name when event is used with Angular/React components\n\n/**\n * Fired only once when lightGallery is initialized\n * @name lgInit\n * @method onInit\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action on lightGallery initialization.\n * // Init event returns the plugin instance that can be used to call any lightGalley public method\n * let pluginInstance = null;\n * lg.addEventListener('lgInit', (event) => {\n * pluginInstance = event.detail.instance;\n * });\n * lightGallery(lg);\n * @see <a href=\"/docs/methods/\">Methods</a>\n */\nexport interface InitDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired when the slide content has been inserted into it's slide container.\n * @name lgAfterAppendSlide\n * @method onAfterAppendSlide\n */\nexport interface AfterAppendSlideEventDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired immediately before opening the gallery\n * @name lgBeforeOpen\n * @method onBeforeOpen\n */\nexport interface BeforeOpenDetail {}\n\n/**\n * Fired immediately after opening the gallery\n * @name lgAfterOpen\n * @method onAfterOpen\n */\nexport interface AfterOpenDetail {}\n\n/**\n * Fired once the media inside the slide has been completely loaded .\n * @name lgSlideItemLoad\n * @method onSlideItemLoad\n */\nexport interface SlideItemLoadDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * For the first slide, lightGallery adds some delay for displaying the loaded slide item.\n * This delay is required for the transition effect when the slide item is displayed\n * Respect the delay when you use this event\n */\n delay: number;\n\n // Will be true for the first slide\n isFirstSlide: boolean;\n}\n\n/**\n * Fired immediately before each slide transition.\n * @name lgBeforeSlide\n * @method onBeforeSlide\n * @example\n * const lg = document.getElementById('custom-events-demo');\n * // Perform any action before each slide transition\n * lg.addEventListener('lgBeforeSlide', (event) => {\n * const { index, prevIndex } = event.detail;\n * alert(index, prevIndex);\n * });\n * lightGallery(lg);\n */\nexport interface BeforeSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired immediately after each slide transition.\n * @name lgAfterSlide\n * @method onAfterSlide\n */\nexport interface AfterSlideDetail {\n /**\n * Index of the previous slide\n */\n prevIndex: number;\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n /**\n * true if slide function called via thumbnail click\n */\n fromThumb: boolean;\n}\n\n/**\n * Fired when the video poster is clicked.\n * @name lgPosterClick\n * @method onPosterClick\n */\nexport interface PosterClickDetail {}\n\n/**\n * Fired when the drag event to move to different slide starts.\n * @name lgDragStart\n * @method onDragStart\n */\nexport interface DragStartDetail {}\n\n/**\n * Fired periodically during the drag operation.\n * @name lgDragMove\n * @method onDragMove\n */\nexport interface DragMoveDetail {}\n\n/**\n * Fired when the user has finished the drag operation\n * @name lgDragEnd\n * @method onDragEnd\n */\nexport interface DragEndDetail {}\n\n/**\n * Fired immediately before the start of the close process.\n * @name lgBeforeClose\n * @method onBeforeClose\n */\nexport interface BeforeCloseDetail {}\n\n/**\n * Fired immediately once lightGallery is closed.\n * @name lgAfterClose\n * @method onAfterClose\n */\nexport interface AfterCloseDetail {\n /**\n * lightGallery plugin instance\n */\n instance: LightGallery;\n}\n\n/**\n * Fired immediately before each \"next\" slide transition\n * @name lgBeforeNextSlide\n * @method onBeforeNextSlide\n */\nexport interface BeforeNextSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired immediately before each \"prev\" slide transition\n * @name lgBeforePrevSlide\n * @method onBeforePrevSlide\n */\nexport interface BeforePrevSlideDetail {\n /**\n * Index of the slide\n */\n index: number;\n /**\n * true if slide function called via touch event or mouse drag\n */\n fromTouch: boolean;\n}\n\n/**\n * Fired when the sub-html content (ex : title/ description) has been appended into the slide.\n * @name lgAfterAppendSubHtml\n * @method onAfterAppendSubHtml\n */\nexport interface AfterAppendSubHtmlDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the lightGallery container has been resized.\n * @name lgContainerResize\n * @method onContainerResize\n */\nexport interface ContainerResizeDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when lightGallery detects video slide\n * @name lgHasVideo\n * @method onHasVideo\n */\nexport interface HasVideoDetail {\n /**\n * Index of the slide,\n */\n index: number;\n /**\n * Video source\n */\n src: string;\n /**\n * HTML5 video source if available\n * <p>\n HTML5 video source = source: {\n src: string;\n type: string;\n }[];\n attributes: HTMLVideoElement;\n * </p>\n */\n html5Video: VideoSource;\n /**\n * True if video has poster\n */\n hasPoster: boolean;\n}\n\n/**\n * Fired when the image is rotated in anticlockwise direction\n * @name lgRotateLeft\n * @method onRotateLeft\n */\nexport interface RotateLeftDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is rotated in clockwise direction\n * @name lgRotateRight\n * @method onRotateRight\n */\nexport interface RotateRightDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped horizontally\n * @name lgFlipHorizontal\n * @method onFlipHorizontal\n */\nexport interface FlipHorizontalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n\n/**\n * Fired when the image is flipped vertically\n * @name lgFlipVertical\n * @method onFlipVertical\n */\nexport interface FlipVerticalDetail {\n /**\n * Index of the slide\n */\n index: number;\n}\n","export interface RelativeCaptionSettings {\n /**\n * Enable/Disable relative captions\n */\n relativeCaption: boolean;\n}\n\nexport const relativeCaptionSettings: RelativeCaptionSettings = {\n relativeCaption: false,\n};\n","/**\n * lightGallery caption for placing captions relative to the image\n */\n\nimport { lGEvents } from '../../lg-events';\nimport {\n LightGalleryAllSettings,\n LightGallerySettings,\n} from '../../lg-settings';\nimport { LightGallery } from '../../lightgallery';\nimport {\n RelativeCaptionSettings,\n relativeCaptionSettings,\n} from './lg-relative-caption-settings';\n\nexport default class RelativeCaption {\n core: LightGallery;\n settings: RelativeCaptionSettings;\n constructor(instance: LightGallery) {\n // get lightGallery core plugin instance\n this.core = instance;\n\n // Override some of lightGallery default settings\n const defaultSettings: Partial<LightGalleryAllSettings> = {\n addClass: this.core.settings.addClass + ' lg-relative-caption',\n };\n\n this.core.settings = { ...this.core.settings, ...defaultSettings };\n\n // extend module default settings with lightGallery core settings\n this.settings = {\n ...relativeCaptionSettings,\n ...this.core.settings,\n ...defaultSettings,\n };\n\n return this;\n }\n\n init(): void {\n if (!this.settings.relativeCaption) {\n return;\n }\n this.core.LGel.on(`${lGEvents.slideItemLoad}.caption`, (event) => {\n const { index, delay } = event.detail;\n setTimeout(() => {\n if (index === this.core.index) {\n this.setRelativeCaption(index);\n }\n }, delay);\n });\n this.core.LGel.on(`${lGEvents.afterSlide}.caption`, (event) => {\n const { index } = event.detail;\n setTimeout(() => {\n const slide = this.core.getSlideItem(index);\n if (slide.hasClass('lg-complete')) {\n this.setRelativeCaption(index);\n }\n });\n });\n this.core.LGel.on(`${lGEvents.beforeSlide}.caption`, (event) => {\n const { index } = event.detail;\n setTimeout(() => {\n const slide = this.core.getSlideItem(index);\n slide.removeClass('lg-show-caption');\n });\n });\n this.core.LGel.on(`${lGEvents.containerResize}.caption`, (event) => {\n this.setRelativeCaption(this.core.index);\n });\n }\n\n private setCaptionStyle(\n index: number,\n rect: ClientRect,\n slideWrapRect: ClientRect,\n ) {\n const $subHtmlInner = this.core\n .getSlideItem(index)\n .find('.lg-relative-caption-item');\n const $subHtml = this.core.getSlideItem(index).find('.lg-sub-html');\n $subHtml.css('width', `${rect.width}px`).css('left', `${rect.left}px`);\n const subHtmlRect = $subHtmlInner.get().getBoundingClientRect();\n const bottom = slideWrapRect.bottom - rect.bottom - subHtmlRect.height;\n $subHtml.css('top', `auto`).css('bottom', `${Math.max(bottom, 0)}px`);\n }\n\n private setRelativeCaption(index: number) {\n const slide = this.core.getSlideItem(index);\n if (slide.hasClass('lg-current')) {\n const rect = this.core\n .getSlideItem(index)\n .find('.lg-object')\n .get()\n .getBoundingClientRect();\n const slideWrapRect = this.core\n .getSlideItem(index)\n .get()\n .getBoundingClientRect();\n this.setCaptionStyle(index, rect, slideWrapRect);\n slide.addClass('lg-show-caption');\n }\n }\n\n destroy(): void {\n this.core.LGel.off('.caption');\n }\n}\n"],"names":[],"mappings":";;;;;;AAQO,MAAM,WAET;AAAA,EAIA,iBAAiB;AAAA,EAKjB,eAAe;AAAA,EACf,aAAa;AAAA,EACb,YAAY;AAgBhB;AC9BO,MAAM,0BAAmD;AAAA,EAC5D,iBAAiB;AACrB;;;;;;;;;;;;;;;;;ACMA,MAAqB,gBAAgB;AAAA,EAGjC,YAAY,UAAwB;AAEhC,SAAK,OAAO;AAGZ,UAAM,kBAAoD;AAAA,MACtD,UAAU,KAAK,KAAK,SAAS,WAAW;AAAA,IAAA;AAG5C,SAAK,KAAK,WAAW,eAAA,eAAA,IAAK,KAAK,KAAK,QAAA,GAAa,eAAA;AAGjD,SAAK,WAAW,eAAA,eAAA,eAAA,CAAA,GACT,uBAAA,GACA,KAAK,KAAK,QAAA,GACV,eAAA;AAGP,WAAO;AAAA,EACX;AAAA,EAEA,OAAa;AACT,QAAI,CAAC,KAAK,SAAS,iBAAiB;AAChC;AAAA,IACJ;AACA,SAAK,KAAK,KAAK,GAAG,GAAG,SAAS,aAAa,YAAY,CAAC,UAAU;AAC9D,YAAM,EAAE,OAAO,MAAA,IAAU,MAAM;AAC/B,iBAAW,MAAM;AACb,YAAI,UAAU,KAAK,KAAK,OAAO;AAC3B,eAAK,mBAAmB,KAAK;AAAA,QACjC;AAAA,MACJ,GAAG,KAAK;AAAA,IACZ,CAAC;AACD,SAAK,KAAK,KAAK,GAAG,GAAG,SAAS,UAAU,YAAY,CAAC,UAAU;AAC3D,YAAM,EAAE,UAAU,MAAM;AACxB,iBAAW,MAAM;AACb,cAAM,QAAQ,KAAK,KAAK,aAAa,KAAK;AAC1C,YAAI,MAAM,SAAS,aAAa,GAAG;AAC/B,eAAK,mBAAmB,KAAK;AAAA,QACjC;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AACD,SAAK,KAAK,KAAK,GAAG,GAAG,SAAS,WAAW,YAAY,CAAC,UAAU;AAC5D,YAAM,EAAE,UAAU,MAAM;AACxB,iBAAW,MAAM;AACb,cAAM,QAAQ,KAAK,KAAK,aAAa,KAAK;AAC1C,cAAM,YAAY,iBAAiB;AAAA,MACvC,CAAC;AAAA,IACL,CAAC;AACD,SAAK,KAAK,KAAK,GAAG,GAAG,SAAS,eAAe,YAAY,CAAC,UAAU;AAChE,WAAK,mBAAmB,KAAK,KAAK,KAAK;AAAA,IAC3C,CAAC;AAAA,EACL;AAAA,EAEQ,gBACJ,OACA,MACA,eACF;AACE,UAAM,gBAAgB,KAAK,KACtB,aAAa,KAAK,EAClB,KAAK,2BAA2B;AACrC,UAAM,WAAW,KAAK,KAAK,aAAa,KAAK,EAAE,KAAK,cAAc;AAClE,aAAS,IAAI,SAAS,GAAG,KAAK,KAAK,IAAI,EAAE,IAAI,QAAQ,GAAG,KAAK,IAAI,IAAI;AACrE,UAAM,cAAc,cAAc,IAAA,EAAM,sBAAA;AACxC,UAAM,SAAS,cAAc,SAAS,KAAK,SAAS,YAAY;AAChE,aAAS,IAAI,OAAO,MAAM,EAAE,IAAI,UAAU,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,IAAI;AAAA,EACxE;AAAA,EAEQ,mBAAmB,OAAe;AACtC,UAAM,QAAQ,KAAK,KAAK,aAAa,KAAK;AAC1C,QAAI,MAAM,SAAS,YAAY,GAAG;AAC9B,YAAM,OAAO,KAAK,KACb,aAAa,KAAK,EAClB,KAAK,YAAY,EACjB,IAAA,EACA,sBAAA;AACL,YAAM,gBAAgB,KAAK,KACtB,aAAa,KAAK,EAClB,IAAA,EACA,sBAAA;AACL,WAAK,gBAAgB,OAAO,MAAM,aAAa;AAC/C,YAAM,SAAS,iBAAiB;AAAA,IACpC;AAAA,EACJ;AAAA,EAEA,UAAgB;AACZ,SAAK,KAAK,KAAK,IAAI,UAAU;AAAA,EACjC;AACJ;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).lgRelativeCaption=e()}(this,function(){"use strict";const t="lgContainerResize",e="lgSlideItemLoad",i="lgBeforeSlide",o="lgAfterSlide",s={relativeCaption:!1};var n=Object.defineProperty,l=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,c=Object.prototype.propertyIsEnumerable,r=(t,e,i)=>e in t?n(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i,d=(t,e)=>{for(var i in e||(e={}))a.call(e,i)&&r(t,i,e[i]);if(l)for(var i of l(e))c.call(e,i)&&r(t,i,e[i]);return t};return class{constructor(t){this.core=t;const e={addClass:this.core.settings.addClass+" lg-relative-caption"};return this.core.settings=d(d({},this.core.settings),e),this.settings=d(d(d({},s),this.core.settings),e),this}init(){this.settings.relativeCaption&&(this.core.LGel.on(`${e}.caption`,t=>{const{index:e,delay:i}=t.detail;setTimeout(()=>{e===this.core.index&&this.setRelativeCaption(e)},i)}),this.core.LGel.on(`${o}.caption`,t=>{const{index:e}=t.detail;setTimeout(()=>{this.core.getSlideItem(e).hasClass("lg-complete")&&this.setRelativeCaption(e)})}),this.core.LGel.on(`${i}.caption`,t=>{const{index:e}=t.detail;setTimeout(()=>{this.core.getSlideItem(e).removeClass("lg-show-caption")})}),this.core.LGel.on(`${t}.caption`,t=>{this.setRelativeCaption(this.core.index)}))}setCaptionStyle(t,e,i){const o=this.core.getSlideItem(t).find(".lg-relative-caption-item"),s=this.core.getSlideItem(t).find(".lg-sub-html");s.css("width",`${e.width}px`).css("left",`${e.left}px`);const n=o.get().getBoundingClientRect(),l=i.bottom-e.bottom-n.height;s.css("top","auto").css("bottom",`${Math.max(l,0)}px`)}setRelativeCaption(t){const e=this.core.getSlideItem(t);if(e.hasClass("lg-current")){const i=this.core.getSlideItem(t).find(".lg-object").get().getBoundingClientRect(),o=this.core.getSlideItem(t).get().getBoundingClientRect();this.setCaptionStyle(t,i,o),e.addClass("lg-show-caption")}}destroy(){this.core.LGel.off(".caption")}}});
|