{"version":3,"file":"zooming.min.js","sources":["../src/utils.js","../src/modules/handler.js","../src/modules/target.js","../src/modules/zooming.js","../src/options.js","../src/modules/overlay.js","../src/index.js"],"sourcesContent":["export const webkitPrefix = 'WebkitAppearance' in document.documentElement.style\n ? '-webkit-'\n : ''\n\nexport const cursor = {\n default: 'auto',\n zoomIn: `${webkitPrefix}zoom-in`,\n zoomOut: `${webkitPrefix}zoom-out`,\n grab: `${webkitPrefix}grab`,\n move: 'move'\n}\n\nexport function listen(el, event, handler, add = true) {\n const options = { passive: false }\n\n if (add) {\n el.addEventListener(event, handler, options)\n } else {\n el.removeEventListener(event, handler, options)\n }\n}\n\nexport function loadImage(src, cb) {\n if (src) {\n const img = new Image()\n\n img.onload = function onImageLoad() {\n if (cb) cb(img)\n }\n\n img.src = src\n }\n}\n\nexport function getOriginalSource(el) {\n if (el.hasAttribute('data-original')) {\n return el.getAttribute('data-original')\n } else if (el.parentNode.tagName === 'A') {\n return el.parentNode.getAttribute('href')\n } else {\n return null\n }\n}\n\nexport function setStyle(el, styles, remember) {\n checkTrans(styles)\n\n let s = el.style\n let original = {}\n\n for (let key in styles) {\n if (remember) {\n original[key] = s[key] || ''\n }\n\n s[key] = styles[key]\n }\n\n return original\n}\n\nexport function bindAll(_this, that) {\n const methods = Object.getOwnPropertyNames(Object.getPrototypeOf(_this))\n methods.forEach(function bindOne(method) {\n _this[method] = _this[method].bind(that)\n })\n}\n\nconst trans = sniffTransition(document.createElement('div'))\nexport const transformCssProp = trans.transformCssProp\nexport const transEndEvent = trans.transEndEvent\n\nfunction checkTrans(styles) {\n const { transitionProp, transformProp } = trans\n\n if (styles.transition) {\n const value = styles.transition\n delete styles.transition\n styles[transitionProp] = value\n }\n\n if (styles.transform) {\n const value = styles.transform\n delete styles.transform\n styles[transformProp] = value\n }\n}\n\nfunction sniffTransition(el) {\n let res = {}\n const trans = ['webkitTransition', 'transition', 'mozTransition']\n const tform = ['webkitTransform', 'transform', 'mozTransform']\n const end = {\n transition: 'transitionend',\n mozTransition: 'transitionend',\n webkitTransition: 'webkitTransitionEnd'\n }\n\n trans.some(function hasTransition(prop) {\n if (el.style[prop] !== undefined) {\n res.transitionProp = prop\n res.transEndEvent = end[prop]\n return true\n }\n })\n\n tform.some(function hasTransform(prop) {\n if (el.style[prop] !== undefined) {\n res.transformProp = prop\n res.transformCssProp = prop.replace(/(.*)Transform/, '-$1-transform')\n return true\n }\n })\n\n return res\n}\n","import { bindAll } from '../utils'\n\nconst PRESS_DELAY = 200\n\nexport default {\n init(instance) {\n bindAll(this, instance)\n },\n\n click(e) {\n e.preventDefault()\n\n if (isPressingMetaKey(e)) {\n return window.open(\n this.target.srcOriginal || e.currentTarget.src,\n '_blank'\n )\n } else {\n if (this.shown) {\n if (this.released) {\n this.close()\n } else {\n this.release()\n }\n } else {\n this.open(e.currentTarget)\n }\n }\n },\n\n scroll() {\n const el =\n document.documentElement || document.body.parentNode || document.body\n const scrollLeft = window.pageXOffset || el.scrollLeft\n const scrollTop = window.pageYOffset || el.scrollTop\n\n if (this.lastScrollPosition === null) {\n this.lastScrollPosition = {\n x: scrollLeft,\n y: scrollTop\n }\n }\n\n const deltaX = this.lastScrollPosition.x - scrollLeft\n const deltaY = this.lastScrollPosition.y - scrollTop\n const threshold = this.options.scrollThreshold\n\n if (Math.abs(deltaY) >= threshold || Math.abs(deltaX) >= threshold) {\n this.lastScrollPosition = null\n this.close()\n }\n },\n\n keydown(e) {\n if (isEscape(e)) {\n if (this.released) {\n this.close()\n } else {\n this.release(this.close)\n }\n }\n },\n\n mousedown(e) {\n if (!isLeftButton(e) || isPressingMetaKey(e)) return\n e.preventDefault()\n const { clientX, clientY } = e\n\n this.pressTimer = setTimeout(\n function grabOnMouseDown() {\n this.grab(clientX, clientY)\n }.bind(this),\n PRESS_DELAY\n )\n },\n\n mousemove(e) {\n if (this.released) return\n this.move(e.clientX, e.clientY)\n },\n\n mouseup(e) {\n if (!isLeftButton(e) || isPressingMetaKey(e)) return\n clearTimeout(this.pressTimer)\n\n if (this.released) {\n this.close()\n } else {\n this.release()\n }\n },\n\n touchstart(e) {\n e.preventDefault()\n const { clientX, clientY } = e.touches[0]\n\n this.pressTimer = setTimeout(\n function grabOnTouchStart() {\n this.grab(clientX, clientY)\n }.bind(this),\n PRESS_DELAY\n )\n },\n\n touchmove(e) {\n if (this.released) return\n\n const { clientX, clientY } = e.touches[0]\n this.move(clientX, clientY)\n },\n\n touchend(e) {\n if (isTouching(e)) return\n clearTimeout(this.pressTimer)\n\n if (this.released) {\n this.close()\n } else {\n this.release()\n }\n },\n\n clickOverlay() {\n this.close()\n },\n\n resizeWindow() {\n this.close()\n }\n}\n\nfunction isLeftButton(e) {\n return e.button === 0\n}\n\nfunction isPressingMetaKey(e) {\n return e.metaKey || e.ctrlKey\n}\n\nfunction isTouching(e) {\n e.targetTouches.length > 0\n}\n\nfunction isEscape(e) {\n const code = e.key || e.code\n return code === 'Escape' || e.keyCode === 27\n}\n","import { cursor, setStyle, getOriginalSource, transformCssProp } from '../utils'\n\nexport default {\n init(el, instance) {\n this.el = el\n this.instance = instance\n this.srcThumbnail = this.el.getAttribute('src')\n this.srcOriginal = getOriginalSource(this.el)\n this.rect = el.getBoundingClientRect()\n this.translate = null\n this.scale = null\n this.styleOpen = null\n this.styleClose = null\n },\n\n zoomIn() {\n const options = this.instance.options\n\n this.translate = calculateTranslate(this.rect)\n this.scale = calculateScale(\n this.rect,\n options.scaleBase,\n options.customSize\n )\n\n this.styleOpen = {\n position: 'relative',\n zIndex: options.zIndex + 1,\n cursor: options.enableGrab ? cursor.grab : cursor.zoomOut,\n transition: `${transformCssProp}\n ${options.transitionDuration}s\n ${options.transitionTimingFunction}`,\n transform: `translate(${this.translate.x}px, ${this.translate.y}px)\n scale(${this.scale.x},${this.scale.y})`,\n height: `${this.rect.height}px`,\n width: `${this.rect.width}px`\n }\n\n // Force layout update\n this.el.offsetWidth\n\n // Trigger transition\n this.styleClose = setStyle(this.el, this.styleOpen, true)\n },\n\n zoomOut() {\n // Force layout update\n this.el.offsetWidth\n\n setStyle(this.el, { transform: 'none' })\n },\n\n grab(x, y, scaleExtra) {\n const windowCenter = getWindowCenter()\n const [dx, dy] = [windowCenter.x - x, windowCenter.y - y]\n\n setStyle(this.el, {\n cursor: cursor.move,\n transform: `translate(\n ${this.translate.x + dx}px, ${this.translate.y + dy}px)\n scale(${this.scale.x + scaleExtra},${this.scale.y + scaleExtra})`\n })\n },\n\n move(x, y, scaleExtra) {\n const windowCenter = getWindowCenter()\n const [dx, dy] = [windowCenter.x - x, windowCenter.y - y]\n\n setStyle(this.el, {\n transition: transformCssProp,\n transform: `translate(\n ${this.translate.x + dx}px, ${this.translate.y + dy}px)\n scale(${this.scale.x + scaleExtra},${this.scale.y + scaleExtra})`\n })\n },\n\n restoreCloseStyle() {\n setStyle(this.el, this.styleClose)\n },\n\n restoreOpenStyle() {\n setStyle(this.el, this.styleOpen)\n },\n\n upgradeSource() {\n if (this.srcOriginal) {\n const parentNode = this.el.parentNode\n const temp = this.el.cloneNode(false)\n\n // Force compute the hi-res image in DOM to prevent\n // image flickering while updating src\n temp.setAttribute('src', this.srcOriginal)\n temp.style.position = 'fixed'\n temp.style.visibility = 'hidden'\n parentNode.appendChild(temp)\n\n // Add delay to prevent Firefox from flickering\n setTimeout(\n function updateSrc() {\n this.el.setAttribute('src', this.srcOriginal)\n parentNode.removeChild(temp)\n }.bind(this),\n 50\n )\n }\n },\n\n downgradeSource() {\n if (this.srcOriginal) {\n this.el.setAttribute('src', this.srcThumbnail)\n }\n }\n}\n\nfunction calculateTranslate(rect) {\n const windowCenter = getWindowCenter()\n const targetCenter = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2\n }\n\n // The vector to translate image to the window center\n return {\n x: windowCenter.x - targetCenter.x,\n y: windowCenter.y - targetCenter.y\n }\n}\n\nfunction calculateScale(rect, scaleBase, customSize) {\n if (customSize) {\n return {\n x: customSize.width / rect.width,\n y: customSize.height / rect.height\n }\n } else {\n const targetHalfWidth = rect.width / 2\n const targetHalfHeight = rect.height / 2\n const windowCenter = getWindowCenter()\n\n // The distance between target edge and window edge\n const targetEdgeToWindowEdge = {\n x: windowCenter.x - targetHalfWidth,\n y: windowCenter.y - targetHalfHeight\n }\n\n const scaleHorizontally = targetEdgeToWindowEdge.x / targetHalfWidth\n const scaleVertically = targetEdgeToWindowEdge.y / targetHalfHeight\n\n // The additional scale is based on the smaller value of\n // scaling horizontally and scaling vertically\n const scale = scaleBase + Math.min(scaleHorizontally, scaleVertically)\n\n return {\n x: scale,\n y: scale\n }\n }\n}\n\nfunction getWindowCenter() {\n const docEl = document.documentElement\n const windowWidth = Math.min(docEl.clientWidth, window.innerWidth)\n const windowHeight = Math.min(docEl.clientHeight, window.innerHeight)\n\n return {\n x: windowWidth / 2,\n y: windowHeight / 2\n }\n}\n","import {\n cursor,\n listen,\n loadImage,\n transEndEvent,\n getOriginalSource\n} from '../utils'\nimport DEFAULT_OPTIONS from '../options'\n\nimport handler from './handler'\nimport overlay from './overlay'\nimport target from './target'\n\n/**\n * Zooming instance.\n */\nexport default class Zooming {\n /**\n * @param {Object} [options] Update default options if provided.\n */\n constructor(options) {\n this.target = Object.create(target)\n this.overlay = Object.create(overlay)\n this.handler = Object.create(handler)\n this.body = document.body\n\n this.shown = false\n this.lock = false\n this.released = true\n this.lastScrollPosition = null\n this.pressTimer = null\n\n this.options = Object.assign({}, DEFAULT_OPTIONS, options)\n this.overlay.init(this)\n this.handler.init(this)\n this.listen(this.options.defaultZoomable)\n }\n\n /**\n * Make element(s) zoomable.\n * @param {string|Element} el A css selector or an Element.\n * @return {this}\n */\n listen(el) {\n if (typeof el === 'string') {\n const els = document.querySelectorAll(el)\n let i = els.length\n\n while (i--) {\n this.listen(els[i])\n }\n } else if (el.tagName === 'IMG') {\n el.style.cursor = cursor.zoomIn\n listen(el, 'click', this.handler.click)\n\n if (this.options.preloadImage) {\n loadImage(getOriginalSource(el))\n }\n }\n\n return this\n }\n\n /**\n * Update options or return current options if no argument is provided.\n * @param {Object} options An Object that contains this.options.\n * @return {this|this.options}\n */\n config(options) {\n if (options) {\n Object.assign(this.options, options)\n this.overlay.updateStyle(this.options)\n return this\n } else {\n return this.options\n }\n }\n\n /**\n * Open (zoom in) the Element.\n * @param {Element} el The Element to open.\n * @param {Function} [cb=this.options.onOpen] A callback function that will\n * be called when a target is opened and transition has ended. It will get\n * the target element as the argument.\n * @return {this}\n */\n open(el, cb = this.options.onOpen) {\n if (this.shown || this.lock) return\n\n const target = typeof el === 'string' ? document.querySelector(el) : el\n\n if (target.tagName !== 'IMG') return\n\n if (this.options.onBeforeOpen) {\n this.options.onBeforeOpen(target)\n }\n\n this.target.init(target, this)\n\n if (!this.options.preloadImage) {\n loadImage(this.target.srcOriginal)\n }\n\n this.shown = true\n this.lock = true\n\n this.target.zoomIn()\n this.overlay.insert()\n this.overlay.fadeIn()\n\n listen(document, 'scroll', this.handler.scroll)\n listen(document, 'keydown', this.handler.keydown)\n\n if (this.options.closeOnWindowResize) {\n listen(window, 'resize', this.handler.resizeWindow)\n }\n\n const onOpenEnd = () => {\n listen(target, transEndEvent, onOpenEnd, false)\n this.lock = false\n this.target.upgradeSource()\n\n if (this.options.enableGrab) {\n toggleGrabListeners(document, this.handler, true)\n }\n\n if (cb) cb(target)\n }\n\n listen(target, transEndEvent, onOpenEnd)\n\n return this\n }\n\n /**\n * Close (zoom out) the Element currently opened.\n * @param {Function} [cb=this.options.onClose] A callback function that will\n * be called when a target is closed and transition has ended. It will get\n * the target element as the argument.\n * @return {this}\n */\n close(cb = this.options.onClose) {\n if (!this.shown || this.lock) return\n\n const target = this.target.el\n\n if (this.options.onBeforeClose) {\n this.options.onBeforeClose(target)\n }\n\n this.lock = true\n this.body.style.cursor = cursor.default\n this.overlay.fadeOut()\n this.target.zoomOut()\n\n listen(document, 'scroll', this.handler.scroll, false)\n listen(document, 'keydown', this.handler.keydown, false)\n\n if (this.options.closeOnWindowResize) {\n listen(window, 'resize', this.handler.resizeWindow, false)\n }\n\n const onCloseEnd = () => {\n listen(target, transEndEvent, onCloseEnd, false)\n\n this.shown = false\n this.lock = false\n\n this.target.downgradeSource()\n\n if (this.options.enableGrab) {\n toggleGrabListeners(document, this.handler, false)\n }\n\n this.target.restoreCloseStyle()\n this.overlay.remove()\n\n if (cb) cb(target)\n }\n\n listen(target, transEndEvent, onCloseEnd)\n\n return this\n }\n\n /**\n * Grab the Element currently opened given a position and apply extra zoom-in.\n * @param {number} x The X-axis of where the press happened.\n * @param {number} y The Y-axis of where the press happened.\n * @param {number} scaleExtra Extra zoom-in to apply.\n * @param {Function} [cb=this.options.scaleExtra] A callback function that\n * will be called when a target is grabbed and transition has ended. It\n * will get the target element as the argument.\n * @return {this}\n */\n grab(x, y, scaleExtra = this.options.scaleExtra, cb) {\n if (!this.shown || this.lock) return\n\n const target = this.target.el\n\n if (this.options.onBeforeGrab) {\n this.options.onBeforeGrab(target)\n }\n\n this.released = false\n this.target.grab(x, y, scaleExtra)\n\n const onGrabEnd = () => {\n listen(target, transEndEvent, onGrabEnd, false)\n if (cb) cb(target)\n }\n\n listen(target, transEndEvent, onGrabEnd)\n\n return this\n }\n\n /**\n * Move the Element currently grabbed given a position and apply extra zoom-in.\n * @param {number} x The X-axis of where the press happened.\n * @param {number} y The Y-axis of where the press happened.\n * @param {number} scaleExtra Extra zoom-in to apply.\n * @param {Function} [cb=this.options.scaleExtra] A callback function that\n * will be called when a target is moved and transition has ended. It will\n * get the target element as the argument.\n * @return {this}\n */\n move(x, y, scaleExtra = this.options.scaleExtra, cb) {\n if (!this.shown || this.lock) return\n\n this.released = false\n this.body.style.cursor = cursor.move\n this.target.move(x, y, scaleExtra)\n\n const target = this.target.el\n\n const onMoveEnd = () => {\n listen(target, transEndEvent, onMoveEnd, false)\n if (cb) cb(target)\n }\n\n listen(target, transEndEvent, onMoveEnd)\n\n return this\n }\n\n /**\n * Release the Element currently grabbed.\n * @param {Function} [cb=this.options.onRelease] A callback function that\n * will be called when a target is released and transition has ended. It\n * will get the target element as the argument.\n * @return {this}\n */\n release(cb = this.options.onRelease) {\n if (!this.shown || this.lock) return\n\n const target = this.target.el\n\n if (this.options.onBeforeRelease) {\n this.options.onBeforeRelease(target)\n }\n\n this.lock = true\n this.body.style.cursor = cursor.default\n this.target.restoreOpenStyle()\n\n const onReleaseEnd = () => {\n listen(target, transEndEvent, onReleaseEnd, false)\n this.lock = false\n this.released = true\n\n if (cb) cb(target)\n }\n\n listen(target, transEndEvent, onReleaseEnd)\n\n return this\n }\n}\n\nfunction toggleGrabListeners(el, handler, add) {\n const types = [\n 'mousedown',\n 'mousemove',\n 'mouseup',\n 'touchstart',\n 'touchmove',\n 'touchend'\n ]\n\n types.forEach(function toggleListener(type) {\n listen(el, type, handler[type], add)\n })\n}\n","/**\n * A list of options.\n *\n * @type {Object}\n * @example\n * // Default options\n * const options = {\n * defaultZoomable: 'img[data-action=\"zoom\"]',\n * enableGrab: true,\n * preloadImage: false,\n * closeOnWindowResize: true,\n * transitionDuration: 0.4,\n * transitionTimingFunction: 'cubic-bezier(0.4, 0, 0, 1)',\n * bgColor: 'rgb(255, 255, 255)',\n * bgOpacity: 1,\n * scaleBase: 1.0,\n * scaleExtra: 0.5,\n * scrollThreshold: 40,\n * zIndex: 998,\n * customSize: null,\n * onOpen: null,\n * onClose: null,\n * onRelease: null,\n * onBeforeOpen: null,\n * onBeforeClose: null,\n * onBeforeGrab: null,\n * onBeforeRelease: null\n * }\n */\nexport default {\n /**\n * Zoomable elements by default. It can be a css selector or an element.\n * @type {string|Element}\n */\n defaultZoomable: 'img[data-action=\"zoom\"]',\n\n /**\n * To be able to grab and drag the image for extra zoom-in.\n * @type {boolean}\n */\n enableGrab: true,\n\n /**\n * Preload zoomable images.\n * @type {boolean}\n */\n preloadImage: false,\n\n /**\n * Close the zoomed image when browser window is resized.\n * @type {boolean}\n */\n closeOnWindowResize: true,\n\n /**\n * Transition duration in seconds.\n * @type {number}\n */\n transitionDuration: 0.4,\n\n /**\n * Transition timing function.\n * @type {string}\n */\n transitionTimingFunction: 'cubic-bezier(0.4, 0, 0, 1)',\n\n /**\n * Overlay background color.\n * @type {string}\n */\n bgColor: 'rgb(255, 255, 255)',\n\n /**\n * Overlay background opacity.\n * @type {number}\n */\n bgOpacity: 1,\n\n /**\n * The base scale factor for zooming. By default scale to fit the window.\n * @type {number}\n */\n scaleBase: 1.0,\n\n /**\n * The additional scale factor when grabbing the image.\n * @type {number}\n */\n scaleExtra: 0.5,\n\n /**\n * How much scrolling it takes before closing out.\n * @type {number}\n */\n scrollThreshold: 40,\n\n /**\n * The z-index that the overlay will be added with.\n * @type {number}\n */\n zIndex: 998,\n\n /**\n * Scale (zoom in) to given width and height. Ignore scaleBase if set.\n * @type {Object}\n * @example\n * customSize: { width: 800, height: 400 }\n */\n customSize: null,\n\n /**\n * A callback function that will be called when a target is opened and\n * transition has ended. It will get the target element as the argument.\n * @type {Function}\n */\n onOpen: null,\n\n /**\n * Same as above, except fired when closed.\n * @type {Function}\n */\n onClose: null,\n\n /**\n * Same as above, except fired when released.\n * @type {Function}\n */\n onRelease: null,\n\n /**\n * A callback function that will be called before open.\n * @type {Function}\n */\n onBeforeOpen: null,\n\n /**\n * A callback function that will be called before close.\n * @type {Function}\n */\n onBeforeClose: null,\n\n /**\n * A callback function that will be called before grab.\n * @type {Function}\n */\n onBeforeGrab: null,\n\n /**\n * A callback function that will be called before release.\n * @type {Function}\n */\n onBeforeRelease: null\n}\n","import { listen, setStyle } from '../utils'\n\nexport default {\n init(instance) {\n this.el = document.createElement('div')\n this.instance = instance\n this.parent = document.body\n\n setStyle(this.el, {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n opacity: 0\n })\n\n this.updateStyle(instance.options)\n listen(this.el, 'click', instance.handler.clickOverlay.bind(instance))\n },\n\n updateStyle(options) {\n setStyle(this.el, {\n zIndex: options.zIndex,\n backgroundColor: options.bgColor,\n transition: `opacity\n ${options.transitionDuration}s\n ${options.transitionTimingFunction}`\n })\n },\n\n insert() {\n this.parent.appendChild(this.el)\n },\n\n remove() {\n this.parent.removeChild(this.el)\n },\n\n fadeIn() {\n this.el.offsetWidth\n this.el.style.opacity = this.instance.options.bgOpacity\n },\n\n fadeOut() {\n this.el.style.opacity = 0\n }\n}\n","import { listen } from './utils'\nimport Zooming from './modules/zooming'\n\nlisten(document, 'DOMContentLoaded', function initZooming() {\n new Zooming()\n})\n\nexport default Zooming\n"],"names":["listen","el","event","handler","add","options","passive","addEventListener","removeEventListener","loadImage","src","cb","img","Image","onload","getOriginalSource","hasAttribute","getAttribute","parentNode","tagName","setStyle","styles","remember","s","style","original","key","bindAll","_this","that","Object","getOwnPropertyNames","getPrototypeOf","forEach","method","bind","checkTrans","transitionProp","trans","transformProp","transition","value","transform","sniffTransition","res","tform","end","some","prop","undefined","transEndEvent","transformCssProp","replace","isLeftButton","e","button","isPressingMetaKey","metaKey","ctrlKey","isTouching","targetTouches","length","isEscape","code","keyCode","calculateTranslate","rect","windowCenter","getWindowCenter","targetCenter","left","width","top","height","x","y","calculateScale","scaleBase","customSize","targetHalfWidth","targetHalfHeight","targetEdgeToWindowEdge","scaleHorizontally","scaleVertically","scale","Math","min","docEl","document","documentElement","clientWidth","window","innerWidth","clientHeight","innerHeight","toggleGrabListeners","type","webkitPrefix","cursor","createElement","instance","this","preventDefault","open","target","srcOriginal","currentTarget","shown","released","close","release","body","scrollLeft","pageXOffset","scrollTop","pageYOffset","lastScrollPosition","deltaX","deltaY","threshold","scrollThreshold","abs","clientX","clientY","pressTimer","setTimeout","grab","move","touches","parent","updateStyle","clickOverlay","zIndex","bgColor","transitionDuration","transitionTimingFunction","appendChild","removeChild","offsetWidth","opacity","bgOpacity","srcThumbnail","getBoundingClientRect","translate","styleOpen","styleClose","enableGrab","zoomOut","scaleExtra","dx","dy","temp","cloneNode","setAttribute","position","visibility","Zooming","create","overlay","lock","babelHelpers.extends","DEFAULT_OPTIONS","init","defaultZoomable","els","querySelectorAll","i","zoomIn","click","preloadImage","onOpen","querySelector","onBeforeOpen","insert","fadeIn","scroll","keydown","closeOnWindowResize","resizeWindow","onOpenEnd","upgradeSource","onClose","onBeforeClose","default","fadeOut","onCloseEnd","downgradeSource","_this2","restoreCloseStyle","remove","onBeforeGrab","onGrabEnd","onMoveEnd","onRelease","onBeforeRelease","restoreOpenStyle","onReleaseEnd"],"mappings":"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"}