1
|
{"mappings":"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","sources":["src/lightbox.js","src/overlay.js","src/shadow.js","src/animation.js"],"sourcesContent":["import Overlay from './overlay.js';\nimport Shadow from './shadow.js';\n\nexport default class LightBox {\n currentImage = null;\n shadows = {};\n\n /**\n * ============\n * Initializers\n * ============\n */\n\n constructor({ selector }) {\n this.selector = selector;\n this.initOverlay();\n this.initImages();\n this.initControls();\n }\n\n initOverlay() {\n this.overlay = new Overlay();\n this.overlay.element.addEventListener('click', () => {\n this.closeCurrent();\n });\n }\n\n initImages() {\n this.images = document.querySelectorAll(this.selector);\n this.images.forEach(image => {\n if (image.tagName !== 'IMG') return;\n image.id = crypto.randomUUID(); // generate unique id for each image\n image.style.cursor = 'zoom-in';\n image.addEventListener('click', () => this.open(image)); // click image to open lightbox\n });\n }\n\n initControls() {\n // keyboard shortcuts\n document.addEventListener('keydown', e => {\n if (e.key === 'Escape' || e.key === ' ') {\n this.closeCurrent();\n }\n });\n // scroll to dismiss\n document.body.addEventListener('wheel', e => {\n this.closeCurrent();\n });\n }\n\n /**\n * ============\n * Actions\n * ============\n */\n\n // open lightbox = open shadow + show overlay\n open(image) {\n this.currentImage = image;\n\n const shadow = this.shadows[image.id] || new Shadow(image);\n if (!this.shadows[image.id]) {\n this.shadows[image.id] = shadow;\n }\n\n shadow.open();\n this.overlay.show();\n }\n\n // close lightbox = remove shadow + hide overlay\n close(image) {\n this.currentImage = null;\n\n if (!this.shadows[image.id]) return;\n this.shadows[image.id].close();\n\n this.overlay.hide();\n }\n\n closeCurrent() {\n if (!this.currentImage) return;\n this.close(this.currentImage);\n }\n}\n","export default class Overlay {\n zIndex = 900;\n zIndexHidden = -100;\n\n constructor() {\n const overlay = document.createElement('div');\n overlay.id = 'libra-overlay';\n overlay.classList.add('libra-overlay');\n\n // initialized state\n overlay.style.zIndex = this.zIndexHidden;\n overlay.style.opacity = '0';\n\n this.element = overlay;\n document.body.appendChild(overlay);\n\n return this;\n }\n\n show() {\n this.element.style.opacity = '1';\n this.element.style.zIndex = this.zIndex;\n }\n\n hide() {\n this.element.style.opacity = '0';\n this.element.style.zIndex = '-100';\n }\n}\n","import Animation from './animation.js'\n\nexport default class Shadow {\n zIndex = '1000'\n isOpen = false\n\n /**\n * ============\n * Constructors\n * ============\n */\n\n constructor(image) {\n this.original = image;\n this.create(image);\n\n const rect = this.element.getBoundingClientRect();\n this.startingState = {\n top: rect.top + window.scrollY,\n left: rect.left + window.scrollX,\n width: rect.width,\n height: rect.height\n }\n\n return this;\n }\n\n create(image) {\n // create shadow image\n const shadow = document.createElement('img');\n shadow.src = image.src;\n shadow.id = `libra-shadow-${image.id}`;\n shadow.classList.add('libra-shadow');\n\n // style and position shadow image\n const rect = image.getBoundingClientRect();\n shadow.style.top = rect.top + window.scrollY;\n shadow.style.left = rect.left + window.scrollX;\n shadow.style.width = rect.width;\n shadow.style.height = rect.height;\n shadow.style.zIndex = this.zIndex;\n\n document.body.appendChild(shadow);\n this.element = shadow;\n }\n\n /**\n * ============\n * Actions\n * ============\n */\n\n open() {\n this.isOpen = true;\n\n this.original.style.visibility = 'hidden';\n if (!document.body.contains(this.element)) this.placeItself();\n\n Animation.transformMatrix(\n this.element,\n this.startingState,\n Animation.calculateFinalState(this.element)\n );\n }\n\n close() {\n this.isOpen = false;\n\n this.original.style.visibility = 'visible';\n\n Animation.resetTransformMatrix(this.element);\n setTimeout(() => this.destroyItself(), 300);\n }\n\n placeItself() {\n document.body.appendChild(this.element);\n }\n\n destroyItself() {\n if (!document.body.contains(this.element)) return;\n document.body.removeChild(this.element);\n }\n}\n","export default class Animation {\n static calculateFinalState(element) {\n let finals = {}\n\n const margin = 50\n const ratio = element.naturalWidth / element.naturalHeight;\n const ww = window.innerWidth - 2*margin;\n const wh = window.innerHeight - 2*margin;\n\n if (element.naturalWidth > ww) {\n finals.width = ww;\n finals.height = ww / ratio;\n if (finals.height > wh) {\n finals.height = wh;\n finals.width = wh * ratio;\n }\n } else {\n finals.width = element.offsetWidth;\n finals.height = element.offsetHeight;\n }\n\n finals.top = (wh - finals.height) / 2 + window.scrollY + margin;\n finals.left = (ww - finals.width) / 2 + window.scrollX + margin;\n\n return finals;\n }\n\n static transformMatrix(element, starts, finals) {\n // Calculate scaling factors based on width and height interpolation\n const scaleX = finals.width / starts.width;\n const scaleY = finals.height / starts.height;\n\n // Calculate the center of the starting and final positions\n const startCenterX = starts.left + starts.width / 2;\n const startCenterY = starts.top + starts.height / 2;\n const finalCenterX = finals.left + finals.width / 2;\n const finalCenterY = finals.top + finals.height / 2;\n\n const translateX = finalCenterX - startCenterX;\n const translateY = finalCenterY - startCenterY;\n\n // Apply the transform with matrix (scale + translate)\n element.style.transform = `matrix(${scaleX}, 0, 0, ${scaleY}, ${translateX}, ${translateY})`;\n }\n\n static resetTransformMatrix(element) {\n element.style.transform = `matrix(1, 0, 0, 1, 0, 0)`;\n }\n}\n"],"names":[],"version":3,"file":"libra.min.js.map","sourceRoot":"../"}
|