@mantine-bites/lightbox 1.0.0-beta.8 → 1.0.0

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 (278) hide show
  1. package/README.md +7 -8
  2. package/dist/cjs/Lightbox.cjs +41 -200
  3. package/dist/cjs/Lightbox.cjs.map +1 -1
  4. package/dist/cjs/Lightbox.context-value.cjs +47 -0
  5. package/dist/cjs/Lightbox.context-value.cjs.map +1 -0
  6. package/dist/cjs/Lightbox.context.cjs.map +1 -1
  7. package/dist/cjs/Lightbox.defaults.cjs +3 -8
  8. package/dist/cjs/Lightbox.defaults.cjs.map +1 -1
  9. package/dist/cjs/Lightbox.module.css.cjs +1 -1
  10. package/dist/cjs/LightboxSlide.cjs +72 -5
  11. package/dist/cjs/LightboxSlide.cjs.map +1 -1
  12. package/dist/cjs/LightboxSlide.context.cjs +12 -0
  13. package/dist/cjs/LightboxSlide.context.cjs.map +1 -0
  14. package/dist/cjs/components/LightboxAutoplayButton.cjs +43 -0
  15. package/dist/cjs/components/LightboxAutoplayButton.cjs.map +1 -0
  16. package/dist/cjs/components/LightboxCarousel.cjs +29 -0
  17. package/dist/cjs/components/LightboxCarousel.cjs.map +1 -0
  18. package/dist/cjs/components/LightboxCarouselSlide.context.cjs +12 -0
  19. package/dist/cjs/components/LightboxCarouselSlide.context.cjs.map +1 -0
  20. package/dist/cjs/components/LightboxCloseButton.cjs +33 -0
  21. package/dist/cjs/components/LightboxCloseButton.cjs.map +1 -0
  22. package/dist/cjs/components/LightboxContent.cjs +38 -0
  23. package/dist/cjs/components/LightboxContent.cjs.map +1 -0
  24. package/dist/cjs/components/LightboxControls.cjs +68 -0
  25. package/dist/cjs/components/LightboxControls.cjs.map +1 -0
  26. package/dist/cjs/components/LightboxCounter.cjs +34 -0
  27. package/dist/cjs/components/LightboxCounter.cjs.map +1 -0
  28. package/dist/cjs/components/LightboxFullscreenButton.cjs +41 -0
  29. package/dist/cjs/components/LightboxFullscreenButton.cjs.map +1 -0
  30. package/dist/cjs/components/LightboxOverlay.cjs +40 -0
  31. package/dist/cjs/components/LightboxOverlay.cjs.map +1 -0
  32. package/dist/cjs/components/LightboxPreset.cjs +32 -0
  33. package/dist/cjs/components/LightboxPreset.cjs.map +1 -0
  34. package/dist/cjs/components/LightboxRoot.cjs +260 -0
  35. package/dist/cjs/components/LightboxRoot.cjs.map +1 -0
  36. package/dist/cjs/components/LightboxSlide.cjs +154 -0
  37. package/dist/cjs/components/LightboxSlide.cjs.map +1 -0
  38. package/dist/cjs/components/LightboxSlide.context.cjs +12 -0
  39. package/dist/cjs/components/LightboxSlide.context.cjs.map +1 -0
  40. package/dist/cjs/components/LightboxSlides.cjs +97 -77
  41. package/dist/cjs/components/LightboxSlides.cjs.map +1 -1
  42. package/dist/cjs/components/LightboxThumbnail.cjs +40 -0
  43. package/dist/cjs/components/LightboxThumbnail.cjs.map +1 -0
  44. package/dist/cjs/components/LightboxThumbnail.context.cjs +12 -0
  45. package/dist/cjs/components/LightboxThumbnail.context.cjs.map +1 -0
  46. package/dist/cjs/components/LightboxThumbnails.cjs +110 -32
  47. package/dist/cjs/components/LightboxThumbnails.cjs.map +1 -1
  48. package/dist/cjs/components/LightboxToolbar.cjs +83 -70
  49. package/dist/cjs/components/LightboxToolbar.cjs.map +1 -1
  50. package/dist/cjs/components/LightboxZoomButton.cjs +39 -0
  51. package/dist/cjs/components/LightboxZoomButton.cjs.map +1 -0
  52. package/dist/cjs/components/icons/EnterFullscreen.cjs +30 -0
  53. package/dist/cjs/components/icons/EnterFullscreen.cjs.map +1 -0
  54. package/dist/cjs/components/icons/ExitFullscreen.cjs +30 -0
  55. package/dist/cjs/components/icons/ExitFullscreen.cjs.map +1 -0
  56. package/dist/cjs/components/icons/Pause.cjs +28 -0
  57. package/dist/cjs/components/icons/Pause.cjs.map +1 -0
  58. package/dist/cjs/components/icons/Play.cjs +22 -0
  59. package/dist/cjs/components/icons/Play.cjs.map +1 -0
  60. package/dist/cjs/components/icons/ZoomIn.cjs +30 -0
  61. package/dist/cjs/components/icons/ZoomIn.cjs.map +1 -0
  62. package/dist/cjs/components/icons/ZoomOut.cjs +29 -0
  63. package/dist/cjs/components/icons/ZoomOut.cjs.map +1 -0
  64. package/dist/cjs/context/LightboxContext.cjs +12 -0
  65. package/dist/cjs/context/LightboxContext.cjs.map +1 -0
  66. package/dist/cjs/context/LightboxSlideContext.cjs +12 -0
  67. package/dist/cjs/context/LightboxSlideContext.cjs.map +1 -0
  68. package/dist/cjs/context/LightboxThumbnailContext.cjs +12 -0
  69. package/dist/cjs/context/LightboxThumbnailContext.cjs.map +1 -0
  70. package/dist/cjs/hooks/useAutoPlay.cjs +37 -13
  71. package/dist/cjs/hooks/useAutoPlay.cjs.map +1 -1
  72. package/dist/cjs/hooks/useLightbox.cjs +62 -108
  73. package/dist/cjs/hooks/useLightbox.cjs.map +1 -1
  74. package/dist/cjs/hooks/useLightboxRootOptions.cjs +20 -0
  75. package/dist/cjs/hooks/useLightboxRootOptions.cjs.map +1 -0
  76. package/dist/cjs/hooks/useSlideInteractions.cjs +13 -13
  77. package/dist/cjs/hooks/useSlideInteractions.cjs.map +1 -1
  78. package/dist/cjs/hooks/useThumbnails.cjs +14 -11
  79. package/dist/cjs/hooks/useThumbnails.cjs.map +1 -1
  80. package/dist/cjs/hooks/useZoom.cjs +110 -72
  81. package/dist/cjs/hooks/useZoom.cjs.map +1 -1
  82. package/dist/cjs/index.cjs +26 -2
  83. package/dist/cjs/index.cjs.map +1 -1
  84. package/dist/cjs/styles/Lightbox.module.css.cjs +7 -0
  85. package/dist/cjs/styles/Lightbox.module.css.cjs.map +1 -0
  86. package/dist/cjs/utils/pointer.cjs +50 -0
  87. package/dist/cjs/utils/pointer.cjs.map +1 -0
  88. package/dist/cjs/utils/zoom.cjs +24 -51
  89. package/dist/cjs/utils/zoom.cjs.map +1 -1
  90. package/dist/esm/Lightbox.context-value.mjs +45 -0
  91. package/dist/esm/Lightbox.context-value.mjs.map +1 -0
  92. package/dist/esm/Lightbox.context.mjs.map +1 -1
  93. package/dist/esm/Lightbox.defaults.mjs +3 -8
  94. package/dist/esm/Lightbox.defaults.mjs.map +1 -1
  95. package/dist/esm/Lightbox.mjs +43 -202
  96. package/dist/esm/Lightbox.mjs.map +1 -1
  97. package/dist/esm/Lightbox.module.css.mjs +1 -1
  98. package/dist/esm/LightboxSlide.context.mjs +9 -0
  99. package/dist/esm/LightboxSlide.context.mjs.map +1 -0
  100. package/dist/esm/LightboxSlide.mjs +73 -6
  101. package/dist/esm/LightboxSlide.mjs.map +1 -1
  102. package/dist/esm/components/LightboxAutoplayButton.mjs +41 -0
  103. package/dist/esm/components/LightboxAutoplayButton.mjs.map +1 -0
  104. package/dist/esm/components/LightboxCarousel.mjs +27 -0
  105. package/dist/esm/components/LightboxCarousel.mjs.map +1 -0
  106. package/dist/esm/components/LightboxCarouselSlide.context.mjs +9 -0
  107. package/dist/esm/components/LightboxCarouselSlide.context.mjs.map +1 -0
  108. package/dist/esm/components/LightboxCloseButton.mjs +31 -0
  109. package/dist/esm/components/LightboxCloseButton.mjs.map +1 -0
  110. package/dist/esm/components/LightboxContent.mjs +36 -0
  111. package/dist/esm/components/LightboxContent.mjs.map +1 -0
  112. package/dist/esm/components/LightboxControls.mjs +66 -0
  113. package/dist/esm/components/LightboxControls.mjs.map +1 -0
  114. package/dist/esm/components/LightboxCounter.mjs +32 -0
  115. package/dist/esm/components/LightboxCounter.mjs.map +1 -0
  116. package/dist/esm/components/LightboxFullscreenButton.mjs +39 -0
  117. package/dist/esm/components/LightboxFullscreenButton.mjs.map +1 -0
  118. package/dist/esm/components/LightboxOverlay.mjs +38 -0
  119. package/dist/esm/components/LightboxOverlay.mjs.map +1 -0
  120. package/dist/esm/components/LightboxPreset.mjs +30 -0
  121. package/dist/esm/components/LightboxPreset.mjs.map +1 -0
  122. package/dist/esm/components/LightboxRoot.mjs +258 -0
  123. package/dist/esm/components/LightboxRoot.mjs.map +1 -0
  124. package/dist/esm/components/LightboxSlide.context.mjs +9 -0
  125. package/dist/esm/components/LightboxSlide.context.mjs.map +1 -0
  126. package/dist/esm/components/LightboxSlide.mjs +152 -0
  127. package/dist/esm/components/LightboxSlide.mjs.map +1 -0
  128. package/dist/esm/components/LightboxSlides.mjs +98 -78
  129. package/dist/esm/components/LightboxSlides.mjs.map +1 -1
  130. package/dist/esm/components/LightboxThumbnail.context.mjs +9 -0
  131. package/dist/esm/components/LightboxThumbnail.context.mjs.map +1 -0
  132. package/dist/esm/components/LightboxThumbnail.mjs +38 -0
  133. package/dist/esm/components/LightboxThumbnail.mjs.map +1 -0
  134. package/dist/esm/components/LightboxThumbnails.mjs +111 -33
  135. package/dist/esm/components/LightboxThumbnails.mjs.map +1 -1
  136. package/dist/esm/components/LightboxToolbar.mjs +85 -72
  137. package/dist/esm/components/LightboxToolbar.mjs.map +1 -1
  138. package/dist/esm/components/LightboxZoomButton.mjs +37 -0
  139. package/dist/esm/components/LightboxZoomButton.mjs.map +1 -0
  140. package/dist/esm/components/icons/EnterFullscreen.mjs +28 -0
  141. package/dist/esm/components/icons/EnterFullscreen.mjs.map +1 -0
  142. package/dist/esm/components/icons/ExitFullscreen.mjs +28 -0
  143. package/dist/esm/components/icons/ExitFullscreen.mjs.map +1 -0
  144. package/dist/esm/components/icons/Pause.mjs +26 -0
  145. package/dist/esm/components/icons/Pause.mjs.map +1 -0
  146. package/dist/esm/components/icons/Play.mjs +20 -0
  147. package/dist/esm/components/icons/Play.mjs.map +1 -0
  148. package/dist/esm/components/icons/ZoomIn.mjs +28 -0
  149. package/dist/esm/components/icons/ZoomIn.mjs.map +1 -0
  150. package/dist/esm/components/icons/ZoomOut.mjs +27 -0
  151. package/dist/esm/components/icons/ZoomOut.mjs.map +1 -0
  152. package/dist/esm/context/LightboxContext.mjs +9 -0
  153. package/dist/esm/context/LightboxContext.mjs.map +1 -0
  154. package/dist/esm/context/LightboxSlideContext.mjs +9 -0
  155. package/dist/esm/context/LightboxSlideContext.mjs.map +1 -0
  156. package/dist/esm/context/LightboxThumbnailContext.mjs +9 -0
  157. package/dist/esm/context/LightboxThumbnailContext.mjs.map +1 -0
  158. package/dist/esm/hooks/useAutoPlay.mjs +30 -6
  159. package/dist/esm/hooks/useAutoPlay.mjs.map +1 -1
  160. package/dist/esm/hooks/useLightbox.mjs +58 -104
  161. package/dist/esm/hooks/useLightbox.mjs.map +1 -1
  162. package/dist/esm/hooks/useLightboxRootOptions.mjs +18 -0
  163. package/dist/esm/hooks/useLightboxRootOptions.mjs.map +1 -0
  164. package/dist/esm/hooks/useSlideInteractions.mjs +1 -1
  165. package/dist/esm/hooks/useSlideInteractions.mjs.map +1 -1
  166. package/dist/esm/hooks/useThumbnails.mjs +7 -4
  167. package/dist/esm/hooks/useThumbnails.mjs.map +1 -1
  168. package/dist/esm/hooks/useZoom.mjs +83 -45
  169. package/dist/esm/hooks/useZoom.mjs.map +1 -1
  170. package/dist/esm/index.mjs +13 -1
  171. package/dist/esm/index.mjs.map +1 -1
  172. package/dist/esm/styles/Lightbox.module.css.mjs +5 -0
  173. package/dist/esm/styles/Lightbox.module.css.mjs.map +1 -0
  174. package/dist/esm/utils/pointer.mjs +41 -0
  175. package/dist/esm/utils/pointer.mjs.map +1 -0
  176. package/dist/esm/utils/zoom.mjs +24 -44
  177. package/dist/esm/utils/zoom.mjs.map +1 -1
  178. package/dist/styles.css +1 -1
  179. package/dist/styles.layer.css +1 -1
  180. package/dist/types/Lightbox.context-value.d.ts +16 -0
  181. package/dist/types/Lightbox.context-value.d.ts.map +1 -0
  182. package/dist/types/Lightbox.context.d.ts +17 -15
  183. package/dist/types/Lightbox.context.d.ts.map +1 -1
  184. package/dist/types/Lightbox.d.ts +56 -97
  185. package/dist/types/Lightbox.d.ts.map +1 -1
  186. package/dist/types/Lightbox.defaults.d.ts +3 -8
  187. package/dist/types/Lightbox.defaults.d.ts.map +1 -1
  188. package/dist/types/Lightbox.story.d.ts +2 -2
  189. package/dist/types/Lightbox.story.d.ts.map +1 -1
  190. package/dist/types/LightboxSlide.context.d.ts +8 -0
  191. package/dist/types/LightboxSlide.context.d.ts.map +1 -0
  192. package/dist/types/LightboxSlide.d.ts +0 -3
  193. package/dist/types/LightboxSlide.d.ts.map +1 -1
  194. package/dist/types/__tests__/Lightbox.test.d.ts +2 -0
  195. package/dist/types/__tests__/Lightbox.test.d.ts.map +1 -0
  196. package/dist/types/__tests__/LightboxSimple.test.d.ts +2 -0
  197. package/dist/types/__tests__/LightboxSimple.test.d.ts.map +1 -0
  198. package/dist/types/__tests__/pointer.test.d.ts +2 -0
  199. package/dist/types/__tests__/pointer.test.d.ts.map +1 -0
  200. package/dist/types/__tests__/zoom.test.d.ts +2 -0
  201. package/dist/types/__tests__/zoom.test.d.ts.map +1 -0
  202. package/dist/types/components/LightboxAutoplayButton.d.ts +17 -0
  203. package/dist/types/components/LightboxAutoplayButton.d.ts.map +1 -0
  204. package/dist/types/components/LightboxCarousel.d.ts +6 -0
  205. package/dist/types/components/LightboxCarousel.d.ts.map +1 -0
  206. package/dist/types/components/LightboxCarouselSlide.context.d.ts +10 -0
  207. package/dist/types/components/LightboxCarouselSlide.context.d.ts.map +1 -0
  208. package/dist/types/components/LightboxCloseButton.d.ts +17 -0
  209. package/dist/types/components/LightboxCloseButton.d.ts.map +1 -0
  210. package/dist/types/components/LightboxContent.d.ts +14 -0
  211. package/dist/types/components/LightboxContent.d.ts.map +1 -0
  212. package/dist/types/components/LightboxControls.d.ts +19 -0
  213. package/dist/types/components/LightboxControls.d.ts.map +1 -0
  214. package/dist/types/components/LightboxCounter.d.ts +19 -0
  215. package/dist/types/components/LightboxCounter.d.ts.map +1 -0
  216. package/dist/types/components/LightboxFullscreenButton.d.ts +17 -0
  217. package/dist/types/components/LightboxFullscreenButton.d.ts.map +1 -0
  218. package/dist/types/components/LightboxOverlay.d.ts +4 -0
  219. package/dist/types/components/LightboxOverlay.d.ts.map +1 -0
  220. package/dist/types/components/LightboxPreset.d.ts +10 -0
  221. package/dist/types/components/LightboxPreset.d.ts.map +1 -0
  222. package/dist/types/components/LightboxRoot.d.ts +80 -0
  223. package/dist/types/components/LightboxRoot.d.ts.map +1 -0
  224. package/dist/types/components/LightboxSlide.context.d.ts +8 -0
  225. package/dist/types/components/LightboxSlide.context.d.ts.map +1 -0
  226. package/dist/types/components/LightboxSlide.d.ts +17 -0
  227. package/dist/types/components/LightboxSlide.d.ts.map +1 -0
  228. package/dist/types/components/LightboxSlides.d.ts +23 -1
  229. package/dist/types/components/LightboxSlides.d.ts.map +1 -1
  230. package/dist/types/components/LightboxThumbnail.context.d.ts +8 -0
  231. package/dist/types/components/LightboxThumbnail.context.d.ts.map +1 -0
  232. package/dist/types/components/LightboxThumbnail.d.ts +17 -0
  233. package/dist/types/components/LightboxThumbnail.d.ts.map +1 -0
  234. package/dist/types/components/LightboxThumbnails.d.ts +18 -6
  235. package/dist/types/components/LightboxThumbnails.d.ts.map +1 -1
  236. package/dist/types/components/LightboxToolbar.d.ts +16 -1
  237. package/dist/types/components/LightboxToolbar.d.ts.map +1 -1
  238. package/dist/types/components/LightboxZoomButton.d.ts +17 -0
  239. package/dist/types/components/LightboxZoomButton.d.ts.map +1 -0
  240. package/dist/types/components/icons/EnterFullscreen.d.ts +3 -0
  241. package/dist/types/components/icons/EnterFullscreen.d.ts.map +1 -0
  242. package/dist/types/components/icons/ExitFullscreen.d.ts +3 -0
  243. package/dist/types/components/icons/ExitFullscreen.d.ts.map +1 -0
  244. package/dist/types/components/icons/Pause.d.ts +3 -0
  245. package/dist/types/components/icons/Pause.d.ts.map +1 -0
  246. package/dist/types/components/icons/Play.d.ts +3 -0
  247. package/dist/types/components/icons/Play.d.ts.map +1 -0
  248. package/dist/types/components/icons/ZoomIn.d.ts +3 -0
  249. package/dist/types/components/icons/ZoomIn.d.ts.map +1 -0
  250. package/dist/types/components/icons/ZoomOut.d.ts +3 -0
  251. package/dist/types/components/icons/ZoomOut.d.ts.map +1 -0
  252. package/dist/types/context/LightboxContext.d.ts +46 -0
  253. package/dist/types/context/LightboxContext.d.ts.map +1 -0
  254. package/dist/types/context/LightboxSlideContext.d.ts +8 -0
  255. package/dist/types/context/LightboxSlideContext.d.ts.map +1 -0
  256. package/dist/types/context/LightboxThumbnailContext.d.ts +8 -0
  257. package/dist/types/context/LightboxThumbnailContext.d.ts.map +1 -0
  258. package/dist/types/hooks/useAutoPlay.d.ts +2 -1
  259. package/dist/types/hooks/useAutoPlay.d.ts.map +1 -1
  260. package/dist/types/hooks/useLightbox.d.ts +5 -27
  261. package/dist/types/hooks/useLightbox.d.ts.map +1 -1
  262. package/dist/types/hooks/useLightboxRootOptions.d.ts +12 -0
  263. package/dist/types/hooks/useLightboxRootOptions.d.ts.map +1 -0
  264. package/dist/types/hooks/useSlideInteractions.d.ts +3 -3
  265. package/dist/types/hooks/useThumbnails.d.ts +5 -4
  266. package/dist/types/hooks/useThumbnails.d.ts.map +1 -1
  267. package/dist/types/hooks/useZoom.d.ts +3 -9
  268. package/dist/types/hooks/useZoom.d.ts.map +1 -1
  269. package/dist/types/index.d.mts +27 -3
  270. package/dist/types/index.d.ts +27 -3
  271. package/dist/types/index.d.ts.map +1 -1
  272. package/dist/types/stories/Lightbox.story.d.ts +11 -0
  273. package/dist/types/stories/Lightbox.story.d.ts.map +1 -0
  274. package/dist/types/utils/pointer.d.ts +63 -0
  275. package/dist/types/utils/pointer.d.ts.map +1 -0
  276. package/dist/types/utils/zoom.d.ts +12 -62
  277. package/dist/types/utils/zoom.d.ts.map +1 -1
  278. package/package.json +2 -4
