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.
Files changed (619) hide show
  1. package/LICENSE +690 -0
  2. package/README.md +31 -21
  3. package/dist/README.md +229 -0
  4. package/{css → dist/css}/lg-autoplay.css +7 -4
  5. package/{css → dist/css}/lg-autoplay.css.map +1 -1
  6. package/{css → dist/css}/lg-comments.css +0 -6
  7. package/{css → dist/css}/lg-comments.css.map +1 -1
  8. package/dist/css/lg-fullscreen.css +11 -0
  9. package/dist/css/lg-fullscreen.css.map +1 -0
  10. package/dist/css/lg-justified.css +37 -0
  11. package/dist/css/lg-justified.css.map +1 -0
  12. package/{css → dist/css}/lg-pager.css.map +1 -1
  13. package/{css → dist/css}/lg-rotate.css +0 -16
  14. package/{css → dist/css}/lg-rotate.css.map +1 -1
  15. package/dist/css/lg-rtl.css +94 -0
  16. package/dist/css/lg-rtl.css.map +1 -0
  17. package/{css → dist/css}/lg-share.css +4 -32
  18. package/dist/css/lg-share.css.map +1 -0
  19. package/{css → dist/css}/lg-thumbnail.css +7 -3
  20. package/dist/css/lg-thumbnail.css.map +1 -0
  21. package/{css → dist/css}/lg-transitions.css +10 -0
  22. package/dist/css/lg-transitions.css.map +1 -0
  23. package/{css → dist/css}/lg-zoom.css +20 -9
  24. package/dist/css/lg-zoom.css.map +1 -0
  25. package/{css → dist/css}/lightgallery-bundle.css +150 -118
  26. package/dist/css/lightgallery-bundle.css.map +1 -0
  27. package/dist/css/lightgallery-bundle.min.css +1 -0
  28. package/{css → dist/css}/lightgallery-core.css +49 -7
  29. package/dist/css/lightgallery-core.css.map +1 -0
  30. package/{css → dist/css}/lightgallery.css +105 -44
  31. package/dist/css/lightgallery.css.map +1 -0
  32. package/dist/lightgallery.es5.js +3797 -0
  33. package/dist/lightgallery.es5.js.map +1 -0
  34. package/dist/lightgallery.min.js +1 -0
  35. package/dist/lightgallery.umd.js +3800 -0
  36. package/dist/lightgallery.umd.js.map +1 -0
  37. package/dist/package.json +33 -0
  38. package/dist/plugins/autoplay/lg-autoplay.es5.js +193 -0
  39. package/dist/plugins/autoplay/lg-autoplay.es5.js.map +1 -0
  40. package/dist/plugins/autoplay/lg-autoplay.min.js +1 -0
  41. package/dist/plugins/autoplay/lg-autoplay.umd.js +196 -0
  42. package/dist/plugins/autoplay/lg-autoplay.umd.js.map +1 -0
  43. package/dist/plugins/autoplay/package.json +7 -0
  44. package/dist/plugins/comment/lg-comment.es5.js +136 -0
  45. package/dist/plugins/comment/lg-comment.es5.js.map +1 -0
  46. package/dist/plugins/comment/lg-comment.min.js +1 -0
  47. package/dist/plugins/comment/lg-comment.umd.js +139 -0
  48. package/dist/plugins/comment/lg-comment.umd.js.map +1 -0
  49. package/dist/plugins/comment/package.json +7 -0
  50. package/dist/plugins/fullscreen/lg-fullscreen.es5.js +114 -0
  51. package/dist/plugins/fullscreen/lg-fullscreen.es5.js.map +1 -0
  52. package/dist/plugins/fullscreen/lg-fullscreen.min.js +1 -0
  53. package/dist/plugins/fullscreen/lg-fullscreen.umd.js +117 -0
  54. package/dist/plugins/fullscreen/lg-fullscreen.umd.js.map +1 -0
  55. package/dist/plugins/fullscreen/package.json +7 -0
  56. package/dist/plugins/hash/lg-hash.es5.js +207 -0
  57. package/dist/plugins/hash/lg-hash.es5.js.map +1 -0
  58. package/dist/plugins/hash/lg-hash.min.js +1 -0
  59. package/dist/plugins/hash/lg-hash.umd.js +210 -0
  60. package/dist/plugins/hash/lg-hash.umd.js.map +1 -0
  61. package/dist/plugins/hash/package.json +7 -0
  62. package/dist/plugins/justified/lg-justified.es5.js +415 -0
  63. package/dist/plugins/justified/lg-justified.es5.js.map +1 -0
  64. package/dist/plugins/justified/lg-justified.min.js +1 -0
  65. package/dist/plugins/justified/lg-justified.umd.js +418 -0
  66. package/dist/plugins/justified/lg-justified.umd.js.map +1 -0
  67. package/dist/plugins/justified/package.json +7 -0
  68. package/dist/plugins/mediumZoom/lg-medium-zoom.es5.js +95 -0
  69. package/dist/plugins/mediumZoom/lg-medium-zoom.es5.js.map +1 -0
  70. package/dist/plugins/mediumZoom/lg-medium-zoom.min.js +1 -0
  71. package/dist/plugins/mediumZoom/lg-medium-zoom.umd.js +98 -0
  72. package/dist/plugins/mediumZoom/lg-medium-zoom.umd.js.map +1 -0
  73. package/dist/plugins/mediumZoom/package.json +7 -0
  74. package/dist/plugins/originCrop/lg-origin-crop.es5.js +622 -0
  75. package/dist/plugins/originCrop/lg-origin-crop.es5.js.map +1 -0
  76. package/dist/plugins/originCrop/lg-origin-crop.min.js +1 -0
  77. package/dist/plugins/originCrop/lg-origin-crop.umd.js +625 -0
  78. package/dist/plugins/originCrop/lg-origin-crop.umd.js.map +1 -0
  79. package/dist/plugins/pager/lg-pager.es5.js +96 -0
  80. package/dist/plugins/pager/lg-pager.es5.js.map +1 -0
  81. package/dist/plugins/pager/lg-pager.min.js +1 -0
  82. package/dist/plugins/pager/lg-pager.umd.js +99 -0
  83. package/dist/plugins/pager/lg-pager.umd.js.map +1 -0
  84. package/dist/plugins/pager/package.json +7 -0
  85. package/dist/plugins/relativeCaption/lg-relative-caption.es5.js +98 -0
  86. package/dist/plugins/relativeCaption/lg-relative-caption.es5.js.map +1 -0
  87. package/dist/plugins/relativeCaption/lg-relative-caption.min.js +1 -0
  88. package/dist/plugins/relativeCaption/lg-relative-caption.umd.js +101 -0
  89. package/dist/plugins/relativeCaption/lg-relative-caption.umd.js.map +1 -0
  90. package/dist/plugins/relativeCaption/package.json +7 -0
  91. package/dist/plugins/rotate/lg-rotate.es5.js +226 -0
  92. package/dist/plugins/rotate/lg-rotate.es5.js.map +1 -0
  93. package/dist/plugins/rotate/lg-rotate.min.js +1 -0
  94. package/dist/plugins/rotate/lg-rotate.umd.js +229 -0
  95. package/dist/plugins/rotate/lg-rotate.umd.js.map +1 -0
  96. package/dist/plugins/rotate/package.json +7 -0
  97. package/dist/plugins/share/lg-share.es5.js +309 -0
  98. package/dist/plugins/share/lg-share.es5.js.map +1 -0
  99. package/dist/plugins/share/lg-share.min.js +1 -0
  100. package/dist/plugins/share/lg-share.umd.js +312 -0
  101. package/dist/plugins/share/lg-share.umd.js.map +1 -0
  102. package/dist/plugins/share/package.json +7 -0
  103. package/dist/plugins/thumbnail/lg-thumbnail.es5.js +792 -0
  104. package/dist/plugins/thumbnail/lg-thumbnail.es5.js.map +1 -0
  105. package/dist/plugins/thumbnail/lg-thumbnail.min.js +1 -0
  106. package/dist/plugins/thumbnail/lg-thumbnail.umd.js +795 -0
  107. package/dist/plugins/thumbnail/lg-thumbnail.umd.js.map +1 -0
  108. package/dist/plugins/thumbnail/package.json +7 -0
  109. package/dist/plugins/video/lg-video.es5.js +518 -0
  110. package/dist/plugins/video/lg-video.es5.js.map +1 -0
  111. package/dist/plugins/video/lg-video.min.js +1 -0
  112. package/dist/plugins/video/lg-video.umd.js +521 -0
  113. package/dist/plugins/video/lg-video.umd.js.map +1 -0
  114. package/dist/plugins/video/package.json +7 -0
  115. package/dist/plugins/vimeoThumbnail/lg-vimeo-thumbnail.es5.js +72 -0
  116. package/dist/plugins/vimeoThumbnail/lg-vimeo-thumbnail.es5.js.map +1 -0
  117. package/dist/plugins/vimeoThumbnail/lg-vimeo-thumbnail.min.js +1 -0
  118. package/dist/plugins/vimeoThumbnail/lg-vimeo-thumbnail.umd.js +75 -0
  119. package/dist/plugins/vimeoThumbnail/lg-vimeo-thumbnail.umd.js.map +1 -0
  120. package/dist/plugins/vimeoThumbnail/package.json +7 -0
  121. package/dist/plugins/zoom/lg-zoom.es5.js +1412 -0
  122. package/dist/plugins/zoom/lg-zoom.es5.js.map +1 -0
  123. package/dist/plugins/zoom/lg-zoom.min.js +1 -0
  124. package/dist/plugins/zoom/lg-zoom.umd.js +1415 -0
  125. package/dist/plugins/zoom/lg-zoom.umd.js.map +1 -0
  126. package/dist/plugins/zoom/package.json +7 -0
  127. package/{scss → dist/scss}/_lg-theme-default.scss +68 -18
  128. package/{scss → dist/scss}/_lg-variables.scss +0 -1
  129. package/{scss → dist/scss}/lg-autoplay.scss +10 -4
  130. package/{scss → dist/scss}/lg-comments.scss +0 -8
  131. package/dist/scss/lg-fullscreen.scss +15 -0
  132. package/dist/scss/lg-justified.scss +63 -0
  133. package/{scss → dist/scss}/lg-rotate.scss +0 -24
  134. package/dist/scss/lg-rtl.scss +145 -0
  135. package/{scss → dist/scss}/lg-share.scss +6 -33
  136. package/{scss → dist/scss}/lg-thumbnail.scss +16 -5
  137. package/{scss → dist/scss}/lg-zoom.scss +46 -9
  138. package/{scss → dist/scss}/lightgallery-bundle.scss +0 -1
  139. package/{scss → dist/scss}/lightgallery-core.scss +73 -6
  140. package/{scss → dist/scss}/lightgallery.scss +0 -1
  141. package/{scss → dist/scss}/transitions/_lg-scale-up.scss +6 -0
  142. package/{scss → dist/scss}/transitions/_lg-slide-circular-vertical.scss +6 -0
  143. package/{scss → dist/scss}/transitions/_lg-slide-circular.scss +6 -0
  144. package/{scss → dist/scss}/transitions/_lg-soft-zoom.scss +6 -0
  145. package/{scss → dist/scss}/transitions/_lg-zoom-in-big.scss +6 -0
  146. package/{scss → dist/scss}/transitions/_lg-zoom-in-out.scss +6 -0
  147. package/{scss → dist/scss}/transitions/_lg-zoom-in.scss +6 -0
  148. package/{scss → dist/scss}/transitions/_lg-zoom-out-big.scss +6 -0
  149. package/{scss → dist/scss}/transitions/_lg-zoom-out-in.scss +6 -0
  150. package/{scss → dist/scss}/transitions/_lg-zoom-out.scss +6 -0
  151. package/dist/types/headless/announce.d.ts +22 -0
  152. package/dist/types/headless/emitter.d.ts +14 -0
  153. package/dist/types/headless/gestures.d.ts +128 -0
  154. package/dist/types/headless/hash-driver.d.ts +77 -0
  155. package/dist/types/headless/icons.d.ts +56 -0
  156. package/dist/types/headless/index.d.ts +34 -0
  157. package/dist/types/headless/items.d.ts +92 -0
  158. package/dist/types/headless/justified-layout.d.ts +71 -0
  159. package/dist/types/headless/license.d.ts +35 -0
  160. package/dist/types/headless/origin-crop.d.ts +135 -0
  161. package/dist/types/headless/origin.d.ts +65 -0
  162. package/dist/types/headless/plugin-slices.d.ts +64 -0
  163. package/dist/types/headless/preload.d.ts +36 -0
  164. package/dist/types/headless/responsive.d.ts +90 -0
  165. package/dist/types/headless/settings.d.ts +268 -0
  166. package/dist/types/headless/share-urls.d.ts +60 -0
  167. package/dist/types/headless/spring.d.ts +42 -0
  168. package/dist/types/headless/state.d.ts +63 -0
  169. package/dist/types/headless/thumb-math.d.ts +85 -0
  170. package/dist/types/headless/toolbar-overflow.d.ts +61 -0
  171. package/dist/types/headless/transition.d.ts +33 -0
  172. package/dist/types/headless/velocity.d.ts +31 -0
  173. package/dist/types/headless/video-urls.d.ts +64 -0
  174. package/dist/types/headless/zoom-math.d.ts +89 -0
  175. package/{index.d.ts → dist/types/index.d.ts} +9 -4
  176. package/{lg-events.d.ts → dist/types/lg-events.d.ts} +300 -300
  177. package/dist/types/lg-icons.d.ts +27 -0
  178. package/{lg-plugin.d.ts → dist/types/lg-plugin.d.ts} +7 -7
  179. package/{lg-settings.d.ts → dist/types/lg-settings.d.ts} +549 -425
  180. package/dist/types/lg-spring-runner.d.ts +14 -0
  181. package/dist/types/lg-toolbar-overflow.d.ts +36 -0
  182. package/{lg-utils.d.ts → dist/types/lg-utils.d.ts} +236 -228
  183. package/{lgQuery.d.ts → dist/types/lgQuery.d.ts} +56 -56
  184. package/{lightgallery.d.ts → dist/types/lightgallery.d.ts} +384 -305
  185. package/{plugins → dist/types/plugins}/autoplay/lg-autoplay-settings.d.ts +41 -38
  186. package/{plugins → dist/types/plugins}/autoplay/lg-autoplay.d.ts +22 -22
  187. package/{plugins → dist/types/plugins}/comment/lg-comment-settings.d.ts +36 -33
  188. package/{plugins → dist/types/plugins}/comment/lg-comment.d.ts +25 -25
  189. package/{plugins → dist/types/plugins}/fullscreen/lg-fullscreen-settings.d.ts +17 -14
  190. package/{plugins → dist/types/plugins}/fullscreen/lg-fullscreen.d.ts +16 -16
  191. package/dist/types/plugins/hash/lg-hash-settings.d.ts +28 -0
  192. package/{plugins → dist/types/plugins}/hash/lg-hash.d.ts +25 -23
  193. package/dist/types/plugins/justified/lg-justified-settings.d.ts +42 -0
  194. package/dist/types/plugins/justified/lg-justified.d.ts +55 -0
  195. package/{plugins → dist/types/plugins}/mediumZoom/lg-medium-zoom-settings.d.ts +16 -16
  196. package/{plugins → dist/types/plugins}/mediumZoom/lg-medium-zoom.d.ts +12 -12
  197. package/dist/types/plugins/originCrop/lg-origin-crop-settings.d.ts +12 -0
  198. package/dist/types/plugins/originCrop/lg-origin-crop.d.ts +79 -0
  199. package/{plugins → dist/types/plugins}/pager/lg-pager-settings.d.ts +7 -7
  200. package/{plugins → dist/types/plugins}/pager/lg-pager.d.ts +13 -13
  201. package/{plugins → dist/types/plugins}/relativeCaption/lg-relative-caption-settings.d.ts +7 -7
  202. package/{plugins → dist/types/plugins}/relativeCaption/lg-relative-caption.d.ts +14 -14
  203. package/{plugins → dist/types/plugins}/rotate/lg-rotate-settings.d.ts +47 -45
  204. package/{plugins → dist/types/plugins}/rotate/lg-rotate.d.ts +25 -24
  205. package/{plugins → dist/types/plugins}/share/lg-fb-share-utils.d.ts +2 -2
  206. package/{plugins → dist/types/plugins}/share/lg-pinterest-share-utils.d.ts +2 -2
  207. package/{plugins → dist/types/plugins}/share/lg-share-settings.d.ts +71 -56
  208. package/dist/types/plugins/share/lg-share.d.ts +33 -0
  209. package/dist/types/plugins/share/lg-twitter-share-utils.d.ts +4 -0
  210. package/{plugins → dist/types/plugins}/share/types.d.ts +6 -6
  211. package/{plugins → dist/types/plugins}/thumbnail/lg-thumbnail-settings.d.ts +85 -70
  212. package/dist/types/plugins/thumbnail/lg-thumbnail.d.ts +88 -0
  213. package/{plugins → dist/types/plugins}/video/lg-video-settings.d.ts +94 -71
  214. package/{plugins → dist/types/plugins}/video/lg-video.d.ts +116 -104
  215. package/{plugins → dist/types/plugins}/video/types.d.ts +8 -8
  216. package/{plugins → dist/types/plugins}/vimeoThumbnail/lg-vimeo-thumbnail-settings.d.ts +11 -11
  217. package/{plugins → dist/types/plugins}/vimeoThumbnail/lg-vimeo-thumbnail.d.ts +14 -14
  218. package/{plugins → dist/types/plugins}/zoom/lg-zoom-settings.d.ts +54 -51
  219. package/{plugins → dist/types/plugins}/zoom/lg-zoom.d.ts +145 -108
  220. package/{types.d.ts → dist/types/types.d.ts} +40 -40
  221. package/package.json +222 -8
  222. package/angular/10/README.md +0 -24
  223. package/angular/10/bundles/lightgallery-angular-10.umd.js +0 -289
  224. package/angular/10/bundles/lightgallery-angular-10.umd.js.map +0 -1
  225. package/angular/10/bundles/lightgallery-angular-10.umd.min.js +0 -2
  226. package/angular/10/bundles/lightgallery-angular-10.umd.min.js.map +0 -1
  227. package/angular/10/esm2015/lib/lightgallery-angular.component.js +0 -225
  228. package/angular/10/esm2015/lib/lightgallery-angular.module.js +0 -17
  229. package/angular/10/esm2015/lib/lightgallery-angular.service.js +0 -14
  230. package/angular/10/esm2015/lightgallery-angular-10.js +0 -5
  231. package/angular/10/esm2015/public-api.js +0 -7
  232. package/angular/10/fesm2015/lightgallery-angular-10.js +0 -261
  233. package/angular/10/fesm2015/lightgallery-angular-10.js.map +0 -1
  234. package/angular/10/lib/lightgallery-angular.component.d.ts +0 -39
  235. package/angular/10/lib/lightgallery-angular.component.d.ts.map +0 -1
  236. package/angular/10/lib/lightgallery-angular.module.d.ts +0 -7
  237. package/angular/10/lib/lightgallery-angular.module.d.ts.map +0 -1
  238. package/angular/10/lib/lightgallery-angular.service.d.ts +0 -7
  239. package/angular/10/lib/lightgallery-angular.service.d.ts.map +0 -1
  240. package/angular/10/lightgallery-angular-10.d.ts +0 -6
  241. package/angular/10/lightgallery-angular-10.d.ts.map +0 -1
  242. package/angular/10/package.json +0 -21
  243. package/angular/10/public-api.d.ts +0 -4
  244. package/angular/10/public-api.d.ts.map +0 -1
  245. package/angular/11/README.md +0 -24
  246. package/angular/11/bundles/lightgallery-angular-11.umd.js +0 -290
  247. package/angular/11/bundles/lightgallery-angular-11.umd.js.map +0 -1
  248. package/angular/11/bundles/lightgallery-angular-11.umd.min.js +0 -2
  249. package/angular/11/bundles/lightgallery-angular-11.umd.min.js.map +0 -1
  250. package/angular/11/esm2015/lib/lightgallery-angular.component.js +0 -225
  251. package/angular/11/esm2015/lib/lightgallery-angular.module.js +0 -18
  252. package/angular/11/esm2015/lib/lightgallery-angular.service.js +0 -14
  253. package/angular/11/esm2015/lightgallery-angular-11.js +0 -5
  254. package/angular/11/esm2015/public-api.js +0 -7
  255. package/angular/11/fesm2015/lightgallery-angular-11.js +0 -262
  256. package/angular/11/fesm2015/lightgallery-angular-11.js.map +0 -1
  257. package/angular/11/lib/lightgallery-angular.component.d.ts +0 -39
  258. package/angular/11/lib/lightgallery-angular.component.d.ts.map +0 -1
  259. package/angular/11/lib/lightgallery-angular.module.d.ts +0 -8
  260. package/angular/11/lib/lightgallery-angular.module.d.ts.map +0 -1
  261. package/angular/11/lib/lightgallery-angular.service.d.ts +0 -7
  262. package/angular/11/lib/lightgallery-angular.service.d.ts.map +0 -1
  263. package/angular/11/lightgallery-angular-11.d.ts +0 -6
  264. package/angular/11/lightgallery-angular-11.d.ts.map +0 -1
  265. package/angular/11/package.json +0 -21
  266. package/angular/11/public-api.d.ts +0 -4
  267. package/angular/11/public-api.d.ts.map +0 -1
  268. package/angular/12/README.md +0 -24
  269. package/angular/12/bundles/lightgallery-angular-12.umd.js +0 -296
  270. package/angular/12/bundles/lightgallery-angular-12.umd.js.map +0 -1
  271. package/angular/12/esm2015/lib/lightgallery-angular.component.js +0 -221
  272. package/angular/12/esm2015/lib/lightgallery-angular.module.js +0 -17
  273. package/angular/12/esm2015/lib/lightgallery-angular.service.js +0 -14
  274. package/angular/12/esm2015/lightgallery-angular-12.js +0 -5
  275. package/angular/12/esm2015/public-api.js +0 -7
  276. package/angular/12/fesm2015/lightgallery-angular-12.js +0 -258
  277. package/angular/12/fesm2015/lightgallery-angular-12.js.map +0 -1
  278. package/angular/12/lib/lightgallery-angular.component.d.ts +0 -38
  279. package/angular/12/lib/lightgallery-angular.module.d.ts +0 -7
  280. package/angular/12/lib/lightgallery-angular.service.d.ts +0 -6
  281. package/angular/12/lightgallery-angular-12.d.ts +0 -5
  282. package/angular/12/package.json +0 -18
  283. package/angular/12/public-api.d.ts +0 -3
  284. package/angular/13/README.md +0 -24
  285. package/angular/13/esm2020/lib/lightgallery-angular.component.mjs +0 -221
  286. package/angular/13/esm2020/lib/lightgallery-angular.module.mjs +0 -17
  287. package/angular/13/esm2020/lib/lightgallery-angular.service.mjs +0 -14
  288. package/angular/13/esm2020/lightgallery-angular-13.mjs +0 -5
  289. package/angular/13/esm2020/public-api.mjs +0 -7
  290. package/angular/13/fesm2015/lightgallery-angular-13.mjs +0 -258
  291. package/angular/13/fesm2015/lightgallery-angular-13.mjs.map +0 -1
  292. package/angular/13/fesm2020/lightgallery-angular-13.mjs +0 -258
  293. package/angular/13/fesm2020/lightgallery-angular-13.mjs.map +0 -1
  294. package/angular/13/lib/lightgallery-angular.component.d.ts +0 -38
  295. package/angular/13/lib/lightgallery-angular.module.d.ts +0 -7
  296. package/angular/13/lib/lightgallery-angular.service.d.ts +0 -6
  297. package/angular/13/lightgallery-angular-13.d.ts +0 -5
  298. package/angular/13/package.json +0 -31
  299. package/angular/13/public-api.d.ts +0 -3
  300. package/angular/14/README.md +0 -24
  301. package/angular/14/esm2020/lib/lightgallery-angular.component.mjs +0 -217
  302. package/angular/14/esm2020/lib/lightgallery-angular.module.mjs +0 -17
  303. package/angular/14/esm2020/lib/lightgallery-angular.service.mjs +0 -14
  304. package/angular/14/esm2020/lightgallery-angular-14.mjs +0 -5
  305. package/angular/14/esm2020/public-api.mjs +0 -7
  306. package/angular/14/fesm2015/lightgallery-angular-14.mjs +0 -254
  307. package/angular/14/fesm2015/lightgallery-angular-14.mjs.map +0 -1
  308. package/angular/14/fesm2020/lightgallery-angular-14.mjs +0 -254
  309. package/angular/14/fesm2020/lightgallery-angular-14.mjs.map +0 -1
  310. package/angular/14/index.d.ts +0 -5
  311. package/angular/14/lib/lightgallery-angular.component.d.ts +0 -38
  312. package/angular/14/lib/lightgallery-angular.module.d.ts +0 -7
  313. package/angular/14/lib/lightgallery-angular.service.d.ts +0 -6
  314. package/angular/14/package.json +0 -31
  315. package/angular/14/public-api.d.ts +0 -3
  316. package/angular/15/README.md +0 -24
  317. package/angular/15/esm2022/lib/lightgallery-angular.component.mjs +0 -218
  318. package/angular/15/esm2022/lib/lightgallery-angular.module.mjs +0 -18
  319. package/angular/15/esm2022/lib/lightgallery-angular.service.mjs +0 -15
  320. package/angular/15/esm2022/lightgallery-angular-15.mjs +0 -5
  321. package/angular/15/esm2022/public-api.mjs +0 -7
  322. package/angular/15/fesm2022/lightgallery-angular-15.mjs +0 -254
  323. package/angular/15/fesm2022/lightgallery-angular-15.mjs.map +0 -1
  324. package/angular/15/index.d.ts +0 -5
  325. package/angular/15/lib/lightgallery-angular.component.d.ts +0 -38
  326. package/angular/15/lib/lightgallery-angular.module.d.ts +0 -7
  327. package/angular/15/lib/lightgallery-angular.service.d.ts +0 -6
  328. package/angular/15/package.json +0 -25
  329. package/angular/15/public-api.d.ts +0 -3
  330. package/angular/16/README.md +0 -24
  331. package/angular/16/esm2022/lib/lightgallery-angular.component.mjs +0 -218
  332. package/angular/16/esm2022/lib/lightgallery-angular.module.mjs +0 -18
  333. package/angular/16/esm2022/lib/lightgallery-angular.service.mjs +0 -15
  334. package/angular/16/esm2022/lightgallery-angular-16.mjs +0 -5
  335. package/angular/16/esm2022/public-api.mjs +0 -7
  336. package/angular/16/fesm2022/lightgallery-angular-16.mjs +0 -254
  337. package/angular/16/fesm2022/lightgallery-angular-16.mjs.map +0 -1
  338. package/angular/16/index.d.ts +0 -5
  339. package/angular/16/lib/lightgallery-angular.component.d.ts +0 -38
  340. package/angular/16/lib/lightgallery-angular.module.d.ts +0 -7
  341. package/angular/16/lib/lightgallery-angular.service.d.ts +0 -6
  342. package/angular/16/package.json +0 -25
  343. package/angular/16/public-api.d.ts +0 -3
  344. package/angular/9/README.md +0 -24
  345. package/angular/9/bundles/lightgallery-angular-9.umd.js +0 -271
  346. package/angular/9/bundles/lightgallery-angular-9.umd.js.map +0 -1
  347. package/angular/9/bundles/lightgallery-angular-9.umd.min.js +0 -2
  348. package/angular/9/bundles/lightgallery-angular-9.umd.min.js.map +0 -1
  349. package/angular/9/esm2015/lib/lightgallery-angular.component.js +0 -225
  350. package/angular/9/esm2015/lib/lightgallery-angular.module.js +0 -17
  351. package/angular/9/esm2015/lib/lightgallery-angular.service.js +0 -14
  352. package/angular/9/esm2015/lightgallery-angular-9.js +0 -5
  353. package/angular/9/esm2015/public-api.js +0 -7
  354. package/angular/9/esm5/lib/lightgallery-angular.component.js +0 -228
  355. package/angular/9/esm5/lib/lightgallery-angular.module.js +0 -21
  356. package/angular/9/esm5/lib/lightgallery-angular.service.js +0 -17
  357. package/angular/9/esm5/lightgallery-angular-9.js +0 -5
  358. package/angular/9/esm5/public-api.js +0 -7
  359. package/angular/9/fesm2015/lightgallery-angular-9.js +0 -261
  360. package/angular/9/fesm2015/lightgallery-angular-9.js.map +0 -1
  361. package/angular/9/fesm5/lightgallery-angular-9.js +0 -268
  362. package/angular/9/fesm5/lightgallery-angular-9.js.map +0 -1
  363. package/angular/9/lib/lightgallery-angular.component.d.ts +0 -38
  364. package/angular/9/lib/lightgallery-angular.module.d.ts +0 -6
  365. package/angular/9/lib/lightgallery-angular.service.d.ts +0 -6
  366. package/angular/9/lightgallery-angular-9.d.ts +0 -5
  367. package/angular/9/package.json +0 -23
  368. package/angular/9/public-api.d.ts +0 -3
  369. package/angular/README.md +0 -24
  370. package/angular/esm2022/lib/lightgallery-angular.component.mjs +0 -218
  371. package/angular/esm2022/lib/lightgallery-angular.module.mjs +0 -18
  372. package/angular/esm2022/lib/lightgallery-angular.service.mjs +0 -15
  373. package/angular/esm2022/lightgallery-angular.mjs +0 -5
  374. package/angular/esm2022/public-api.mjs +0 -7
  375. package/angular/fesm2022/lightgallery-angular.mjs +0 -254
  376. package/angular/fesm2022/lightgallery-angular.mjs.map +0 -1
  377. package/angular/index.d.ts +0 -5
  378. package/angular/lib/lightgallery-angular.component.d.ts +0 -38
  379. package/angular/lib/lightgallery-angular.module.d.ts +0 -7
  380. package/angular/lib/lightgallery-angular.service.d.ts +0 -6
  381. package/angular/package.json +0 -25
  382. package/angular/public-api.d.ts +0 -3
  383. package/css/lg-fullscreen.css +0 -8
  384. package/css/lg-fullscreen.css.map +0 -1
  385. package/css/lg-share.css.map +0 -1
  386. package/css/lg-thumbnail.css.map +0 -1
  387. package/css/lg-transitions.css.map +0 -1
  388. package/css/lg-zoom.css.map +0 -1
  389. package/css/lightgallery-bundle.css.map +0 -1
  390. package/css/lightgallery-bundle.min.css +0 -1
  391. package/css/lightgallery-core.css.map +0 -1
  392. package/css/lightgallery.css.map +0 -1
  393. package/fonts/lg.svg +0 -54
  394. package/fonts/lg.ttf +0 -0
  395. package/fonts/lg.woff +0 -0
  396. package/fonts/lg.woff2 +0 -0
  397. package/lib/index.js +0 -8
  398. package/lib/index.js.map +0 -1
  399. package/lib/lg-events.js +0 -37
  400. package/lib/lg-events.js.map +0 -1
  401. package/lib/lg-plugin.js +0 -13
  402. package/lib/lg-plugin.js.map +0 -1
  403. package/lib/lg-settings.js +0 -83
  404. package/lib/lg-settings.js.map +0 -1
  405. package/lib/lg-utils.js +0 -328
  406. package/lib/lg-utils.js.map +0 -1
  407. package/lib/lgQuery.js +0 -385
  408. package/lib/lgQuery.js.map +0 -1
  409. package/lib/lightgallery.js +0 -1949
  410. package/lib/lightgallery.js.map +0 -1
  411. package/lib/plugins/autoplay/lg-autoplay-settings.js +0 -16
  412. package/lib/plugins/autoplay/lg-autoplay-settings.js.map +0 -1
  413. package/lib/plugins/autoplay/lg-autoplay.js +0 -184
  414. package/lib/plugins/autoplay/lg-autoplay.js.map +0 -1
  415. package/lib/plugins/comment/lg-comment-settings.js +0 -17
  416. package/lib/plugins/comment/lg-comment-settings.js.map +0 -1
  417. package/lib/plugins/comment/lg-comment.js +0 -140
  418. package/lib/plugins/comment/lg-comment.js.map +0 -1
  419. package/lib/plugins/fullscreen/lg-fullscreen-settings.js +0 -10
  420. package/lib/plugins/fullscreen/lg-fullscreen-settings.js.map +0 -1
  421. package/lib/plugins/fullscreen/lg-fullscreen.js +0 -108
  422. package/lib/plugins/fullscreen/lg-fullscreen.js.map +0 -1
  423. package/lib/plugins/hash/lg-hash-settings.js +0 -9
  424. package/lib/plugins/hash/lg-hash-settings.js.map +0 -1
  425. package/lib/plugins/hash/lg-hash.js +0 -139
  426. package/lib/plugins/hash/lg-hash.js.map +0 -1
  427. package/lib/plugins/mediumZoom/lg-medium-zoom-settings.js +0 -9
  428. package/lib/plugins/mediumZoom/lg-medium-zoom-settings.js.map +0 -1
  429. package/lib/plugins/mediumZoom/lg-medium-zoom.js +0 -73
  430. package/lib/plugins/mediumZoom/lg-medium-zoom.js.map +0 -1
  431. package/lib/plugins/pager/lg-pager-settings.js +0 -7
  432. package/lib/plugins/pager/lg-pager-settings.js.map +0 -1
  433. package/lib/plugins/pager/lg-pager.js +0 -82
  434. package/lib/plugins/pager/lg-pager.js.map +0 -1
  435. package/lib/plugins/relativeCaption/lg-relative-caption-settings.js +0 -7
  436. package/lib/plugins/relativeCaption/lg-relative-caption-settings.js.map +0 -1
  437. package/lib/plugins/relativeCaption/lg-relative-caption.js +0 -97
  438. package/lib/plugins/relativeCaption/lg-relative-caption.js.map +0 -1
  439. package/lib/plugins/rotate/lg-rotate-settings.js +0 -18
  440. package/lib/plugins/rotate/lg-rotate-settings.js.map +0 -1
  441. package/lib/plugins/rotate/lg-rotate.js +0 -206
  442. package/lib/plugins/rotate/lg-rotate.js.map +0 -1
  443. package/lib/plugins/share/lg-fb-share-utils.js +0 -10
  444. package/lib/plugins/share/lg-fb-share-utils.js.map +0 -1
  445. package/lib/plugins/share/lg-pinterest-share-utils.js +0 -17
  446. package/lib/plugins/share/lg-pinterest-share-utils.js.map +0 -1
  447. package/lib/plugins/share/lg-share-settings.js +0 -15
  448. package/lib/plugins/share/lg-share-settings.js.map +0 -1
  449. package/lib/plugins/share/lg-share.js +0 -130
  450. package/lib/plugins/share/lg-share.js.map +0 -1
  451. package/lib/plugins/share/lg-twitter-share-utils.js +0 -11
  452. package/lib/plugins/share/lg-twitter-share-utils.js.map +0 -1
  453. package/lib/plugins/share/types.js +0 -3
  454. package/lib/plugins/share/types.js.map +0 -1
  455. package/lib/plugins/thumbnail/lg-thumbnail-settings.js +0 -23
  456. package/lib/plugins/thumbnail/lg-thumbnail-settings.js.map +0 -1
  457. package/lib/plugins/thumbnail/lg-thumbnail.js +0 -414
  458. package/lib/plugins/thumbnail/lg-thumbnail.js.map +0 -1
  459. package/lib/plugins/video/lg-video-settings.js +0 -15
  460. package/lib/plugins/video/lg-video-settings.js.map +0 -1
  461. package/lib/plugins/video/lg-video-utils.js +0 -84
  462. package/lib/plugins/video/lg-video-utils.js.map +0 -1
  463. package/lib/plugins/video/lg-video.js +0 -411
  464. package/lib/plugins/video/lg-video.js.map +0 -1
  465. package/lib/plugins/video/types.js +0 -3
  466. package/lib/plugins/video/types.js.map +0 -1
  467. package/lib/plugins/vimeoThumbnail/lg-vimeo-thumbnail-settings.js +0 -8
  468. package/lib/plugins/vimeoThumbnail/lg-vimeo-thumbnail-settings.js.map +0 -1
  469. package/lib/plugins/vimeoThumbnail/lg-vimeo-thumbnail.js +0 -122
  470. package/lib/plugins/vimeoThumbnail/lg-vimeo-thumbnail.js.map +0 -1
  471. package/lib/plugins/zoom/lg-zoom-settings.js +0 -21
  472. package/lib/plugins/zoom/lg-zoom-settings.js.map +0 -1
  473. package/lib/plugins/zoom/lg-zoom.js +0 -909
  474. package/lib/plugins/zoom/lg-zoom.js.map +0 -1
  475. package/lib/types.js +0 -3
  476. package/lib/types.js.map +0 -1
  477. package/lightgallery-2.9.0.tgz +0 -0
  478. package/lightgallery.es5.js +0 -2786
  479. package/lightgallery.es5.js.map +0 -1
  480. package/lightgallery.min.js +0 -8
  481. package/lightgallery.umd.js +0 -2794
  482. package/lightgallery.umd.js.map +0 -1
  483. package/lit/custom-elements.json +0 -82
  484. package/lit/lightgallery.esm.js +0 -59
  485. package/lit/lightgallery.umd.js +0 -37
  486. package/lit/package.json +0 -8
  487. package/plugins/autoplay/lg-autoplay.es5.js +0 -250
  488. package/plugins/autoplay/lg-autoplay.es5.js.map +0 -1
  489. package/plugins/autoplay/lg-autoplay.min.js +0 -8
  490. package/plugins/autoplay/lg-autoplay.umd.js +0 -258
  491. package/plugins/autoplay/lg-autoplay.umd.js.map +0 -1
  492. package/plugins/autoplay/package.json +0 -7
  493. package/plugins/comment/lg-comment.es5.js +0 -205
  494. package/plugins/comment/lg-comment.es5.js.map +0 -1
  495. package/plugins/comment/lg-comment.min.js +0 -8
  496. package/plugins/comment/lg-comment.umd.js +0 -213
  497. package/plugins/comment/lg-comment.umd.js.map +0 -1
  498. package/plugins/comment/package.json +0 -7
  499. package/plugins/fullscreen/lg-fullscreen.es5.js +0 -135
  500. package/plugins/fullscreen/lg-fullscreen.es5.js.map +0 -1
  501. package/plugins/fullscreen/lg-fullscreen.min.js +0 -8
  502. package/plugins/fullscreen/lg-fullscreen.umd.js +0 -143
  503. package/plugins/fullscreen/lg-fullscreen.umd.js.map +0 -1
  504. package/plugins/fullscreen/package.json +0 -7
  505. package/plugins/hash/lg-hash-settings.d.ts +0 -16
  506. package/plugins/hash/lg-hash.es5.js +0 -198
  507. package/plugins/hash/lg-hash.es5.js.map +0 -1
  508. package/plugins/hash/lg-hash.min.js +0 -8
  509. package/plugins/hash/lg-hash.umd.js +0 -206
  510. package/plugins/hash/lg-hash.umd.js.map +0 -1
  511. package/plugins/hash/package.json +0 -7
  512. package/plugins/mediumZoom/lg-medium-zoom.es5.js +0 -132
  513. package/plugins/mediumZoom/lg-medium-zoom.es5.js.map +0 -1
  514. package/plugins/mediumZoom/lg-medium-zoom.min.js +0 -8
  515. package/plugins/mediumZoom/lg-medium-zoom.umd.js +0 -140
  516. package/plugins/mediumZoom/lg-medium-zoom.umd.js.map +0 -1
  517. package/plugins/mediumZoom/package.json +0 -7
  518. package/plugins/pager/lg-pager.es5.js +0 -139
  519. package/plugins/pager/lg-pager.es5.js.map +0 -1
  520. package/plugins/pager/lg-pager.min.js +0 -8
  521. package/plugins/pager/lg-pager.umd.js +0 -147
  522. package/plugins/pager/lg-pager.umd.js.map +0 -1
  523. package/plugins/pager/package.json +0 -7
  524. package/plugins/relativeCaption/lg-relative-caption.es5.js +0 -154
  525. package/plugins/relativeCaption/lg-relative-caption.es5.js.map +0 -1
  526. package/plugins/relativeCaption/lg-relative-caption.min.js +0 -8
  527. package/plugins/relativeCaption/lg-relative-caption.umd.js +0 -162
  528. package/plugins/relativeCaption/lg-relative-caption.umd.js.map +0 -1
  529. package/plugins/relativeCaption/package.json +0 -7
  530. package/plugins/rotate/lg-rotate.es5.js +0 -274
  531. package/plugins/rotate/lg-rotate.es5.js.map +0 -1
  532. package/plugins/rotate/lg-rotate.min.js +0 -8
  533. package/plugins/rotate/lg-rotate.umd.js +0 -282
  534. package/plugins/rotate/lg-rotate.umd.js.map +0 -1
  535. package/plugins/rotate/package.json +0 -7
  536. package/plugins/share/lg-share.d.ts +0 -15
  537. package/plugins/share/lg-share.es5.js +0 -219
  538. package/plugins/share/lg-share.es5.js.map +0 -1
  539. package/plugins/share/lg-share.min.js +0 -8
  540. package/plugins/share/lg-share.umd.js +0 -227
  541. package/plugins/share/lg-share.umd.js.map +0 -1
  542. package/plugins/share/lg-twitter-share-utils.d.ts +0 -2
  543. package/plugins/share/package.json +0 -7
  544. package/plugins/thumbnail/lg-thumbnail.d.ts +0 -48
  545. package/plugins/thumbnail/lg-thumbnail.es5.js +0 -487
  546. package/plugins/thumbnail/lg-thumbnail.es5.js.map +0 -1
  547. package/plugins/thumbnail/lg-thumbnail.min.js +0 -8
  548. package/plugins/thumbnail/lg-thumbnail.umd.js +0 -495
  549. package/plugins/thumbnail/lg-thumbnail.umd.js.map +0 -1
  550. package/plugins/thumbnail/package.json +0 -7
  551. package/plugins/video/lg-video-utils.d.ts +0 -10
  552. package/plugins/video/lg-video.es5.js +0 -545
  553. package/plugins/video/lg-video.es5.js.map +0 -1
  554. package/plugins/video/lg-video.min.js +0 -8
  555. package/plugins/video/lg-video.umd.js +0 -553
  556. package/plugins/video/lg-video.umd.js.map +0 -1
  557. package/plugins/video/package.json +0 -7
  558. package/plugins/vimeoThumbnail/lg-vimeo-thumbnail.es5.js +0 -182
  559. package/plugins/vimeoThumbnail/lg-vimeo-thumbnail.es5.js.map +0 -1
  560. package/plugins/vimeoThumbnail/lg-vimeo-thumbnail.min.js +0 -8
  561. package/plugins/vimeoThumbnail/lg-vimeo-thumbnail.umd.js +0 -190
  562. package/plugins/vimeoThumbnail/lg-vimeo-thumbnail.umd.js.map +0 -1
  563. package/plugins/vimeoThumbnail/package.json +0 -7
  564. package/plugins/zoom/lg-zoom.es5.js +0 -980
  565. package/plugins/zoom/lg-zoom.es5.js.map +0 -1
  566. package/plugins/zoom/lg-zoom.min.js +0 -8
  567. package/plugins/zoom/lg-zoom.umd.js +0 -988
  568. package/plugins/zoom/lg-zoom.umd.js.map +0 -1
  569. package/plugins/zoom/package.json +0 -7
  570. package/react/Lightgallery.d.ts +0 -33
  571. package/react/Lightgallery.es5.js +0 -2988
  572. package/react/Lightgallery.es5.js.map +0 -1
  573. package/react/Lightgallery.umd.js +0 -2994
  574. package/react/Lightgallery.umd.js.map +0 -1
  575. package/react/package.json +0 -7
  576. package/scss/_lg-fonts.scss +0 -27
  577. package/scss/lg-fullscreen.scss +0 -9
  578. package/vue/LightGallery.vue.d.ts +0 -37
  579. package/vue/LightGalleryVue.common.js +0 -9343
  580. package/vue/LightGalleryVue.common.js.map +0 -1
  581. package/vue/LightGalleryVue.umd.js +0 -9353
  582. package/vue/LightGalleryVue.umd.js.map +0 -1
  583. package/vue/LightGalleryVue.umd.min.js +0 -8
  584. package/vue/LightGalleryVue.umd.min.js.map +0 -1
  585. package/vue/package.json +0 -7
  586. /package/{css → dist/css}/lg-medium-zoom.css +0 -0
  587. /package/{css → dist/css}/lg-medium-zoom.css.map +0 -0
  588. /package/{css → dist/css}/lg-pager.css +0 -0
  589. /package/{css → dist/css}/lg-relative-caption.css +0 -0
  590. /package/{css → dist/css}/lg-relative-caption.css.map +0 -0
  591. /package/{css → dist/css}/lg-video.css +0 -0
  592. /package/{css → dist/css}/lg-video.css.map +0 -0
  593. /package/{images → dist/images}/loading.gif +0 -0
  594. /package/{scss → dist/scss}/_lg-mixins.scss +0 -0
  595. /package/{scss → dist/scss}/lg-medium-zoom.scss +0 -0
  596. /package/{scss → dist/scss}/lg-pager.scss +0 -0
  597. /package/{scss → dist/scss}/lg-relative-caption.scss +0 -0
  598. /package/{scss → dist/scss}/lg-transitions.scss +0 -0
  599. /package/{scss → dist/scss}/lg-video.scss +0 -0
  600. /package/{scss → dist/scss}/transitions/_index.scss +0 -0
  601. /package/{scss → dist/scss}/transitions/_lg-lollipop-rev.scss +0 -0
  602. /package/{scss → dist/scss}/transitions/_lg-lollipop.scss +0 -0
  603. /package/{scss → dist/scss}/transitions/_lg-rotate-rev.scss +0 -0
  604. /package/{scss → dist/scss}/transitions/_lg-rotate.scss +0 -0
  605. /package/{scss → dist/scss}/transitions/_lg-slide-skew-cross-rev.scss +0 -0
  606. /package/{scss → dist/scss}/transitions/_lg-slide-skew-cross.scss +0 -0
  607. /package/{scss → dist/scss}/transitions/_lg-slide-skew-only-rev.scss +0 -0
  608. /package/{scss → dist/scss}/transitions/_lg-slide-skew-only-y-rev.scss +0 -0
  609. /package/{scss → dist/scss}/transitions/_lg-slide-skew-only-y.scss +0 -0
  610. /package/{scss → dist/scss}/transitions/_lg-slide-skew-only.scss +0 -0
  611. /package/{scss → dist/scss}/transitions/_lg-slide-skew-rev.scss +0 -0
  612. /package/{scss → dist/scss}/transitions/_lg-slide-skew-ver-cross-rev.scss +0 -0
  613. /package/{scss → dist/scss}/transitions/_lg-slide-skew-ver-cross.scss +0 -0
  614. /package/{scss → dist/scss}/transitions/_lg-slide-skew-ver-rev.scss +0 -0
  615. /package/{scss → dist/scss}/transitions/_lg-slide-skew-ver.scss +0 -0
  616. /package/{scss → dist/scss}/transitions/_lg-slide-skew.scss +0 -0
  617. /package/{scss → dist/scss}/transitions/_lg-slide-vertical-growth.scss +0 -0
  618. /package/{scss → dist/scss}/transitions/_lg-slide-vertical.scss +0 -0
  619. /package/{scss → dist/scss}/transitions/_lg-tube.scss +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lg-thumbnail.es5.js","sources":["../../../packages/headless/src/spring.ts","../../../packages/headless/src/gestures.ts","../../../packages/headless/src/icons.ts","../../../packages/headless/src/thumb-math.ts","../../../packages/headless/src/velocity.ts","../../../src/lg-spring-runner.ts","../../../src/plugins/thumbnail/lg-thumbnail-settings.ts","../../../src/lg-events.ts","../../../src/plugins/thumbnail/lg-thumbnail.ts"],"sourcesContent":["/**\n * Gesture-release physics: momentum projection and a damped-spring\n * stepper. Releases compute where momentum would land (`project`),\n * clamp that into bounds, and animate there with a spring seeded by the\n * live release velocity — velocity stays continuous across the\n * finger-lift boundary, which is most of what native feel is.\n *\n * The stepper advances the standard damped harmonic oscillator by its\n * closed-form solution over each frame, so step size never affects the\n * trajectory and the state (position + velocity) can re-seed a new\n * spring at any interruption point.\n */\n\nexport interface SpringState {\n position: number;\n /** px per ms (same unit as the windowed gesture velocity). */\n velocity: number;\n}\n\nexport interface SpringConfig {\n /** 1 = never overshoot; < 1 overshoots and returns. */\n dampingRatio?: number;\n /** Rad/s — higher settles faster. */\n naturalFrequency?: number;\n}\n\n/** Settling toward an in-bounds target: no overshoot. */\nexport const SPRING_SETTLE_DAMPING = 1;\n\n/** Settling against a clamped bound: one soft bounce. */\nexport const SPRING_BOUNCE_DAMPING = 0.82;\n\nexport const SPRING_NATURAL_FREQUENCY = 12;\n\n/**\n * Momentum projection: how far a release keeps traveling when it loses\n * `1 - decelerationRate` of its velocity every millisecond (the classic\n * scroll-view constant; 0.995 ≈ half a percent per ms).\n */\nexport const DECELERATION_RATE = 0.995;\n\nexport function project(\n velocity: number,\n decelerationRate: number = DECELERATION_RATE,\n): number {\n return (velocity * decelerationRate) / (1 - decelerationRate);\n}\n\n/**\n * Advance a spring toward `target` by `dtMs`, exactly (closed form with\n * the current state as initial conditions).\n */\nexport function stepSpring(\n state: SpringState,\n target: number,\n dtMs: number,\n {\n dampingRatio = SPRING_SETTLE_DAMPING,\n naturalFrequency = SPRING_NATURAL_FREQUENCY,\n }: SpringConfig = {},\n): SpringState {\n const t = dtMs / 1000;\n const w0 = naturalFrequency;\n const zeta = Math.min(dampingRatio, 1);\n const x0 = state.position - target;\n const v0 = state.velocity * 1000; // px/s for the oscillator\n const decay = Math.exp(-zeta * w0 * t);\n\n let x: number;\n let v: number;\n if (zeta < 1) {\n const wd = w0 * Math.sqrt(1 - zeta * zeta);\n const a = x0;\n const b = (v0 + zeta * w0 * x0) / wd;\n const cos = Math.cos(wd * t);\n const sin = Math.sin(wd * t);\n x = decay * (a * cos + b * sin);\n v =\n decay *\n ((b * wd - zeta * w0 * a) * cos - (a * wd + zeta * w0 * b) * sin);\n } else {\n const b = v0 + w0 * x0;\n x = decay * (x0 + b * t);\n v = decay * (b - w0 * (x0 + b * t));\n }\n return { position: target + x, velocity: v / 1000 };\n}\n\n/** Whether a spring is close enough to stop animating. */\nexport function isSpringSettled(\n state: SpringState,\n target: number,\n restDelta = 0.3,\n restVelocity = 0.012,\n): boolean {\n return (\n Math.abs(state.position - target) < restDelta &&\n Math.abs(state.velocity) < restVelocity\n );\n}\n","/**\n * Gesture math, ported from the 2.x touch/drag implementation\n * (`touchMove`/`touchEnd` in `src/lightgallery.ts`) as pure functions. The\n * framework layer owns pointer events and writes the returned transforms\n * straight to the DOM (never through framework state — one render per\n * gesture, not per move); every *decision* lives here so swipe feel is\n * identical across frameworks.\n */\n\nimport { project } from './spring';\nimport type { ResolvedGalleryDirection } from './settings';\n\nexport type SwipeAxis = 'horizontal' | 'vertical';\n\n/**\n * Minimum travel (px) before a drag commits to an axis. Tuned from the\n * 2.x 15px to ~10 (UIPanGestureRecognizer territory): drags answer a\n * touch sooner without axis flip-flop — the commit is still sticky.\n */\nexport const SWIPE_AXIS_THRESHOLD = 10;\n\n/**\n * Flick support: a release faster than this (px/ms, windowed — see\n * `velocity.ts`) navigates even below `swipeThreshold`. Default per the\n * gesture-physics teardown: windowed readings run higher than the old\n * whole-gesture averages, so this gate and windowed measurement ship as\n * one change. Public setting: `flickVelocity`.\n */\nexport const FLICK_VELOCITY = 0.5;\n\n/** Minimum travel (px) for a flick, so taps never navigate. */\nexport const FLICK_MIN_DISTANCE = 20;\n\n/** Vertical travel (px) beyond which the drag hides the UI chrome — 2.x. */\nexport const VERTICAL_CLOSE_THRESHOLD = 100;\n\n/**\n * Drag-to-close verdict: the momentum-projected travel must pass this\n * fraction of the viewport height — a small fast downward flick closes,\n * a large slow drag released while returning does not.\n */\nexport const VERTICAL_CLOSE_RATIO = 0.4;\n\n/**\n * Minimum actual travel (px) before the projected close arms. Momentum\n * may extend a real drag, never replace one: a grazed tap releases with\n * a fast final instant, and projection alone would read it as a close\n * flick.\n */\nexport const VERTICAL_CLOSE_MIN_DRAG = 40;\n\n/**\n * Rubber-band friction past the first/last slide (no loop): the drag\n * keeps moving at this fraction of the finger instead of the 2.x\n * un-resisted 1:1 travel — you feel that there is nothing further.\n */\nexport const SLIDE_EDGE_FRICTION = 0.35;\n\n/**\n * Horizontal drag delta with rubber-banding past the gallery ends.\n * `hasPrev`/`hasNext` reflect whether a slide exists in that direction\n * (loop counts); the release spring returns the frictioned distance.\n */\nexport function getEdgeFrictionedDelta(\n deltaX: number,\n hasPrev: boolean,\n hasNext: boolean,\n direction: ResolvedGalleryDirection = 'ltr',\n): number {\n // In RTL the finger drags toward the mirrored neighbor.\n const [towardPrev, towardNext] =\n direction === 'rtl' ? [hasNext, hasPrev] : [hasPrev, hasNext];\n if ((deltaX > 0 && !towardPrev) || (deltaX < 0 && !towardNext)) {\n return deltaX * SLIDE_EDGE_FRICTION;\n }\n return deltaX;\n}\n\n/** Decide (once) which axis a drag follows; sticky after the first commit. */\nexport function getSwipeAxis(\n deltaX: number,\n deltaY: number,\n current: SwipeAxis | undefined,\n): SwipeAxis | undefined {\n if (current) {\n return current;\n }\n if (Math.abs(deltaX) > SWIPE_AXIS_THRESHOLD) {\n return 'horizontal';\n }\n if (Math.abs(deltaY) > SWIPE_AXIS_THRESHOLD) {\n return 'vertical';\n }\n return undefined;\n}\n\nexport interface HorizontalDragTransforms {\n current: string;\n prev: string;\n next: string;\n}\n\n/**\n * Follow-the-finger transforms for the current slide and its neighbors\n * (2.x `touchMove` horizontal branch, including the shrinking gutter).\n */\nexport function getHorizontalDragTransforms(\n deltaX: number,\n slideWidth: number,\n direction: ResolvedGalleryDirection = 'ltr',\n): HorizontalDragTransforms {\n const slideWidthAmount = (slideWidth * 15) / 100;\n const gutter = slideWidthAmount - Math.abs((deltaX * 10) / 100);\n const before = `translate3d(${-slideWidth + deltaX - gutter}px, 0px, 0px)`;\n const after = `translate3d(${slideWidth + deltaX + gutter}px, 0px, 0px)`;\n return {\n current: `translate3d(${deltaX}px, 0px, 0px)`,\n // In RTL the prev slide rests to the physical right (lg-rtl.css\n // flips the resting positions the same way).\n prev: direction === 'rtl' ? after : before,\n next: direction === 'rtl' ? before : after,\n };\n}\n\nexport interface VerticalDragEffects {\n /** Backdrop opacity fading out with the drag. */\n backdropOpacity: number;\n /** Transform for the current slide (translate + shrink). */\n transform: string;\n /** True once the UI chrome should hide (past the close threshold). */\n hideUi: boolean;\n}\n\n/** Drag-to-close visuals (2.x `touchMove` vertical branch). */\nexport function getVerticalDragEffects(\n deltaY: number,\n viewportWidth: number,\n viewportHeight: number,\n): VerticalDragEffects {\n const distance = Math.abs(deltaY);\n const scale = 1 - distance / (viewportWidth * 2);\n return {\n backdropOpacity: 1 - distance / viewportHeight,\n transform: `translate3d(0px, ${deltaY}px, 0px) scale3d(${scale}, ${scale}, 1)`,\n hideUi: distance > VERTICAL_CLOSE_THRESHOLD,\n };\n}\n\nexport type SwipeReleaseVerdict = 'next' | 'prev' | 'stay';\n\nexport interface SwipeReleaseInput {\n deltaX: number;\n /** Release velocity, px/ms signed (windowed — see `velocity.ts`). */\n velocityX: number;\n /** `swipeThreshold` setting (px). */\n threshold: number;\n /** `flickVelocity` setting (px/ms). */\n flickVelocity?: number;\n /**\n * Slide width (px). When given, a release whose momentum-projected\n * travel crosses the midpoint also navigates — a firm half-hearted\n * swipe keeps going where a hesitant one snaps back.\n */\n viewportWidth?: number;\n /** Resolved gallery direction; in `'rtl'` the verdict mirrors. */\n direction?: ResolvedGalleryDirection;\n}\n\n/**\n * Horizontal release decision: past `swipeThreshold`, or a quick flick →\n * navigate (negative delta = next, 2.x parity); otherwise snap back.\n * The flick counts only when the release velocity points the same way\n * as the drag — reversing direction just before lifting is a cancel,\n * not a flick.\n */\nexport function getSwipeReleaseVerdict({\n deltaX,\n velocityX,\n threshold,\n flickVelocity = FLICK_VELOCITY,\n viewportWidth,\n direction = 'ltr',\n}: SwipeReleaseInput): SwipeReleaseVerdict {\n const distance = Math.abs(deltaX);\n const directionMatches =\n deltaX !== 0 && Math.sign(velocityX) === Math.sign(deltaX);\n const projected = deltaX + project(velocityX);\n const passes =\n distance > threshold ||\n (distance > FLICK_MIN_DISTANCE &&\n directionMatches &&\n Math.abs(velocityX) > flickVelocity) ||\n (viewportWidth !== undefined &&\n distance > FLICK_MIN_DISTANCE &&\n directionMatches &&\n Math.abs(projected) > viewportWidth / 2);\n if (!passes) {\n return 'stay';\n }\n const towardNext = direction === 'rtl' ? deltaX > 0 : deltaX < 0;\n return towardNext ? 'next' : 'prev';\n}\n\n/**\n * Vertical release decision: close when the momentum-projected travel\n * passes {@link VERTICAL_CLOSE_RATIO} of the viewport in the drag's own\n * direction (a release moving back toward rest never closes), and the\n * finger actually travelled {@link VERTICAL_CLOSE_MIN_DRAG}.\n */\nexport function shouldCloseOnVerticalDrag(\n deltaY: number,\n velocityY: number,\n viewportHeight: number,\n options: { closable: boolean; swipeToClose: boolean },\n): boolean {\n if (!options.closable || !options.swipeToClose || deltaY === 0) {\n return false;\n }\n if (Math.abs(deltaY) < VERTICAL_CLOSE_MIN_DRAG) {\n return false;\n }\n const projected = deltaY + project(velocityY);\n return (\n Math.sign(projected) === Math.sign(deltaY) &&\n Math.abs(projected) > VERTICAL_CLOSE_RATIO * viewportHeight\n );\n}\n\n/**\n * Which slide navigation a release verdict maps to, honoring the 2.x touch\n * loop rule: galleries with fewer than 3 slides never wrap from touch.\n */\nexport function resolveSwipeTarget(\n verdict: SwipeReleaseVerdict,\n currentIndex: number,\n slidesCount: number,\n loop: boolean,\n): number | null {\n if (verdict === 'stay') {\n return null;\n }\n const touchLoop = loop && slidesCount >= 3;\n if (verdict === 'next') {\n if (currentIndex + 1 < slidesCount) {\n return currentIndex + 1;\n }\n return touchLoop ? 0 : null;\n }\n if (currentIndex > 0) {\n return currentIndex - 1;\n }\n return touchLoop ? slidesCount - 1 : null;\n}\n\n/** One live pointer, for multi-pointer consumers (zoom plugin). */\nexport interface PointerRecord {\n id: number;\n startX: number;\n startY: number;\n x: number;\n y: number;\n}\n\n/** Add or update a pointer record, returning a new array. */\nexport function upsertPointer(\n pointers: readonly PointerRecord[],\n record: PointerRecord,\n): PointerRecord[] {\n const existing = pointers.findIndex((p) => p.id === record.id);\n if (existing === -1) {\n return [...pointers, record];\n }\n const copy = [...pointers];\n copy[existing] = record;\n return copy;\n}\n\n/** Remove a pointer record by id, returning a new array. */\nexport function removePointer(\n pointers: readonly PointerRecord[],\n id: number,\n): PointerRecord[] {\n return pointers.filter((p) => p.id !== id);\n}\n","/**\n * Built-in UI icon set: inline SVG strings, one per icon name, grouped\n * by the feature that renders them so bundlers ship only the groups a\n * consumer's plugins import. Pure string data — safe in this DOM-free\n * package. Runtimes render these when the consumer supplies no custom\n * icon for a name.\n *\n * The artwork is lightGallery's own icon set, carried over from the\n * 2.x icon font: each glyph's vector outline extracted from the font\n * and re-baselined onto a square viewBox (font ascent 960 on a 1024\n * em). Same shapes the library has always shipped — now crisp inline\n * SVGs that follow `currentColor`.\n */\n\n/** The icon-name contract shared by every runtime and plugin. */\nexport type LgIconName =\n | 'close'\n | 'prev'\n | 'next'\n | 'download'\n | 'maximize'\n | 'minimize'\n | 'more'\n | 'zoomIn'\n | 'zoomOut'\n | 'actualSize'\n | 'rotateLeft'\n | 'rotateRight'\n | 'flipHorizontal'\n | 'flipVertical'\n | 'share'\n | 'shareFacebook'\n | 'shareX'\n | 'sharePinterest'\n | 'autoplayPlay'\n | 'autoplayPause'\n | 'fullscreen'\n | 'fullscreenExit'\n | 'comment'\n | 'commentClose'\n | 'toggleThumbnails';\n\nexport const coreDefaultIcons = {\n close: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M810 664.667l-238-238 238-238-60-60-238 238-238-238-60 60 238 238-238 238 60 60 238-238 238 238z\"/></svg>',\n // Three dots for the toolbar's More options menu button.\n more: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><circle cx=\"232\" cy=\"512\" r=\"80\"/><circle cx=\"512\" cy=\"512\" r=\"80\"/><circle cx=\"792\" cy=\"512\" r=\"80\"/></svg>',\n prev: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M426.667 768q17.667 0 30.167-12.5t12.5-30.167q0-18-12.667-30.333l-225.667-225.667h665q17.667 0 30.167-12.5t12.5-30.167-12.5-30.167-30.167-12.5h-665l225.667-225.667q12.667-12.333 12.667-30.333 0-17.667-12.5-30.167t-30.167-12.5q-18 0-30.333 12.333l-298.667 298.667q-12.333 13-12.333 30.333t12.333 30.333l298.667 298.667q12.667 12.333 30.333 12.333z\"/></svg>',\n next: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M597.333 768q18 0 30.333-12.333l298.667-298.667q12.333-12.333 12.333-30.333t-12.333-30.333l-298.667-298.667q-12.333-12.333-30.333-12.333-18.333 0-30.5 12.167t-12.167 30.5q0 18 12.333 30.333l226 225.667h-665q-17.667 0-30.167 12.5t-12.5 30.167 12.5 30.167 30.167 12.5h665l-226 225.667q-12.333 12.333-12.333 30.333 0 18.333 12.167 30.5t30.5 12.167z\"/></svg>',\n download:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M170 128.667h684v-86h-684v86zM682 384.667l-170-172-170 172h128v426h84v-426h128z\"/></svg>',\n maximize:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M793.003 768l-225.835-225.835c-16.683-16.683-16.683-43.691 0-60.331s43.691-16.683 60.331 0l225.835 225.835v-153.003c0-23.552 19.115-42.667 42.667-42.667s42.667 19.115 42.667 42.667v256c0 5.803-1.152 11.307-3.243 16.341s-5.163 9.728-9.216 13.781c-0.043 0.043-0.043 0.043-0.085 0.085-3.925 3.925-8.619 7.083-13.781 9.216-5.035 2.091-10.539 3.243-16.341 3.243h-256c-23.552 0-42.667-19.115-42.667-42.667s19.115-42.667 42.667-42.667zM230.997 85.334l225.835 225.835c16.683 16.683 16.683 43.691 0 60.331s-43.691 16.683-60.331 0l-225.835-225.835v153.003c0 23.552-19.115 42.667-42.667 42.667s-42.667-19.115-42.667-42.667v-256c0-23.552 19.115-42.667 42.667-42.667h256c23.552 0 42.667 19.115 42.667 42.667s-19.115 42.667-42.667 42.667z\"/></svg>',\n minimize:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M700.331 554.667l225.835 225.835c16.683 16.683 16.683 43.691 0 60.331s-43.691 16.683-60.331 0l-225.835-225.835v153.003c0 23.552-19.115 42.667-42.667 42.667s-42.667-19.115-42.667-42.667v-256c0-5.803 1.152-11.307 3.243-16.341s5.163-9.728 9.216-13.781c0.043-0.043 0.043-0.043 0.085-0.085 3.925-3.925 8.619-7.083 13.781-9.216 5.035-2.091 10.539-3.243 16.341-3.243h256c23.552 0 42.667 19.115 42.667 42.667s-19.115 42.667-42.667 42.667zM158.165 12.502l225.835 225.835v-153.003c0-23.552 19.115-42.667 42.667-42.667s42.667 19.115 42.667 42.667v256c0 5.803-1.152 11.307-3.243 16.341s-5.163 9.728-9.216 13.781c-0.043 0.043-0.043 0.043-0.085 0.085-4.096 4.053-8.789 7.125-13.781 9.216-5.035 2.091-10.539 3.243-16.341 3.243h-256c-23.552 0-42.667-19.115-42.667-42.667s19.115-42.667 42.667-42.667h153.003l-225.835-225.835c-16.683-16.683-16.683-43.691 0-60.331s43.691-16.683 60.331 0z\"/></svg>',\n} as const;\n\nexport const zoomDefaultIcons = {\n zoomIn: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M512 512.667h-86v-86h-42v86h-86v42h86v86h42v-86h86v-42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z\"/></svg>',\n zoomOut:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M298 554.667h214v-42h-214v42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z\"/></svg>',\n actualSize:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M384 853.334h426.667q53 0 90.5-37.5t37.5-90.5v-426.667q0-53-37.5-90.5t-90.5-37.5h-426.667q-53 0-90.5 37.5t-37.5 90.5v426.667q0 53 37.5 90.5t90.5 37.5zM170.667 675.334v-547.333q0-17.667 12.5-30.167t30.167-12.5h547.333q-13.333-37.667-46.333-61.5t-74.333-23.833h-426.667q-53 0-90.5 37.5t-37.5 90.5v426.667q0 41.333 23.833 74.333t61.5 46.333zM810.667 768h-426.667q-17.667 0-30.167-12.5t-12.5-30.167v-426.667q0-17.667 12.5-30.167t30.167-12.5h426.667q17.667 0 30.167 12.5t12.5 30.167v426.667q0 17.667-12.5 30.167t-30.167 12.5z\"/></svg>',\n} as const;\n\nexport const rotateDefaultIcons = {\n rotateLeft:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M554 764.667q126-16 213-112t87-226-87-226-213-112v86q92 16 153 87t61 165-61 165-153 87v-166l-194 190 194 194v-132zM302 156.667l62 62q46-34 106-44v-86q-96 12-168 68zM260 384.667q10-58 42-106l-60-60q-56 74-68 166h86zM304 574.667q-36-52-44-106h-86q12 90 70 166z\"/></svg>',\n rotateRight:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M720 278.667q34 46 44 106h86q-12-92-68-166zM554 174.667q60 10 106 44l62-62q-72-56-168-68v86zM850 468.667h-86q-10 60-44 106l62 60q58-72 68-166zM664 702.667l-194-190v166q-92-16-153-87t-61-165 61-165 153-87v-86q-126 16-213 112t-87 226 87 226 213 112v132z\"/></svg>',\n flipHorizontal:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M896 554.667l-170-170v128h-300v84h300v128zM298 468.667v-128h300v-84h-300v-128l-170 170z\"/></svg>',\n flipVertical:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M384 810.667l170-170h-128v-300h-84v300h-128zM682 212.667h128l-170-170-170 170h128v300h84v-300z\"/></svg>',\n} as const;\n\nexport const shareDefaultIcons = {\n share: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M768 252.667c68 0 124-56 124-124s-56-126-124-126-124 58-124 126c0 10 0 20 2 28l-302 176c-24-22-54-34-88-34-70 0-128 58-128 128s58 128 128 128c34 0 64-12 88-34l300 174c-2 10-4 20-4 30 0 70 58 128 128 128s128-58 128-128-58-128-128-128c-34 0-64 14-88 36l-300-176c2-10 4-20 4-30s-2-20-4-30l304-176c22 20 52 32 84 32z\"/></svg>',\n shareFacebook:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM628.429 612.659h-73.882c-8.755 0-18.483-11.52-18.483-26.829v-53.35h92.416l-13.978-76.083h-78.438v-228.403h-87.194v228.403h-79.104v76.083h79.104v44.749c0 64.205 44.544 116.378 105.677 116.378h73.882v-80.947z\"/></svg>',\n shareX: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><circle cx=\"512\" cy=\"512\" r=\"491.52\"/><path fill=\"#fff\" transform=\"translate(227 224) scale(24)\" d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\"/></svg>',\n sharePinterest:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM545.638 344.32c-31.539 2.406-44.749 18.022-69.427 32.973-13.568-71.219-30.157-139.52-79.309-175.206-15.206 107.725 22.221 188.518 39.629 274.381-29.645 49.92 3.533 150.323 66.099 125.645 76.954-30.515-66.662-185.6 29.747-205.005 100.659-20.173 141.773 174.694 79.36 237.978-90.214 91.494-262.502 2.099-241.306-128.87 5.12-32 38.246-41.728 13.21-85.914-57.702 12.8-74.957 58.317-72.704 118.989 3.533 99.328 89.242 168.909 175.155 178.483 108.698 12.083 210.688-39.885 224.819-142.182 15.821-115.405-49.101-240.282-165.274-231.27z\"/></svg>',\n} as const;\n\nexport const autoplayDefaultIcons = {\n autoplayPlay:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M512 84.667q140 0 241 101t101 241-101 241-241 101-241-101-101-241 101-241 241-101zM512 852.667q176 0 301-125t125-301-125-301-301-125-301 125-125 301 125 301 301 125zM426 234.667v384l256-192z\"/></svg>',\n autoplayPause:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M554 256.667v340h86v-340h-86zM512 84.667q140 0 241 101t101 241-101 241-241 101-241-101-101-241 101-241 241-101zM512 852.667q176 0 301-125t125-301-125-301-301-125-301 125-125 301 125 301 301 125zM384 256.667v340h86v-340h-86z\"/></svg>',\n} as const;\n\nexport const fullscreenDefaultIcons = {\n fullscreen:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M598 724.667h212v-212h-84v128h-128v84zM726 212.667v128h84v-212h-212v84h128zM214 512.667v212h212v-84h-128v-128h-84zM298 340.667v-128h128v-84h-212v212h84z\"/></svg>',\n fullscreenExit:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M682 596.667h128v-84h-212v212h84v-128zM598 128.667v212h212v-84h-128v-128h-84zM342 596.667v128h84v-212h-212v84h128zM214 256.667v84h212v-212h-84v128h-128z\"/></svg>',\n} as const;\n\nexport const commentDefaultIcons = {\n comment:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M938.667 448.128v21.205c0 0.725-0.043 1.621-0.085 2.475-5.803 99.755-47.488 190.336-112.725 258.176-68.352 71.125-162.731 117.419-268.843 123.264-0.683 0.043-1.536 0.085-2.347 0.085h-20.864c-59.947 0.683-122.965-13.227-181.931-43.008-52.181-26.496-97.749-63.488-133.931-108.16-56.405-69.717-89.899-158.080-89.941-253.696-0.597-54.4 10.795-111.36 35.157-165.419l-75.605-226.859c-2.816-8.363-3.072-17.835 0-26.965 7.467-22.357 31.616-34.432 53.973-26.965l226.731 75.563c49.493-22.485 105.984-35.243 165.376-35.115 58.539 0.384 115.797 13.141 168.149 36.949 81.579 37.163 151.040 101.248 193.749 186.667 27.477 53.291 43.307 115.84 43.136 181.803zM853.333 447.872c0.128-52.267-12.459-101.333-33.664-142.464-34.176-68.352-88.832-118.827-153.259-148.139-41.387-18.859-86.827-28.971-133.376-29.269-52.096-0.128-101.163 12.459-142.293 33.664-10.624 5.504-22.528 6.059-33.067 2.56l-162.261-54.101 54.101 162.261c3.755 11.221 2.56 22.912-2.389 32.725-23.552 46.677-34.304 96.171-33.792 142.421 0.043 76.331 26.411 145.92 70.955 200.917 28.629 35.371 64.768 64.725 106.24 85.76 46.592 23.552 96.085 34.304 142.336 33.792h19.456c83.712-4.565 158.037-41.003 212.011-97.152 51.285-53.376 84.139-124.416 89.003-202.795z\"/></svg>',\n commentClose:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M810 664.667l-238-238 238-238-60-60-238 238-238-238-60 60 238 238-238 238 60 60 238-238 238 238z\"/></svg>',\n} as const;\n\nexport const thumbnailDefaultIcons = {\n toggleThumbnails:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" fill=\"currentColor\"><path transform=\"translate(0, 960) scale(1, -1)\" d=\"M682 84.667v172h172v-172h-172zM682 340.667v172h172v-172h-172zM426 596.667v172h172v-172h-172zM682 768.667h172v-172h-172v172zM426 340.667v172h172v-172h-172zM170 340.667v172h172v-172h-172zM170 84.667v172h172v-172h-172zM426 84.667v172h172v-172h-172zM170 596.667v172h172v-172h-172z\"/></svg>',\n} as const;\n","/**\n * Thumbnail strip math (2.x `animateThumb`/`getPossibleTransformX`) as pure\n * functions for the thumbnail plugin.\n */\n\nimport { SLIDE_EDGE_FRICTION } from './gestures';\nimport type { ResolvedGalleryDirection } from './settings';\n\nexport type ThumbPagerPosition = 'left' | 'middle' | 'right';\n\n/**\n * Rubber-band a raw strip translate (plan 010 physics): inside the\n * bounds it passes through; beyond an edge the overshoot compresses by\n * the shared edge friction so the strip resists like the slide gestures.\n * The release spring pulls the compressed overshoot back to the bound.\n */\nexport function getElasticThumbTranslate(\n raw: number,\n totalWidth: number,\n stripWidth: number,\n friction = SLIDE_EDGE_FRICTION,\n): number {\n const max = Math.max(0, totalWidth - stripWidth);\n if (raw < 0) {\n return raw * friction;\n }\n if (raw > max) {\n return max + (raw - max) * friction;\n }\n return raw;\n}\n\nexport function getThumbTotalWidth(\n count: number,\n thumbWidth: number,\n thumbMargin: number,\n): number {\n return count * (thumbWidth + thumbMargin);\n}\n\n/** Clamp a strip translate into `[0, total - visible]` (never negative). */\nexport function clampThumbTranslate(\n translate: number,\n totalWidth: number,\n stripWidth: number,\n): number {\n const max = Math.max(0, totalWidth - stripWidth);\n return Math.min(Math.max(translate, 0), max);\n}\n\n/**\n * The window of thumbnails that must exist in the DOM for a given strip\n * translate (plan 010 virtualization): the visible range plus `overscan`\n * thumbs on each side, with leading/trailing pad widths so the strip keeps\n * its full scroll geometry while only the window renders.\n */\nexport interface ThumbWindow {\n /** First rendered thumb index (inclusive). */\n start: number;\n /** Last rendered thumb index (inclusive). */\n end: number;\n /** Spacer width (px) standing in for the thumbs before `start`. */\n leadingPad: number;\n /** Spacer width (px) standing in for the thumbs after `end`. */\n trailingPad: number;\n}\n\n/**\n * Compute the rendered thumb window from the strip translate. `overscan`\n * is the number of extra thumbs kept mounted on each side of the visible\n * range ('auto' derives one extra viewport per side — enough that a full\n * flick lands on already-rendered thumbs).\n */\nexport function getThumbWindow(options: {\n translate: number;\n stripWidth: number;\n thumbWidth: number;\n thumbMargin: number;\n count: number;\n overscan?: number | 'auto';\n}): ThumbWindow {\n const { translate, stripWidth, thumbWidth, thumbMargin, count } = options;\n const unit = thumbWidth + thumbMargin;\n if (count <= 0 || unit <= 0) {\n return { start: 0, end: -1, leadingPad: 0, trailingPad: 0 };\n }\n const overscan =\n options.overscan === 'auto' || options.overscan === undefined\n ? Math.max(1, Math.ceil(stripWidth / unit))\n : Math.max(0, options.overscan);\n const clampedTranslate = clampThumbTranslate(\n translate,\n getThumbTotalWidth(count, thumbWidth, thumbMargin),\n stripWidth,\n );\n const firstVisible = Math.floor(clampedTranslate / unit);\n const lastVisible = Math.ceil((clampedTranslate + stripWidth) / unit) - 1;\n const start = Math.max(0, firstVisible - overscan);\n const end = Math.min(count - 1, lastVisible + overscan);\n return {\n start,\n end,\n leadingPad: start * unit,\n trailingPad: (count - 1 - end) * unit,\n };\n}\n\n/**\n * Window covering a fling's whole flight path (plan 010): the union of\n * the windows at the start and end translates, so a released strip never\n * glides over unrendered thumbs — the destination is known at release.\n */\nexport function getThumbCorridorWindow(options: {\n from: number;\n to: number;\n stripWidth: number;\n thumbWidth: number;\n thumbMargin: number;\n count: number;\n overscan?: number | 'auto';\n}): ThumbWindow {\n const { from, to, ...geometry } = options;\n const a = getThumbWindow({ ...geometry, translate: from });\n const b = getThumbWindow({ ...geometry, translate: to });\n const start = Math.min(a.start, b.start);\n const end = Math.max(a.end, b.end);\n const unit = options.thumbWidth + options.thumbMargin;\n if (end < start) {\n return { start: 0, end: -1, leadingPad: 0, trailingPad: 0 };\n }\n return {\n start,\n end,\n leadingPad: start * unit,\n trailingPad: (options.count - 1 - end) * unit,\n };\n}\n\n/**\n * Which slide a live strip translate selects in scrub mode (the strip\n * drives the gallery while it moves). Proportional: the strip's full\n * scroll travel maps onto the full index range, so the FIRST and LAST\n * slides are always reachable — a fixed pager-point inverse cannot\n * reach the ends, because the clamped translate never brings them\n * under the pager slot. For long strips this converges to one index\n * per thumb unit of travel. Translate is the logical strip scalar\n * (RTL-agnostic); elastic overshoot clamps, pinning the ends.\n * Exact inverse: {@link getScrubThumbTranslate}.\n */\nexport function getScrubThumbIndex(\n translate: number,\n totalWidth: number,\n stripWidth: number,\n count: number,\n): number {\n const max = totalWidth - stripWidth;\n if (count <= 1 || max <= 0) {\n return 0;\n }\n const clamped = clampThumbTranslate(translate, totalWidth, stripWidth);\n return Math.round((clamped / max) * (count - 1));\n}\n\n/**\n * Strip translate at which {@link getScrubThumbIndex} resolves exactly\n * `index` — for aligning the strip to the scrubbed slide after the\n * release glide settles. (Not `getActiveThumbTranslate`: that pager\n * alignment is a different map and would re-resolve to a neighboring\n * index near the ends.)\n */\nexport function getScrubThumbTranslate(\n index: number,\n totalWidth: number,\n stripWidth: number,\n count: number,\n): number {\n const max = totalWidth - stripWidth;\n if (count <= 1 || max <= 0) {\n return 0;\n }\n const clamped = Math.min(Math.max(index, 0), count - 1);\n return (clamped / (count - 1)) * max;\n}\n\n/**\n * Strip translate that brings the active thumbnail to the pager position\n * (2.x `animateThumb`, including its off-by-one `- 1`).\n */\nexport function getActiveThumbTranslate(\n index: number,\n thumbWidth: number,\n thumbMargin: number,\n stripWidth: number,\n totalWidth: number,\n pagerPosition: ThumbPagerPosition,\n direction: ResolvedGalleryDirection = 'ltr',\n): number {\n // The strip math lives in logical space (offset from the strip's\n // start edge); the pager position names are physical, so RTL swaps\n // the edges before the math runs.\n const logicalPosition: ThumbPagerPosition =\n direction === 'rtl' && pagerPosition !== 'middle'\n ? pagerPosition === 'left'\n ? 'right'\n : 'left'\n : pagerPosition;\n let position = 0;\n switch (logicalPosition) {\n case 'left':\n position = 0;\n break;\n case 'middle':\n position = stripWidth / 2 - thumbWidth / 2;\n break;\n case 'right':\n position = stripWidth - thumbWidth;\n }\n const translate = (thumbWidth + thumbMargin) * index - 1 - position;\n return clampThumbTranslate(translate, totalWidth, stripWidth);\n}\n","/**\n * Rolling-window velocity tracking. Release decisions must read the\n * velocity of the gesture's final instant, not its whole-gesture\n * average: a drag that pauses and then flicks reads fast, and a drag\n * that ends resting reads zero. Sessions push a sample per move; the\n * release reads the window ending at the release timestamp.\n */\n\nexport interface VelocitySample {\n x: number;\n y: number;\n /** Timestamp in ms (same clock as the release read). */\n t: number;\n}\n\nexport interface Velocity {\n /** px/ms, signed. */\n x: number;\n y: number;\n}\n\n/** How far back a release looks when reading the gesture velocity. */\nexport const VELOCITY_WINDOW_MS = 100;\n\n/** Below this displacement (px) an axis reads as at rest. */\nconst MIN_DISPLACEMENT = 1;\n\n/** Below this span (ms) the window cannot measure reliably. */\nconst MIN_WINDOW_SPAN_MS = 5;\n\n/**\n * Append a sample, pruning everything older than the window — the\n * buffer stays a handful of entries regardless of gesture length.\n */\nexport function pushVelocitySample(\n samples: readonly VelocitySample[],\n sample: VelocitySample,\n windowMs: number = VELOCITY_WINDOW_MS,\n): VelocitySample[] {\n return [...samples.filter((s) => sample.t - s.t <= windowMs), sample];\n}\n\n/**\n * Velocity (px/ms per axis) over the samples inside the window ending\n * at `releaseTime`. Fewer than two recent samples — the finger rested\n * before lifting — reads as zero, as does sub-pixel drift.\n */\nexport function getWindowedVelocity(\n samples: readonly VelocitySample[],\n releaseTime: number,\n windowMs: number = VELOCITY_WINDOW_MS,\n): Velocity {\n const recent = samples.filter((s) => releaseTime - s.t <= windowMs);\n if (recent.length < 2) {\n return { x: 0, y: 0 };\n }\n const first = recent[0]!;\n const last = recent[recent.length - 1]!;\n const dt = last.t - first.t;\n if (dt < MIN_WINDOW_SPAN_MS) {\n return { x: 0, y: 0 };\n }\n const dx = last.x - first.x;\n const dy = last.y - first.y;\n return {\n x: Math.abs(dx) > MIN_DISPLACEMENT ? dx / dt : 0,\n y: Math.abs(dy) > MIN_DISPLACEMENT ? dy / dt : 0,\n };\n}\n","import {\n isSpringSettled,\n stepSpring,\n type SpringConfig,\n type SpringState,\n} from '@lightgallery/headless';\n\n/**\n * rAF driver for the shared spring math: advances one spring per track\n * each frame and hands the values to the caller's DOM writer. The math\n * (and therefore the feel) lives in @lightgallery/headless; this file\n * only owns scheduling.\n */\n\nexport interface SpringTrack extends SpringConfig {\n from: number;\n /** Seed velocity, px/ms, the gesture's windowed release velocity. */\n velocity: number;\n target: number;\n}\n\n/** Frame gap clamp so a background-tab pause cannot teleport a spring. */\nconst MAX_FRAME_MS = 64;\n\nexport function runSprings(\n tracks: SpringTrack[],\n onFrame: (values: number[]) => void,\n onDone?: () => void,\n): () => void {\n let raf = 0;\n let last = Date.now();\n const states: SpringState[] = tracks.map((t) => ({\n position: t.from,\n velocity: t.velocity,\n }));\n const frame = () => {\n // Date.now over the rAF timestamp: one clock for seeding and\n // stepping (and the one fake timers drive in tests). Clamp into\n // [0, MAX]: a paused tab cannot teleport the spring and a\n // non-monotonic reading cannot blow it up (negative dt turns\n // the decay exponential).\n const now = Date.now();\n const dt = Math.min(Math.max(now - last, 0), MAX_FRAME_MS);\n last = now;\n let settled = true;\n tracks.forEach((t, i) => {\n states[i] = stepSpring(states[i], t.target, dt, t);\n if (!isSpringSettled(states[i], t.target)) {\n settled = false;\n }\n });\n if (settled) {\n onFrame(tracks.map((t) => t.target));\n onDone?.();\n return;\n }\n onFrame(states.map((s) => s.position));\n raf = requestAnimationFrame(frame);\n };\n raf = requestAnimationFrame(frame);\n return () => cancelAnimationFrame(raf);\n}\n","interface ThumbnailStrings {\n toggleThumbnails: string;\n}\n\nexport interface ThumbnailsSettings {\n /**\n * Enable thumbnails for the gallery\n */\n thumbnail: boolean;\n\n /*\n * Enable thumbnail animation.\n */\n animateThumb: boolean;\n\n /**\n * Position of selected thumbnail.\n */\n currentPagerPosition: 'left' | 'middle' | 'right';\n\n /**\n * Position of thumbnails when the width of all thumbnails combined is less than the gallery's width.\n *\n */\n alignThumbnails: 'left' | 'middle' | 'right';\n\n /**\n * Width of each thumbnails.\n */\n thumbWidth: number;\n\n /**\n * Height of each thumbnails.\n */\n thumbHeight: string;\n\n /**\n * Spacing between each thumbnails\n */\n thumbMargin: number;\n\n /**\n * control where the thumbnails should be appended.\n * By default, thumbnails are appended to '.lg-components' which has inbuilt open close transitions\n * If you don't want initial thumbnails transitions, or want to do more customization,\n * you can append thumbnails to the lightGalley outer div -\n * <a href=\"/demos/thumbnails/#static-thumbnails\">Demo</a>\n */\n appendThumbnailsTo: '.lg-outer' | '.lg-components';\n\n /**\n * Enable toggle captions and thumbnails.\n * @description not applicable if allowMediaOverlap is false\n */\n toggleThumb: boolean;\n\n /**\n * Enables desktop mouse drag support for thumbnails.\n */\n enableThumbDrag: boolean;\n\n /**\n * Enables thumbnail touch/swipe support for touch devices\n */\n enableThumbSwipe: boolean;\n\n /**\n * By setting the thumbnailSwipeThreshold (in px) you can set how far the user must swipe for the next/prev slide.\n */\n thumbnailSwipeThreshold: number;\n\n /**\n * Scrub the gallery with the thumbnail strip: while the strip is\n * dragged (or gliding after a fling), the slide under the strip's\n * travel position becomes current immediately, without slide\n * transitions, the strip works like a scrubber instead of an\n * independent scroll area. The full strip travel spans the whole\n * gallery, so the first and last slides are always reachable.\n * Requires `animateThumb`; taps still navigate normally.\n * See <a href=\"/docs/thumbnail-scrubbing/\">Thumbnail scrubbing</a>.\n * @version V3.0.0\n */\n scrubThumbnails: boolean;\n\n /**\n * You can automatically load thumbnails for YouTube videos from YouTube by setting loadYouTubeThumbnail true\n */\n loadYouTubeThumbnail: boolean;\n\n /**\n * You can specify the thumbnail size by setting respective number.\n */\n //@todo add demo\n youTubeThumbSize: number;\n\n /**\n * Custom translation strings for aria-labels\n * @deprecated Set these labels on the core `strings` object instead,\n * every user-facing string lives in that one contract. An explicitly set\n * key here still wins (alias).\n */\n thumbnailPluginStrings?: Partial<ThumbnailStrings>;\n}\n\nexport const thumbnailsSettings: ThumbnailsSettings = {\n thumbnail: true,\n\n animateThumb: true,\n currentPagerPosition: 'middle',\n alignThumbnails: 'middle',\n\n thumbWidth: 100,\n thumbHeight: '80px',\n thumbMargin: 5,\n\n appendThumbnailsTo: '.lg-components',\n toggleThumb: false,\n\n enableThumbDrag: true,\n enableThumbSwipe: true,\n thumbnailSwipeThreshold: 10,\n scrubThumbnails: false,\n\n loadYouTubeThumbnail: true,\n youTubeThumbSize: 1,\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","import {\n clampThumbTranslate,\n getActiveThumbTranslate,\n getElasticThumbTranslate,\n getScrubThumbIndex,\n getThumbCorridorWindow,\n getThumbTotalWidth,\n getThumbWindow,\n type ThumbWindow,\n getWindowedVelocity,\n project,\n pushVelocitySample,\n type VelocitySample,\n thumbnailDefaultIcons,\n} from '@lightgallery/headless';\n\nimport { runSprings } from '../../lg-spring-runner';\n\nimport {\n ThumbnailsSettings,\n thumbnailsSettings,\n} from './lg-thumbnail-settings';\nimport { LgQuery, lgQuery } from '../../lgQuery';\nimport { LightGallery } from '../../lightgallery';\nimport { GalleryItem } from '../../lg-utils';\nimport { lGEvents } from '../../lg-events';\n\ninterface ThumbDragUtils {\n cords: {\n startX: number;\n endX: number;\n };\n isMoved: boolean;\n newTranslateX: number;\n startTime: Date;\n endTime: Date;\n touchMoveTime: number;\n}\ninterface ThumbnailGalleryItem extends GalleryItem {\n thumb: string;\n}\nexport default class Thumbnail {\n private core: LightGallery;\n private $thumbOuter!: lgQuery;\n private $lgThumb!: lgQuery;\n private thumbOuterWidth = 0;\n private thumbTotalWidth = 0;\n private translateX = 0;\n private thumbClickable = false;\n // The strip's first positioning belongs to the open flight: a\n // gallery opened from a thumbnail far down the strip would slide it\n // across while the image is still flying in.\n private instantThumb = false;\n // Strip physics (plan 010): velocity samples for the release fling,\n // the live (frame-written) translate, and the running spring cancel.\n private dragSamples: VelocitySample[] = [];\n private liveTranslateX = 0;\n private cancelThumbSpring?: () => void;\n // Last rendered window (windowed strips), the mid-drag top-up\n // check compares the live translate against this coverage.\n private renderedThumbWindow?: ThumbWindow;\n // Scrub session (scrubThumbnails): while the strip moves it drives\n // the gallery, slide changes are instant and the strip must not\n // re-center itself against the finger.\n private scrubActive = false;\n private scrubIndex = -1;\n private scrubSavedSpeed?: number;\n private settings!: ThumbnailsSettings;\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\n return this;\n }\n\n init(): void {\n this.core.registerDefaultIcons(thumbnailDefaultIcons);\n // extend module default settings with lightGallery core settings\n this.settings = {\n ...thumbnailsSettings,\n ...this.core.settings,\n };\n this.thumbOuterWidth = 0;\n this.thumbTotalWidth = getThumbTotalWidth(\n this.core.galleryItems.length,\n this.settings.thumbWidth,\n this.settings.thumbMargin,\n );\n\n // Thumbnail animation value\n this.translateX = 0;\n\n this.setAnimateThumbStyles();\n\n if (!this.core.settings.allowMediaOverlap) {\n this.settings.toggleThumb = false;\n }\n\n if (this.settings.thumbnail) {\n this.build();\n if (this.settings.animateThumb) {\n if (this.settings.enableThumbDrag) {\n this.enableThumbDrag();\n }\n\n if (this.settings.enableThumbSwipe) {\n this.enableThumbSwipe();\n }\n\n this.thumbClickable = false;\n } else {\n this.thumbClickable = true;\n }\n\n this.toggleThumbBar();\n this.thumbKeyPress();\n }\n }\n\n build(): void {\n this.setThumbMarkup();\n this.manageActiveClassOnSlideChange();\n this.$lgThumb.first().on('click.lg touchend.lg', (e: CustomEvent) => {\n const $target = this.$LG(e.target);\n if (!$target.hasAttribute('data-lg-item-id')) {\n return;\n }\n setTimeout(() => {\n // In IE9 and bellow touch does not support\n // Go to slide if browser does not support css transitions\n if (this.thumbClickable && !this.core.lgBusy) {\n const index = parseInt($target.attr('data-lg-item-id'));\n this.core.slide(index, false, true, false);\n }\n }, 50);\n });\n\n this.core.LGel.on(`${lGEvents.beforeSlide}.thumb`, (event) => {\n // Mid-scrub the finger owns the strip; re-centering against\n // the scrub's own navigation would fight it.\n if (this.scrubActive) {\n return;\n }\n const { index } = event.detail;\n this.animateThumb(index);\n });\n this.core.LGel.on(`${lGEvents.beforeOpen}.thumb`, () => {\n this.thumbOuterWidth = this.core.outer.get().offsetWidth;\n this.instantThumb = true;\n });\n this.core.LGel.on(`${lGEvents.afterOpen}.thumb`, () => {\n this.instantThumb = false;\n });\n\n this.core.LGel.on(`${lGEvents.updateSlides}.thumb`, () => {\n this.rebuildThumbnails();\n });\n this.core.LGel.on(`${lGEvents.containerResize}.thumb`, () => {\n if (!this.core.lgOpened) return;\n setTimeout(() => {\n this.thumbOuterWidth = this.core.outer.get().offsetWidth;\n this.animateThumb(this.core.index);\n this.thumbOuterWidth = this.core.outer.get().offsetWidth;\n }, 50);\n });\n }\n\n setThumbMarkup(): void {\n let thumbOuterClassNames = 'lg-thumb-outer ';\n\n if (this.settings.alignThumbnails) {\n thumbOuterClassNames += `lg-thumb-align-${this.settings.alignThumbnails}`;\n }\n\n const html = `<div class=\"${thumbOuterClassNames}\">\n <div class=\"lg-thumb lg-group\">\n </div>\n </div>`;\n\n this.core.outer.addClass('lg-has-thumb');\n\n if (this.settings.appendThumbnailsTo === '.lg-components') {\n this.core.$lgComponents.append(html);\n } else {\n this.core.outer.append(html);\n }\n\n this.$thumbOuter = this.core.outer.find('.lg-thumb-outer').first();\n this.$lgThumb = this.core.outer.find('.lg-thumb').first();\n\n if (this.settings.animateThumb) {\n this.core.outer\n .find('.lg-thumb')\n .css('transition-duration', this.core.settings.speed + 'ms')\n .css('width', this.thumbTotalWidth + 'px')\n .css('position', 'relative');\n }\n\n this.renderThumbItems();\n }\n\n enableThumbDrag(): void {\n let thumbDragUtils: ThumbDragUtils = {\n cords: {\n startX: 0,\n endX: 0,\n },\n isMoved: false,\n newTranslateX: 0,\n startTime: new Date(),\n endTime: new Date(),\n touchMoveTime: 0,\n };\n\n let isDragging = false;\n\n this.$thumbOuter.addClass('lg-grab');\n\n this.core.outer\n .find('.lg-thumb')\n .first()\n .on('mousedown.lg.thumb', (e) => {\n if (this.thumbTotalWidth > this.thumbOuterWidth) {\n // execute only on .lg-object\n e.preventDefault();\n this.onThumbDragStart(e.pageX);\n thumbDragUtils.cords.startX = e.pageX;\n\n thumbDragUtils.startTime = new Date();\n this.thumbClickable = false;\n\n isDragging = true;\n\n // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723\n this.core.outer.get().scrollLeft += 1;\n this.core.outer.get().scrollLeft -= 1;\n\n // *\n this.$thumbOuter\n .removeClass('lg-grab')\n .addClass('lg-grabbing');\n }\n });\n\n this.$LG(window).on(\n `mousemove.lg.thumb.global${this.core.lgId}`,\n (e) => {\n if (!this.core.lgOpened) return;\n if (isDragging) {\n thumbDragUtils.cords.endX = e.pageX;\n\n thumbDragUtils = this.onThumbTouchMove(thumbDragUtils);\n }\n },\n );\n\n this.$LG(window).on(`mouseup.lg.thumb.global${this.core.lgId}`, () => {\n if (!this.core.lgOpened) return;\n if (thumbDragUtils.isMoved) {\n thumbDragUtils = this.onThumbTouchEnd(thumbDragUtils);\n } else {\n this.thumbClickable = true;\n // A press that took over a scrub glide and released\n // without moving ends the session here, no spring runs.\n this.endScrub();\n }\n\n if (isDragging) {\n isDragging = false;\n this.$thumbOuter.removeClass('lg-grabbing').addClass('lg-grab');\n }\n });\n }\n\n enableThumbSwipe(): void {\n let thumbDragUtils: ThumbDragUtils = {\n cords: {\n startX: 0,\n endX: 0,\n },\n isMoved: false,\n newTranslateX: 0,\n startTime: new Date(),\n endTime: new Date(),\n touchMoveTime: 0,\n };\n\n this.$lgThumb.on('touchstart.lg', (e: TouchEvent) => {\n if (this.thumbTotalWidth > this.thumbOuterWidth) {\n e.preventDefault();\n this.onThumbDragStart(e.targetTouches[0].pageX);\n thumbDragUtils.cords.startX = e.targetTouches[0].pageX;\n this.thumbClickable = false;\n thumbDragUtils.startTime = new Date();\n }\n });\n\n this.$lgThumb.on('touchmove.lg', (e: TouchEvent) => {\n if (this.thumbTotalWidth > this.thumbOuterWidth) {\n e.preventDefault();\n thumbDragUtils.cords.endX = e.targetTouches[0].pageX;\n thumbDragUtils = this.onThumbTouchMove(thumbDragUtils);\n }\n });\n\n this.$lgThumb.on('touchend.lg', () => {\n if (thumbDragUtils.isMoved) {\n thumbDragUtils = this.onThumbTouchEnd(thumbDragUtils);\n } else {\n this.thumbClickable = true;\n // A tap that took over a scrub glide ends the session\n // here, no spring runs.\n this.endScrub();\n }\n });\n }\n\n // Rebuild thumbnails\n rebuildThumbnails(): void {\n // Remove transitions\n this.$thumbOuter.addClass('lg-rebuilding-thumbnails');\n setTimeout(() => {\n this.thumbTotalWidth = getThumbTotalWidth(\n this.core.galleryItems.length,\n this.settings.thumbWidth,\n this.settings.thumbMargin,\n );\n this.$lgThumb.css('width', this.thumbTotalWidth + 'px');\n this.$lgThumb.empty();\n this.renderThumbItems();\n this.animateThumb(this.core.index);\n }, 50);\n setTimeout(() => {\n this.$thumbOuter.removeClass('lg-rebuilding-thumbnails');\n }, 200);\n }\n\n // @ts-check\n\n setTranslate(value: number): void {\n // `${-value}` (not '-' + value): elastic overshoot goes negative.\n // The translate scalar lives in logical strip space; in RTL the\n // strip flows right-to-left (lg-rtl.css floats the thumbs right),\n // so scrolling toward higher indexes moves the track right.\n const x = this.isRtl() ? value : -value;\n this.$lgThumb.css('transform', 'translate3d(' + x + 'px, 0px, 0px)');\n }\n\n private isRtl(): boolean {\n return this.core.settings.direction === 'rtl';\n }\n\n getPossibleTransformX(left: number): number {\n return clampThumbTranslate(\n left,\n this.thumbTotalWidth,\n this.thumbOuterWidth,\n );\n }\n\n animateThumb(index: number): void {\n // A slide change owns the strip: stop any release glide first.\n if (this.cancelThumbSpring) {\n this.cancelThumbSpring();\n this.cancelThumbSpring = undefined;\n }\n this.$lgThumb.css(\n 'transition-duration',\n this.instantThumb ? '0ms' : this.core.settings.speed + 'ms',\n );\n if (this.settings.animateThumb) {\n this.translateX = getActiveThumbTranslate(\n index,\n this.settings.thumbWidth,\n this.settings.thumbMargin,\n this.thumbOuterWidth,\n this.thumbTotalWidth,\n this.settings.currentPagerPosition,\n this.isRtl() ? 'rtl' : 'ltr',\n );\n this.liveTranslateX = this.translateX;\n this.setTranslate(this.translateX);\n if (this.isThumbWindowed()) {\n this.renderThumbItems(index);\n }\n }\n }\n\n private canScrub(): boolean {\n return this.settings.scrubThumbnails && this.settings.animateThumb;\n }\n\n /**\n * A scrub session starts on the first actual strip movement and\n * ends when the release glide settles (or the plugin dies). While\n * it runs: slide transitions are visually off (`lg-thumb-scrubbing`\n * CSS), the core's transition timers collapse (`speed` 0) so the\n * landed slide's content loads without the navigation lag, and the\n * strip's own slide-change re-centering stands down.\n */\n private beginScrub(): void {\n if (this.scrubActive) {\n return;\n }\n this.scrubActive = true;\n this.scrubIndex = this.core.index;\n this.scrubSavedSpeed = this.core.settings.speed;\n this.core.settings.speed = 0;\n this.core.outer.addClass('lg-thumb-scrubbing');\n }\n\n private endScrub(): void {\n if (!this.scrubActive) {\n return;\n }\n this.scrubActive = false;\n this.scrubIndex = -1;\n if (this.scrubSavedSpeed !== undefined) {\n this.core.settings.speed = this.scrubSavedSpeed;\n this.scrubSavedSpeed = undefined;\n }\n this.core.outer.removeClass('lg-thumb-scrubbing');\n }\n\n /** Live translate → slide, on drag frames and glide frames alike. */\n private scrubTo(translate: number): void {\n const index = getScrubThumbIndex(\n translate,\n this.thumbTotalWidth,\n this.thumbOuterWidth,\n this.core.galleryItems.length,\n );\n if (index === this.scrubIndex) {\n return;\n }\n this.scrubIndex = index;\n // The busy flag paces animated navigation; a scrub tracks the\n // strip frame by frame, so each step clears it (the fromTouch\n // slide path swaps lg-current immediately).\n this.core.lgBusy = false;\n this.core.slide(index, true, true, false);\n }\n\n /**\n * Drag-start seam (plan 010 physics): a press mid-glide takes over\n * from the live position, and the velocity window restarts.\n */\n private onThumbDragStart(pageX: number): void {\n if (this.cancelThumbSpring) {\n this.cancelThumbSpring();\n this.cancelThumbSpring = undefined;\n this.translateX = this.liveTranslateX;\n }\n this.liveTranslateX = this.translateX;\n this.dragSamples = pushVelocitySample([], {\n x: pageX,\n y: 0,\n t: Date.now(),\n });\n }\n\n onThumbTouchMove(thumbDragUtils: ThumbDragUtils): ThumbDragUtils {\n thumbDragUtils.isMoved = true;\n thumbDragUtils.touchMoveTime = new Date().valueOf();\n this.dragSamples = pushVelocitySample(this.dragSamples, {\n x: thumbDragUtils.cords.endX,\n y: 0,\n t: Date.now(),\n });\n\n // Elastic: overshoot past the edges compresses instead of\n // clamping dead (plan 010 physics).\n // Finger motion maps to the logical scroll offset; the mapping\n // mirrors in RTL together with the applied transform sign.\n const dragDelta =\n thumbDragUtils.cords.endX - thumbDragUtils.cords.startX;\n thumbDragUtils.newTranslateX = getElasticThumbTranslate(\n this.translateX + (this.isRtl() ? dragDelta : -dragDelta),\n this.thumbTotalWidth,\n this.thumbOuterWidth,\n );\n\n // move current slide\n this.liveTranslateX = thumbDragUtils.newTranslateX;\n this.setTranslate(thumbDragUtils.newTranslateX);\n this.$thumbOuter.addClass('lg-dragging');\n\n if (this.canScrub()) {\n this.beginScrub();\n this.scrubTo(this.liveTranslateX);\n }\n\n // Windowed strips: a long finger drag can outrun the rendered\n // window, one rebuild recenters it (rare; routine moves only\n // write the transform).\n if (this.isThumbWindowed() && this.renderedThumbWindow) {\n // Rendered coverage in px straight from the window's pads, // [leadingPad, totalWidth - trailingPad].\n const rendered = this.renderedThumbWindow;\n if (\n this.liveTranslateX < rendered.leadingPad ||\n this.liveTranslateX + this.thumbOuterWidth >\n this.thumbTotalWidth - rendered.trailingPad\n ) {\n this.renderThumbItems(this.core.index, {\n from: this.liveTranslateX,\n to: this.liveTranslateX,\n });\n }\n }\n\n return thumbDragUtils;\n }\n\n onThumbTouchEnd(thumbDragUtils: ThumbDragUtils): ThumbDragUtils {\n thumbDragUtils.isMoved = false;\n thumbDragUtils.endTime = new Date();\n this.$thumbOuter.removeClass('lg-dragging');\n\n // Release physics (plan 010): project the windowed velocity to a\n // fling target, clamp into the strip bounds, and spring there, // bounces off the edge on overshoot, pulls back when released\n // inside the rubber band. (Replaces the 2.x magic-numbers\n // momentum, whose transition-duration carried an invalid\n // '<n>settings' unit and silently never glided.)\n const pointerVelocityX = getWindowedVelocity(\n this.dragSamples,\n Date.now(),\n ).x;\n const translateVelocity = this.isRtl()\n ? pointerVelocityX\n : -pointerVelocityX;\n const from = this.liveTranslateX;\n const target = this.getPossibleTransformX(\n from + project(translateVelocity),\n );\n this.$lgThumb.css('transition-duration', '0ms');\n // Windowed strips: render the whole flight corridor before the\n // glide starts, the destination is known at release, so the\n // spring never crosses unrendered thumbs.\n if (this.isThumbWindowed()) {\n this.renderThumbItems(this.core.index, { from, to: target });\n }\n this.cancelThumbSpring = runSprings(\n [{ from, velocity: translateVelocity, target }],\n ([value]) => {\n this.liveTranslateX = value!;\n this.setTranslate(value!);\n // The glide keeps scrubbing, a flicked strip drives the\n // gallery all the way to where it decelerates.\n if (this.scrubActive) {\n this.scrubTo(value!);\n }\n },\n () => {\n this.cancelThumbSpring = undefined;\n this.translateX = target;\n this.endScrub();\n this.$lgThumb.css(\n 'transition-duration',\n this.core.settings.speed + 'ms',\n );\n if (this.isThumbWindowed()) {\n this.renderThumbItems();\n }\n },\n );\n\n if (\n Math.abs(thumbDragUtils.cords.endX - thumbDragUtils.cords.startX) <\n this.settings.thumbnailSwipeThreshold\n ) {\n this.thumbClickable = true;\n }\n\n return thumbDragUtils;\n }\n\n getThumbHtml(thumb: string, index: number, alt?: string): HTMLElement {\n const slideVideoInfo =\n this.core.galleryItems[index].__slideVideoInfo || {};\n let thumbImg;\n\n if (slideVideoInfo.youtube) {\n if (this.settings.loadYouTubeThumbnail) {\n thumbImg =\n '//img.youtube.com/vi/' +\n slideVideoInfo.youtube[1] +\n '/' +\n this.settings.youTubeThumbSize +\n '.jpg';\n } else {\n thumbImg = thumb;\n }\n } else {\n thumbImg = thumb;\n }\n\n const div = document.createElement('div');\n div.setAttribute('data-lg-item-id', index + '');\n div.className = `lg-thumb-item ${\n index === this.core.index ? 'active' : ''\n }`;\n const marginSide = this.isRtl() ? 'margin-left' : 'margin-right';\n div.style.cssText = `width: ${this.settings.thumbWidth}px; height: ${this.settings.thumbHeight}; ${marginSide}: ${this.settings.thumbMargin}px;`;\n const img = document.createElement('img');\n img.alt = alt || '';\n img.setAttribute('data-lg-item-id', index + '');\n img.src = thumbImg;\n div.appendChild(img);\n return div;\n }\n\n /**\n * True when the strip renders only a window of thumbs\n * (virtualization.thumbs, plan 010).\n */\n private isThumbWindowed(): boolean {\n return this.core.settings.virtualization?.thumbs !== undefined;\n }\n\n /**\n * (Re)build the strip contents. Classic mode appends every thumb once;\n * windowed mode renders the visible range plus overscan with spacers\n * preserving the strip geometry, and re-runs at commit points only\n * (open, slide change, drag release, resize, updateSlides), never per\n * pointer move.\n */\n private renderThumbItems(\n activeIndex = this.core.index,\n corridor?: { from: number; to: number },\n ): void {\n const items = this.core\n .galleryItems as unknown as ThumbnailGalleryItem[];\n if (!this.isThumbWindowed()) {\n this.setThumbItemHtml(items);\n return;\n }\n const geometry = {\n stripWidth: this.thumbOuterWidth,\n thumbWidth: this.settings.thumbWidth,\n thumbMargin: this.settings.thumbMargin,\n count: items.length,\n overscan: this.core.settings.virtualization?.thumbs,\n };\n // A corridor covers a fling's whole flight path (or recenters\n // around the live translate during a long drag).\n const thumbWindow = corridor\n ? getThumbCorridorWindow({ ...geometry, ...corridor })\n : getThumbWindow({ ...geometry, translate: this.translateX });\n this.renderedThumbWindow = thumbWindow;\n this.$lgThumb.empty();\n if (thumbWindow.leadingPad > 0) {\n this.$lgThumb.append(\n `<div class=\"lg-thumb-spacer\" aria-hidden=\"true\" style=\"width: ${thumbWindow.leadingPad}px;\"></div>`,\n );\n }\n for (let i = thumbWindow.start; i <= thumbWindow.end; i++) {\n const thumb = this.getThumbHtml(items[i].thumb, i, items[i].alt);\n if (i === activeIndex) {\n thumb.classList.add('active');\n }\n this.$lgThumb.append(thumb);\n }\n if (thumbWindow.trailingPad > 0) {\n this.$lgThumb.append(\n `<div class=\"lg-thumb-spacer\" aria-hidden=\"true\" style=\"width: ${thumbWindow.trailingPad}px;\"></div>`,\n );\n }\n }\n\n setThumbItemHtml(items: ThumbnailGalleryItem[]): void {\n for (let i = 0; i < items.length; i++) {\n const thumb = this.getThumbHtml(items[i].thumb, i, items[i].alt);\n this.$lgThumb.append(thumb);\n }\n }\n\n setAnimateThumbStyles(): void {\n if (this.settings.animateThumb) {\n this.core.outer.addClass('lg-animate-thumb');\n }\n }\n\n // Manage thumbnail active calss\n manageActiveClassOnSlideChange(): void {\n // manage active class for thumbnail\n this.core.LGel.on(\n `${lGEvents.beforeSlide}.thumb`,\n (event: CustomEvent) => {\n const { index } = event.detail;\n this.core.outer.find('.lg-thumb-item').removeClass('active');\n // Id-based lookup: under a windowed strip the item's DOM\n // position no longer equals its gallery index.\n this.core.outer\n .find(`.lg-thumb-item[data-lg-item-id=\"${index}\"]`)\n .addClass('active');\n },\n );\n }\n\n // Toggle thumbnail bar\n toggleThumbBar(): void {\n if (this.settings.toggleThumb) {\n this.core.outer.addClass('lg-can-toggle');\n this.core.$toolbar.append(\n '<button type=\"button\" aria-label=\"' +\n (this.settings.thumbnailPluginStrings?.toggleThumbnails ??\n this.core.settings.strings.toggleThumbnails) +\n '\" class=\"lg-toggle-thumb lg-icon\"></button>',\n );\n this.core.outer\n .find('.lg-toggle-thumb')\n .first()\n .on('click.lg', () => {\n this.core.outer.toggleClass('lg-components-open');\n });\n }\n }\n\n thumbKeyPress(): void {\n this.$LG(window).on(`keydown.lg.thumb.global${this.core.lgId}`, (e) => {\n if (!this.core.lgOpened || !this.settings.toggleThumb) return;\n\n if (e.keyCode === 38) {\n e.preventDefault();\n this.core.outer.addClass('lg-components-open');\n } else if (e.keyCode === 40) {\n e.preventDefault();\n this.core.outer.removeClass('lg-components-open');\n }\n });\n }\n\n destroy(): void {\n this.endScrub();\n if (this.cancelThumbSpring) {\n this.cancelThumbSpring();\n this.cancelThumbSpring = undefined;\n }\n if (this.settings.thumbnail) {\n this.$LG(window).off(`.lg.thumb.global${this.core.lgId}`);\n this.core.LGel.off('.lg.thumb');\n this.core.LGel.off('.thumb');\n this.$thumbOuter.remove();\n this.core.outer.removeClass('lg-has-thumb');\n }\n }\n}\n"],"names":["__spreadProps","__spreadValues"],"mappings":"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"}
@@ -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).lgThumbnail=e()}(this,function(){"use strict";const t={toggleThumbnails:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="currentColor"><path transform="translate(0, 960) scale(1, -1)" d="M682 84.667v172h172v-172h-172zM682 340.667v172h172v-172h-172zM426 596.667v172h172v-172h-172zM682 768.667h172v-172h-172v172zM426 340.667v172h172v-172h-172zM170 340.667v172h172v-172h-172zM170 84.667v172h172v-172h-172zM426 84.667v172h172v-172h-172zM170 596.667v172h172v-172h-172z"/></svg>'};var e=Object.defineProperty,i=Object.defineProperties,s=Object.getOwnPropertyDescriptors,h=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable,a=(t,i,s)=>i in t?e(t,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[i]=s,o=(t,e)=>{for(var i in e||(e={}))n.call(e,i)&&a(t,i,e[i]);if(h)for(var i of h(e))r.call(e,i)&&a(t,i,e[i]);return t},l=(t,e)=>i(t,s(e));function u(t,e,i){return t*(e+i)}function m(t,e,i){const s=Math.max(0,e-i);return Math.min(Math.max(t,0),s)}function b(t){const{translate:e,stripWidth:i,thumbWidth:s,thumbMargin:h,count:n}=t,r=s+h;if(n<=0||r<=0)return{start:0,end:-1,leadingPad:0,trailingPad:0};const a="auto"===t.overscan||void 0===t.overscan?Math.max(1,Math.ceil(i/r)):Math.max(0,t.overscan),o=m(e,u(n,s,h),i),l=Math.floor(o/r),b=Math.ceil((o+i)/r)-1,d=Math.max(0,l-a),c=Math.min(n-1,b+a);return{start:d,end:c,leadingPad:d*r,trailingPad:(n-1-c)*r}}function d(t){const e=t,{from:i,to:s}=e,a=((t,e)=>{var i={};for(var s in t)n.call(t,s)&&e.indexOf(s)<0&&(i[s]=t[s]);if(null!=t&&h)for(var s of h(t))e.indexOf(s)<0&&r.call(t,s)&&(i[s]=t[s]);return i})(e,["from","to"]),u=b(l(o({},a),{translate:i})),m=b(l(o({},a),{translate:s})),d=Math.min(u.start,m.start),c=Math.max(u.end,m.end),g=t.thumbWidth+t.thumbMargin;return c<d?{start:0,end:-1,leadingPad:0,trailingPad:0}:{start:d,end:c,leadingPad:d*g,trailingPad:(t.count-1-c)*g}}function c(t,e,i=100){return[...t.filter(t=>e.t-t.t<=i),e]}function g(t,e,i){let s=0,h=Date.now();const n=t.map(t=>({position:t.from,velocity:t.velocity})),r=()=>{const a=Date.now(),o=Math.min(Math.max(a-h,0),64);h=a;let l=!0;if(t.forEach((t,e)=>{n[e]=function(t,e,i,{dampingRatio:s=1,naturalFrequency:h=12}={}){const n=i/1e3,r=h,a=Math.min(s,1),o=t.position-e,l=1e3*t.velocity,u=Math.exp(-a*r*n);let m,b;if(a<1){const t=r*Math.sqrt(1-a*a),e=o,i=(l+a*r*o)/t,s=Math.cos(t*n),h=Math.sin(t*n);m=u*(e*s+i*h),b=u*((i*t-a*r*e)*s-(e*t+a*r*i)*h)}else{const t=l+r*o;m=u*(o+t*n),b=u*(t-r*(o+t*n))}return{position:e+m,velocity:b/1e3}}(n[e],t.target,o,t),function(t,e,i=.3,s=.012){return Math.abs(t.position-e)<i&&Math.abs(t.velocity)<s}(n[e],t.target)||(l=!1)}),l)return e(t.map(t=>t.target)),void(null==i||i());e(n.map(t=>t.position)),s=requestAnimationFrame(r)};return s=requestAnimationFrame(r),()=>cancelAnimationFrame(s)}const T={thumbnail:!0,animateThumb:!0,currentPagerPosition:"middle",alignThumbnails:"middle",thumbWidth:100,thumbHeight:"80px",thumbMargin:5,appendThumbnailsTo:".lg-components",toggleThumb:!1,enableThumbDrag:!0,enableThumbSwipe:!0,thumbnailSwipeThreshold:10,scrubThumbnails:!1,loadYouTubeThumbnail:!0,youTubeThumbSize:1},p="lgContainerResize",v="lgUpdateSlides",f="lgBeforeOpen",w="lgAfterOpen",y="lgBeforeSlide";var M=Object.defineProperty,O=Object.defineProperties,S=Object.getOwnPropertyDescriptors,$=Object.getOwnPropertySymbols,W=Object.prototype.hasOwnProperty,x=Object.prototype.propertyIsEnumerable,X=(t,e,i)=>e in t?M(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i,C=(t,e)=>{for(var i in e||(e={}))W.call(e,i)&&X(t,i,e[i]);if($)for(var i of $(e))x.call(e,i)&&X(t,i,e[i]);return t};return class{constructor(t,e){return this.thumbOuterWidth=0,this.thumbTotalWidth=0,this.translateX=0,this.thumbClickable=!1,this.instantThumb=!1,this.dragSamples=[],this.liveTranslateX=0,this.scrubActive=!1,this.scrubIndex=-1,this.core=t,this.$LG=e,this}init(){this.core.registerDefaultIcons(t),this.settings=C(C({},T),this.core.settings),this.thumbOuterWidth=0,this.thumbTotalWidth=u(this.core.galleryItems.length,this.settings.thumbWidth,this.settings.thumbMargin),this.translateX=0,this.setAnimateThumbStyles(),this.core.settings.allowMediaOverlap||(this.settings.toggleThumb=!1),this.settings.thumbnail&&(this.build(),this.settings.animateThumb?(this.settings.enableThumbDrag&&this.enableThumbDrag(),this.settings.enableThumbSwipe&&this.enableThumbSwipe(),this.thumbClickable=!1):this.thumbClickable=!0,this.toggleThumbBar(),this.thumbKeyPress())}build(){this.setThumbMarkup(),this.manageActiveClassOnSlideChange(),this.$lgThumb.first().on("click.lg touchend.lg",t=>{const e=this.$LG(t.target);e.hasAttribute("data-lg-item-id")&&setTimeout(()=>{if(this.thumbClickable&&!this.core.lgBusy){const t=parseInt(e.attr("data-lg-item-id"));this.core.slide(t,!1,!0,!1)}},50)}),this.core.LGel.on(`${y}.thumb`,t=>{if(this.scrubActive)return;const{index:e}=t.detail;this.animateThumb(e)}),this.core.LGel.on(`${f}.thumb`,()=>{this.thumbOuterWidth=this.core.outer.get().offsetWidth,this.instantThumb=!0}),this.core.LGel.on(`${w}.thumb`,()=>{this.instantThumb=!1}),this.core.LGel.on(`${v}.thumb`,()=>{this.rebuildThumbnails()}),this.core.LGel.on(`${p}.thumb`,()=>{this.core.lgOpened&&setTimeout(()=>{this.thumbOuterWidth=this.core.outer.get().offsetWidth,this.animateThumb(this.core.index),this.thumbOuterWidth=this.core.outer.get().offsetWidth},50)})}setThumbMarkup(){let t="lg-thumb-outer ";this.settings.alignThumbnails&&(t+=`lg-thumb-align-${this.settings.alignThumbnails}`);const e=`<div class="${t}">\n <div class="lg-thumb lg-group">\n </div>\n </div>`;this.core.outer.addClass("lg-has-thumb"),".lg-components"===this.settings.appendThumbnailsTo?this.core.$lgComponents.append(e):this.core.outer.append(e),this.$thumbOuter=this.core.outer.find(".lg-thumb-outer").first(),this.$lgThumb=this.core.outer.find(".lg-thumb").first(),this.settings.animateThumb&&this.core.outer.find(".lg-thumb").css("transition-duration",this.core.settings.speed+"ms").css("width",this.thumbTotalWidth+"px").css("position","relative"),this.renderThumbItems()}enableThumbDrag(){let t={cords:{startX:0,endX:0},isMoved:!1,newTranslateX:0,startTime:new Date,endTime:new Date,touchMoveTime:0},e=!1;this.$thumbOuter.addClass("lg-grab"),this.core.outer.find(".lg-thumb").first().on("mousedown.lg.thumb",i=>{this.thumbTotalWidth>this.thumbOuterWidth&&(i.preventDefault(),this.onThumbDragStart(i.pageX),t.cords.startX=i.pageX,t.startTime=new Date,this.thumbClickable=!1,e=!0,this.core.outer.get().scrollLeft+=1,this.core.outer.get().scrollLeft-=1,this.$thumbOuter.removeClass("lg-grab").addClass("lg-grabbing"))}),this.$LG(window).on(`mousemove.lg.thumb.global${this.core.lgId}`,i=>{this.core.lgOpened&&e&&(t.cords.endX=i.pageX,t=this.onThumbTouchMove(t))}),this.$LG(window).on(`mouseup.lg.thumb.global${this.core.lgId}`,()=>{this.core.lgOpened&&(t.isMoved?t=this.onThumbTouchEnd(t):(this.thumbClickable=!0,this.endScrub()),e&&(e=!1,this.$thumbOuter.removeClass("lg-grabbing").addClass("lg-grab")))})}enableThumbSwipe(){let t={cords:{startX:0,endX:0},isMoved:!1,newTranslateX:0,startTime:new Date,endTime:new Date,touchMoveTime:0};this.$lgThumb.on("touchstart.lg",e=>{this.thumbTotalWidth>this.thumbOuterWidth&&(e.preventDefault(),this.onThumbDragStart(e.targetTouches[0].pageX),t.cords.startX=e.targetTouches[0].pageX,this.thumbClickable=!1,t.startTime=new Date)}),this.$lgThumb.on("touchmove.lg",e=>{this.thumbTotalWidth>this.thumbOuterWidth&&(e.preventDefault(),t.cords.endX=e.targetTouches[0].pageX,t=this.onThumbTouchMove(t))}),this.$lgThumb.on("touchend.lg",()=>{t.isMoved?t=this.onThumbTouchEnd(t):(this.thumbClickable=!0,this.endScrub())})}rebuildThumbnails(){this.$thumbOuter.addClass("lg-rebuilding-thumbnails"),setTimeout(()=>{this.thumbTotalWidth=u(this.core.galleryItems.length,this.settings.thumbWidth,this.settings.thumbMargin),this.$lgThumb.css("width",this.thumbTotalWidth+"px"),this.$lgThumb.empty(),this.renderThumbItems(),this.animateThumb(this.core.index)},50),setTimeout(()=>{this.$thumbOuter.removeClass("lg-rebuilding-thumbnails")},200)}setTranslate(t){const e=this.isRtl()?t:-t;this.$lgThumb.css("transform","translate3d("+e+"px, 0px, 0px)")}isRtl(){return"rtl"===this.core.settings.direction}getPossibleTransformX(t){return m(t,this.thumbTotalWidth,this.thumbOuterWidth)}animateThumb(t){this.cancelThumbSpring&&(this.cancelThumbSpring(),this.cancelThumbSpring=void 0),this.$lgThumb.css("transition-duration",this.instantThumb?"0ms":this.core.settings.speed+"ms"),this.settings.animateThumb&&(this.translateX=function(t,e,i,s,h,n,r="ltr"){let a=0;switch("rtl"===r&&"middle"!==n?"left"===n?"right":"left":n){case"left":a=0;break;case"middle":a=s/2-e/2;break;case"right":a=s-e}return m((e+i)*t-1-a,h,s)}(t,this.settings.thumbWidth,this.settings.thumbMargin,this.thumbOuterWidth,this.thumbTotalWidth,this.settings.currentPagerPosition,this.isRtl()?"rtl":"ltr"),this.liveTranslateX=this.translateX,this.setTranslate(this.translateX),this.isThumbWindowed()&&this.renderThumbItems(t))}canScrub(){return this.settings.scrubThumbnails&&this.settings.animateThumb}beginScrub(){this.scrubActive||(this.scrubActive=!0,this.scrubIndex=this.core.index,this.scrubSavedSpeed=this.core.settings.speed,this.core.settings.speed=0,this.core.outer.addClass("lg-thumb-scrubbing"))}endScrub(){this.scrubActive&&(this.scrubActive=!1,this.scrubIndex=-1,void 0!==this.scrubSavedSpeed&&(this.core.settings.speed=this.scrubSavedSpeed,this.scrubSavedSpeed=void 0),this.core.outer.removeClass("lg-thumb-scrubbing"))}scrubTo(t){const e=function(t,e,i,s){const h=e-i;if(s<=1||h<=0)return 0;const n=m(t,e,i);return Math.round(n/h*(s-1))}(t,this.thumbTotalWidth,this.thumbOuterWidth,this.core.galleryItems.length);e!==this.scrubIndex&&(this.scrubIndex=e,this.core.lgBusy=!1,this.core.slide(e,!0,!0,!1))}onThumbDragStart(t){this.cancelThumbSpring&&(this.cancelThumbSpring(),this.cancelThumbSpring=void 0,this.translateX=this.liveTranslateX),this.liveTranslateX=this.translateX,this.dragSamples=c([],{x:t,y:0,t:Date.now()})}onThumbTouchMove(t){t.isMoved=!0,t.touchMoveTime=(new Date).valueOf(),this.dragSamples=c(this.dragSamples,{x:t.cords.endX,y:0,t:Date.now()});const e=t.cords.endX-t.cords.startX;if(t.newTranslateX=function(t,e,i,s=.35){const h=Math.max(0,e-i);return t<0?t*s:t>h?h+(t-h)*s:t}(this.translateX+(this.isRtl()?e:-e),this.thumbTotalWidth,this.thumbOuterWidth),this.liveTranslateX=t.newTranslateX,this.setTranslate(t.newTranslateX),this.$thumbOuter.addClass("lg-dragging"),this.canScrub()&&(this.beginScrub(),this.scrubTo(this.liveTranslateX)),this.isThumbWindowed()&&this.renderedThumbWindow){const t=this.renderedThumbWindow;(this.liveTranslateX<t.leadingPad||this.liveTranslateX+this.thumbOuterWidth>this.thumbTotalWidth-t.trailingPad)&&this.renderThumbItems(this.core.index,{from:this.liveTranslateX,to:this.liveTranslateX})}return t}onThumbTouchEnd(t){t.isMoved=!1,t.endTime=new Date,this.$thumbOuter.removeClass("lg-dragging");const e=function(t,e,i=100){const s=t.filter(t=>e-t.t<=i);if(s.length<2)return{x:0,y:0};const h=s[0],n=s[s.length-1],r=n.t-h.t;if(r<5)return{x:0,y:0};const a=n.x-h.x,o=n.y-h.y;return{x:Math.abs(a)>1?a/r:0,y:Math.abs(o)>1?o/r:0}}(this.dragSamples,Date.now()).x,i=this.isRtl()?e:-e,s=this.liveTranslateX,h=this.getPossibleTransformX(s+function(t,e=.995){return t*e/(1-e)}(i));return this.$lgThumb.css("transition-duration","0ms"),this.isThumbWindowed()&&this.renderThumbItems(this.core.index,{from:s,to:h}),this.cancelThumbSpring=g([{from:s,velocity:i,target:h}],([t])=>{this.liveTranslateX=t,this.setTranslate(t),this.scrubActive&&this.scrubTo(t)},()=>{this.cancelThumbSpring=void 0,this.translateX=h,this.endScrub(),this.$lgThumb.css("transition-duration",this.core.settings.speed+"ms"),this.isThumbWindowed()&&this.renderThumbItems()}),Math.abs(t.cords.endX-t.cords.startX)<this.settings.thumbnailSwipeThreshold&&(this.thumbClickable=!0),t}getThumbHtml(t,e,i){const s=this.core.galleryItems[e].__slideVideoInfo||{};let h;h=s.youtube&&this.settings.loadYouTubeThumbnail?"//img.youtube.com/vi/"+s.youtube[1]+"/"+this.settings.youTubeThumbSize+".jpg":t;const n=document.createElement("div");n.setAttribute("data-lg-item-id",e+""),n.className="lg-thumb-item "+(e===this.core.index?"active":"");const r=this.isRtl()?"margin-left":"margin-right";n.style.cssText=`width: ${this.settings.thumbWidth}px; height: ${this.settings.thumbHeight}; ${r}: ${this.settings.thumbMargin}px;`;const a=document.createElement("img");return a.alt=i||"",a.setAttribute("data-lg-item-id",e+""),a.src=h,n.appendChild(a),n}isThumbWindowed(){var t;return void 0!==(null==(t=this.core.settings.virtualization)?void 0:t.thumbs)}renderThumbItems(t=this.core.index,e){var i;const s=this.core.galleryItems;if(!this.isThumbWindowed())return void this.setThumbItemHtml(s);const h={stripWidth:this.thumbOuterWidth,thumbWidth:this.settings.thumbWidth,thumbMargin:this.settings.thumbMargin,count:s.length,overscan:null==(i=this.core.settings.virtualization)?void 0:i.thumbs},n=e?d(C(C({},h),e)):b((r=C({},h),a={translate:this.translateX},O(r,S(a))));var r,a;this.renderedThumbWindow=n,this.$lgThumb.empty(),n.leadingPad>0&&this.$lgThumb.append(`<div class="lg-thumb-spacer" aria-hidden="true" style="width: ${n.leadingPad}px;"></div>`);for(let o=n.start;o<=n.end;o++){const e=this.getThumbHtml(s[o].thumb,o,s[o].alt);o===t&&e.classList.add("active"),this.$lgThumb.append(e)}n.trailingPad>0&&this.$lgThumb.append(`<div class="lg-thumb-spacer" aria-hidden="true" style="width: ${n.trailingPad}px;"></div>`)}setThumbItemHtml(t){for(let e=0;e<t.length;e++){const i=this.getThumbHtml(t[e].thumb,e,t[e].alt);this.$lgThumb.append(i)}}setAnimateThumbStyles(){this.settings.animateThumb&&this.core.outer.addClass("lg-animate-thumb")}manageActiveClassOnSlideChange(){this.core.LGel.on(`${y}.thumb`,t=>{const{index:e}=t.detail;this.core.outer.find(".lg-thumb-item").removeClass("active"),this.core.outer.find(`.lg-thumb-item[data-lg-item-id="${e}"]`).addClass("active")})}toggleThumbBar(){var t,e;this.settings.toggleThumb&&(this.core.outer.addClass("lg-can-toggle"),this.core.$toolbar.append('<button type="button" aria-label="'+(null!=(e=null==(t=this.settings.thumbnailPluginStrings)?void 0:t.toggleThumbnails)?e:this.core.settings.strings.toggleThumbnails)+'" class="lg-toggle-thumb lg-icon"></button>'),this.core.outer.find(".lg-toggle-thumb").first().on("click.lg",()=>{this.core.outer.toggleClass("lg-components-open")}))}thumbKeyPress(){this.$LG(window).on(`keydown.lg.thumb.global${this.core.lgId}`,t=>{this.core.lgOpened&&this.settings.toggleThumb&&(38===t.keyCode?(t.preventDefault(),this.core.outer.addClass("lg-components-open")):40===t.keyCode&&(t.preventDefault(),this.core.outer.removeClass("lg-components-open")))})}destroy(){this.endScrub(),this.cancelThumbSpring&&(this.cancelThumbSpring(),this.cancelThumbSpring=void 0),this.settings.thumbnail&&(this.$LG(window).off(`.lg.thumb.global${this.core.lgId}`),this.core.LGel.off(".lg.thumb"),this.core.LGel.off(".thumb"),this.$thumbOuter.remove(),this.core.outer.removeClass("lg-has-thumb"))}}});