{"version":3,"sources":["webpack:///./src/js/util/dom.js","webpack:///./src/js/util/throwIfMissing.js","webpack:///./src/js/BoundingBox.js","webpack:///./src/js/Trigger.js","webpack:///./src/js/ZoomPane.js","webpack:///./src/js/Drift.js","webpack:///./src/js/injectBaseStylesheet.js","webpack:///./src/js/Drift-browser.js"],"names":["isDOMElement","obj","HAS_DOM_2","HTMLElement","addClasses","el","classNames","className","removeClasses","throwIfMissing","Error","constructor","options","namespace","zoomFactor","containerEl","zoomPane","sourceAttribute","handleTouch","onShow","onHide","hoverDelay","touchDelay","hoverBoundingBox","touchBoundingBox","boundingBoxContainer","BoundingBox","container","inline","showWhitespaceAtEdges","containInline","inlineOffsetX","inlineOffsetY","inlineContainer","document","triggerEl","TypeError","paneContainer","undefined","inlinePane","injectBaseStyles","styleEl","RULES","head","_buildClasses","suffix","classes","ns","settings","push","_buildElement","createElement","show","zoomPaneWidth","zoomPaneHeight","isShowing","appendChild","style","width","Math","round","height","openClasses","hide","removeChild","setPosition","percentageOffsetX","percentageOffsetY","triggerRect","pageXOffset","window","pageYOffset","inlineLeft","left","clientWidth","inlineTop","top","clientHeight","_preventDefault","event","preventDefault","_preventDefaultAllowTouchScroll","_isTouchEvent","touches","_bindEvents","addEventListener","_handleEntry","_hide","_handleMovement","_unbindEvents","removeEventListener","e","_lastMovement","type","entryTimeout","setTimeout","_show","enabled","getAttribute","touchActivated","boundingBox","clearTimeout","firstTouch","movementX","clientX","movementY","clientY","rect","getBoundingClientRect","Trigger","divStyle","HAS_ANIMATION","loaderEl","imgEl","_setImageURL","imageURL","setAttribute","_setImageSize","triggerWidth","triggerHeight","imgElWidth","offsetWidth","imgElHeight","offsetHeight","elWidth","elHeight","differenceBetweenContainerWidthAndImgWidth","differenceBetweenContainerHeightAndImgHeight","isContainerLargerThanImgX","isContainerLargerThanImgY","minLeft","minTop","maxLeft","maxTop","parentElement","scrollX","scrollY","transform","webkitTransform","_removeListenersAndResetClasses","_completeShow","_completeHide","closingClasses","loadingClasses","_handleLoad","_isInline","_showInline","_showInContainer","openingClasses","inlineClasses","ZoomPane","innerWidth","_buildZoomPane","_buildTrigger","trigger","setZoomImageURL","disable","enable","destroy","Drift","zf","Object","defineProperty","prototype","get","set","value"],"mappings":";;;kBAIAA,eAAAC,CAAAD,EACAA,MAAAE,EAAAF,CACAC,CADAD,WACAG,YADAH,CAEAC,CAFAD,EAEAA,QAFAA,GAEAA,MAAAC,EAFAD,EAEAA,IAFAA,GAEAC,CAFAD,EAEAA,CAFAA,GAEAC,CAFAD,CAEAA,QAFAA,EAEAA,QAFAA,GAEAA,MAAAC,EAAAD,SAHAA,EAMAI,WAAAC,CAAAD,CAAAE,CAAAF,EACAE,CAAAF,kBAAAG,CAAAH,EACAC,CAAAD,eAAAG,CAAAH,CADAA,EADAA,CANAJ,CAYAQ,WAAAH,CAAAG,CAAAF,CAAAE,EACAF,CAAAE,kBAAAD,CAAAC,EACAH,CAAAG,kBAAAD,CAAAC,CADAA,EADAA,CAZAR,CCJAS,aACAA,KAAAC,MAAAD,sBADAA,CDIAT,CEAAW,WAAAC,CAAAD,EACAA,iBAEWA,KAAAE,EAAAF,SAAkFC,CAAlFD,gBAAkFC,CAAlFD,WAAAG,EAAAH,SAAkFC,CAAlFD,YAAAF,CAAAE,GAAkFC,CAAlFD,WAAAI,GAAAJ,SAAkFC,CAAlFD,aAAAF,CAAAE,GAAkFC,CAAlFD,YAEXA,gBAAqBE,WAArBF,CAAqBG,YAArBH;AAAqBI,aAArBJ,CAEAA,4CAEAA,qBATAA,CFAAX,CGAAW,WAAAC,CAAAD,CAA0BA,CAA1BC,CAAAD,UAAAC,CAAAD,IAAAC,CACAD,iCACAA,iCACAA,+CACAA,qDAEAA,OAcKC,CAbLP,GAAAM,cAAAF,CAAAE,OACAA,KAAAK,EAAAL,oBAAAF,CAAAE,cACAM,EAAAN,2BAAAF,CAAAE,oBADAA,CAEAO,EAAAP,uBAAAF,CAAAE,gBAFAA,CAGAQ,EAAAR,+BAHAA,CAIAS,EAAAT;AAAAA,aAJAA,CAKAU,EAAAV,oCALAA,CAMAW,EAAAX,oCANAA,CAOAY,EAAAZ,4BAAAF,CAAAE,qBAPAA,CAQAa,EAAAb,4BAAAF,CAAAE,qBARAA,CASAE,EAAAF,qCATAA,CAUAG,EAAAH,sBAAAF,CAAAE,eACAc,GAAAd,gCAAAF,CAAAE,yBAGAA,gBACAN,IADAM,CAEAK,UAFAL,CAGAM,iBAHAN,CAIAO,aAJAP,CAKAQ,QALAR,CAMAS,QANAT,CAOAU,YAPAV,CAQAW,YARAX,CASAY,kBATAZ,CAUAa,kBAVAb,CAWAE,WAXAF,CAYAG,YAZAH;AAaAc,sBAbAd,CAgBAA,mEACAA,qBAAAe,CAAAf,EACAE,UAAAF,IAAAE,CAAAF,QAAAE,CAAAF,SADAA,CAEAG,WAAAH,IAAAG,CAAAH,QAAAG,CAAAH,UAFAA,CAGAI,YAAAJ,IAAAI,CAAAJ,QAAAI,CAAAJ,oBAHAA,EAOAA,gBAEAA,mBAhD0BA,CHA1BX,CIOAW,WAAAC,CAAAD,CAA0BA,CAA1BC,CAAAD,UAAAC,CAAAD,IAAAC,CACAD,iDACAA,iDACAA,6CAEAA,kBAGAA,KAAAgB,EAAAhB;AACAG,EAAAH,sBAAAF,CAAAE,eADAA,CAEAiB,EAAAjB,kBAAAF,CAAAE,WAFAA,CAGAE,EAAAF,qCAHAA,CAIAkB,EAAAlB,iCAAAF,CAAAE,0BAJAA,CAKAmB,EAAAnB,yBAAAF,CAAAE,kBAMAA,gBACAgB,WADAhB,CAEAG,YAFAH,CAGAiB,QAHAjB,CAIAE,WAJAF,CAKAkB,uBALAlB,CAMAmB,eANAnB,CAOAoB,cAZApB,MAAAoB,GAAApB,CAAAoB,CAAApB,aAAAoB,CAAApB,CAAAoB,CAAApB,CAAAoB,CAAApB,aAKAA,CAQAqB,cAZArB,MAAAqB,GAAArB,CAAAqB,CAAArB,aAAAqB,CAAArB,CAAAqB,CAAArB,CAAAqB,CAAArB,aAIAA,CASAsB,gBAZAtB,MAAAsB,GAAAtB,CAAAsB,CAAAtB,eAAAsB,CAAAC,QAAAD,CAAAtB,IAAAsB,CAAAtB,CAAAsB,CAAAtB,eAGAA,CAYAA;IAAAA,uCACAA,kDACAA,kDACAA,gDACAA,kDAEAA,qBArC0BA,CJP1BX,CKGAW,WAAAwB,CAAAxB,CAAAC,CAAAD,CAAqCA,CAArCC,CAAAD,UAAAC,CAAAD,IAAAC,CACAD,qBACAA,gBAAAwB,CAEAxB,qCAEAA,KAAAX,CAAAW,iBACAA,UAAAyB,SAAAzB,8DAMAE,EAAAD,CAAAC,CAAAF,SAAAE,EAAAF,IAEAA,KAAAkB;AAAAjB,CAAAiB,CAAAlB,qBAAAkB,EAAAlB,GAGAmB,EAAAlB,CAAAkB,CAAAnB,aAAAmB,EAAAnB,EAHAA,CAMAoB,EAAAnB,CAAAmB,CAAApB,aAAAoB,EAAApB,CANAA,CAOAqB,EAAApB,CAAAoB,CAAArB,aAAAqB,EAAArB,CAPAA,CASAsB,EAAArB,CAAAqB,CAAAtB,eAAAsB,EAAAC,QAAAD,CAAAtB,IATAA,CAWAM,EAAAL,CAAAK,CAAAN,eAAAM,EAAAN,WAXAA,CAeAG,EAAAF,CAAAE,CAAAH,UAAAG,EAAAH,CAfAA,CAkBA0B,EAAAC,MAAA3B,GAAAC,CAAAD,eAAAuB,QAAAvB,MAAAC,CAAAD,cAlBAA,CAsBA4B,EAAA3B,CAAA2B,CAAA5B,UAAA4B,EAAA5B,GAtBAA,CAwBAO,EAAAP,eAAAC,EAAAD,GAAAC,CAAAD,eAxBAA,CA2BAQ,EAAAP,CAAAO,CAAAR,MAAAQ,EAAAR,IA3BAA,CA8BAS,EAAAR,CAAAQ,CAAAT,MAAAS,EAAAT,IA9BAA,CAiCA6B,EAAA7B,oBAAAC,EAAAD,GAAAC,CAAAD,oBAjCAA,CAoCAU,EAAAT,CAAAS,CAAAV,UAAAU,EAAAV,CApCAA,CAyCAW,EAAAV,CAAAU,CAAAX,UAAAW,EAAAX,CAzCAA,CA4CAY,EAAAX,CAAAW,CAAAZ,gBAAAY,EAAAZ,EA5CAA,CA+CAa,EAAAZ,CAAAY,CAAAb,gBAAAa,EAAAb,EAEAc,GAAAb,CAAAa,CAAAd,oBAAAc,EAAAS,QAAAT,CAAAd,IAEAA;GAAAA,KAAA4B,CAAA5B,GAAAX,CAAAW,CAAA0B,CAAA1B,EACAA,UAAAyB,SAAAzB,qEAEAA,IAAAX,CAAAW,CAAAsB,CAAAtB,EACAA,UAAAyB,SAAAzB,4CAGAA,eACAE,WADAF,CAEAkB,uBAFAlB,CAGAmB,eAHAnB,CAIAoB,eAJApB,CAKAqB,eALArB,CAMAsB,iBANAtB,CAOAM,iBAPAN,CAQAG,YARAH,CASA0B,eATA1B,CAUA4B,YAVA5B,CAWAO,aAXAP,CAYAQ,QAZAR,CAaAS,QAbAT,CAcA6B,kBAdA7B,CAeAU,YAfAV,CAgBAW,YAhBAX,CAiBAY,kBAjBAZ,CAkBAa,kBAlBAb,CAmBAc,sBAnBAd,CAsBAA;ACjDAA,CAAAuB,QAAAvB,oCDiDAA,GC7CA8B,CAOA9B,CAPAuB,QAAAvB,uBAOAA,CANA8B,CAMA9B,CANAA,IAMAA,CANAA,UAMAA,CALA8B,CAAA9B,mCAKAA,CAHA8B,CAAA9B,aAAAuB,QAAAvB,gBAXA+B,+dAWA/B,EAGAA;AADAgC,CACAhC,CADAuB,QACAvB,CADAA,IACAA,CAAAgC,CAAAhC,cAAA8B,CAAA9B,CAAAgC,CAAAhC,YDsCAA,CAIAA,sBACAA,qBApGqCA,CLHrCX,CAFAE,EAAA,QAAAA,GAAA,MAAAC,Y,CEcA,CAAAyC,CAAA,SAAAA,CAAA,aAAAA,SAAA,CAAAC,CAAA,EACA,IAAAC,EAAA,UAA8BD,CAA9B,EAEAE,EAAA,IAAAA,CAAAC,QAAAD,CAAAlC,SACAkC,EAAA,EACAD,CAAA,CAAAG,IAAA,CAAsBF,CAAtB,KAA4BF,CAA5B,CAGA,OAAAC,EARA,CAWA,EAAAI,CAAA,SAAAA,CAAA,aAAAA,SAAA,GACA,KAAA7C,EAAA,CAAA6B,QAAA,CAAAiB,aAAA,OACA/C,EAAA,MAAAC,EAAA,MAAAuC,aAAA,iBAFA,CAKA,EAAAQ,CAAA,SAAAA,CAAA,IAAAA,SAAA,CAAAC,CAAA,CAAAC,CAAA,EACA,KAAAC,SAAA,GAEA,MAAAP,QAAA,CAAAjC,WAAA,CAAAyC,WAAA,MAAAnD,EAAA,CAEA,KAAAoD,EAAA,IAAAA,CAAApD,EAAAoD,MACAA,EAAA,CAAAC,KAAA,CAAqBC,IAAA,CAAAC,KAAA,CAAAP,CAAA,MAAAL,QAAA,CAAAlC,UAAA,CAArB,KACA2C,EAAA,CAAAI,MAAA,CAAsBF,IAAA,CAAAC,KAAA,CAAAN,CAAA,MAAAN,QAAA,CAAAlC,UAAA,CAAtB,KAEAV,EAAA,MAAAC,EAAA,MAAAyD,WAAA,CATA,CAYA;CAAAC,CAAA,SAAAA,CAAA,IAAAA,SAAA,GACA,KAAAR,SAAA,EACA,KAAAP,QAAA,CAAAjC,WAAA,CAAAiD,WAAA,MAAA3D,EAAA,CAGA,MAAAkD,SAAA,GAEA/C,EAAA,MAAAH,EAAA,MAAAyD,WAAA,CAPA,CAUA;CAAAG,CAAA,SAAAA,CAAA,WAAAA,SAAA,CAAAC,CAAA,CAAAC,CAAA,CAAAC,CAAA,EACA,IAAAC,EAAAC,MAAAD,YAAA,CACAE,EAAAD,MAAAC,YAEAC,GAAAJ,CAAAI,CAAAC,IAAAD,CAAAN,CAAAM,CAAAJ,CAAAI,CAAAd,KAAAc,CAAA,IAAAA,CAAAnE,EAAAmE,CAAAE,WAAAF,CAAA,CAAAA,CAAAH,CACAM,GAAAP,CAAAO,CAAAC,GAAAD,CAAAR,CAAAQ,CAAAP,CAAAO,CAAAd,MAAAc,CAAA,IAAAA,CAAAtE,EAAAsE,CAAAE,YAAAF,CAAA,CAAAA,CAAAJ,CAEAC,EAAA,CAAAJ,CAAA,CAAAK,IAAA,CAAAJ,CAAA,CACAG,CADA,CACAJ,CADA,CACAK,IADA,CACAJ,CADA,CAEKG,CAFL,CAEK,IAFL,CAEKnE,EAFL,CAEKqE,WAFL,CAEKN,CAFL,CAEKK,IAFL,CAEKL,CAFL,CAEKV,KAFL,CAEKW,CAFL,GAGAG,CAHA,CAGAJ,CAHA,CAGAK,IAHA,CAGAL,CAHA,CAGAV,KAHA,CAGA,IAHA,CAGArD,EAHA,CAGAqE,WAHA,CAGAL,CAHA,CAMAM,EAAA,CAAAP,CAAA,CAAAQ,GAAA,CAAAL,CAAA,CACAI,CADA,CACAP,CADA,CACAQ,GADA,CACAL,CADA,CAEKI,CAFL,CAEK,IAFL,CAEKtE,EAFL,CAEKwE,YAFL,CAEKT,CAFL,CAEKQ,GAFL,CAEKR,CAFL,CAEKP,MAFL,CAEKU,CAFL,GAGAI,CAHA,CAGAP,CAHA,CAGAQ,GAHA,CAGAR,CAHA,CAGAP,MAHA,CAGA,IAHA,CAGAxD,EAHA,CAGAwE,YAHA,CAGAN,CAHA,CAMA,MAAAlE,EAAA,CAAAoD,KAAA,CAAAgB,IAAA,CAA4BD,CAA5B,KACA,MAAAnE,EAAA,CAAAoD,KAAA,CAAAmB,GAAA,CAA2BD,CAA3B,KApBA,C,CCKA,CAAAG,CAAA,SAAAA,CAAA,eAAAA,SAAA,CAAAC,CAAA,EACAA,CAAA,CAAAC,cAAA,EADA,CAIA,EAAAC,CAAA,SAAAA,CAAA,+BAAAA,SAAA,CAAAF,CAAA,EACA,KAAA/B,QAAA,CAAA1B,UAAA,OAAA4D,aAAA,CAAAH,CAAA,GAAAxB,CAAA,IAAAA,UAAA,EACAwB,CAAA,CAAAC,cAAA,EAFA,CAMA,EAAAE,CAAA,SAAAA,CAAA,aAAAA,SAAA,CAAAH,CAAA,EACA,QAAAA,CAAA,CAAAI,OADA,CAIA;CAAAC,CAAA,SAAAA,CAAA,WAAAA,SAAA,GACA,KAAApC,QAAA,CAAA3C,EAAA,CAAAgF,gBAAA,mBAAAC,YAAA,IACA,MAAAtC,QAAA,CAAA3C,EAAA,CAAAgF,gBAAA,mBAAAE,KAAA,IACA,MAAAvC,QAAA,CAAA3C,EAAA,CAAAgF,gBAAA,kBAAAG,eAAA,IAEA,MAAAxC,QAAA,CAAA9B,WAAA,EACA,KAAA8B,QAAA,CAAA3C,EAAA,CAAAgF,gBAAA,mBAAAC,YAAA,IAEA,CADA,KAAAtC,QAAA,CAAA3C,EAAA,CAAAgF,gBAAA,iBAAAE,KAAA,IACA,MAAAvC,QAAA,CAAA3C,EAAA,CAAAgF,gBAAA,kBAAAG,eAAA,IAHA,GAKA,KAAAxC,QAAA,CAAA3C,EAAA,CAAAgF,gBAAA;AAAA,KAAAP,eAAA,IAEA,CADA,KAAA9B,QAAA,CAAA3C,EAAA,CAAAgF,gBAAA,iBAAAP,eAAA,IACA,MAAA9B,QAAA,CAAA3C,EAAA,CAAAgF,gBAAA,kBAAAP,eAAA,IAPA,CALA,CAgBA;CAAAW,CAAA,SAAAA,CAAA,aAAAA,SAAA,GACA,KAAAzC,QAAA,CAAA3C,EAAA,CAAAqF,mBAAA,mBAAAJ,YAAA,IACA,MAAAtC,QAAA,CAAA3C,EAAA,CAAAqF,mBAAA,mBAAAH,KAAA,IACA,MAAAvC,QAAA,CAAA3C,EAAA,CAAAqF,mBAAA,kBAAAF,eAAA,IAEA,MAAAxC,QAAA,CAAA9B,WAAA,EACA,KAAA8B,QAAA,CAAA3C,EAAA,CAAAqF,mBAAA,mBAAAJ,YAAA,IAEA,CADA,KAAAtC,QAAA,CAAA3C,EAAA,CAAAqF,mBAAA,iBAAAH,KAAA,IACA,MAAAvC,QAAA,CAAA3C,EAAA,CAAAqF,mBAAA,kBAAAF,eAAA,IAHA,GAKA,KAAAxC,QAAA,CAAA3C,EAAA,CAAAqF,mBAAA;AAAA,KAAAZ,eAAA,IAEA,CADA,KAAA9B,QAAA,CAAA3C,EAAA,CAAAqF,mBAAA,iBAAAZ,eAAA,IACA,MAAA9B,QAAA,CAAA3C,EAAA,CAAAqF,mBAAA,kBAAAZ,eAAA,IAPA,CALA,CAgBA,EAAAQ,CAAA,SAAAA,CAAA,YAAAA,SAAA,CAAAK,CAAA,EACA,KAAAV,+BAAA,CAAAU,CAAA,CACA,MAAAC,aAAA,CAAAD,CAEA,eAAAA,CAAA,CAAAE,IAAA,OAAA7C,QAAA,CAAA3B,UAAA,CACA,IADA,CACAyE,YADA,CACAC,UAAA,MAAAC,KAAA,MAAAhD,QAAA,CAAA3B,UAAA,CADA,CAEK,KAAA2B,QAAA,CAAA1B,UAAA,CACL,IADK,CACLwE,YADK,CACLC,UAAA,MAAAC,KAAA,MAAAhD,QAAA,CAAA1B,UAAA,CADK,CAGL,KAAA0E,KAAA,EATA,CAaA;CAAAA,CAAA,SAAAA,CAAA,KAAAA,SAAA,GACA,QAAAC,OAAA,EAIA,IAAA9E,EAAA,IAAAA,CAAA6B,QAAA7B,OACAA,EAAA,qBAAAA,EAAA,EACAA,CAAA,EAGA,MAAA6B,QAAA,CAAAhC,QAAA,CAAAoC,IAAA,CACA,KAAAJ,QAAA,CAAA3C,EAAA,CAAA6F,YAAA,MAAAlD,QAAA,CAAA/B,eAAA,CADA,CAEA,IAFA,CAEA+B,QAFA,CAEA3C,EAFA,CAEAqE,WAFA,CAGA,IAHA,CAGA1B,QAHA,CAGA3C,EAHA,CAGAwE,YAHA,CAMA,MAAAe,aAAA,IACAO,CADA,CACA,IADA,CACAP,aADA,CACAT,OADA,GAEA,IAFA,CAEAnC,QAFA,CAEAxB,gBAFA,EAEA,CAAA2E,CAFA,EAEA,IAFA,CAEAnD,QAFA,CAEAzB,gBAFA,GAGA,KAAA6E,WAAA,CAAAhD,IAAA,MAAAJ,QAAA,CAAAhC,QAAA,CAAAX,EAAA,CAAAqE,WAAA,MAAA1B,QAAA,CAAAhC,QAAA,CAAAX,EAAA,CAAAwE,YAAA,CAIA,MAAAW,eAAA,EAtBA,CADA,CA0BA;CAAAD,CAAA,SAAAA,CAAA,KAAAA,SAAA,CAAAI,CAAA,EACAA,CAAA,EACA,KAAAV,+BAAA,CAAAU,CAAA,CAGA,MAAAC,aAAA,KAEA,MAAAE,YAAA,EACAO,YAAA,MAAAP,YAAA,CAGA,MAAAM,WAAA,EACA,KAAAA,WAAA,CAAArC,IAAA,EAIA,EADA3C,CACA,CADA,IACA,CADA4B,QACA,CADA5B,MACA,sBAAAA,EAAA,EACAA,CAAA,EAGA,MAAA4B,QAAA,CAAAhC,QAAA,CAAA+C,IAAA,EApBA,CAuBA;CAAAyB,CAAA,SAAAA,CAAA,eAAAA,SAAA,CAAAG,CAAA,EACA,GAAAA,CAAA,CACA,KAAAV,+BAAA,CAAAU,CAAA,CACA,MAAAC,aAAA,CAAAD,CAFA,KAGK,SAAAC,aAAA,CACLD,CAAA,MAAAC,aADK,KAGL,OAMA,IAAAD,CAAA,CAAAR,OAAA,EACAmB,EAAAX,CAAA,CAAAR,OAAA,GACA,KAAAoB,EAAAD,CAAAC,CAAAC,OACA,KAAAC,EAAAH,CAAAG,CAAAC,OAHA,KAKAH,EACA,CADAZ,CACA,CADAa,OACA,CAAAC,CAAA,CAAAd,CAAA,CAAAe,OAIAC,GADA,IACA,CADA3D,QACA,CADA3C,EACA,CAAAuG,qBAAA,EAIA1C,IAHAqC,CAGArC,CAHAyC,CAGAzC,CAHAO,IAGAP,EAAA,IAAAA,CAAAlB,QAAAkB,CAAA7D,EAAA6D,CAAAQ,WACAP,IAHAsC,CAGAtC,CAHAwC,CAGAxC,CAHAS,GAGAT,EAAA,IAAAA,CAAAnB,QAAAmB,CAAA9D,EAAA8D,CAAAU,YAEA,MAAAuB,WAAA,EACA,KAAAA,WAAA,CAAAnC,WAAA,CAAAC,CAAA,CAAAC,CAAA,CAAAwC,CAAA,CAGA,MAAA3D,QAAA,CAAAhC,QAAA,CAAAiD,WAAA,CAAAC,CAAA,CAAAC,CAAA,CAAAwC,CAAA,CAlCA,CApKA;MAAA,kCAAAE,CAAA,sBAoDA,mCAAAtD,QAAA,GACA,YAAAP,QAAA,CAAAhC,QAAA,CAAAuC,SADA,EApDA,E,CCEA,IAAAuD,EAAA5E,QAAA,CAAAiB,aAAA,OAAA2D,CAAArD,KAAA,CAEAsD,EACA,oBAAA7E,SAAA,iBAAA4E,EAAA,qBAAAA,EA2CA,EAAAlE,CAAA,SAAAA,CAAA,aAAAA,SAAA,CAAAC,CAAA,EACA,IAAAC,EAAA,UAA8BD,CAA9B,EAEAE,EAAA,IAAAA,CAAAC,QAAAD,CAAAlC,SACAkC,EAAA,EACAD,CAAA,CAAAG,IAAA,CAAsBF,CAAtB,KAA4BF,CAA5B,CAGA,OAAAC,EARA,CAWA,EAAAI,CAAA,SAAAA,CAAA,aAAAA,SAAA,GACA,KAAA7C,EAAA,CAAA6B,QAAA,CAAAiB,aAAA,OACA/C,EAAA,MAAAC,EAAA,MAAAuC,aAAA,cAEA,KAAAoE,EAAA9E,QAAA,CAAAiB,aAAA,OACA/C,EAAA,CAAA4G,CAAA,MAAApE,aAAA,qBACA,MAAAvC,EAAA,CAAAmD,WAAA,CAAAwD,CAAA,CAEA,MAAAC,KAAA,CAAA/E,QAAA,CAAAiB,aAAA,OACA,MAAA9C,EAAA,CAAAmD,WAAA,MAAAyD,KAAA,CATA,CAYA;CAAAC,CAAA,SAAAA,CAAA,YAAAA,SAAA,CAAAC,CAAA,EACA,KAAAF,KAAA,CAAAG,YAAA,OAAAD,CAAA,CADA,CAIA,EAAAE,CAAA,SAAAA,CAAA,aAAAA,SAAA,CAAAC,CAAA,CAAAC,CAAA,EACA,KAAAN,KAAA,CAAAxD,KAAA,CAAAC,KAAA,CAAgC4D,CAAhC,CAAgC,IAAhC,CAAgCtE,QAAhC,CAAgClC,UAAhC,KACA,MAAAmG,KAAA,CAAAxD,KAAA,CAAAI,MAAA,CAAiC0D,CAAjC,CAAiC,IAAjC,CAAiCvE,QAAjC,CAAiClC,UAAjC,KAFA,CAOA;CAAAmD,CAAA,SAAAA,CAAA,WAAAA,SAAA,CAAAC,CAAA,CAAAC,CAAA,CAAAC,CAAA,EACA,IAAAoD,EAAA,IAAAA,CAAAP,KAAAO,CAAAC,WAAA,CACAC,EAAA,IAAAA,CAAAT,KAAAS,CAAAC,YADA,CAEAC,EAAA,IAAAA,CAAAvH,EAAAuH,CAAAH,WAFA,CAGAI,EAAA,IAAAA,CAAAxH,EAAAwH,CAAAF,YAHA,CAWAlD,EANAmD,CAMAnD,CANA,CAMAA,CAHA+C,CAGA/C,CAHAP,CARA,CAYAU,EANAiD,CAMAjD,CANA,CAMAA,CAHA8C,CAGA9C,CAHAT,CATA,CAcA2D,EAAAF,CAAAE,CAAAN,CAdA,CAeAO,EAAAF,CAAAE,CAAAL,CAfA,CAgBAM,EAAA,CAAAA,CAAAF,CAhBA,CAiBAG,EAAA,CAAAA,CAAAF,CAEAG,GAAAF,CAAA,CAAAF,CAAA,IACAK,GAAAF,CAAA,CAAAF,CAAA,IAEAK,GAAAJ,CAAA,CACAF,CADA,CACA,CADA,CAEAA,CACAO,GAAAJ,CAAA,CACAF,CADA,CACA,CADA,CAEAA,CAEA,MAAA1H,EAAA,CAAAiI,aAAA,QAAAtF,QAAA,CAAAf,eAAA,GAKAsG,CAuBA,CAvBAjE,MAuBA,CAvBAD,WAuBA,CAtBAmE,CAsBA,CAtBAlE,MAsBA,CAtBAC,WAsBA,CApBAC,CAoBA,CAnBAJ,CAmBA,CAnBAK,IAmBA,CAnBAP,CAmBA,CAnBAE,CAmBA,CAnBAV,KAmBA,CAnBAkE,CAmBA,CAnBA,CAmBA,CAnBA,IAmBA,CAnBA5E,QAmBA,CAnBAjB,aAmBA,CAnBAwG,CAmBA,CAlBA5D,CAkBA,CAjBAP,CAiBA,CAjBAQ,GAiBA,CAjBAT,CAiBA,CAjBAC,CAiBA,CAjBAP,MAiBA,CAjBAgE,CAiBA,CAjBA,CAiBA,CAjBA,IAiBA,CAjBA7E,QAiBA,CAjBAhB,aAiBA,CAjBAwG,CAiBA,CAfA,IAeA,CAfAxF,QAeA,CAfAlB,aAeA,GAdA0C,CAAA,CAAAJ,CAAA,CAAAK,IAAA,CAAA8D,CAAA,CACA/D,CADA,CACAJ,CADA,CACAK,IADA,CACA8D,CADA,CAES/D,CAFT,CAESoD,CAFT,CAESxD,CAFT,CAESK,IAFT,CAESL,CAFT,CAESV,KAFT,CAES6E,CAFT;CAGA/D,CAHA,CAGAJ,CAHA,CAGAK,IAHA,CAGAL,CAHA,CAGAV,KAHA,CAGAkE,CAHA,CAGAW,CAHA,CAMA,CAAA5D,CAAA,CAAAP,CAAA,CAAAQ,GAAA,CAAA4D,CAAA,CACA7D,CADA,CACAP,CADA,CACAQ,GADA,CACA4D,CADA,CAES7D,CAFT,CAESkD,CAFT,CAESzD,CAFT,CAESQ,GAFT,CAESR,CAFT,CAESP,MAFT,CAES2E,CAFT,GAGA7D,CAHA,CAGAP,CAHA,CAGAQ,GAHA,CAGAR,CAHA,CAGAP,MAHA,CAGAgE,CAHA,CAGAW,CAHA,CAQA,EADA,IACA,CADAnI,EACA,CADAoD,KACA,CADAgB,IACA,CAD8BD,CAC9B,CADA,IACA,MAAAnE,EAAA,CAAAoD,KAAA,CAAAmB,GAAA,CAA6BD,CAA7B,KA5BA,CA+BA,MAAA3B,QAAA,CAAAnB,qBAAA,GACA4C,CAAA,CAAAyD,CAAA,CACAzD,CADA,CACAyD,CADA,CAEOzD,CAFP,CAEO2D,CAFP,GAGA3D,CAHA,CAGA2D,CAHA,CAMA,CAAAxD,CAAA,CAAAuD,CAAA,CACAvD,CADA,CACAuD,CADA,CAEOvD,CAFP,CAEOyD,CAFP,GAGAzD,CAHA,CAGAyD,CAHA,CAPA,CAcA,MAAApB,KAAA,CAAAxD,KAAA,CAAAgF,SAAA,cAA8ChE,CAA9C,QAAyDG,CAAzD,MACA,MAAAqC,KAAA,CAAAxD,KAAA,CAAAiF,eAAA,cAAoDjE,CAApD,QAA+DG,CAA/D,MA5EA,CAqFA;CAAA+D,CAAA,SAAAA,CAAA,+BAAAA,SAAA,GACA,KAAAtI,EAAA,CAAAqF,mBAAA,qBAAAkD,aAAA,IACA,MAAAvI,EAAA,CAAAqF,mBAAA,qBAAAmD,aAAA,IACA,MAAAxI,EAAA,CAAAqF,mBAAA,2BAAAkD,aAAA,IACA,MAAAvI,EAAA,CAAAqF,mBAAA,2BAAAmD,aAAA,IACArI,EAAA,MAAAH,EAAA,MAAAyD,WAAA,CACAtD,EAAA,MAAAH,EAAA,MAAAyI,cAAA,CANA,CASA;CAAA1F,CAAA,SAAAA,CAAA,IAAAA,SAAA,CAAA+D,CAAA,CAAAG,CAAA,CAAAC,CAAA,EACA,KAAAoB,+BAAA,EACA,MAAApF,SAAA,GAEAnD,EAAA,MAAAC,EAAA,MAAAyD,WAAA,CAEA,MAAAmD,KAAA,CAAAf,YAAA,SAAAiB,CAAA,GACA/G,CAAA,MAAAC,EAAA,MAAA0I,cAAA,CAEA,CADA,KAAA9B,KAAA,CAAA5B,gBAAA,aAAA2D,WAAA,IACA,MAAA9B,YAAA,CAAAC,CAAA,CAHA,CAMA,MAAAE,aAAA,CAAAC,CAAA,CAAAC,CAAA,CAEA,MAAA0B,SAAA,CACA,KAAAC,WAAA,EADA,CAGA,KAAAC,gBAAA,EAGApC,EAAA,GACA,KAAA1G,EAAA,CAAAgF,gBAAA,qBAAAuD,aAAA,IAEA,CADA,KAAAvI,EAAA,CAAAgF,gBAAA,2BAAAuD,aAAA,IACA,CAAAxI,CAAA,MAAAC,EAAA,MAAA+I,cAAA,CAHA,CApBA,CA2BA;CAAAF,CAAA,SAAAA,CAAA,WAAAA,SAAA,GACA,KAAAlG,QAAA,CAAAf,eAAA,CAAAuB,WAAA,MAAAnD,EAAA,CACAD,EAAA,MAAAC,EAAA,MAAAgJ,aAAA,CAFA,CAKA,EAAAF,CAAA,SAAAA,CAAA,gBAAAA,SAAA,GACA,KAAAnG,QAAA,CAAArB,SAAA,CAAA6B,WAAA,MAAAnD,EAAA,CADA,CAIA,EAAA0D,CAAA,SAAAA,CAAA,IAAAA,SAAA,GACA,KAAA4E,+BAAA,EACA,MAAApF,SAAA,GAEAwD,EAAA,EACA,KAAA1G,EAAA,CAAAgF,gBAAA,qBAAAwD,aAAA,IAEA,CADA,KAAAxI,EAAA,CAAAgF,gBAAA,2BAAAwD,aAAA,IACA,CAAAzI,CAAA,MAAAC,EAAA,MAAAyI,cAAA,CAHA,GAKAtI,CAAA,MAAAH,EAAA,MAAAyD,WAAA,CACA,CAAAtD,CAAA,MAAAH,EAAA,MAAAgJ,aAAA,CANA,CAJA,CAcA;CAAAT,CAAA,SAAAA,CAAA,aAAAA,SAAA,GACA,KAAAvI,EAAA,CAAAqF,mBAAA,qBAAAkD,aAAA,IACA,MAAAvI,EAAA,CAAAqF,mBAAA,2BAAAkD,aAAA,IAEApI,EAAA,MAAAH,EAAA,MAAA+I,cAAA,CAJA,CAOA;CAAAP,CAAA,SAAAA,CAAA,aAAAA,SAAA,GACA,KAAAxI,EAAA,CAAAqF,mBAAA,qBAAAmD,aAAA,IACA,MAAAxI,EAAA,CAAAqF,mBAAA,2BAAAmD,aAAA,IAEArI,EAAA,MAAAH,EAAA,MAAAyD,WAAA,CACAtD,EAAA,MAAAH,EAAA,MAAAyI,cAAA,CACAtI,EAAA,MAAAH,EAAA,MAAAgJ,aAAA,CAEA,MAAAhJ,EAAA,CAAAoD,KAAA,GAKA,MAAApD,EAAA,CAAAiI,aAAA,QAAAtF,QAAA,CAAArB,SAAA,CACA,KAAAqB,QAAA,CAAArB,SAAA,CAAAqC,WAAA,MAAA3D,EAAA,CADA,CAEK,IAFL,CAEKA,EAFL,CAEKiI,aAFL,GAEK,IAFL,CAEKtF,QAFL,CAEKf,eAFL,EAGA,KAAAe,QAAA,CAAAf,eAAA,CAAA+B,WAAA,MAAA3D,EAAA,CAhBA,CAoBA;CAAA2I,CAAA,SAAAA,CAAA,WAAAA,SAAA,GACA,KAAA/B,KAAA,CAAAvB,mBAAA,aAAAsD,WAAA,IACAxI,EAAA,MAAAH,EAAA,MAAA0I,cAAA,CAFA,CAtPA,yCAAAO,CAAA,sBA0JA,mCAAAL,QAAA,GACA,IAAArH,EAAA,IAAAA,CAAAoB,QAAApB,OAEA,YAAAA,CAAA,mBAAAA,EAAA,EAAA0C,MAAA,CAAAiF,UAAA,EAAA3H,CAHA,EA1JA,E,CCmHA,CAAA4H,CAAA,SAAAA,CAAA,cAAAA,SAAA,GACA,KAAAxI,QAAA,KAAAsI,CAAA,EACA3H,UAAA,IAAAA,CAAAqB,QAAArB,CAAAU,aADA,CAEAvB,WAAA,IAAAA,CAAAkC,QAAAlC,WAFA,CAGAe,sBAAA,IAAAA,CAAAmB,QAAAnB,sBAHA,CAIAC,cAAA,IAAAA,CAAAkB,QAAAlB,cAJA,CAKAF,OAAA,IAAAA,CAAAoB,QAAApB,CAAAW,UALA,CAMA1B,UAAA,IAAAA,CAAAmC,QAAAnC,UANA,CAOAkB,cAAA,IAAAA,CAAAiB,QAAAjB,cAPA,CAQAC,cAAA,IAAAA,CAAAgB,QAAAhB,cARA,CASAC,gBAAA,IAAAA,CAAAe,QAAAf,gBATA,EADA,CAcA;CAAAwH,CAAA,SAAAA,CAAA,aAAAA,SAAA,GACA,KAAAC,OAAA,KAAA7C,CAAA,EACAxG,GAAA,IAAAA,CAAA8B,SADA,CAEAnB,SAAA,IAAAA,SAFA,CAGAE,YAAA,IAAAA,CAAA8B,QAAA9B,YAHA,CAIAC,OAAA,IAAAA,CAAA6B,QAAA7B,OAJA,CAKAC,OAAA,IAAAA,CAAA4B,QAAA5B,OALA,CAMAH,gBAAA,IAAAA,CAAA+B,QAAA/B,gBANA,CAOAI,WAAA,IAAAA,CAAA2B,QAAA3B,WAPA,CAQAC,WAAA,IAAAA,CAAA0B,QAAA1B,WARA,CASAC,iBAAA,IAAAA,CAAAyB,QAAAzB,iBATA,CAUAC,iBAAA,IAAAA,CAAAwB,QAAAxB,iBAVA,CAWAX,UAAA,IAAAA,CAAAmC,QAAAnC,UAXA,CAYAC,WAAA,IAAAA,CAAAkC,QAAAlC,WAZA,CAaAW,qBAAA,IAAAA,CAAAuB,QAAAvB,qBAbA,EADA,CAkBA;CAAAkI,CAAA,SAAAA,CAAA,eAAAA,SAAA,CAAAxC,CAAA,EACA,KAAAnG,QAAA,CAAAkG,YAAA,CAAAC,CAAA,CADA,CAIA,EAAAyC,CAAA,SAAAA,CAAA,OAAAA,SAAA,GACA,KAAAF,OAAA,CAAAzD,OAAA,GADA,CAIA,EAAA4D,CAAA,SAAAA,CAAA,MAAAA,SAAA,GACA,KAAAH,OAAA,CAAAzD,OAAA,GADA,CAIA,EAAA6D,CAAA,SAAAA,CAAA,OAAAA,SAAA,GACA,KAAAJ,OAAA,CAAAnE,KAAA,EACA,MAAAmE,OAAA,CAAAjE,aAAA,EAFA,CAnKA;MAAA,kCAAAsE,CAAA,sBAwGA,mCAAAxG,QAAA,GACA,YAAAvC,QAAA,CAAAuC,SADA,EAxGA,YA4GA,mCAAAzC,QAAA,GACA,YAAAkC,QAAA,CAAAlC,UADA,EAIA,IAAAA,QAAA,CAAAkJ,CAAA,EACA,KAAAhH,QAAA,CAAAlC,UAAA,CAAAkJ,CACA,MAAAhJ,QAAA,CAAAgC,QAAA,CAAAlC,UAAA,CAAAkJ,CACA,MAAAN,OAAA,CAAA1G,QAAA,CAAAlC,UAAA,CAAAkJ,CACA,MAAA5D,WAAA,CAAApD,QAAA,CAAAlC,UAAA,CAAAkJ,CAJA,CAJA,CA5GA,EA2KAC,OAAA,CAAAC,cAAA,CAAAH,CAAA,CAAAI,SAAA,cACAC,YAAA,GACA,YAAA7G,SADA,CADA,EAKA0G;MAAA,CAAAC,cAAA,CAAAH,CAAA,CAAAI,SAAA,eACAC,YAAA,GACA,YAAAtJ,UADA,CADA,CAIAuJ,YAAA,CAAAC,CAAA,EACA,KAAAxJ,UAAA,CAAAwJ,CADA,CAJA,EAQAP,EAAA,CAAAI,SAAA,iBAAAJ,CAAA,CAAAI,SAAA,CAAAR,eACAI,EAAA,CAAAI,SAAA,SAAAJ,CAAA,CAAAI,SAAA,CAAAP,OACAG,EAAA,CAAAI,SAAA,QAAAJ,CAAA,CAAAI,SAAA,CAAAN,MACAE,EAAA,CAAAI,SAAA,SAAAJ,CAAA,CAAAI,SAAA,CAAAL,O,CE7LAxF,MAAA,OAAAyF","file":"Drift.min.js","sourcesContent":["// This is not really a perfect check, but works fine.\n// From http://stackoverflow.com/questions/384286\nconst HAS_DOM_2 = typeof HTMLElement === \"object\";\n\nexport function isDOMElement(obj) {\n return HAS_DOM_2\n ? obj instanceof HTMLElement\n : obj && typeof obj === \"object\" && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === \"string\";\n}\n\nexport function addClasses(el, classNames) {\n classNames.forEach(function (className) {\n el.classList.add(className);\n });\n}\n\nexport function removeClasses(el, classNames) {\n classNames.forEach(function (className) {\n el.classList.remove(className);\n });\n}\n","export default function throwIfMissing() {\n throw new Error(\"Missing parameter\");\n}\n","import throwIfMissing from \"1\"\nimport { addClasses, removeClasses } from \"0\"\n\nexport default class BoundingBox {\n constructor(options) {\n this.isShowing = false;\n\n const { namespace = null, zoomFactor = throwIfMissing(), containerEl = throwIfMissing() } = options;\n\n this.settings = { namespace, zoomFactor, containerEl };\n\n this.openClasses = this._buildClasses(\"open\");\n\n this._buildElement();\n }\n\n _buildClasses(suffix) {\n const classes = [`drift-${suffix}`];\n\n const ns = this.settings.namespace;\n if (ns) {\n classes.push(`${ns}-${suffix}`);\n }\n\n return classes;\n }\n\n _buildElement() {\n this.el = document.createElement(\"div\");\n addClasses(this.el, this._buildClasses(\"bounding-box\"));\n }\n\n show(zoomPaneWidth, zoomPaneHeight) {\n this.isShowing = true;\n\n this.settings.containerEl.appendChild(this.el);\n\n const style = this.el.style;\n style.width = `${Math.round(zoomPaneWidth / this.settings.zoomFactor)}px`;\n style.height = `${Math.round(zoomPaneHeight / this.settings.zoomFactor)}px`;\n\n addClasses(this.el, this.openClasses);\n }\n\n hide() {\n if (this.isShowing) {\n this.settings.containerEl.removeChild(this.el);\n }\n\n this.isShowing = false;\n\n removeClasses(this.el, this.openClasses);\n }\n\n setPosition(percentageOffsetX, percentageOffsetY, triggerRect) {\n const pageXOffset = window.pageXOffset;\n const pageYOffset = window.pageYOffset;\n\n let inlineLeft = triggerRect.left + percentageOffsetX * triggerRect.width - this.el.clientWidth / 2 + pageXOffset;\n let inlineTop = triggerRect.top + percentageOffsetY * triggerRect.height - this.el.clientHeight / 2 + pageYOffset;\n\n if (inlineLeft < triggerRect.left + pageXOffset) {\n inlineLeft = triggerRect.left + pageXOffset;\n } else if (inlineLeft + this.el.clientWidth > triggerRect.left + triggerRect.width + pageXOffset) {\n inlineLeft = triggerRect.left + triggerRect.width - this.el.clientWidth + pageXOffset;\n }\n\n if (inlineTop < triggerRect.top + pageYOffset) {\n inlineTop = triggerRect.top + pageYOffset;\n } else if (inlineTop + this.el.clientHeight > triggerRect.top + triggerRect.height + pageYOffset) {\n inlineTop = triggerRect.top + triggerRect.height - this.el.clientHeight + pageYOffset;\n }\n\n this.el.style.left = `${inlineLeft}px`;\n this.el.style.top = `${inlineTop}px`;\n }\n}\n","import throwIfMissing from \"1\"\nimport BoundingBox from \"5\"\n\nexport default class Trigger {\n constructor(options = {}) {\n this._show = this._show.bind(this);\n this._hide = this._hide.bind(this);\n this._handleEntry = this._handleEntry.bind(this);\n this._handleMovement = this._handleMovement.bind(this);\n\n const {\n el = throwIfMissing(),\n zoomPane = throwIfMissing(),\n sourceAttribute = throwIfMissing(),\n handleTouch = throwIfMissing(),\n onShow = null,\n onHide = null,\n hoverDelay = 0,\n touchDelay = 0,\n hoverBoundingBox = throwIfMissing(),\n touchBoundingBox = throwIfMissing(),\n namespace = null,\n zoomFactor = throwIfMissing(),\n boundingBoxContainer = throwIfMissing(),\n } = options;\n\n this.settings = {\n el,\n zoomPane,\n sourceAttribute,\n handleTouch,\n onShow,\n onHide,\n hoverDelay,\n touchDelay,\n hoverBoundingBox,\n touchBoundingBox,\n namespace,\n zoomFactor,\n boundingBoxContainer,\n };\n\n if (this.settings.hoverBoundingBox || this.settings.touchBoundingBox) {\n this.boundingBox = new BoundingBox({\n namespace: this.settings.namespace,\n zoomFactor: this.settings.zoomFactor,\n containerEl: this.settings.boundingBoxContainer,\n });\n }\n\n this.enabled = true;\n\n this._bindEvents();\n }\n\n get isShowing() {\n return this.settings.zoomPane.isShowing;\n }\n\n _preventDefault(event) {\n event.preventDefault();\n }\n\n _preventDefaultAllowTouchScroll(event) {\n if (!this.settings.touchDelay || !this._isTouchEvent(event) || this.isShowing) {\n event.preventDefault();\n }\n }\n\n _isTouchEvent(event) {\n return !!event.touches;\n }\n\n _bindEvents() {\n this.settings.el.addEventListener(\"mouseenter\", this._handleEntry, false);\n this.settings.el.addEventListener(\"mouseleave\", this._hide, false);\n this.settings.el.addEventListener(\"mousemove\", this._handleMovement, false);\n\n if (this.settings.handleTouch) {\n this.settings.el.addEventListener(\"touchstart\", this._handleEntry, false);\n this.settings.el.addEventListener(\"touchend\", this._hide, false);\n this.settings.el.addEventListener(\"touchmove\", this._handleMovement, false);\n } else {\n this.settings.el.addEventListener(\"touchstart\", this._preventDefault, false);\n this.settings.el.addEventListener(\"touchend\", this._preventDefault, false);\n this.settings.el.addEventListener(\"touchmove\", this._preventDefault, false);\n }\n }\n\n _unbindEvents() {\n this.settings.el.removeEventListener(\"mouseenter\", this._handleEntry, false);\n this.settings.el.removeEventListener(\"mouseleave\", this._hide, false);\n this.settings.el.removeEventListener(\"mousemove\", this._handleMovement, false);\n\n if (this.settings.handleTouch) {\n this.settings.el.removeEventListener(\"touchstart\", this._handleEntry, false);\n this.settings.el.removeEventListener(\"touchend\", this._hide, false);\n this.settings.el.removeEventListener(\"touchmove\", this._handleMovement, false);\n } else {\n this.settings.el.removeEventListener(\"touchstart\", this._preventDefault, false);\n this.settings.el.removeEventListener(\"touchend\", this._preventDefault, false);\n this.settings.el.removeEventListener(\"touchmove\", this._preventDefault, false);\n }\n }\n\n _handleEntry(e) {\n this._preventDefaultAllowTouchScroll(e);\n this._lastMovement = e;\n\n if (e.type == \"mouseenter\" && this.settings.hoverDelay) {\n this.entryTimeout = setTimeout(this._show, this.settings.hoverDelay);\n } else if (this.settings.touchDelay) {\n this.entryTimeout = setTimeout(this._show, this.settings.touchDelay);\n } else {\n this._show();\n }\n }\n\n _show() {\n if (!this.enabled) {\n return;\n }\n\n const onShow = this.settings.onShow;\n if (onShow && typeof onShow === \"function\") {\n onShow();\n }\n\n this.settings.zoomPane.show(\n this.settings.el.getAttribute(this.settings.sourceAttribute),\n this.settings.el.clientWidth,\n this.settings.el.clientHeight\n );\n\n if (this._lastMovement) {\n const touchActivated = this._lastMovement.touches;\n if ((touchActivated && this.settings.touchBoundingBox) || (!touchActivated && this.settings.hoverBoundingBox)) {\n this.boundingBox.show(this.settings.zoomPane.el.clientWidth, this.settings.zoomPane.el.clientHeight);\n }\n }\n\n this._handleMovement();\n }\n\n _hide(e) {\n if (e) {\n this._preventDefaultAllowTouchScroll(e);\n }\n\n this._lastMovement = null;\n\n if (this.entryTimeout) {\n clearTimeout(this.entryTimeout);\n }\n\n if (this.boundingBox) {\n this.boundingBox.hide();\n }\n\n const onHide = this.settings.onHide;\n if (onHide && typeof onHide === \"function\") {\n onHide();\n }\n\n this.settings.zoomPane.hide();\n }\n\n _handleMovement(e) {\n if (e) {\n this._preventDefaultAllowTouchScroll(e);\n this._lastMovement = e;\n } else if (this._lastMovement) {\n e = this._lastMovement;\n } else {\n return;\n }\n\n let movementX;\n let movementY;\n\n if (e.touches) {\n const firstTouch = e.touches[0];\n movementX = firstTouch.clientX;\n movementY = firstTouch.clientY;\n } else {\n movementX = e.clientX;\n movementY = e.clientY;\n }\n\n const el = this.settings.el;\n const rect = el.getBoundingClientRect();\n const offsetX = movementX - rect.left;\n const offsetY = movementY - rect.top;\n\n const percentageOffsetX = offsetX / this.settings.el.clientWidth;\n const percentageOffsetY = offsetY / this.settings.el.clientHeight;\n\n if (this.boundingBox) {\n this.boundingBox.setPosition(percentageOffsetX, percentageOffsetY, rect);\n }\n\n this.settings.zoomPane.setPosition(percentageOffsetX, percentageOffsetY, rect);\n }\n}\n","import throwIfMissing from \"1\"\nimport { addClasses, removeClasses } from \"0\"\n\n// All officially-supported browsers have this, but it's easy to\n// account for, just in case.\nconst divStyle = document.createElement(\"div\").style;\n\nconst HAS_ANIMATION =\n typeof document === \"undefined\" ? false : \"animation\" in divStyle || \"webkitAnimation\" in divStyle;\n\nexport default class ZoomPane {\n constructor(options = {}) {\n this._completeShow = this._completeShow.bind(this);\n this._completeHide = this._completeHide.bind(this);\n this._handleLoad = this._handleLoad.bind(this);\n\n this.isShowing = false;\n\n const {\n container = null,\n zoomFactor = throwIfMissing(),\n inline = throwIfMissing(),\n namespace = null,\n showWhitespaceAtEdges = throwIfMissing(),\n containInline = throwIfMissing(),\n inlineOffsetX = 0,\n inlineOffsetY = 0,\n inlineContainer = document.body,\n } = options;\n\n this.settings = {\n container,\n zoomFactor,\n inline,\n namespace,\n showWhitespaceAtEdges,\n containInline,\n inlineOffsetX,\n inlineOffsetY,\n inlineContainer,\n };\n\n this.openClasses = this._buildClasses(\"open\");\n this.openingClasses = this._buildClasses(\"opening\");\n this.closingClasses = this._buildClasses(\"closing\");\n this.inlineClasses = this._buildClasses(\"inline\");\n this.loadingClasses = this._buildClasses(\"loading\");\n\n this._buildElement();\n }\n\n _buildClasses(suffix) {\n const classes = [`drift-${suffix}`];\n\n const ns = this.settings.namespace;\n if (ns) {\n classes.push(`${ns}-${suffix}`);\n }\n\n return classes;\n }\n\n _buildElement() {\n this.el = document.createElement(\"div\");\n addClasses(this.el, this._buildClasses(\"zoom-pane\"));\n\n const loaderEl = document.createElement(\"div\");\n addClasses(loaderEl, this._buildClasses(\"zoom-pane-loader\"));\n this.el.appendChild(loaderEl);\n\n this.imgEl = document.createElement(\"img\");\n this.el.appendChild(this.imgEl);\n }\n\n _setImageURL(imageURL) {\n this.imgEl.setAttribute(\"src\", imageURL);\n }\n\n _setImageSize(triggerWidth, triggerHeight) {\n this.imgEl.style.width = `${triggerWidth * this.settings.zoomFactor}px`;\n this.imgEl.style.height = `${triggerHeight * this.settings.zoomFactor}px`;\n }\n\n // `percentageOffsetX` and `percentageOffsetY` must be percentages\n // expressed as floats between `0' and `1`.\n setPosition(percentageOffsetX, percentageOffsetY, triggerRect) {\n const imgElWidth = this.imgEl.offsetWidth;\n const imgElHeight = this.imgEl.offsetHeight;\n const elWidth = this.el.offsetWidth;\n const elHeight = this.el.offsetHeight;\n\n const centreOfContainerX = elWidth / 2;\n const centreOfContainerY = elHeight / 2;\n\n const targetImgXToBeCentre = imgElWidth * percentageOffsetX;\n const targetImgYToBeCentre = imgElHeight * percentageOffsetY;\n\n let left = centreOfContainerX - targetImgXToBeCentre;\n let top = centreOfContainerY - targetImgYToBeCentre;\n\n const differenceBetweenContainerWidthAndImgWidth = elWidth - imgElWidth;\n const differenceBetweenContainerHeightAndImgHeight = elHeight - imgElHeight;\n const isContainerLargerThanImgX = differenceBetweenContainerWidthAndImgWidth > 0;\n const isContainerLargerThanImgY = differenceBetweenContainerHeightAndImgHeight > 0;\n\n const minLeft = isContainerLargerThanImgX ? differenceBetweenContainerWidthAndImgWidth / 2 : 0;\n const minTop = isContainerLargerThanImgY ? differenceBetweenContainerHeightAndImgHeight / 2 : 0;\n\n const maxLeft = isContainerLargerThanImgX\n ? differenceBetweenContainerWidthAndImgWidth / 2\n : differenceBetweenContainerWidthAndImgWidth;\n const maxTop = isContainerLargerThanImgY\n ? differenceBetweenContainerHeightAndImgHeight / 2\n : differenceBetweenContainerHeightAndImgHeight;\n\n if (this.el.parentElement === this.settings.inlineContainer) {\n // This may be needed in the future to deal with browser event\n // inconsistencies, but it's difficult to tell for sure.\n // let scrollX = isTouch ? 0 : window.scrollX;\n // let scrollY = isTouch ? 0 : window.scrollY;\n const scrollX = window.pageXOffset;\n const scrollY = window.pageYOffset;\n\n let inlineLeft =\n triggerRect.left + percentageOffsetX * triggerRect.width - elWidth / 2 + this.settings.inlineOffsetX + scrollX;\n let inlineTop =\n triggerRect.top + percentageOffsetY * triggerRect.height - elHeight / 2 + this.settings.inlineOffsetY + scrollY;\n\n if (this.settings.containInline) {\n if (inlineLeft < triggerRect.left + scrollX) {\n inlineLeft = triggerRect.left + scrollX;\n } else if (inlineLeft + elWidth > triggerRect.left + triggerRect.width + scrollX) {\n inlineLeft = triggerRect.left + triggerRect.width - elWidth + scrollX;\n }\n\n if (inlineTop < triggerRect.top + scrollY) {\n inlineTop = triggerRect.top + scrollY;\n } else if (inlineTop + elHeight > triggerRect.top + triggerRect.height + scrollY) {\n inlineTop = triggerRect.top + triggerRect.height - elHeight + scrollY;\n }\n }\n\n this.el.style.left = `${inlineLeft}px`;\n this.el.style.top = `${inlineTop}px`;\n }\n\n if (!this.settings.showWhitespaceAtEdges) {\n if (left > minLeft) {\n left = minLeft;\n } else if (left < maxLeft) {\n left = maxLeft;\n }\n\n if (top > minTop) {\n top = minTop;\n } else if (top < maxTop) {\n top = maxTop;\n }\n }\n\n this.imgEl.style.transform = `translate(${left}px, ${top}px)`;\n this.imgEl.style.webkitTransform = `translate(${left}px, ${top}px)`;\n }\n\n get _isInline() {\n const inline = this.settings.inline;\n\n return inline === true || (typeof inline === \"number\" && window.innerWidth <= inline);\n }\n\n _removeListenersAndResetClasses() {\n this.el.removeEventListener(\"animationend\", this._completeShow, false);\n this.el.removeEventListener(\"animationend\", this._completeHide, false);\n this.el.removeEventListener(\"webkitAnimationEnd\", this._completeShow, false);\n this.el.removeEventListener(\"webkitAnimationEnd\", this._completeHide, false);\n removeClasses(this.el, this.openClasses);\n removeClasses(this.el, this.closingClasses);\n }\n\n show(imageURL, triggerWidth, triggerHeight) {\n this._removeListenersAndResetClasses();\n this.isShowing = true;\n\n addClasses(this.el, this.openClasses);\n\n if (this.imgEl.getAttribute(\"src\") != imageURL) {\n addClasses(this.el, this.loadingClasses);\n this.imgEl.addEventListener(\"load\", this._handleLoad, false);\n this._setImageURL(imageURL);\n }\n\n this._setImageSize(triggerWidth, triggerHeight);\n\n if (this._isInline) {\n this._showInline();\n } else {\n this._showInContainer();\n }\n\n if (HAS_ANIMATION) {\n this.el.addEventListener(\"animationend\", this._completeShow, false);\n this.el.addEventListener(\"webkitAnimationEnd\", this._completeShow, false);\n addClasses(this.el, this.openingClasses);\n }\n }\n\n _showInline() {\n this.settings.inlineContainer.appendChild(this.el);\n addClasses(this.el, this.inlineClasses);\n }\n\n _showInContainer() {\n this.settings.container.appendChild(this.el);\n }\n\n hide() {\n this._removeListenersAndResetClasses();\n this.isShowing = false;\n\n if (HAS_ANIMATION) {\n this.el.addEventListener(\"animationend\", this._completeHide, false);\n this.el.addEventListener(\"webkitAnimationEnd\", this._completeHide, false);\n addClasses(this.el, this.closingClasses);\n } else {\n removeClasses(this.el, this.openClasses);\n removeClasses(this.el, this.inlineClasses);\n }\n }\n\n _completeShow() {\n this.el.removeEventListener(\"animationend\", this._completeShow, false);\n this.el.removeEventListener(\"webkitAnimationEnd\", this._completeShow, false);\n\n removeClasses(this.el, this.openingClasses);\n }\n\n _completeHide() {\n this.el.removeEventListener(\"animationend\", this._completeHide, false);\n this.el.removeEventListener(\"webkitAnimationEnd\", this._completeHide, false);\n\n removeClasses(this.el, this.openClasses);\n removeClasses(this.el, this.closingClasses);\n removeClasses(this.el, this.inlineClasses);\n\n this.el.style = \"\";\n\n // The window could have been resized above or below `inline`\n // limits since the ZoomPane was shown. Because of this, we\n // can't rely on `this._isInline` here.\n if (this.el.parentElement === this.settings.container) {\n this.settings.container.removeChild(this.el);\n } else if (this.el.parentElement === this.settings.inlineContainer) {\n this.settings.inlineContainer.removeChild(this.el);\n }\n }\n\n _handleLoad() {\n this.imgEl.removeEventListener(\"load\", this._handleLoad, false);\n removeClasses(this.el, this.loadingClasses);\n }\n}\n","import { isDOMElement } from \"0\"\nimport injectBaseStylesheet from \"3\"\n\nimport Trigger from \"4\"\nimport ZoomPane from \"6\"\n\nexport default class Drift {\n constructor(triggerEl, options = {}) {\n this.VERSION = \"1.4.3\";\n this.triggerEl = triggerEl;\n\n this.destroy = this.destroy.bind(this);\n\n if (!isDOMElement(this.triggerEl)) {\n throw new TypeError(\"`new Drift` requires a DOM element as its first argument.\");\n }\n\n // Prefix for generated element class names (e.g. `my-ns` will\n // result in classes such as `my-ns-pane`. Default `drift-`\n // prefixed classes will always be added as well.\n const namespace = options[\"namespace\"] || null;\n // Whether the ZoomPane should show whitespace when near the edges.\n const showWhitespaceAtEdges = options[\"showWhitespaceAtEdges\"] || false;\n // Whether the inline ZoomPane should stay inside\n // the bounds of its image.\n const containInline = options[\"containInline\"] || false;\n // How much to offset the ZoomPane from the\n // interaction point when inline.\n const inlineOffsetX = options[\"inlineOffsetX\"] || 0;\n const inlineOffsetY = options[\"inlineOffsetY\"] || 0;\n // A DOM element to append the inline ZoomPane to\n const inlineContainer = options[\"inlineContainer\"] || document.body;\n // Which trigger attribute to pull the ZoomPane image source from.\n const sourceAttribute = options[\"sourceAttribute\"] || \"data-zoom\";\n // How much to magnify the trigger by in the ZoomPane.\n // (e.g., `zoomFactor: 3` will result in a 900 px wide ZoomPane imag\n // if the trigger is displayed at 300 px wide)\n const zoomFactor = options[\"zoomFactor\"] || 3;\n // A DOM element to append the non-inline ZoomPane to.\n // Required if `inlinePane !== true`.\n const paneContainer = options[\"paneContainer\"] === undefined ? document.body : options[\"paneContainer\"];\n // When to switch to an inline ZoomPane. This can be a boolean or\n // an integer. If `true`, the ZoomPane will always be inline,\n // if `false`, it will switch to inline when `windowWidth <= inlinePane`\n const inlinePane = options[\"inlinePane\"] || 375;\n // If `true`, touch events will trigger the zoom, like mouse events.\n const handleTouch = \"handleTouch\" in options ? !!options[\"handleTouch\"] : true;\n // If present (and a function), this will be called\n // whenever the ZoomPane is shown.\n const onShow = options[\"onShow\"] || null;\n // If present (and a function), this will be called\n // whenever the ZoomPane is hidden.\n const onHide = options[\"onHide\"] || null;\n // Add base styles to the page. See the \"Theming\"\n // section of README.md for more information.\n const injectBaseStyles = \"injectBaseStyles\" in options ? !!options[\"injectBaseStyles\"] : true;\n // An optional number that determines how long to wait before\n // showing the ZoomPane because of a `mouseenter` event.\n const hoverDelay = options[\"hoverDelay\"] || 0;\n // An optional number that determines how long to wait before\n // showing the ZoomPane because of a `touchstart` event.\n // It's unlikely that you would want to use this option, since\n // \"tap and hold\" is much more intentional than a hover event.\n const touchDelay = options[\"touchDelay\"] || 0;\n // If true, a bounding box will show the area currently being previewed\n // during mouse hover\n const hoverBoundingBox = options[\"hoverBoundingBox\"] || false;\n // If true, a bounding box will show the area currently being previewed\n // during touch events\n const touchBoundingBox = options[\"touchBoundingBox\"] || false;\n // A DOM element to append the bounding box to.\n const boundingBoxContainer = options[\"boundingBoxContainer\"] || document.body;\n\n if (inlinePane !== true && !isDOMElement(paneContainer)) {\n throw new TypeError(\"`paneContainer` must be a DOM element when `inlinePane !== true`\");\n }\n if (!isDOMElement(inlineContainer)) {\n throw new TypeError(\"`inlineContainer` must be a DOM element\");\n }\n\n this.settings = {\n namespace,\n showWhitespaceAtEdges,\n containInline,\n inlineOffsetX,\n inlineOffsetY,\n inlineContainer,\n sourceAttribute,\n zoomFactor,\n paneContainer,\n inlinePane,\n handleTouch,\n onShow,\n onHide,\n injectBaseStyles,\n hoverDelay,\n touchDelay,\n hoverBoundingBox,\n touchBoundingBox,\n boundingBoxContainer,\n };\n\n if (this.settings.injectBaseStyles) {\n injectBaseStylesheet();\n }\n\n this._buildZoomPane();\n this._buildTrigger();\n }\n\n get isShowing() {\n return this.zoomPane.isShowing;\n }\n\n get zoomFactor() {\n return this.settings.zoomFactor;\n }\n\n set zoomFactor(zf) {\n this.settings.zoomFactor = zf;\n this.zoomPane.settings.zoomFactor = zf;\n this.trigger.settings.zoomFactor = zf;\n this.boundingBox.settings.zoomFactor = zf;\n }\n\n _buildZoomPane() {\n this.zoomPane = new ZoomPane({\n container: this.settings.paneContainer,\n zoomFactor: this.settings.zoomFactor,\n showWhitespaceAtEdges: this.settings.showWhitespaceAtEdges,\n containInline: this.settings.containInline,\n inline: this.settings.inlinePane,\n namespace: this.settings.namespace,\n inlineOffsetX: this.settings.inlineOffsetX,\n inlineOffsetY: this.settings.inlineOffsetY,\n inlineContainer: this.settings.inlineContainer,\n });\n }\n\n _buildTrigger() {\n this.trigger = new Trigger({\n el: this.triggerEl,\n zoomPane: this.zoomPane,\n handleTouch: this.settings.handleTouch,\n onShow: this.settings.onShow,\n onHide: this.settings.onHide,\n sourceAttribute: this.settings.sourceAttribute,\n hoverDelay: this.settings.hoverDelay,\n touchDelay: this.settings.touchDelay,\n hoverBoundingBox: this.settings.hoverBoundingBox,\n touchBoundingBox: this.settings.touchBoundingBox,\n namespace: this.settings.namespace,\n zoomFactor: this.settings.zoomFactor,\n boundingBoxContainer: this.settings.boundingBoxContainer,\n });\n }\n\n setZoomImageURL(imageURL) {\n this.zoomPane._setImageURL(imageURL);\n }\n\n disable() {\n this.trigger.enabled = false;\n }\n\n enable() {\n this.trigger.enabled = true;\n }\n\n destroy() {\n this.trigger._hide();\n this.trigger._unbindEvents();\n }\n}\n\n// Public API\n/* eslint-disable no-self-assign */\nObject.defineProperty(Drift.prototype, \"isShowing\", {\n get: function () {\n return this.isShowing;\n },\n});\nObject.defineProperty(Drift.prototype, \"zoomFactor\", {\n get: function () {\n return this.zoomFactor;\n },\n set: function (value) {\n this.zoomFactor = value;\n },\n});\nDrift.prototype[\"setZoomImageURL\"] = Drift.prototype.setZoomImageURL;\nDrift.prototype[\"disable\"] = Drift.prototype.disable;\nDrift.prototype[\"enable\"] = Drift.prototype.enable;\nDrift.prototype[\"destroy\"] = Drift.prototype.destroy;\n/* eslint-enable no-self-assign */\n","/* UNMINIFIED RULES\n\nconst RULES = `\n@keyframes noop {\n 0% { zoom: 1; }\n}\n\n@-webkit-keyframes noop {\n 0% { zoom: 1; }\n}\n\n.drift-zoom-pane.drift-open {\n display: block;\n}\n\n.drift-zoom-pane.drift-opening, .drift-zoom-pane.drift-closing {\n animation: noop 1ms;\n -webkit-animation: noop 1ms;\n}\n\n.drift-zoom-pane {\n position: absolute;\n overflow: hidden;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n pointer-events: none;\n}\n\n.drift-zoom-pane-loader {\n display: none;\n}\n\n.drift-zoom-pane img {\n position: absolute;\n display: block;\n max-width: none;\n max-height: none;\n}\n\n.drift-bounding-box {\n position: absolute;\n pointer-events: none;\n}\n`;\n\n*/\n\nconst RULES =\n \".drift-bounding-box,.drift-zoom-pane{position:absolute;pointer-events:none}@keyframes noop{0%{zoom:1}}@-webkit-keyframes noop{0%{zoom:1}}.drift-zoom-pane.drift-open{display:block}.drift-zoom-pane.drift-closing,.drift-zoom-pane.drift-opening{animation:noop 1ms;-webkit-animation:noop 1ms}.drift-zoom-pane{overflow:hidden;width:100%;height:100%;top:0;left:0}.drift-zoom-pane-loader{display:none}.drift-zoom-pane img{position:absolute;display:block;max-width:none;max-height:none}\";\n\nexport default function injectBaseStylesheet() {\n if (document.querySelector(\".drift-base-styles\")) {\n return;\n }\n\n const styleEl = document.createElement(\"style\");\n styleEl.type = \"text/css\";\n styleEl.classList.add(\"drift-base-styles\");\n\n styleEl.appendChild(document.createTextNode(RULES));\n\n const head = document.head;\n head.insertBefore(styleEl, head.firstChild);\n}\n","// This file is used for the standalone browser build\n\nimport Drift from \"2\"\n\nwindow[\"Drift\"] = Drift;\n"],"sourceRoot":""}