@@ -1 +1 @@
1
- {"version":3,"file":"zoom.mjs","sources":["../../../src/utils/zoom.ts"],"sourcesContent":["/** Pixel offset representing a translation applied to a zoomed image. */\nexport interface ZoomOffset {\n\t/** Horizontal translation in pixels. */\n\tx: number;\n\t/** Vertical translation in pixels. */\n\ty: number;\n}\n\n/** Default zoom scale applied when zooming in on an image. */\nexport const DEFAULT_ZOOM_SCALE = 2;\n\n/** Minimum pointer movement in pixels before a gesture is considered a drag. */\nexport const POINTER_MOVE_THRESHOLD = 2;\n\n/** Zero-offset value representing no translation on a zoomed image. */\nexport const ZERO_ZOOM_OFFSET: ZoomOffset = { x: 0, y: 0 };\n\n/** Tracks the state of a pointer used to detect outside-content close gestures. */\nexport interface OutsideClosePointerState {\n\t/** Identifier of the tracked pointer. */\n\tpointerId: number;\n\t/** Horizontal position where the pointer was initially pressed. */\n\tstartX: number;\n\t/** Vertical position where the pointer was initially pressed. */\n\tstartY: number;\n\t/** Whether the pointer press originated outside the slide content area. */\n\tstartedOutsideContent: boolean;\n\t/** Whether the pointer has moved beyond the drag threshold since pressing. */\n\tmoved: boolean;\n}\n\ninterface CreateOutsideClosePointerStateInput {\n\tpointerId: number;\n\tclientX: number;\n\tclientY: number;\n\tstartedOutsideContent: boolean;\n}\n\ninterface PointerMoveInput {\n\tstartX: number;\n\tstartY: number;\n\tendX: number;\n\tendY: number;\n\tthreshold?: number;\n}\n\ninterface ClampZoomOffsetInput {\n\tcontainerWidth: number;\n\tcontainerHeight: number;\n\timageWidth: number;\n\timageHeight: number;\n\tzoomScale: number;\n\tnextX: number;\n\tnextY: number;\n}\n\n/**\n * Clamps a proposed zoom pan offset so the image cannot be panned beyond its\n * edges relative to the container at the given zoom scale.\n */\nexport const clampZoomOffset = ({\n\tcontainerWidth,\n\tcontainerHeight,\n\timageWidth,\n\timageHeight,\n\tzoomScale,\n\tnextX,\n\tnextY,\n}: ClampZoomOffsetInput): ZoomOffset => {\n\tconst scaledWidth = imageWidth * zoomScale;\n\tconst scaledHeight = imageHeight * zoomScale;\n\tconst maxX = Math.max(0, (scaledWidth - containerWidth) / 2);\n\tconst maxY = Math.max(0, (scaledHeight - containerHeight) / 2);\n\n\treturn {\n\t\tx: Math.min(Math.max(nextX, -maxX), maxX),\n\t\ty: Math.min(Math.max(nextY, -maxY), maxY),\n\t};\n};\n\n/**\n * Returns a CSS `transform` string that applies the zoom pan offset and scale.\n * When not zoomed, returns identity values regardless of the stored offset.\n */\nexport const getZoomTransform = ({\n\tisZoomed,\n\toffset,\n\tscale,\n}: {\n\tisZoomed: boolean;\n\toffset: ZoomOffset;\n\tscale: number;\n}) =>\n\t`translate(${isZoomed ? offset.x : 0}px, ${isZoomed ? offset.y : 0}px) scale(${\n\t\tisZoomed ? scale : 1\n\t})`;\n\n/**\n * Returns `true` if the event target is an element (or descendant) matching\n * the given CSS selector.\n */\nexport const isEventTargetWithinSelector = (\n\ttarget: EventTarget | null,\n\tselector: string,\n) => target instanceof HTMLElement && Boolean(target.closest(selector));\n\n/** Returns `true` if the event target is or is inside an `<img>` element. */\nexport const isImageTarget = (target: EventTarget | null) =>\n\tisEventTargetWithinSelector(target, \"img\");\n\n/**\n * Returns `value` if it is a finite number, otherwise returns `fallback`.\n * Useful for sanitising pointer coordinates that may be `NaN` or `Infinity`.\n */\nexport const getPointerCoordinate = (value: number, fallback: number) =>\n\tNumber.isFinite(value) ? value : fallback;\n\n/**\n * Returns `true` if the pointer has moved more than `threshold` pixels in\n * either axis between the start and end positions.\n */\nexport const hasPointerMoved = ({\n\tstartX,\n\tstartY,\n\tendX,\n\tendY,\n\tthreshold = POINTER_MOVE_THRESHOLD,\n}: PointerMoveInput) =>\n\tMath.abs(endX - startX) > threshold || Math.abs(endY - startY) > threshold;\n\n/** Creates the initial tracking state for an outside-close pointer gesture. */\nexport const createOutsideClosePointerState = ({\n\tpointerId,\n\tclientX,\n\tclientY,\n\tstartedOutsideContent,\n}: CreateOutsideClosePointerStateInput): OutsideClosePointerState => ({\n\tpointerId,\n\tstartX: getPointerCoordinate(clientX, 0),\n\tstartY: getPointerCoordinate(clientY, 0),\n\tstartedOutsideContent,\n\tmoved: false,\n});\n\n/**\n * Returns an updated copy of the pointer state after a pointer move event.\n * Sets `moved` to `true` once the pointer has exceeded the drag threshold.\n */\nexport const updateOutsideClosePointerState = (\n\tstate: OutsideClosePointerState,\n\t{ clientX, clientY }: { clientX: number; clientY: number },\n): OutsideClosePointerState => {\n\tconst endX = getPointerCoordinate(clientX, state.startX);\n\tconst endY = getPointerCoordinate(clientY, state.startY);\n\n\tif (\n\t\t!state.moved &&\n\t\thasPointerMoved({\n\t\t\tstartX: state.startX,\n\t\t\tstartY: state.startY,\n\t\t\tendX,\n\t\t\tendY,\n\t\t})\n\t) {\n\t\treturn { ...state, moved: true };\n\t}\n\n\treturn state;\n};\n\n/**\n * Returns `true` if the pointer gesture should trigger the lightbox to close.\n * The lightbox closes when the press started outside the content and the\n * pointer did not drag.\n */\nexport const shouldCloseFromOutsidePointerState = (\n\tstate: OutsideClosePointerState,\n) => state.startedOutsideContent && !state.moved;\n\nconst RESOLUTION_EPSILON = 1.01;\n\nconst getImageMeasurements = (image: HTMLImageElement) => {\n\tconst rect = image.getBoundingClientRect();\n\treturn {\n\t\tnaturalWidth: image.naturalWidth,\n\t\tnaturalHeight: image.naturalHeight,\n\t\trenderedWidth: rect.width,\n\t\trenderedHeight: rect.height,\n\t};\n};\n\n/**\n * Returns the maximum zoom scale at which the image would still be rendered at\n * its native resolution (1:1 pixel ratio). Falls back to `DEFAULT_ZOOM_SCALE`\n * when image dimensions are unavailable.\n */\nexport const getImageMaxZoomScale = (image: HTMLImageElement) => {\n\tconst { naturalWidth, naturalHeight, renderedWidth, renderedHeight } =\n\t\tgetImageMeasurements(image);\n\n\tif (!naturalWidth || !naturalHeight || !renderedWidth || !renderedHeight) {\n\t\treturn DEFAULT_ZOOM_SCALE;\n\t}\n\n\tconst widthRatio = naturalWidth / renderedWidth;\n\tconst heightRatio = naturalHeight / renderedHeight;\n\n\treturn Math.min(widthRatio, heightRatio);\n};\n\n/**\n * Calculates the zoom scale that should be applied when the user triggers a\n * zoom action. Prefers a scale that fills the container viewport; falls back to\n * the native-resolution scale or `DEFAULT_ZOOM_SCALE` when the image is small.\n * The returned value is always at least `1` and at most the max zoom scale.\n */\nexport const getTargetZoomScale = ({\n\timage,\n\tcontainerWidth,\n\tcontainerHeight,\n}: {\n\timage: HTMLImageElement;\n\tcontainerWidth: number;\n\tcontainerHeight: number;\n}) => {\n\tconst { renderedWidth, renderedHeight } = getImageMeasurements(image);\n\tconst fillWidthScale =\n\t\trenderedWidth > 0 ? containerWidth / renderedWidth : DEFAULT_ZOOM_SCALE;\n\tconst fillHeightScale =\n\t\trenderedHeight > 0 ? containerHeight / renderedHeight : DEFAULT_ZOOM_SCALE;\n\tconst fillViewportScale = Math.max(fillWidthScale, fillHeightScale);\n\tconst maxZoomScale = getImageMaxZoomScale(image);\n\tconst fallbackStepScale = Math.min(maxZoomScale, DEFAULT_ZOOM_SCALE);\n\tconst targetScale =\n\t\tfillViewportScale > 1 ? fillViewportScale : fallbackStepScale;\n\n\treturn Math.max(1, Math.min(maxZoomScale, targetScale));\n};\n\n/**\n * Returns `true` if the image has sufficient resolution to be meaningfully\n * zoomed (i.e. its max zoom scale exceeds the resolution epsilon threshold).\n */\nexport const canZoomImageElement = (image: HTMLImageElement) => {\n\treturn getImageMaxZoomScale(image) > RESOLUTION_EPSILON;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zoom.mjs","sources":["../../../src/utils/zoom.ts"],"sourcesContent":["/** Pixel offset representing a translation applied to a zoomed image. */\nexport interface ZoomOffset {\n\t/** Horizontal translation in pixels. */\n\tx: number;\n\t/** Vertical translation in pixels. */\n\ty: number;\n}\n\n/** Default zoom scale applied when zooming in on an image. */\nexport const DEFAULT_ZOOM_SCALE = 2;\n\n/** Zero-offset value representing no translation on a zoomed image. */\nexport const ZERO_ZOOM_OFFSET: ZoomOffset = { x: 0, y: 0 };\n\ninterface ClampZoomOffsetInput {\n\tcontainerWidth: number;\n\tcontainerHeight: number;\n\timageWidth: number;\n\timageHeight: number;\n\tzoomScale: number;\n\tnextX: number;\n\tnextY: number;\n}\n\ninterface InitialZoomOffsetInput {\n\tcontainerRect: DOMRect;\n\timageRect: DOMRect;\n\tzoomScale: number;\n\tpointerClientX: number;\n\tpointerClientY: number;\n}\n\n/**\n * Clamps a proposed zoom pan offset so the image cannot be panned beyond its\n * edges relative to the container at the given zoom scale.\n */\nexport const clampZoomOffset = ({\n\tcontainerWidth,\n\tcontainerHeight,\n\timageWidth,\n\timageHeight,\n\tzoomScale,\n\tnextX,\n\tnextY,\n}: ClampZoomOffsetInput): ZoomOffset => {\n\tconst scaledWidth = imageWidth * zoomScale;\n\tconst scaledHeight = imageHeight * zoomScale;\n\tconst maxX = Math.max(0, (scaledWidth - containerWidth) / 2);\n\tconst maxY = Math.max(0, (scaledHeight - containerHeight) / 2);\n\n\treturn {\n\t\tx: Math.min(Math.max(nextX, -maxX), maxX),\n\t\ty: Math.min(Math.max(nextY, -maxY), maxY),\n\t};\n};\n\n/**\n * Calculates the initial pan offset when zooming so the clicked/tapped point\n * moves toward the viewport center, then clamps it to valid pan bounds.\n */\nexport const getInitialZoomOffset = ({\n\tcontainerRect,\n\timageRect,\n\tzoomScale,\n\tpointerClientX,\n\tpointerClientY,\n}: InitialZoomOffsetInput): ZoomOffset => {\n\tconst centerX = containerRect.left + containerRect.width / 2;\n\tconst centerY = containerRect.top + containerRect.height / 2;\n\tconst rawOffsetX = -(pointerClientX - centerX) * zoomScale;\n\tconst rawOffsetY = -(pointerClientY - centerY) * zoomScale;\n\n\treturn clampZoomOffset({\n\t\tcontainerWidth: containerRect.width,\n\t\tcontainerHeight: containerRect.height,\n\t\timageWidth: imageRect.width,\n\t\timageHeight: imageRect.height,\n\t\tzoomScale,\n\t\tnextX: rawOffsetX,\n\t\tnextY: rawOffsetY,\n\t});\n};\n\n/**\n * Returns a CSS `transform` string that applies the zoom pan offset and scale.\n * When not zoomed, returns identity values regardless of the stored offset.\n */\nexport const getZoomTransform = ({\n\tisZoomed,\n\toffset,\n\tscale,\n}: {\n\tisZoomed: boolean;\n\toffset: ZoomOffset;\n\tscale: number;\n}) =>\n\t`translate(${isZoomed ? offset.x : 0}px, ${isZoomed ? offset.y : 0}px) scale(${\n\t\tisZoomed ? scale : 1\n\t})`;\n\nconst RESOLUTION_EPSILON = 1.01;\n\nconst getImageMeasurements = (image: HTMLImageElement) => {\n\tconst rect = image.getBoundingClientRect();\n\treturn {\n\t\tnaturalWidth: image.naturalWidth,\n\t\tnaturalHeight: image.naturalHeight,\n\t\trenderedWidth: rect.width,\n\t\trenderedHeight: rect.height,\n\t};\n};\n\n/**\n * Returns the maximum zoom scale at which the image would still be rendered at\n * its native resolution (1:1 pixel ratio). Falls back to `DEFAULT_ZOOM_SCALE`\n * when image dimensions are unavailable.\n */\nexport const getImageMaxZoomScale = (image: HTMLImageElement) => {\n\tconst { naturalWidth, naturalHeight, renderedWidth, renderedHeight } =\n\t\tgetImageMeasurements(image);\n\n\tif (!naturalWidth || !naturalHeight || !renderedWidth || !renderedHeight) {\n\t\treturn DEFAULT_ZOOM_SCALE;\n\t}\n\n\treturn Math.min(naturalWidth / renderedWidth, naturalHeight / renderedHeight);\n};\n\n/**\n * Calculates the zoom scale that should be applied when the user triggers a\n * zoom action. Prefers a scale that fills the container viewport; falls back to\n * the native-resolution scale or `DEFAULT_ZOOM_SCALE` when the image is small.\n */\nexport const getTargetZoomScale = ({\n\timage,\n\tcontainerWidth,\n\tcontainerHeight,\n}: {\n\timage: HTMLImageElement;\n\tcontainerWidth: number;\n\tcontainerHeight: number;\n}) => {\n\tconst { renderedWidth, renderedHeight } = getImageMeasurements(image);\n\tconst fillWidthScale =\n\t\trenderedWidth > 0 ? containerWidth / renderedWidth : DEFAULT_ZOOM_SCALE;\n\tconst fillHeightScale =\n\t\trenderedHeight > 0 ? containerHeight / renderedHeight : DEFAULT_ZOOM_SCALE;\n\tconst fillViewportScale = Math.max(fillWidthScale, fillHeightScale);\n\tconst maxZoomScale = getImageMaxZoomScale(image);\n\tconst fallbackStepScale = Math.min(maxZoomScale, DEFAULT_ZOOM_SCALE);\n\tconst targetScale =\n\t\tfillViewportScale > 1 ? fillViewportScale : fallbackStepScale;\n\n\treturn Math.max(1, Math.min(maxZoomScale, targetScale));\n};\n\n/**\n * Returns `true` if the image has sufficient resolution to be meaningfully\n * zoomed (i.e. its max zoom scale exceeds the resolution epsilon threshold).\n */\nexport const canZoomImageElement = (image: HTMLImageElement) =>\n\tgetImageMaxZoomScale(image) > RESOLUTION_EPSILON;\n"],"names":[],"mappings":"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"}
package/dist/styles.css CHANGED
@@ -1 +1 @@
1
- .me_4f1afa9a{color:var(--mantine-color-white);display:flex;flex-direction:column;height:100dvh;inset:0;position:fixed;width:100dvw}.me_143cf98,.me_4f1afa9a{z-index:var(--lightbox-z-index)}.me_f5ce649a{flex:1;min-height:0;overflow:hidden}.me_9450faf9{align-items:center;display:flex;height:100%;justify-content:center;line-height:1}.me_411d1cbf{max-width:100%;padding:var(--mantine-spacing-md)}.me_3a7e4a85{overflow:hidden;width:100%}.me_59a13682{align-items:stretch;display:flex;justify-content:center}.me_59a13682[data-overflow]{justify-content:flex-start}.me_fe2263dd{flex:0 0 auto;margin-right:var(--mantine-spacing-xs)}.me_fe2263dd:last-child{margin-right:0}.me_a9abc686{border:2px solid transparent;border-radius:var(--mantine-radius-sm);cursor:pointer;flex-shrink:0;font-size:0;height:76px;line-height:1;opacity:.5;overflow:hidden;position:relative;transition:opacity .15s ease,border-color .15s ease;width:94px}.me_a9abc686[data-active]{border-color:var(--mantine-primary-color-filled);opacity:1}.me_a9abc686 img{height:100%;max-height:100%;max-width:100%;object-fit:cover;width:100%}.me_ff615a9f{background-color:var(--mantine-color-dark-4);color:var(--mantine-color-dark-1);position:relative}.me_dfd5db36,.me_ff615a9f{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.me_dfd5db36{line-height:1;overflow:hidden}.me_dfd5db36 img{cursor:zoom-in;height:auto;max-height:100%;max-width:100%;object-fit:contain;width:auto}.me_dfd5db36[data-zoomed] img{cursor:zoom-out}.me_dfd5db36[data-can-zoom=false] img{cursor:default}.me_2ed9ec6e{align-items:center;display:flex;height:100%;justify-content:center;min-height:0;transform-origin:center;transition:transform .15s ease;width:100%;will-change:transform}.me_dfd5db36[data-dragging] .me_2ed9ec6e{transition:none}.me_fe5b16c3{right:var(--mantine-spacing-md)}.me_7b66e144,.me_fe5b16c3{position:absolute;top:var(--mantine-spacing-md);z-index:1}.me_7b66e144{color:var(--mantine-color-white);font-weight:500;left:var(--mantine-spacing-md);user-select:none}
1
+ .me_4f1afa9a{color:var(--mantine-color-white);display:flex;flex-direction:column;height:100dvh;inset:0;position:fixed;width:100dvw;z-index:200}.me_f5ce649a{flex:1;min-height:0;overflow:hidden;position:relative}.me_7f838760{height:100%;overflow:hidden}.me_b5439507{display:flex;height:100%}.me_4f1afa9a[data-orientation=vertical] .me_b5439507{flex-direction:column}.me_7b06f0a5{align-items:center;background-color:var(--mantine-color-white);border-radius:var(--lightbox-control-size);display:flex;justify-content:center;min-height:var(--lightbox-control-size);min-width:var(--lightbox-control-size);pointer-events:all;position:absolute;top:calc(50% - var(--lightbox-thumbnails-height, 0px)/2);transform:translateY(-50%);z-index:1}[data-mantine-color-scheme=dark] .me_7b06f0a5{background-color:var(--mantine-color-dark-5)}.me_7b06f0a5{color:var(--mantine-color-black)}[data-mantine-color-scheme=dark] .me_7b06f0a5{color:var(--mantine-color-white)}.me_7b06f0a5{border:1px solid var(--mantine-color-gray-3);box-shadow:var(--mantine-shadow-md)}[data-mantine-color-scheme=dark] .me_7b06f0a5{border:1px solid var(--mantine-color-dark-4)}.me_7b06f0a5{transition:background-color .1s ease,border-color .1s ease}@media (hover:hover){.me_7b06f0a5:hover{background-color:var(--mantine-color-gray-1)}[data-mantine-color-scheme=dark] .me_7b06f0a5:hover{background-color:var(--mantine-color-dark-4)}.me_7b06f0a5:hover{border-color:var(--mantine-color-gray-4)}[data-mantine-color-scheme=dark] .me_7b06f0a5:hover{border-color:var(--mantine-color-dark-3)}}@media (hover:none){.me_7b06f0a5:active{background-color:var(--mantine-color-gray-1)}[data-mantine-color-scheme=dark] .me_7b06f0a5:active{background-color:var(--mantine-color-dark-4)}.me_7b06f0a5:active{border-color:var(--mantine-color-gray-4)}[data-mantine-color-scheme=dark] .me_7b06f0a5:active{border-color:var(--mantine-color-dark-3)}}.me_7b06f0a5[data-direction=prev]{left:var(--mantine-spacing-md)}.me_7b06f0a5[data-direction=next]{right:var(--mantine-spacing-md)}.me_4f1afa9a[data-orientation=vertical] .me_7b06f0a5[data-direction=prev]{left:50%;right:auto;top:var(--mantine-spacing-md);transform:translateX(-50%)}.me_4f1afa9a[data-orientation=vertical] .me_7b06f0a5[data-direction=next]{inset:auto auto calc(var(--mantine-spacing-md) + var(--lightbox-thumbnails-height, 0px)) 50%;transform:translateX(-50%)}.me_9450faf9{flex:0 0 100%;height:100%;line-height:1}.me_411d1cbf{max-width:100%;padding:var(--mantine-spacing-md)}.me_3a7e4a85{overflow:hidden;width:100%}.me_59a13682{align-items:stretch;display:flex;justify-content:center}.me_59a13682[data-overflow]{justify-content:flex-start}.me_3be82a34{flex:0 0 auto;margin-right:var(--mantine-spacing-xs)}.me_3be82a34:last-child{margin-right:0}.me_a9abc686{border:2px solid transparent;border-radius:var(--mantine-radius-sm);cursor:pointer;flex-shrink:0;font-size:0;height:76px;line-height:1;opacity:.5;overflow:hidden;position:relative;transition:opacity .15s ease,border-color .15s ease;width:94px}.me_a9abc686 img{height:100%;max-height:100%;max-width:100%;object-fit:cover;width:100%}.me_a9abc686[aria-current]{border-color:var(--mantine-primary-color-filled);opacity:1}.me_dfd5db36{align-items:center;display:flex;height:100%;justify-content:center;line-height:1;overflow:hidden;width:100%}.me_dfd5db36 img{height:auto;max-height:100%;max-width:100%;object-fit:contain;width:auto}.me_dfd5db36[data-zoom-enabled] img{cursor:zoom-in}.me_dfd5db36[data-zoom-enabled][data-zoomed] img{cursor:zoom-out}.me_dfd5db36[data-zoom-enabled][data-can-zoom=false] img{cursor:default}.me_2ed9ec6e{align-items:center;display:flex;height:100%;justify-content:center;transform-origin:center;transition:transform .15s ease;width:100%;will-change:transform}.me_dfd5db36[data-dragging] .me_2ed9ec6e{transition:none}.me_fe5b16c3{right:var(--mantine-spacing-md)}.me_7b66e144,.me_fe5b16c3{position:absolute;top:var(--mantine-spacing-md);z-index:1}.me_7b66e144{color:var(--mantine-color-white);font-weight:500;left:var(--mantine-spacing-md);user-select:none}
@@ -1 +1 @@
1
- @layer mantine {.me_4f1afa9a{color:var(--mantine-color-white);display:flex;flex-direction:column;height:100dvh;inset:0;position:fixed;width:100dvw}.me_143cf98,.me_4f1afa9a{z-index:var(--lightbox-z-index)}.me_f5ce649a{flex:1;min-height:0;overflow:hidden}.me_9450faf9{align-items:center;display:flex;height:100%;justify-content:center;line-height:1}.me_411d1cbf{max-width:100%;padding:var(--mantine-spacing-md)}.me_3a7e4a85{overflow:hidden;width:100%}.me_59a13682{align-items:stretch;display:flex;justify-content:center}.me_59a13682[data-overflow]{justify-content:flex-start}.me_fe2263dd{flex:0 0 auto;margin-right:var(--mantine-spacing-xs)}.me_fe2263dd:last-child{margin-right:0}.me_a9abc686{border:2px solid transparent;border-radius:var(--mantine-radius-sm);cursor:pointer;flex-shrink:0;font-size:0;height:76px;line-height:1;opacity:.5;overflow:hidden;position:relative;transition:opacity .15s ease,border-color .15s ease;width:94px}.me_a9abc686[data-active]{border-color:var(--mantine-primary-color-filled);opacity:1}.me_a9abc686 img{height:100%;max-height:100%;max-width:100%;object-fit:cover;width:100%}.me_ff615a9f{background-color:var(--mantine-color-dark-4);color:var(--mantine-color-dark-1);position:relative}.me_dfd5db36,.me_ff615a9f{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.me_dfd5db36{line-height:1;overflow:hidden}.me_dfd5db36 img{cursor:zoom-in;height:auto;max-height:100%;max-width:100%;object-fit:contain;width:auto}.me_dfd5db36[data-zoomed] img{cursor:zoom-out}.me_dfd5db36[data-can-zoom=false] img{cursor:default}.me_2ed9ec6e{align-items:center;display:flex;height:100%;justify-content:center;min-height:0;transform-origin:center;transition:transform .15s ease;width:100%;will-change:transform}.me_dfd5db36[data-dragging] .me_2ed9ec6e{transition:none}.me_fe5b16c3{right:var(--mantine-spacing-md)}.me_7b66e144,.me_fe5b16c3{position:absolute;top:var(--mantine-spacing-md);z-index:1}.me_7b66e144{color:var(--mantine-color-white);font-weight:500;left:var(--mantine-spacing-md);user-select:none}}
1
+ @layer mantine {.me_4f1afa9a{color:var(--mantine-color-white);display:flex;flex-direction:column;height:100dvh;inset:0;position:fixed;width:100dvw;z-index:200}.me_f5ce649a{flex:1;min-height:0;overflow:hidden;position:relative}.me_7f838760{height:100%;overflow:hidden}.me_b5439507{display:flex;height:100%}.me_4f1afa9a[data-orientation=vertical] .me_b5439507{flex-direction:column}.me_7b06f0a5{align-items:center;background-color:var(--mantine-color-white);border-radius:var(--lightbox-control-size);display:flex;justify-content:center;min-height:var(--lightbox-control-size);min-width:var(--lightbox-control-size);pointer-events:all;position:absolute;top:calc(50% - var(--lightbox-thumbnails-height, 0px)/2);transform:translateY(-50%);z-index:1}[data-mantine-color-scheme=dark] .me_7b06f0a5{background-color:var(--mantine-color-dark-5)}.me_7b06f0a5{color:var(--mantine-color-black)}[data-mantine-color-scheme=dark] .me_7b06f0a5{color:var(--mantine-color-white)}.me_7b06f0a5{border:1px solid var(--mantine-color-gray-3);box-shadow:var(--mantine-shadow-md)}[data-mantine-color-scheme=dark] .me_7b06f0a5{border:1px solid var(--mantine-color-dark-4)}.me_7b06f0a5{transition:background-color .1s ease,border-color .1s ease}@media (hover:hover){.me_7b06f0a5:hover{background-color:var(--mantine-color-gray-1)}[data-mantine-color-scheme=dark] .me_7b06f0a5:hover{background-color:var(--mantine-color-dark-4)}.me_7b06f0a5:hover{border-color:var(--mantine-color-gray-4)}[data-mantine-color-scheme=dark] .me_7b06f0a5:hover{border-color:var(--mantine-color-dark-3)}}@media (hover:none){.me_7b06f0a5:active{background-color:var(--mantine-color-gray-1)}[data-mantine-color-scheme=dark] .me_7b06f0a5:active{background-color:var(--mantine-color-dark-4)}.me_7b06f0a5:active{border-color:var(--mantine-color-gray-4)}[data-mantine-color-scheme=dark] .me_7b06f0a5:active{border-color:var(--mantine-color-dark-3)}}.me_7b06f0a5[data-direction=prev]{left:var(--mantine-spacing-md)}.me_7b06f0a5[data-direction=next]{right:var(--mantine-spacing-md)}.me_4f1afa9a[data-orientation=vertical] .me_7b06f0a5[data-direction=prev]{left:50%;right:auto;top:var(--mantine-spacing-md);transform:translateX(-50%)}.me_4f1afa9a[data-orientation=vertical] .me_7b06f0a5[data-direction=next]{inset:auto auto calc(var(--mantine-spacing-md) + var(--lightbox-thumbnails-height, 0px)) 50%;transform:translateX(-50%)}.me_9450faf9{flex:0 0 100%;height:100%;line-height:1}.me_411d1cbf{max-width:100%;padding:var(--mantine-spacing-md)}.me_3a7e4a85{overflow:hidden;width:100%}.me_59a13682{align-items:stretch;display:flex;justify-content:center}.me_59a13682[data-overflow]{justify-content:flex-start}.me_3be82a34{flex:0 0 auto;margin-right:var(--mantine-spacing-xs)}.me_3be82a34:last-child{margin-right:0}.me_a9abc686{border:2px solid transparent;border-radius:var(--mantine-radius-sm);cursor:pointer;flex-shrink:0;font-size:0;height:76px;line-height:1;opacity:.5;overflow:hidden;position:relative;transition:opacity .15s ease,border-color .15s ease;width:94px}.me_a9abc686 img{height:100%;max-height:100%;max-width:100%;object-fit:cover;width:100%}.me_a9abc686[aria-current]{border-color:var(--mantine-primary-color-filled);opacity:1}.me_dfd5db36{align-items:center;display:flex;height:100%;justify-content:center;line-height:1;overflow:hidden;width:100%}.me_dfd5db36 img{height:auto;max-height:100%;max-width:100%;object-fit:contain;width:auto}.me_dfd5db36[data-zoom-enabled] img{cursor:zoom-in}.me_dfd5db36[data-zoom-enabled][data-zoomed] img{cursor:zoom-out}.me_dfd5db36[data-zoom-enabled][data-can-zoom=false] img{cursor:default}.me_2ed9ec6e{align-items:center;display:flex;height:100%;justify-content:center;transform-origin:center;transition:transform .15s ease;width:100%;will-change:transform}.me_dfd5db36[data-dragging] .me_2ed9ec6e{transition:none}.me_fe5b16c3{right:var(--mantine-spacing-md)}.me_7b66e144,.me_fe5b16c3{position:absolute;top:var(--mantine-spacing-md);z-index:1}.me_7b66e144{color:var(--mantine-color-white);font-weight:500;left:var(--mantine-spacing-md);user-select:none}}
@@ -0,0 +1,16 @@
1
+ import type { GetStylesApi, OverlayProps } from "@mantine/core";
2
+ import type { CSSProperties } from "react";
3
+ import type { UseLightboxOutput } from "./hooks/useLightbox.js";
4
+ import type { LightboxContext } from "./Lightbox.context.js";
5
+ import type { LightboxFactory } from "./Lightbox.js";
6
+ interface BuildLightboxContextValueInput {
7
+ getStyles: GetStylesApi<LightboxFactory>;
8
+ transitionStyles: CSSProperties;
9
+ overlayProps: OverlayProps;
10
+ onClose: () => void;
11
+ withZoom: boolean | undefined;
12
+ lightbox: UseLightboxOutput;
13
+ }
14
+ export declare function buildLightboxContextValue({ getStyles, transitionStyles, overlayProps, onClose, withZoom, lightbox, }: BuildLightboxContextValueInput): LightboxContext;
15
+ export {};
16
+ //# sourceMappingURL=Lightbox.context-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lightbox.context-value.d.ts","sourceRoot":"","sources":["../../src/Lightbox.context-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,UAAU,8BAA8B;IACvC,SAAS,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC;IACzC,gBAAgB,EAAE,aAAa,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,QAAQ,EAAE,iBAAiB,CAAC;CAC5B;AAED,wBAAgB,yBAAyB,CAAC,EACzC,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,QAAQ,GACR,EAAE,8BAA8B,GAAG,eAAe,CAiClD"}
@@ -1,34 +1,36 @@
1
1
  import { type GetStylesApi } from "@mantine/core";
2
- import type { ReactElement, PointerEvent as ReactPointerEvent, RefObject } from "react";
2
+ import type { EmblaCarouselType } from "embla-carousel";
3
+ import type { PointerEvent as ReactPointerEvent, RefObject } from "react";
3
4
  import type { LightboxFactory } from "./Lightbox.js";
4
- import type { LightboxSlideProps } from "./LightboxSlide.js";
5
5
  import type { ZoomOffset } from "./utils/zoom.js";
6
6
  export interface LightboxContext {
7
7
  getStyles: GetStylesApi<LightboxFactory>;
8
- slides: ReactElement<Pick<LightboxSlideProps, "children" | "thumbnail">>[];
8
+ opened: boolean;
9
9
  currentIndex: number;
10
- withFullscreen: boolean | undefined;
11
- withZoom: boolean | undefined;
12
- isFullscreen: boolean;
13
- canUseFullscreen: boolean;
14
- onToggleFullscreen: () => void;
15
- canUseAutoPlay: boolean;
16
- isPlaying: boolean;
17
- onToggleAutoPlay: () => void;
18
- onToggleZoom: () => void;
10
+ slideCount: number | null;
11
+ slidesEmblaRef: RefObject<EmblaCarouselType | null>;
12
+ thumbnailsEmblaRef: RefObject<EmblaCarouselType | null>;
13
+ setCurrentIndex: (index: number) => void;
14
+ setSlideCount: (count: number | null) => void;
15
+ onClose: () => void;
16
+ onOutsideClick: () => void;
17
+ onThumbnailClick: (index: number) => void;
18
+ onScrollPrev: () => void;
19
+ onScrollNext: () => void;
20
+ orientation: "horizontal" | "vertical";
21
+ withZoom: boolean;
19
22
  isZoomed: boolean;
23
+ isZoomedRef: RefObject<boolean>;
20
24
  isDraggingZoom: boolean;
21
25
  canZoomCurrent: boolean;
22
26
  zoomOffset: ZoomOffset;
23
27
  zoomScale: number;
24
28
  activeZoomContainerRef: RefObject<HTMLDivElement | null>;
29
+ toggleZoom: () => void;
25
30
  updateCanZoomAvailability: () => void;
26
31
  handleZoomPointerDown: (event: ReactPointerEvent<HTMLDivElement>) => void;
27
32
  handleZoomPointerMove: (event: ReactPointerEvent<HTMLDivElement>) => void;
28
33
  handleZoomPointerEnd: (event: ReactPointerEvent<HTMLDivElement>) => void;
29
- onClose: () => void;
30
- handleOutsideClick: () => void;
31
- onThumbnailClick: (index: number) => void;
32
34
  }
33
35
  export declare const LightboxProvider: ({ children, value }: {
34
36
  value: LightboxContext;
@@ -1 +1 @@
1
- {"version":3,"file":"Lightbox.context.d.ts","sourceRoot":"","sources":["../../src/Lightbox.context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EACX,YAAY,EACZ,YAAY,IAAI,iBAAiB,EACjC,SAAS,EACT,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC;IAEzC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC;IAC3E,YAAY,EAAE,MAAM,CAAC;IAErB,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAE9B,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAE/B,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,IAAI,CAAC;IAEzB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACzD,yBAAyB,EAAE,MAAM,IAAI,CAAC;IACtC,qBAAqB,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC1E,qBAAqB,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC1E,oBAAoB,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAEzE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,eAAO,MAAO,gBAAgB;;;+CAAE,kBAAkB,uBAGhD,CAAC"}
1
+ {"version":3,"file":"Lightbox.context.d.ts","sourceRoot":"","sources":["../../src/Lightbox.context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,IAAI,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACpD,kBAAkB,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACxD,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC;IAEvC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACzD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,yBAAyB,EAAE,MAAM,IAAI,CAAC;IACtC,qBAAqB,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC1E,qBAAqB,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC1E,oBAAoB,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CACzE;AAED,eAAO,MAAO,gBAAgB;;;+CAAE,kBAAkB,uBAGhD,CAAC"}
@@ -1,115 +1,74 @@
1
- import { type CarouselProps } from "@mantine/carousel";
2
- import { type BoxProps, type ElementProps, type Factory, type OverlayProps, type PortalProps, type StylesApiProps, type TransitionProps } from "@mantine/core";
3
- import type { EmblaOptionsType } from "embla-carousel";
4
- import { LightboxSlide } from "./LightboxSlide.js";
5
- export type LightboxCssVariables = {
6
- root: "--lightbox-z-index";
7
- overlay: "--lightbox-z-index" | "--overlay-z-index";
8
- };
9
- export type LightboxStylesNames = "root" | "overlay" | "slides" | "slide" | "zoomContainer" | "zoomContent" | "toolbar" | "fullscreenButton" | "zoomButton" | "closeButton" | "autoplayButton" | "counter" | "thumbnails" | "thumbnailsViewport" | "thumbnailsContainer" | "thumbnailSlide" | "thumbnailButton" | "thumbnailPlaceholder";
10
- export type LightboxCarouselOptions = Omit<CarouselProps, "withKeyboardEvents" | "withIndicators">;
11
- export type LightboxThumbnailEmblaOptions = EmblaOptionsType;
12
- export interface LightboxProps extends BoxProps, StylesApiProps<LightboxFactory>, ElementProps<"div"> {
13
- /**
14
- * Controls whether the lightbox is visible.
15
- */
16
- opened: boolean;
17
- /**
18
- * Callback invoked when the lightbox requests to close.
19
- */
20
- onClose: () => void;
21
- /**
22
- * Keeps the lightbox mounted in the DOM when it is not visible.
23
- * @default false
24
- */
25
- keepMounted?: boolean;
26
- /**
27
- * Closes the lightbox when a pointer interaction occurs outside its content area.
28
- * @default true
29
- */
30
- closeOnClickOutside?: boolean;
31
- /**
32
- * Constrains keyboard focus to elements within the lightbox while it is open.
33
- * @default true
34
- */
35
- trapFocus?: boolean;
36
- /**
37
- * Restores focus to the previously focused element after the lightbox closes.
38
- * @default true
39
- */
40
- returnFocus?: boolean;
41
- /**
42
- * Prevents background document scrolling while the lightbox is open.
43
- * @default true
44
- */
45
- lockScroll?: boolean;
46
- /**
47
- * Renders thumbnail previews for navigating between slides.
48
- * @default true
49
- */
1
+ import { type Factory } from "@mantine/core";
2
+ import { LightboxAutoplayButton } from "./components/LightboxAutoplayButton.js";
3
+ import { LightboxCloseButton } from "./components/LightboxCloseButton.js";
4
+ import { LightboxControls, type LightboxControlsProps } from "./components/LightboxControls.js";
5
+ import { LightboxCounter, type LightboxCounterProps } from "./components/LightboxCounter.js";
6
+ import { LightboxFullscreenButton } from "./components/LightboxFullscreenButton.js";
7
+ import { LightboxRoot, type LightboxRootProps } from "./components/LightboxRoot.js";
8
+ import { LightboxSlide } from "./components/LightboxSlide.js";
9
+ import { LightboxSlides, type LightboxSlidesProps } from "./components/LightboxSlides.js";
10
+ import { LightboxThumbnail } from "./components/LightboxThumbnail.js";
11
+ import { LightboxThumbnails, type LightboxThumbnailsProps } from "./components/LightboxThumbnails.js";
12
+ import { LightboxToolbar } from "./components/LightboxToolbar.js";
13
+ import { LightboxZoomButton } from "./components/LightboxZoomButton.js";
14
+ export interface LightboxImageData {
15
+ src: string;
16
+ alt?: string;
17
+ }
18
+ export interface LightboxProps extends Omit<LightboxRootProps, "children"> {
19
+ /** Array of images to display */
20
+ images: LightboxImageData[];
21
+ /** Show toolbar (zoom, fullscreen, close buttons), `true` by default */
22
+ withToolbar?: boolean;
23
+ /** Show prev/next navigation controls, `true` by default */
24
+ withControls?: boolean;
25
+ /** Show thumbnail strip, `true` by default */
50
26
  withThumbnails?: boolean;
51
- /**
52
- * Displays the current slide index and total slide count.
53
- * @default true
54
- */
27
+ /** Show slide counter, `true` by default */
55
28
  withCounter?: boolean;
56
- /**
57
- * Shows a control that toggles fullscreen mode for the lightbox.
58
- * @default true
59
- */
60
- withFullscreen?: boolean;
61
- /**
62
- * Shows a control that toggles zoom functionality for the active slide.
63
- * @default true
64
- */
65
- withZoom?: boolean;
66
- /**
67
- * Formats the slide counter output based on the current index and total count.
68
- * @default (index, total) => `${index + 1} / ${total}`
69
- */
70
- counterFormatter?: (index: number, total: number) => string;
71
- /**
72
- * Configuration options forwarded to the underlying Carousel instance.
73
- */
74
- carouselOptions?: LightboxCarouselOptions;
75
- /**
76
- * Configuration options used by the thumbnail strip Embla instance.
77
- */
78
- thumbnailEmblaOptions?: LightboxThumbnailEmblaOptions;
79
- /**
80
- * Props forwarded to the Overlay component that renders the backdrop.
81
- */
82
- overlayProps?: OverlayProps;
83
- /**
84
- * Transition configuration applied to the lightbox content container.
85
- */
86
- transitionProps?: Omit<TransitionProps, "mounted" | "keepMounted" | "children">;
87
- /**
88
- * Renders the lightbox inside a React Portal instead of the current DOM hierarchy.
89
- * @default true
90
- */
91
- withinPortal?: boolean;
92
- /**
93
- * Props forwarded to the Portal component when portal rendering is enabled.
94
- */
95
- portalProps?: Omit<PortalProps, "withinPortal" | "children">;
29
+ /** Props passed to the slides carousel (`LightboxSlides`) */
30
+ slidesProps?: Pick<LightboxSlidesProps, "initialSlide" | "emblaOptions" | "emblaPlugins">;
31
+ /** Props passed to the thumbnails carousel (`LightboxThumbnails`) */
32
+ thumbnailsProps?: Pick<LightboxThumbnailsProps, "emblaOptions">;
33
+ /** Props passed to the prev/next controls (`LightboxControls`) */
34
+ controlsProps?: Pick<LightboxControlsProps, "size">;
35
+ /** Props passed to the slide counter (`LightboxCounter`) */
36
+ counterProps?: Pick<LightboxCounterProps, "formatter">;
96
37
  }
97
38
  export type LightboxFactory = Factory<{
98
39
  props: LightboxProps;
99
40
  ref: HTMLDivElement;
100
- stylesNames: LightboxStylesNames;
101
- vars: LightboxCssVariables;
102
41
  staticComponents: {
42
+ Root: typeof LightboxRoot;
43
+ Toolbar: typeof LightboxToolbar;
44
+ Counter: typeof LightboxCounter;
45
+ Controls: typeof LightboxControls;
46
+ Slides: typeof LightboxSlides;
103
47
  Slide: typeof LightboxSlide;
48
+ Thumbnails: typeof LightboxThumbnails;
49
+ Thumbnail: typeof LightboxThumbnail;
50
+ CloseButton: typeof LightboxCloseButton;
51
+ ZoomButton: typeof LightboxZoomButton;
52
+ FullscreenButton: typeof LightboxFullscreenButton;
53
+ AutoplayButton: typeof LightboxAutoplayButton;
104
54
  };
105
55
  }>;
106
56
  export declare const Lightbox: import("@mantine/core").MantineComponent<{
107
57
  props: LightboxProps;
108
58
  ref: HTMLDivElement;
109
- stylesNames: LightboxStylesNames;
110
- vars: LightboxCssVariables;
111
59
  staticComponents: {
60
+ Root: typeof LightboxRoot;
61
+ Toolbar: typeof LightboxToolbar;
62
+ Counter: typeof LightboxCounter;
63
+ Controls: typeof LightboxControls;
64
+ Slides: typeof LightboxSlides;
112
65
  Slide: typeof LightboxSlide;
66
+ Thumbnails: typeof LightboxThumbnails;
67
+ Thumbnail: typeof LightboxThumbnail;
68
+ CloseButton: typeof LightboxCloseButton;
69
+ ZoomButton: typeof LightboxZoomButton;
70
+ FullscreenButton: typeof LightboxFullscreenButton;
71
+ AutoplayButton: typeof LightboxAutoplayButton;
113
72
  };
114
73
  }>;
115
74
  //# sourceMappingURL=Lightbox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../src/Lightbox.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../src/Lightbox.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAqB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EACN,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACN,eAAe,EACf,KAAK,oBAAoB,EACzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,EACN,YAAY,EACZ,KAAK,iBAAiB,EACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACN,cAAc,EACd,KAAK,mBAAmB,EACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EACN,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,MAAM,WAAW,iBAAiB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC;IACzE,iCAAiC;IACjC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,wEAAwE;IACxE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,IAAI,CACjB,mBAAmB,EACnB,cAAc,GAAG,cAAc,GAAG,cAAc,CAChD,CAAC;IACF,qEAAqE;IACrE,eAAe,CAAC,EAAE,IAAI,CAAC,uBAAuB,EAAE,cAAc,CAAC,CAAC;IAChE,kEAAkE;IAClE,aAAa,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACpD,4DAA4D;IAC5D,YAAY,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;CACvD;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC;IACrC,KAAK,EAAE,aAAa,CAAC;IACrB,GAAG,EAAE,cAAc,CAAC;IACpB,gBAAgB,EAAE;QACjB,IAAI,EAAE,OAAO,YAAY,CAAC;QAC1B,OAAO,EAAE,OAAO,eAAe,CAAC;QAChC,OAAO,EAAE,OAAO,eAAe,CAAC;QAChC,QAAQ,EAAE,OAAO,gBAAgB,CAAC;QAClC,MAAM,EAAE,OAAO,cAAc,CAAC;QAC9B,KAAK,EAAE,OAAO,aAAa,CAAC;QAC5B,UAAU,EAAE,OAAO,kBAAkB,CAAC;QACtC,SAAS,EAAE,OAAO,iBAAiB,CAAC;QACpC,WAAW,EAAE,OAAO,mBAAmB,CAAC;QACxC,UAAU,EAAE,OAAO,kBAAkB,CAAC;QACtC,gBAAgB,EAAE,OAAO,wBAAwB,CAAC;QAClD,cAAc,EAAE,OAAO,sBAAsB,CAAC;KAC9C,CAAC;CACF,CAAC,CAAC;AASH,eAAO,MAAM,QAAQ;WAzBb,aAAa;SACf,cAAc;sBACD;QACjB,IAAI,EAAE,OAAO,YAAY,CAAC;QAC1B,OAAO,EAAE,OAAO,eAAe,CAAC;QAChC,OAAO,EAAE,OAAO,eAAe,CAAC;QAChC,QAAQ,EAAE,OAAO,gBAAgB,CAAC;QAClC,MAAM,EAAE,OAAO,cAAc,CAAC;QAC9B,KAAK,EAAE,OAAO,aAAa,CAAC;QAC5B,UAAU,EAAE,OAAO,kBAAkB,CAAC;QACtC,SAAS,EAAE,OAAO,iBAAiB,CAAC;QACpC,WAAW,EAAE,OAAO,mBAAmB,CAAC;QACxC,UAAU,EAAE,OAAO,kBAAkB,CAAC;QACtC,gBAAgB,EAAE,OAAO,wBAAwB,CAAC;QAClD,cAAc,EAAE,OAAO,sBAAsB,CAAC;KAC9C;EAiDA,CAAC"}
@@ -1,18 +1,13 @@
1
1
  export declare const LIGHTBOX_DEFAULT_PROPS: {
2
2
  readonly closeOnClickOutside: true;
3
- readonly withThumbnails: true;
4
- readonly withCounter: true;
5
- readonly withFullscreen: true;
6
- readonly withZoom: true;
7
3
  readonly keepMounted: false;
8
4
  readonly trapFocus: true;
9
5
  readonly lockScroll: true;
10
6
  readonly returnFocus: true;
11
7
  readonly withinPortal: true;
12
- readonly carouselOptions: {
13
- readonly controlSize: 36;
14
- };
15
- readonly thumbnailEmblaOptions: {
8
+ readonly controlSize: 36;
9
+ readonly carouselOptions: {};
10
+ readonly thumbnailCarouselOptions: {
16
11
  readonly dragFree: true;
17
12
  };
18
13
  readonly overlayProps: {
@@ -1 +1 @@
1
- {"version":3,"file":"Lightbox.defaults.d.ts","sourceRoot":"","sources":["../../src/Lightbox.defaults.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BzB,CAAC"}
1
+ {"version":3,"file":"Lightbox.defaults.d.ts","sourceRoot":"","sources":["../../src/Lightbox.defaults.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;CAsBzB,CAAC"}
@@ -4,7 +4,7 @@ declare const _default: {
4
4
  export default _default;
5
5
  export declare const Default: () => import("react/jsx-runtime").JSX.Element;
6
6
  export declare const WithLoop: () => import("react/jsx-runtime").JSX.Element;
7
- export declare const WithPlaceholderThumbnails: () => import("react/jsx-runtime").JSX.Element;
8
7
  export declare const WithCustomCounter: () => import("react/jsx-runtime").JSX.Element;
9
- export declare const WithAutoPlay: () => import("react/jsx-runtime").JSX.Element;
8
+ export declare const Vertical: () => import("react/jsx-runtime").JSX.Element;
9
+ export declare const WithAutoplay: () => import("react/jsx-runtime").JSX.Element;
10
10
  //# sourceMappingURL=Lightbox.story.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Lightbox.story.d.ts","sourceRoot":"","sources":["../../src/Lightbox.story.tsx"],"names":[],"mappings":";;;AAYA,wBAAqC;AA6ErC,eAAO,MAAM,OAAO,+CAqBnB,CAAC;AAEF,eAAO,MAAM,QAAQ,+CA6BpB,CAAC;AAEF,eAAO,MAAM,yBAAyB,+CA2ErC,CAAC;AAEF,eAAO,MAAM,iBAAiB,+CAyB7B,CAAC;AAEF,eAAO,MAAM,YAAY,+CAgCxB,CAAC"}
1
+ {"version":3,"file":"Lightbox.story.d.ts","sourceRoot":"","sources":["../../src/Lightbox.story.tsx"],"names":[],"mappings":";;;AAWA,wBAAqC;AAgErC,eAAO,MAAM,OAAO,+CAenB,CAAC;AAEF,eAAO,MAAM,QAAQ,+CAiBpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,+CAe7B,CAAC;AAEF,eAAO,MAAM,QAAQ,+CAepB,CAAC;AAEF,eAAO,MAAM,YAAY,+CAwBxB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface LightboxSlideContext {
2
+ index: number;
3
+ }
4
+ export declare const LightboxSlideProvider: ({ children, value }: {
5
+ value: LightboxSlideContext;
6
+ children: React.ReactNode;
7
+ }) => import("react/jsx-runtime").JSX.Element, useLightboxSlideContext: () => LightboxSlideContext;
8
+ //# sourceMappingURL=LightboxSlide.context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LightboxSlide.context.d.ts","sourceRoot":"","sources":["../../src/LightboxSlide.context.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAO,qBAAqB;;;+CAAE,uBAAuB,4BAG1D,CAAC"}
@@ -1,9 +1,6 @@
1
1
  import { type BoxProps, type CompoundStylesApiProps, type ElementProps, type Factory } from "@mantine/core";
2
- import type { ReactNode } from "react";
3
2
  export type LightboxSlideStylesNames = "slide";
4
3
  export interface LightboxSlideProps extends BoxProps, CompoundStylesApiProps<LightboxSlideFactory>, ElementProps<"div"> {
5
- /** Content rendered as the slide thumbnail in the lightbox navigation, or a default placeholder if omitted. */
6
- thumbnail?: ReactNode;
7
4
  }
8
5
  export type LightboxSlideFactory = Factory<{
9
6
  props: LightboxSlideProps;
@@ -1 +1 @@
1
- {"version":3,"file":"LightboxSlide.d.ts","sourceRoot":"","sources":["../../src/LightboxSlide.tsx"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,OAAO,EAGZ,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC;AAE/C,MAAM,WAAW,kBAChB,SAAQ,QAAQ,EACf,sBAAsB,CAAC,oBAAoB,CAAC,EAC5C,YAAY,CAAC,KAAK,CAAC;IACpB,+GAA+G;IAC/G,SAAS,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC;IAC1C,KAAK,EAAE,kBAAkB,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC;IACpB,WAAW,EAAE,wBAAwB,CAAC;IACtC,QAAQ,EAAE,IAAI,CAAC;CACf,CAAC,CAAC;AAEH,eAAO,MAAM,aAAa;WANlB,kBAAkB;SACpB,cAAc;iBACN,wBAAwB;cAC3B,IAAI;EAgBb,CAAC"}
1
+ {"version":3,"file":"LightboxSlide.d.ts","sourceRoot":"","sources":["../../src/LightboxSlide.tsx"],"names":[],"mappings":"AACA,OAAO,EAEN,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,OAAO,EAGZ,MAAM,eAAe,CAAC;AAOvB,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC;AAE/C,MAAM,WAAW,kBAChB,SAAQ,QAAQ,EACf,sBAAsB,CAAC,oBAAoB,CAAC,EAC5C,YAAY,CAAC,KAAK,CAAC;CAAG;AAExB,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC;IAC1C,KAAK,EAAE,kBAAkB,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC;IACpB,WAAW,EAAE,wBAAwB,CAAC;IACtC,QAAQ,EAAE,IAAI,CAAC;CACf,CAAC,CAAC;AAEH,eAAO,MAAM,aAAa;WANlB,kBAAkB;SACpB,cAAc;iBACN,wBAAwB;cAC3B,IAAI;EAiFb,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Lightbox.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lightbox.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/Lightbox.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LightboxSimple.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LightboxSimple.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/LightboxSimple.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pointer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointer.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/pointer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=zoom.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zoom.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/zoom.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { type BoxProps, type CompoundStylesApiProps, type ElementProps, type Factory } from "@mantine/core";
2
+ export type LightboxAutoplayButtonStylesNames = "autoplayButton";
3
+ export interface LightboxAutoplayButtonProps extends BoxProps, CompoundStylesApiProps<LightboxAutoplayButtonFactory>, ElementProps<"button"> {
4
+ }
5
+ export type LightboxAutoplayButtonFactory = Factory<{
6
+ props: LightboxAutoplayButtonProps;
7
+ ref: HTMLButtonElement;
8
+ stylesNames: LightboxAutoplayButtonStylesNames;
9
+ compound: true;
10
+ }>;
11
+ export declare const LightboxAutoplayButton: import("@mantine/core").MantineComponent<{
12
+ props: LightboxAutoplayButtonProps;
13
+ ref: HTMLButtonElement;
14
+ stylesNames: LightboxAutoplayButtonStylesNames;
15
+ compound: true;
16
+ }>;
17
+ //# sourceMappingURL=LightboxAutoplayButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LightboxAutoplayButton.d.ts","sourceRoot":"","sources":["../../../src/components/LightboxAutoplayButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,OAAO,EAGZ,MAAM,eAAe,CAAC;AAMvB,MAAM,MAAM,iCAAiC,GAAG,gBAAgB,CAAC;AAEjE,MAAM,WAAW,2BAChB,SAAQ,QAAQ,EACf,sBAAsB,CAAC,6BAA6B,CAAC,EACrD,YAAY,CAAC,QAAQ,CAAC;CAAG;AAE3B,MAAM,MAAM,6BAA6B,GAAG,OAAO,CAAC;IACnD,KAAK,EAAE,2BAA2B,CAAC;IACnC,GAAG,EAAE,iBAAiB,CAAC;IACvB,WAAW,EAAE,iCAAiC,CAAC;IAC/C,QAAQ,EAAE,IAAI,CAAC;CACf,CAAC,CAAC;AAEH,eAAO,MAAM,sBAAsB;WAN3B,2BAA2B;SAC7B,iBAAiB;iBACT,iCAAiC;cACpC,IAAI;EAmCd,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ReactNode } from "react";
2
+ export interface LightboxCarouselProps {
3
+ children?: ReactNode;
4
+ }
5
+ export declare function LightboxCarousel(props: LightboxCarouselProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=LightboxCarousel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LightboxCarousel.d.ts","sourceRoot":"","sources":["../../../src/components/LightboxCarousel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAoB5D"}
@@ -0,0 +1,10 @@
1
+ interface LightboxCarouselSlideContextValue {
2
+ index: number;
3
+ isActive: boolean;
4
+ }
5
+ export declare const LightboxCarouselSlideProvider: ({ children, value }: {
6
+ value: LightboxCarouselSlideContextValue;
7
+ children: React.ReactNode;
8
+ }) => import("react/jsx-runtime").JSX.Element, useLightboxCarouselSlideContext: () => LightboxCarouselSlideContextValue;
9
+ export {};
10
+ //# sourceMappingURL=LightboxCarouselSlide.context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LightboxCarouselSlide.context.d.ts","sourceRoot":"","sources":["../../../src/components/LightboxCarouselSlide.context.ts"],"names":[],"mappings":"AAEA,UAAU,iCAAiC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAO,6BAA6B;;;+CAAE,+BAA+B,yCAG1E,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type BoxProps, type CompoundStylesApiProps, type ElementProps, type Factory } from "@mantine/core";
2
+ export type LightboxCloseButtonStylesNames = "closeButton";
3
+ export interface LightboxCloseButtonProps extends BoxProps, CompoundStylesApiProps<LightboxCloseButtonFactory>, ElementProps<"button"> {
4
+ }
5
+ export type LightboxCloseButtonFactory = Factory<{
6
+ props: LightboxCloseButtonProps;
7
+ ref: HTMLButtonElement;
8
+ stylesNames: LightboxCloseButtonStylesNames;
9
+ compound: true;
10
+ }>;
11
+ export declare const LightboxCloseButton: import("@mantine/core").MantineComponent<{
12
+ props: LightboxCloseButtonProps;
13
+ ref: HTMLButtonElement;
14
+ stylesNames: LightboxCloseButtonStylesNames;
15
+ compound: true;
16
+ }>;
17
+ //# sourceMappingURL=LightboxCloseButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LightboxCloseButton.d.ts","sourceRoot":"","sources":["../../../src/components/LightboxCloseButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,QAAQ,EAEb,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,OAAO,EAGZ,MAAM,eAAe,CAAC;AAIvB,MAAM,MAAM,8BAA8B,GAAG,aAAa,CAAC;AAE3D,MAAM,WAAW,wBAChB,SAAQ,QAAQ,EACf,sBAAsB,CAAC,0BAA0B,CAAC,EAClD,YAAY,CAAC,QAAQ,CAAC;CAAG;AAE3B,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAAC;IAChD,KAAK,EAAE,wBAAwB,CAAC;IAChC,GAAG,EAAE,iBAAiB,CAAC;IACvB,WAAW,EAAE,8BAA8B,CAAC;IAC5C,QAAQ,EAAE,IAAI,CAAC;CACf,CAAC,CAAC;AAEH,eAAO,MAAM,mBAAmB;WANxB,wBAAwB;SAC1B,iBAAiB;iBACT,8BAA8B;cACjC,IAAI;EAyBd,CAAC"}