diff --git a/CHANGELOG.md b/CHANGELOG.md index 065833cf..f4150051 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,20 @@ +## [4.36.8](https://github.com/atom-minimap/minimap/compare/v4.36.7...v4.36.8) (2021-01-02) + + +### Bug Fixes + +* cache the decoration drawer dispatchers ([8835572](https://github.com/atom-minimap/minimap/commit/8835572ce36dbe44355c700bbecd709371cbf3e7)) +* calculate decorationColor outside the decoration drawers ([90f0e65](https://github.com/atom-minimap/minimap/commit/90f0e653c22c41e98e9bd4d28589f52c52f4b5f3)) +* calculate editorElement only once outside of the drawDecorations ([2c768cb](https://github.com/atom-minimap/minimap/commit/2c768cb01472834e737db4889caed326402646e7)) +* call getTextEditorElement only once ([ad4fa0e](https://github.com/atom-minimap/minimap/commit/ad4fa0e51631ff5199b447a87a8c9645bd4828d7)) +* call getTextEditorElement only once in drawDecorations ([94a3064](https://github.com/atom-minimap/minimap/commit/94a306443d564c3abc8a3cc5b3f49d025e5697ff)) +* call getTextEditorElement() outside of getDecorationColor ([739a561](https://github.com/atom-minimap/minimap/commit/739a561579171eac635dff20bd325232af965fa9)) +* make drawCustomDecoration a free function ([4848aef](https://github.com/atom-minimap/minimap/commit/4848aefbac9766a1ca78ac3853f296788951b11c)) +* make drawGutterDecoration a free function ([30e9017](https://github.com/atom-minimap/minimap/commit/30e90178a560c5e06319889bbd6457671e63be52)) +* make drawHighlightDecoration a free function ([404393d](https://github.com/atom-minimap/minimap/commit/404393d546bfe709a33069b7b1d4863e3e01f172)) +* make drawHighlightOutlineDecoration a free function ([cd4af73](https://github.com/atom-minimap/minimap/commit/cd4af738bd477d78ccdd1750a594e74418185198)) +* make drawLineDecoration a free function ([d2b3782](https://github.com/atom-minimap/minimap/commit/d2b37823fc4f8fc5fa8f2f5b5b6e1748ac294605)) + ## [4.36.7](https://github.com/atom-minimap/minimap/compare/v4.36.6...v4.36.7) (2021-01-02) diff --git a/dist/main.js b/dist/main.js index f9935ebe..b5151d36 100644 --- a/dist/main.js +++ b/dist/main.js @@ -1,2 +1,2 @@ -function e(e){return e&&e.__esModule?e.default:e}function t(e){Object.defineProperty(e,"__esModule",{value:!0})}function i(e,t,i){Object.defineProperty(e,t,{get:i,enumerable:!0})}function n(e,t){return Object.keys(t).forEach((i=>{"default"!==i&&"__esModule"!==i&&Object.defineProperty(e,i,{enumerable:!0,get:()=>t[i]})})),e}function r(e,t){for(var i=0;t.length>i;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function s(e,t,i){return t&&r(e.prototype,t),i&&r(e,i),e}function o(){return vr||(vr=!0,Rn={},Rn=function(){function e(t){((e,t)=>{if(!(this instanceof t))throw new TypeError("Cannot call a class as a function")})(0,e),this.disposed=!1,this.disposalAction=t}return s(e,null,[{key:"isDisposable",value:e=>"function"==typeof(null!=e?e.dispose:void 0)}]),s(e,[{key:"dispose",value(){this.disposed||(this.disposed=!0,"function"==typeof this.disposalAction&&this.disposalAction(),this.disposalAction=null)}}]),e}()),Rn}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var i=0;t.length>i;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function c(e){if(null==Pn&&(Pn=o()),!Pn.isDisposable(e))throw new TypeError("Arguments to CompositeDisposable.add must have a .dispose() method")}function h(){return yr||(yr=!0,_n={},_n=function(){function e(){a(this,e),this.disposed=!1,this.disposables=new Set;var t=!0,i=!1,n=void 0;try{for(var r,s=arguments[Symbol.iterator]();!(t=(r=s.next()).done);t=!0)this.add(r.value)}catch(e){i=!0,n=e}finally{try{t||null==s.return||s.return()}finally{if(i)throw n}}}var t;return(t=[{key:"dispose",value(){this.disposed||(this.disposed=!0,this.disposables.forEach((e=>e.dispose())),this.disposables=null)}},{key:"add",value(){if(!this.disposed){var e=!0,t=!1,i=void 0;try{for(var n,r=arguments[Symbol.iterator]();!(e=(n=r.next()).done);e=!0){var s=n.value;c(s),this.disposables.add(s)}}catch(e){t=!0,i=e}finally{try{e||null==r.return||r.return()}finally{if(t)throw i}}}}},{key:"remove",value(e){this.disposed||this.disposables.delete(e)}},{key:"delete",value(e){this.remove(e)}},{key:"clear",value(){this.disposed||this.disposables.clear()}}])&&l(e.prototype,t),e}()),_n}function d(e,t){for(var i=0;t.length>i;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function u(e,t,i){return t&&d(e.prototype,t),i&&d(e,i),e}function p(){jn={},br||(br=!0,Hn={},In=o(),Nn=h(),(Fn=function(){function e(){((e,t)=>{if(!(this instanceof t))throw new TypeError("Cannot call a class as a function")})(0,e),this.disposed=!1,this.clear()}return u(e,null,[{key:"onEventHandlerException",value(e){var t=this;return 0===this.exceptionHandlers.length&&(this.dispatch=this.exceptionHandlingDispatch),this.exceptionHandlers.push(e),new In((()=>{if(t.exceptionHandlers.splice(t.exceptionHandlers.indexOf(e),1),0===t.exceptionHandlers.length)return t.dispatch=t.simpleDispatch}))}},{key:"simpleDispatch",value:(e,t)=>e(t)},{key:"exceptionHandlingDispatch",value(e,t){try{return e(t)}catch(e){return this.exceptionHandlers.map((t=>t(e)))}}}]),u(e,[{key:"clear",value(){null!=this.subscriptions&&this.subscriptions.dispose(),this.subscriptions=new Nn,this.handlersByEventName={}}},{key:"dispose",value(){this.subscriptions.dispose(),this.handlersByEventName=null,this.disposed=!0}},{key:"on",value(e,t,i){var n=this;if(null==i&&(i=!1),this.disposed)throw Error("Emitter has been disposed");if("function"!=typeof t)throw Error("Handler must be a function");this.handlersByEventName[e]?i?this.handlersByEventName[e].unshift(t):this.handlersByEventName[e].push(t):this.handlersByEventName[e]=[t];var r=new In((()=>(n.subscriptions.remove(r),n.off(e,t))));return this.subscriptions.add(r),r}},{key:"once",value(e,t,i){null==i&&(i=!1);var n=this.on(e,(e=>(n.dispose(),t(e))),i);return n}},{key:"preempt",value(e,t){return this.on(e,t,!0)}},{key:"off",value(e,t){if(!this.disposed){var i=this.handlersByEventName[e];if(i){var n=i.indexOf(t);0>n||i.splice(n,1),0===i.length&&delete this.handlersByEventName[e]}}}},{key:"emit",value(e,t){var i=this.handlersByEventName&&this.handlersByEventName[e];if(i)for(var n=i.slice(),r=0;n.length>r;r++)this.constructor.dispatch(n[r],t)}},{key:"emitAsync",value(e,t){var i=this,n=this.handlersByEventName&&this.handlersByEventName[e];if(n){var r=n.map((e=>i.constructor.dispatch(e,t)));return Promise.all(r).then((()=>{}))}return Promise.resolve()}},{key:"getEventNames",value(){return Object.keys(this.handlersByEventName)}},{key:"listenerCountForEventName",value(e){var t=this.handlersByEventName[e];return null==t?0:t.length}},{key:"getTotalListenerCount",value(){for(var e=0,t=Object.keys(this.handlersByEventName),i=0;t.length>i;i++)e+=this.handlersByEventName[t[i]].length;return e}}]),e}()).dispatch=Fn.simpleDispatch,Fn.exceptionHandlers=[],Hn=Fn),jn.Emitter=Hn,Wn=o(),jn.Disposable=Wn,Bn=h(),jn.CompositeDisposable=Bn}function f(){var e,t,i,n;qn={},mr||(mr=!0,On={},On=function(){function e(e,t,i){this.message=e,this.fileName=t,this.lineNumber=i,this.callCount=0,this.stackCount=0,this.stacks={},this.stackCallCounts={}}return e.getFunctionNameFromCallsite=e=>{},e.deserialize=t=>{var i,n,r,s,o;for(r=t.stacks,i=new e(t.message,t.fileName,t.lineNumber),s=0,o=r.length;o>s;s++)i.addStack(n=r[s],n.metadata);return i},e.prototype.getFunctionNameFromCallsite=e=>{var t,i,n;return null!=e.functionName?e.functionName:e.isToplevel()?null!=(t=e.getFunctionName())?t:"":e.isConstructor()?"new "+e.getFunctionName():e.getMethodName()&&!e.getFunctionName()?e.getMethodName():e.getTypeName()+"."+(null!=(i=null!=(n=e.getMethodName())?n:e.getFunctionName())?i:"")},e.prototype.getLocationFromCallsite=function(e){return null==e?"unknown":null!=e.location?e.location:e.isNative()?"native":e.isEval()?"eval at "+this.getLocationFromCallsite(e.getEvalOrigin()):e.getFileName()+":"+e.getLineNumber()+":"+e.getColumnNumber()},e.prototype.getFileNameFromCallSite=e=>{var t;return null!=(t=e.fileName)?t:e.getFileName()},e.prototype.getOriginName=function(){return this.originName},e.prototype.getMessage=function(){return this.message},e.prototype.getStacks=function(){var e,t,i,n,r;for(e in i=[],r=this.stacks)(t=this.parseStack(n=r[e])).callCount=this.stackCallCounts[e],t.metadata=n.metadata,i.push(t);return i},e.prototype.getStackCount=function(){return this.stackCount},e.prototype.getCallCount=function(){return this.callCount},e.prototype.addStack=function(e,t){var i,n,r;return null==this.originName&&(this.originName=this.getFunctionNameFromCallsite(e[0])),null==this.fileName&&(this.fileName=this.getFileNameFromCallSite(e[0])),null==this.lineNumber&&(this.lineNumber="function"==typeof(n=e[0]).getLineNumber?n.getLineNumber():void 0),this.callCount++,e.metadata=t,i=this.getLocationFromCallsite(e[1]),null==this.stacks[i]&&(this.stacks[i]=e,this.stackCount++),null==(r=this.stackCallCounts)[i]&&(r[i]=0),this.stackCallCounts[i]++},e.prototype.parseStack=function(e){return e.map((t=this,e=>({functionName:t.getFunctionNameFromCallsite(e),location:t.getLocationFromCallsite(e),fileName:t.getFileNameFromCallSite(e)})));var t},e.prototype.serialize=function(){return{message:this.getMessage(),lineNumber:this.lineNumber,fileName:this.fileName,stacks:this.getStacks()}},e}()),e=On,null==pr.__grim__&&(t=(Sr||(Sr=!0,p()),jn).Emitter,n=pr.__grim__={deprecations:{},emitter:new t,includeDeprecatedAPIs:!0,getDeprecations(){var e,t,i,r,s,o,a;for(r in e=[],a=n.deprecations)for(s in t=a[r])for(o in i=t[s])e.push(i[o]);return e},getDeprecationsLength(){return this.getDeprecations().length},clearDeprecations(){n.deprecations={}},logDeprecations(){var e,t,i,n;for((t=this.getDeprecations()).sort(((e,t)=>t.getCallCount()-e.getCallCount())),console.warn("\nCalls to deprecated functions\n-----------------------------"),i=0,n=t.length;n>i;i++)console.warn("("+(e=t[i]).getCallCount()+") "+e.getOriginName()+" : "+e.getMessage(),e)},deprecate(t,r){var s,o,a,l,c,h,d,u,p,f,g,m,v;h=Error.stackTraceLimit;try{Error.stackTraceLimit=7,u=(u=null!=(m="function"==typeof(a=Error()).getRawStack?a.getRawStack():void 0)?m:i(a)).slice(1)}finally{Error.stackTraceLimit=h}l=(o=u[0]).getFileName(),c=o.getLineNumber(),d=null!=(v=null!=r?r.packageName:void 0)?v:"",null==(p=n.deprecations)[l]&&(p[l]={}),null==(f=n.deprecations[l])[c]&&(f[c]={}),null==(g=n.deprecations[l][c])[d]&&(g[d]=new e(t)),(s=n.deprecations[l][c][d]).addStack(u,r),n.emitter.emit("updated",s)},addSerializedDeprecation(t){var i,r,s,o,a,l,c,h,d,u,p,f,g,m,v;for(o=(i=e.deserialize(t)).getMessage(),r=i.fileName,s=i.lineNumber,a=null!=(g=null!=(m=(c=i.getStacks())[0])&&null!=(v=m.metadata)?v.packageName:void 0)?g:"",null==(h=n.deprecations)[r]&&(h[r]={}),null==(d=n.deprecations[r])[s]&&(d[s]={}),null==(u=n.deprecations[r][s])[a]&&(u[a]=new e(o,r,s)),i=n.deprecations[r][s][a],p=0,f=c.length;f>p;p++)i.addStack(l=c[p],l.metadata);n.emitter.emit("updated",i)},on(e,t){return n.emitter.on(e,t)}}),i=e=>{var t,n;return t=Error.prepareStackTrace,Error.prepareStackTrace=(e,t)=>t,Error.captureStackTrace(e,i),n=e.stack,Error.prepareStackTrace=t,n},qn=pr.__grim__}function g(){return Cr||(Cr=!0,Un={},function(){var e,t,i,n;for(n in Un=i=function(){function i(){"function"==typeof this.extended&&this.extended()}return i.includeInto=function(t){var i,n,r;for(i in this.extend(t.prototype),this)n=this[i],-1===e.indexOf(i)&&(t.hasOwnProperty(i)||(t[i]=n));return null!=(r=this.included)?r.call(t):void 0},i.extend=function(e){var i,n,r,s,o;for(n=0,r=(s=Object.getOwnPropertyNames(this.prototype)).length;r>n;n++)-1===t.indexOf(i=s[n])&&(e.hasOwnProperty(i)||(e[i]=this.prototype[i]));return null!=(o=this.prototype.extended)?o.call(e):void 0},i}(),e=["__super__"],i)e.push(n);t=["constructor","extended"]}()),Un}function m(){var e;return Er||(Er=!0,Vn={},e=g(),Vn=class t extends e{static parents(e,t="*"){var i;return i=[],this.eachParent(e,(e=>{if("function"==typeof e.matches?e.matches(t):void 0)return i.push(e)})),i}static eachParent(e,t){var i,n;for(null!=(i=e.parentNode)&&t(i),n=[];i=i.parentNode;)n.push(null!=i?t(i):void 0);return n}parents(e="*"){return t.parents(this,e)}queryParentSelectorAll(e){if(null==e)throw Error("::queryParentSelectorAll requires a valid selector as argument");return this.parents(e)}queryParentSelector(e){if(null==e)throw Error("::queryParentSelector requires a valid selector as argument");return this.queryParentSelectorAll(e)[0]}eachParent(e){return t.eachParent(this,e)}}),Vn}function v(){var e,t;return Tr||(Tr=!0,$n={},t=g(),({Disposable:e}=cr),$n=class extends t{addDisposableEventListener(t,i,n,r){return t.addEventListener(i,n,r),new e((()=>t.removeEventListener(i,n)))}}),$n}function y(){var e={},t=0,i=0,n=0;return{add(r,s){s||(s=r,r=0),r>i?i=r:n>r&&(n=r),e[r]||(e[r]=[]),e[r].push(s),t++},process(){for(var t=n;i>=t;t++)for(var r=e[t],s=0;r.length>s;s++)(0,r[s])()},size:()=>t}}function b(e){return e._erd}function S(e){return Array.isArray(e)||void 0!==e.length}function w(e){if(Array.isArray(e))return e;var t=[];return _r(e,(e=>{t.push(e)})),t}function x(e){return e&&1===e.nodeType}function C(e,t,i){var n=e[t];return null==n&&void 0!==i?i:n}function E(){return lc||(lc=!0,zr="1.11.0",i(qr={},"VERSION",(()=>zr)),Ur="object"==typeof self&&self.self===self&&self||"object"==typeof pr&&pr.global===pr&&pr||Function("","return this")()||{},i(qr,"root",(()=>Ur)),Vr=Array.prototype,$r=Object.prototype,i(qr,"ObjProto",(()=>$r)),i(qr,"ArrayProto",(()=>Vr)),Qr="undefined"!=typeof Symbol?Symbol.prototype:null,i(qr,"SymbolProto",(()=>Qr)),Kr=Vr.push,Gr=Vr.slice,Zr=$r.toString,Yr=$r.hasOwnProperty,i(qr,"hasOwnProperty",(()=>Yr)),i(qr,"toString",(()=>Zr)),i(qr,"slice",(()=>Gr)),i(qr,"push",(()=>Kr)),Xr="undefined"!=typeof ArrayBuffer,i(qr,"supportsArrayBuffer",(()=>Xr)),Jr=Array.isArray,es=Object.keys,ts=Object.create,is=Xr&&ArrayBuffer.isView,i(qr,"nativeIsView",(()=>is)),i(qr,"nativeCreate",(()=>ts)),i(qr,"nativeKeys",(()=>es)),i(qr,"nativeIsArray",(()=>Jr)),ns=isNaN,rs=isFinite,i(qr,"_isFinite",(()=>rs)),i(qr,"_isNaN",(()=>ns)),ss=!{toString:null}.propertyIsEnumerable("toString"),i(qr,"hasEnumBug",(()=>ss)),os=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],i(qr,"nonEnumerableProps",(()=>os)),as=9007199254740991,i(qr,"MAX_ARRAY_INDEX",(()=>as))),qr}function T(e,t){return t=null==t?e.length-1:+t,function(){for(var i=Math.max(arguments.length-t,0),n=Array(i),r=0;i>r;r++)n[r]=arguments[r+t];switch(t){case 0:return e.call(this,n);case 1:return e.call(this,arguments[0],n);case 2:return e.call(this,arguments[0],arguments[1],n)}var s=Array(t+1);for(r=0;t>r;r++)s[r]=arguments[r];return s[t]=n,e.apply(this,s)}}function D(){return cc||(cc=!0,i(ls={},"default",(()=>T))),ls}function M(e){var t=typeof e;return"function"===t||"object"===t&&!!e}function k(){return hc||(hc=!0,i(cs={},"default",(()=>M))),cs}function L(e){return null===e}function A(e){return void 0===e}function O(e){return!0===e||!1===e||"[object Boolean]"===Zr.call(e)}function R(){return pc||(pc=!0,hs={},E(),i(hs,"default",(()=>O))),hs}function _(e){return!(!e||1!==e.nodeType)}function P(e){return t=>Zr.call(t)==="[object "+e+"]"}function H(){return gc||(gc=!0,ds={},E(),i(ds,"default",(()=>P))),ds}function I(){return mc||(mc=!0,us={},H(),ps=P("String"),i(us,"default",(()=>ps))),us}function N(){return vc||(vc=!0,fs={},H(),gs=P("Number"),i(fs,"default",(()=>gs))),fs}function F(){return wc||(wc=!0,xs={},H(),Cs=P("Symbol"),i(xs,"default",(()=>Cs))),xs}function j(){return Mc||(Mc=!0,Ps={},H(),Hs=P("DataView"),i(Ps,"default",(()=>Hs))),Ps}function W(){return kc||(kc=!0,Is={},E(),H(),Ns=Jr||P("Array"),i(Is,"default",(()=>Ns))),Is}function B(){return Lc||(Lc=!0,Fs={},H(),E(),js=P("Function"),Ws=Ur.document&&Ur.document.childNodes,"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof Ws&&(js=e=>"function"==typeof e||!1),Bs=js,i(Fs,"default",(()=>Bs))),Fs}function q(e,t){return null!=e&&Yr.call(e,t)}function z(){return Ac||(Ac=!0,qs={},E(),i(qs,"default",(()=>q))),qs}function U(){return Oc||(Oc=!0,zs={},H(),z(),Us=P("Arguments"),function(){Us(arguments)||(Us=e=>q(e,"callee"))}(),Vs=Us,i(zs,"default",(()=>Vs))),zs}function V(e){return!Cs(e)&&rs(e)&&!isNaN(parseFloat(e))}function $(e){return gs(e)&&ns(e)}function Q(){return _c||(_c=!0,Qs={},E(),N(),i(Qs,"default",(()=>$))),Qs}function K(e){return()=>e}function G(){return Pc||(Pc=!0,i(Ks={},"default",(()=>K))),Ks}function Z(e){return t=>{var i=e(t);return"number"==typeof i&&i>=0&&as>=i}}function Y(){return Hc||(Hc=!0,Gs={},E(),i(Gs,"default",(()=>Z))),Gs}function X(e){return t=>null==t?void 0:t[e]}function J(){return Ic||(Ic=!0,i(Zs={},"default",(()=>X))),Zs}function ee(){return Nc||(Nc=!0,Ys={},J(),Xs=X("byteLength"),i(Ys,"default",(()=>Xs))),Ys}function te(e){return is?is(e)&&!Hs(e):eo(e)&&io.test(Zr.call(e))}function ie(){return jc||(jc=!0,to={},E(),j(),G(),Fc||(Fc=!0,Js={},Y(),ee(),eo=Z(Xs),i(Js,"default",(()=>eo))),io=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/,no=Xr?te:K(!1),i(to,"default",(()=>no))),to}function ne(){return Wc||(Wc=!0,ro={},J(),so=X("length"),i(ro,"default",(()=>so))),ro}function re(){return Bc||(Bc=!0,oo={},Y(),ne(),ao=Z(so),i(oo,"default",(()=>ao))),oo}function se(e,t){t=(e=>{for(var t={},i=e.length,n=0;i>n;++n)t[e[n]]=!0;return{contains(e){return t[e]},push(i){return t[i]=!0,e.push(i)}}})(t);var i=os.length,n=e.constructor,r=Bs(n)&&n.prototype||$r,s="constructor";for(q(e,s)&&!t.contains(s)&&t.push(s);i--;)(s=os[i])in e&&e[s]!==r[s]&&!t.contains(s)&&t.push(s)}function oe(){return qc||(qc=!0,lo={},E(),B(),z(),i(lo,"default",(()=>se))),lo}function ae(e){if(!M(e))return[];if(es)return es(e);var t=[];for(var i in e)q(e,i)&&t.push(i);return ss&&se(e,t),t}function le(){return zc||(zc=!0,co={},k(),E(),z(),oe(),i(co,"default",(()=>ae))),co}function ce(e){return null==e||(ao(e)&&(Ns(e)||ps(e)||Vs(e))?0===e.length:0===ae(e).length)}function he(e,t){var i=ae(t),n=i.length;if(null==e)return!n;for(var r=Object(e),s=0;n>s;s++){var o=i[s];if(t[o]!==r[o]||!(o in r))return!1}return!0}function de(){return Vc||(Vc=!0,uo={},le(),i(uo,"default",(()=>he))),uo}function ue(e){return e instanceof ue?e:this instanceof ue?void(this._wrapped=e):new ue(e)}function pe(){return $c||($c=!0,po={},E(),i(po,"default",(()=>ue)),ue.VERSION=zr,ue.prototype.valueOf=ue.prototype.toJSON=ue.prototype.value=function(){return this._wrapped},ue.prototype.toString=function(){return this._wrapped+""}),po}function fe(e,t,i,n){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return!1;if(e!=e)return t!=t;var r=typeof e;return("function"===r||"object"===r||"object"==typeof t)&&ge(e,t,i,n)}function ge(e,t,i,n){e instanceof ue&&(e=e._wrapped),t instanceof ue&&(t=t._wrapped);var r=Zr.call(e);if(r!==Zr.call(t))return!1;switch(r){case"[object RegExp]":case"[object String]":return""+e==""+t;case"[object Number]":return+e!=+e?+t!=+t:0==+e?1/+e==1/t:+e==+t;case"[object Date]":case"[object Boolean]":return+e==+t;case"[object Symbol]":return Qr.valueOf.call(e)===Qr.valueOf.call(t);case"[object ArrayBuffer]":return ge(new DataView(e),new DataView(t),i,n);case"[object DataView]":var s=Xs(e);if(s!==Xs(t))return!1;for(;s--;)if(e.getUint8(s)!==t.getUint8(s))return!1;return!0}if(no(e))return ge(new DataView(e.buffer),new DataView(t.buffer),i,n);var o="[object Array]"===r;if(!o){if("object"!=typeof e||"object"!=typeof t)return!1;var a=e.constructor,l=t.constructor;if(a!==l&&!(Bs(a)&&a instanceof a&&Bs(l)&&l instanceof l)&&"constructor"in e&&"constructor"in t)return!1}n=n||[];for(var c=(i=i||[]).length;c--;)if(i[c]===e)return n[c]===t;if(i.push(e),n.push(t),o){if((c=e.length)!==t.length)return!1;for(;c--;)if(!fe(e[c],t[c],i,n))return!1}else{var h,d=ae(e);if(c=d.length,ae(t).length!==c)return!1;for(;c--;)if(!q(t,h=d[c])||!fe(e[h],t[h],i,n))return!1}return i.pop(),n.pop(),!0}function me(e,t){return fe(e,t)}function ve(e){if(!M(e))return[];var t=[];for(var i in e)t.push(i);return ss&&se(e,t),t}function ye(){return Kc||(Kc=!0,go={},k(),E(),oe(),i(go,"default",(()=>ve))),go}function be(e){for(var t=ae(e),i=t.length,n=Array(i),r=0;i>r;r++)n[r]=e[t[r]];return n}function Se(){return Gc||(Gc=!0,mo={},le(),i(mo,"default",(()=>be))),mo}function we(e){for(var t=ae(e),i=t.length,n=Array(i),r=0;i>r;r++)n[r]=[t[r],e[t[r]]];return n}function xe(e){for(var t={},i=ae(e),n=0,r=i.length;r>n;n++)t[e[i[n]]]=i[n];return t}function Ce(){return Yc||(Yc=!0,yo={},le(),i(yo,"default",(()=>xe))),yo}function Ee(e){var t=[];for(var i in e)Bs(e[i])&&t.push(i);return t.sort()}function Te(){return Xc||(Xc=!0,bo={},B(),i(bo,"default",(()=>Ee))),bo}function De(e,t){return function(i){var n=arguments.length;if(t&&(i=Object(i)),2>n||null==i)return i;for(var r=1;n>r;r++)for(var s=arguments[r],o=e(s),a=o.length,l=0;a>l;l++){var c=o[l];t&&void 0!==i[c]||(i[c]=s[c])}return i}}function Me(){return Jc||(Jc=!0,i(So={},"default",(()=>De))),So}function ke(){return eh||(eh=!0,wo={},Me(),ye(),xo=De(ve),i(wo,"default",(()=>xo))),wo}function Le(){return th||(th=!0,Co={},Me(),le(),Eo=De(ae),i(Co,"default",(()=>Eo))),Co}function Ae(){return ih||(ih=!0,To={},Me(),ye(),Do=De(ve,!0),i(To,"default",(()=>Do))),To}function Oe(e){if(!M(e))return{};if(ts)return ts(e);var t=()=>{};t.prototype=e;var i=new t;return t.prototype=null,i}function Re(){return nh||(nh=!0,Mo={},k(),E(),i(Mo,"default",(()=>Oe))),Mo}function _e(e,t){var i=Oe(e);return t&&Eo(i,t),i}function Pe(e){return M(e)?Ns(e)?e.slice():xo({},e):e}function He(){return sh||(sh=!0,Lo={},k(),W(),ke(),i(Lo,"default",(()=>Pe))),Lo}function Ie(e,t){return t(e),e}function Ne(e,t){if(!Ns(t))return q(e,t);for(var i=t.length,n=0;i>n;n++){var r=t[n];if(null==e||!Yr.call(e,r))return!1;e=e[r]}return!!i}function Fe(e){return e}function je(){return lh||(lh=!0,i(Oo={},"default",(()=>Fe))),Oo}function We(e){return e=Eo({},e),t=>he(t,e)}function Be(){return ch||(ch=!0,Ro={},Le(),de(),i(Ro,"default",(()=>We))),Ro}function qe(e,t){for(var i=t.length,n=0;i>n;n++){if(null==e)return;e=e[t[n]]}return i?e:void 0}function ze(){return hh||(hh=!0,i(_o={},"default",(()=>qe))),_o}function Ue(e){return Ns(e)?t=>qe(t,e):X(e)}function Ve(){return dh||(dh=!0,Po={},W(),J(),ze(),i(Po,"default",(()=>Ue))),Po}function $e(e,t,i){if(void 0===t)return e;switch(null==i?3:i){case 1:return i=>e.call(t,i);case 3:return(i,n,r)=>e.call(t,i,n,r);case 4:return(i,n,r,s)=>e.call(t,i,n,r,s)}return function(){return e.apply(t,arguments)}}function Qe(){return uh||(uh=!0,i(Ho={},"default",(()=>$e))),Ho}function Ke(e,t,i){return null==e?Fe:Bs(e)?$e(e,t,i):M(e)&&!Ns(e)?We(e):Ue(e)}function Ge(){return ph||(ph=!0,Io={},je(),B(),k(),W(),Be(),Ve(),Qe(),i(Io,"default",(()=>Ke))),Io}function Ze(e,t){return Ke(e,t,1/0)}function Ye(){return fh||(fh=!0,No={},pe(),Ge(),i(No,"default",(()=>Ze)),ue.iteratee=Ze),No}function Xe(e,t,i){return ue.iteratee!==Ze?ue.iteratee(e,t):Ke(e,t,i)}function Je(){return gh||(gh=!0,Fo={},pe(),Ge(),Ye(),i(Fo,"default",(()=>Xe))),Fo}function et(e,t,i){t=Xe(t,i);for(var n=ae(e),r=n.length,s={},o=0;r>o;o++){var a=n[o];s[a]=t(e[a],a,e)}return s}function tt(){}function it(e){return null==e?()=>{}:t=>Ns(t)?qe(e,t):e[t]}function nt(e,t,i){var n=Array(Math.max(0,e));t=$e(t,i,1);for(var r=0;e>r;r++)n[r]=t(r);return n}function rt(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))}function st(){return Sh||(Sh=!0,i(qo={},"default",(()=>rt))),qo}function ot(){return wh||(wh=!0,Uo=Date.now||(()=>(new Date).getTime()),i(zo={},"default",(()=>Uo))),zo}function at(e){var t=t=>e[t],i="(?:"+ae(e).join("|")+")",n=RegExp(i),r=RegExp(i,"g");return e=>n.test(e=null==e?"":""+e)?e.replace(r,t):e}function lt(){return xh||(xh=!0,Vo={},le(),i(Vo,"default",(()=>at))),Vo}function ct(){return Ch||(Ch=!0,Qo={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},i($o={},"default",(()=>Qo))),$o}function ht(){return Dh||(Dh=!0,Xo={},lt(),Th||(Th=!0,Zo={},Ce(),ct(),Yo=xe(Qo),i(Zo,"default",(()=>Yo))),Jo=at(Yo),i(Xo,"default",(()=>Jo))),Xo}function dt(){return Mh||(Mh=!0,ea={},pe(),ta=ue.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},i(ea,"default",(()=>ta))),ea}function ut(e){return"\\"+ra[e]}function pt(e,t,i){!t&&i&&(t=i),t=Do({},t,ue.templateSettings);var n,r=RegExp([(t.escape||na).source,(t.interpolate||na).source,(t.evaluate||na).source].join("|")+"|$","g"),s=0,o="__p+='";e.replace(r,((t,i,n,r,a)=>(o+=e.slice(s,a).replace(sa,ut),s=a+t.length,i?o+="'+\n((__t=("+i+"))==null?'':_.escape(__t))+\n'":n?o+="'+\n((__t=("+n+"))==null?'':__t)+\n'":r&&(o+="';\n"+r+"\n__p+='"),t))),o+="';\n",t.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{n=Function(t.variable||"obj","_",o)}catch(e){throw e.source=o,e}var a=function(e){return n.call(this,e,ue)};return a.source="function("+(t.variable||"obj")+"){\n"+o+"}",a}function ft(e,t,i){Ns(t)||(t=[t]);var n=t.length;if(!n)return Bs(i)?i.call(e):i;for(var r=0;n>r;r++){var s=null==e?void 0:e[t[r]];void 0===s&&(s=i,r=n),e=Bs(s)?s.call(e):s}return e}function gt(e){var t=++aa+"";return e?e+t:t}function mt(e){var t=ue(e);return t._chain=!0,t}function vt(e,t,i,n,r){if(!(n instanceof t))return e.apply(i,r);var s=Oe(e.prototype),o=e.apply(s,r);return M(o)?o:s}function yt(){return Rh||(Rh=!0,ca={},Re(),k(),i(ca,"default",(()=>vt))),ca}function bt(){return _h||(_h=!0,ha={},D(),yt(),pe(),(da=T((function(e,t){var i=da.placeholder,n=function(){for(var r=0,s=t.length,o=Array(s),a=0;s>a;a++)o[a]=t[a]===i?arguments[r++]:t[a];for(;arguments.length>r;)o.push(arguments[r++]);return vt(e,n,this,this,o)};return n}))).placeholder=ue,i(ha,"default",(()=>da))),ha}function St(){return Ph||(Ph=!0,ua={},D(),B(),yt(),pa=T((function(e,t,i){if(!Bs(e))throw new TypeError("Bind must be called on a function");var n=T((function(r){return vt(e,n,t,this,i.concat(r))}));return n})),i(ua,"default",(()=>pa))),ua}function wt(e,t,i,n){if(n=n||[],t||0===t){if(0>=t)return n.concat(e)}else t=1/0;for(var r=n.length,s=0,o=so(e);o>s;s++){var a=e[s];if(ao(a)&&(Ns(a)||Vs(a)))if(t>1)wt(a,t-1,i,n),r=n.length;else for(var l=0,c=a.length;c>l;)n[r++]=a[l++];else i||(n[r++]=a)}return n}function xt(){return Hh||(Hh=!0,fa={},ne(),re(),W(),U(),i(fa,"default",(()=>wt))),fa}function Ct(e,t){var i=function(n){var r=i.cache,s=""+(t?t.apply(this,arguments):n);return q(r,s)||(r[s]=e.apply(this,arguments)),r[s]};return i.cache={},i}function Et(){return Fh||(Fh=!0,ya={},D(),ba=T(((e,t,i)=>setTimeout((()=>e.apply(null,i)),t))),i(ya,"default",(()=>ba))),ya}function Tt(e,t,i){var n,r,s,o,a=0;i||(i={});var l=()=>{a=!1===i.leading?0:Uo(),n=null,o=e.apply(r,s),n||(r=s=null)},c=function(){var c=Uo();a||!1!==i.leading||(a=c);var h=t-(c-a);return r=this,s=arguments,0>=h||h>t?(n&&(clearTimeout(n),n=null),a=c,o=e.apply(r,s),n||(r=s=null)):n||!1===i.trailing||(n=setTimeout(l,h)),o};return c.cancel=()=>{clearTimeout(n),a=0,n=r=s=null},c}function Dt(e,t,i){var n,r,s=(t,i)=>{n=null,i&&(r=e.apply(t,i))},o=T((function(o){if(n&&clearTimeout(n),i){var a=!n;n=setTimeout(s,t),a&&(r=e.apply(this,o))}else n=ba(s,t,this,o);return r}));return o.cancel=()=>{clearTimeout(n),n=null},o}function Mt(e,t){return da(t,e)}function kt(e){return function(){return!e.apply(this,arguments)}}function Lt(){return zh||(zh=!0,i(Ta={},"default",(()=>kt))),Ta}function At(){var e=arguments,t=e.length-1;return function(){for(var i=t,n=e[t].apply(this,arguments);i--;)n=e[i].call(this,n);return n}}function Ot(e,t){return function(){if(1>--e)return t.apply(this,arguments)}}function Rt(e,t){var i;return function(){return--e>0&&(i=t.apply(this,arguments)),e>1||(t=null),i}}function _t(){return $h||($h=!0,i(Da={},"default",(()=>Rt))),Da}function Pt(e,t,i){t=Xe(t,i);for(var n,r=ae(e),s=0,o=r.length;o>s;s++)if(t(e[n=r[s]],n,e))return n}function Ht(){return Kh||(Kh=!0,La={},Je(),le(),i(La,"default",(()=>Pt))),La}function It(e){return(t,i,n)=>{i=Xe(i,n);for(var r=so(t),s=e>0?0:r-1;s>=0&&r>s;s+=e)if(i(t[s],s,t))return s;return-1}}function Nt(){return Gh||(Gh=!0,Aa={},Je(),ne(),i(Aa,"default",(()=>It))),Aa}function Ft(){return Zh||(Zh=!0,Oa={},Nt(),Ra=It(1),i(Oa,"default",(()=>Ra))),Oa}function jt(){return Yh||(Yh=!0,_a={},Nt(),Pa=It(-1),i(_a,"default",(()=>Pa))),_a}function Wt(e,t,i,n){for(var r=(i=Xe(i,n,1))(t),s=0,o=so(e);o>s;){var a=Math.floor((s+o)/2);i(e[a])Wt))),Ha}function qt(e,t,i){return(n,r,s)=>{var o=0,a=so(n);if("number"==typeof s)e>0?o=0>s?Math.max(s+a,o):s:a=0>s?s+a+1:Math.min(s+1,a);else if(i&&s&&a)return n[s=i(n,r)]===r?s:-1;if(r!=r)return 0>(s=t(Gr.call(n,o,a),$))?-1:s+o;for(s=e>0?o:a-1;s>=0&&a>s;s+=e)if(n[s]===r)return s;return-1}}function zt(){return Jh||(Jh=!0,Ia={},ne(),E(),Q(),i(Ia,"default",(()=>qt))),Ia}function Ut(){return ed||(ed=!0,Na={},Bt(),Ft(),zt(),Fa=qt(1,Ra,Wt),i(Na,"default",(()=>Fa))),Na}function Vt(e,t,i){var n=(ao(e)?Ra:Pt)(e,t,i);if(void 0!==n&&-1!==n)return e[n]}function $t(){return id||(id=!0,Ba={},re(),Ft(),Ht(),i(Ba,"default",(()=>Vt))),Ba}function Qt(e,t){return Vt(e,We(t))}function Kt(e,t,i){var n,r;if(t=$e(t,i),ao(e))for(n=0,r=e.length;r>n;n++)t(e[n],n,e);else{var s=ae(e);for(n=0,r=s.length;r>n;n++)t(e[s[n]],s[n],e)}return e}function Gt(){return rd||(rd=!0,za={},Qe(),re(),le(),i(za,"default",(()=>Kt))),za}function Zt(e,t,i){t=Xe(t,i);for(var n=!ao(e)&&ae(e),r=(n||e).length,s=Array(r),o=0;r>o;o++){var a=n?n[o]:o;s[o]=t(e[a],a,e)}return s}function Yt(){return sd||(sd=!0,Ua={},Je(),re(),le(),i(Ua,"default",(()=>Zt))),Ua}function Xt(e){var t=(t,i,n,r)=>{var s=!ao(t)&&ae(t),o=(s||t).length,a=e>0?0:o-1;for(r||(n=t[s?s[a]:a],a+=e);a>=0&&o>a;a+=e){var l=s?s[a]:a;n=i(n,t[l],l,t)}return n};return function(e,i,n,r){var s=arguments.length>=3;return t(e,$e(i,r,4),n,s)}}function Jt(){return od||(od=!0,Va={},re(),le(),Qe(),i(Va,"default",(()=>Xt))),Va}function ei(e,t,i){var n=[];return t=Xe(t,i),Kt(e,((e,i,r)=>{t(e,i,r)&&n.push(e)})),n}function ti(){return cd||(cd=!0,Za={},Je(),Gt(),i(Za,"default",(()=>ei))),Za}function ii(e,t,i){return ei(e,kt(Xe(t)),i)}function ni(e,t,i){t=Xe(t,i);for(var n=!ao(e)&&ae(e),r=(n||e).length,s=0;r>s;s++){var o=n?n[s]:s;if(!t(e[o],o,e))return!1}return!0}function ri(e,t,i){t=Xe(t,i);for(var n=!ao(e)&&ae(e),r=(n||e).length,s=0;r>s;s++){var o=n?n[s]:s;if(t(e[o],o,e))return!0}return!1}function si(e,t,i,n){return ao(e)||(e=be(e)),("number"!=typeof i||n)&&(i=0),Fa(e,t,i)>=0}function oi(){return pd||(pd=!0,el={},re(),Se(),Ut(),i(el,"default",(()=>si))),el}function ai(e,t){return Zt(e,Ue(t))}function li(){return gd||(gd=!0,nl={},Yt(),Ve(),i(nl,"default",(()=>ai))),nl}function ci(e,t){return ei(e,We(t))}function hi(e,t,i){var n,r,s=-1/0,o=-1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var a=0,l=(e=ao(e)?e:be(e)).length;l>a;a++)null!=(n=e[a])&&n>s&&(s=n);else t=Xe(t,i),Kt(e,((e,i,n)=>{((r=t(e,i,n))>o||r===-1/0&&s===-1/0)&&(s=e,o=r)}));return s}function di(){return vd||(vd=!0,sl={},re(),Se(),Je(),Gt(),i(sl,"default",(()=>hi))),sl}function ui(e,t,i){var n,r,s=1/0,o=1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var a=0,l=(e=ao(e)?e:be(e)).length;l>a;a++)null!=(n=e[a])&&s>n&&(s=n);else t=Xe(t,i),Kt(e,((e,i,n)=>{r=t(e,i,n),(o>r||r===1/0&&s===1/0)&&(s=e,o=r)}));return s}function pi(e,t,i){if(null==t||i)return ao(e)||(e=be(e)),e[rt(e.length-1)];var n=ao(e)?Pe(e):be(e),r=so(n);t=Math.max(Math.min(t,r),0);for(var s=r-1,o=0;t>o;o++){var a=rt(o,s),l=n[o];n[o]=n[a],n[a]=l}return n.slice(0,t)}function fi(){return bd||(bd=!0,al={},re(),He(),Se(),ne(),st(),i(al,"default",(()=>pi))),al}function gi(e){return pi(e,1/0)}function mi(e,t,i){var n=0;return t=Xe(t,i),ai(Zt(e,((e,i,r)=>({value:e,index:n++,criteria:t(e,i,r)}))).sort(((e,t)=>{var i=e.criteria,n=t.criteria;if(i!==n){if(i>n||void 0===i)return 1;if(n>i||void 0===n)return-1}return e.index-t.index})),"value")}function vi(e,t){return(i,n,r)=>{var s=t?[[],[]]:{};return n=Xe(n,r),Kt(i,((t,r)=>{var o=n(t,r,i);e(s,t,o)})),s}}function yi(){return xd||(xd=!0,hl={},Je(),Gt(),i(hl,"default",(()=>vi))),hl}function bi(e){return e?Ns(e)?Gr.call(e):ps(e)?e.match(Sl):ao(e)?Zt(e,Fe):be(e):[]}function Si(e){return null==e?0:ao(e)?e.length:ae(e).length}function wi(e,t,i){return t in i}function xi(){return Ad||(Ad=!0,xl={},D(),B(),Qe(),ye(),Ld||(Ld=!0,i({},"default",(()=>wi))),xt(),Cl=T(((e,t)=>{var i={},n=t[0];if(null==e)return i;Bs(n)?(t.length>1&&(n=$e(n,t[1])),t=ve(e)):(n=wi,t=wt(t,!1,!1),e=Object(e));for(var r=0,s=t.length;s>r;r++){var o=t[r],a=e[o];n(a,o,e)&&(i[o]=a)}return i})),i(xl,"default",(()=>Cl))),xl}function Ci(e,t,i){return Gr.call(e,0,Math.max(0,e.length-(null==t||i?1:t)))}function Ei(){return Rd||(Rd=!0,Dl={},E(),i(Dl,"default",(()=>Ci))),Dl}function Ti(e,t,i){return null==e||1>e.length?null==t||i?void 0:[]:null==t||i?e[0]:Ci(e,e.length-t)}function Di(e,t,i){return Gr.call(e,null==t||i?1:t)}function Mi(){return Pd||(Pd=!0,kl={},E(),i(kl,"default",(()=>Di))),kl}function ki(e,t,i){return null==e||1>e.length?null==t||i?void 0:[]:null==t||i?e[e.length-1]:Di(e,Math.max(0,e.length-t))}function Li(e){return ei(e,Boolean)}function Ai(e,t){return wt(e,t,!1)}function Oi(){return Fd||(Fd=!0,Rl={},D(),xt(),ti(),oi(),_l=T(((e,t)=>(t=wt(t,!0,!0),ei(e,(e=>!si(t,e)))))),i(Rl,"default",(()=>_l))),Rl}function Ri(e,t,i,n){O(t)||(n=i,i=t,t=!1),null!=i&&(i=Xe(i,n));for(var r=[],s=[],o=0,a=so(e);a>o;o++){var l=e[o],c=i?i(l,o,e):l;t&&!i?(o&&s===c||r.push(l),s=c):i?si(s,c)||(s.push(c),r.push(l)):si(r,l)||r.push(l)}return r}function _i(){return Wd||(Wd=!0,Il={},R(),Je(),ne(),oi(),i(Il,"default",(()=>Ri))),Il}function Pi(e){for(var t=[],i=arguments.length,n=0,r=so(e);r>n;n++){var s=e[n];if(!si(t,s)){var o;for(o=1;i>o&&si(arguments[o],s);o++);o===i&&t.push(s)}}return t}function Hi(e){for(var t=e&&hi(e,so).length||0,i=Array(t),n=0;t>n;n++)i[n]=ai(e,n);return i}function Ii(){return zd||(zd=!0,Wl={},di(),ne(),li(),i(Wl,"default",(()=>Hi))),Wl}function Ni(e,t){for(var i={},n=0,r=so(e);r>n;n++)t?i[e[n]]=t[n]:i[e[n][0]]=e[n][1];return i}function Fi(e,t,i){null==t&&(t=e||0,e=0),i||(i=e>t?-1:1);for(var n=Math.max(Math.ceil((t-e)/i),0),r=Array(n),s=0;n>s;s++,e+=i)r[s]=e;return r}function ji(e,t){if(null==t||1>t)return[];for(var i=[],n=0,r=e.length;r>n;)i.push(Gr.call(e,n,n+=t));return i}function Wi(e,t){return e._chain?ue(t).chain():t}function Bi(){return Kd||(Kd=!0,Vl={},pe(),i(Vl,"default",(()=>Wi))),Vl}function qi(e){return Kt(Ee(e),(function(t){var i=ue[t]=e[t];ue.prototype[t]=function(){var e=[this._wrapped];return Kr.apply(e,arguments),Wi(this,i.apply(ue,e))}})),ue}function zi(){return Yd||(Yd=!0,Kl={},E(),D(),k(),dc||(dc=!0,i({},"default",(()=>L))),uc||(uc=!0,i({},"default",(()=>A))),R(),fc||(fc=!0,i({},"default",(()=>_))),I(),N(),yc||(yc=!0,ms={},H(),vs=P("Date"),i(ms,"default",(()=>vs))),bc||(bc=!0,ys={},H(),bs=P("RegExp"),i(ys,"default",(()=>bs))),Sc||(Sc=!0,Ss={},H(),ws=P("Error"),i(Ss,"default",(()=>ws))),F(),xc||(xc=!0,Es={},H(),Ts=P("Map"),i(Es,"default",(()=>Ts))),Cc||(Cc=!0,Ds={},H(),Ms=P("WeakMap"),i(Ds,"default",(()=>Ms))),Ec||(Ec=!0,ks={},H(),Ls=P("Set"),i(ks,"default",(()=>Ls))),Tc||(Tc=!0,As={},H(),Os=P("WeakSet"),i(As,"default",(()=>Os))),Dc||(Dc=!0,Rs={},H(),_s=P("ArrayBuffer"),i(Rs,"default",(()=>_s))),j(),W(),B(),U(),Rc||(Rc=!0,$s={},E(),F(),i($s,"default",(()=>V))),Q(),ie(),Uc||(Uc=!0,ho={},re(),W(),I(),U(),le(),i(ho,"default",(()=>ce))),de(),Qc||(Qc=!0,fo={},pe(),E(),ee(),ie(),B(),le(),z(),i(fo,"default",(()=>me))),le(),ye(),Se(),Zc||(Zc=!0,vo={},le(),i(vo,"default",(()=>we))),Ce(),Te(),ke(),Le(),Ae(),rh||(rh=!0,ko={},Re(),Le(),i(ko,"default",(()=>_e))),He(),oh||(oh=!0,i({},"default",(()=>Ie))),ah||(ah=!0,Ao={},W(),z(),E(),i(Ao,"default",(()=>Ne))),mh||(mh=!0,jo={},Je(),le(),i(jo,"default",(()=>et))),je(),G(),vh||(vh=!0,i({},"default",(()=>tt))),Ve(),yh||(yh=!0,Wo={},W(),ze(),i(Wo,"default",(()=>it))),Be(),bh||(bh=!0,Bo={},Qe(),i(Bo,"default",(()=>nt))),st(),ot(),Eh||(Eh=!0,Ko={},lt(),ct(),Go=at(Qo),i(Ko,"default",(()=>Go))),ht(),dt(),kh||(kh=!0,ia={},Ae(),pe(),dt(),na=/(.)^/,ra={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},sa=/\\|'|\r|\n|\u2028|\u2029/g,i(ia,"default",(()=>pt))),Lh||(Lh=!0,oa={},W(),B(),i(oa,"default",(()=>ft))),Ah||(Ah=!0,aa=0,i({},"default",(()=>gt))),Oh||(Oh=!0,la={},pe(),i(la,"default",(()=>mt))),Ye(),bt(),St(),Ih||(Ih=!0,ga={},D(),xt(),St(),ma=T(((e,t)=>{var i=(t=wt(t,!1,!1)).length;if(1>i)throw Error("bindAll must be passed function names");for(;i--;){var n=t[i];e[n]=pa(e[n],e)}return e})),i(ga,"default",(()=>ma))),Nh||(Nh=!0,va={},z(),i(va,"default",(()=>Ct))),Et(),jh||(jh=!0,Sa={},bt(),Et(),pe(),wa=da(ba,ue,1),i(Sa,"default",(()=>wa))),Wh||(Wh=!0,xa={},ot(),i(xa,"default",(()=>Tt))),Bh||(Bh=!0,Ca={},D(),Et(),i(Ca,"default",(()=>Dt))),qh||(qh=!0,Ea={},bt(),i(Ea,"default",(()=>Mt))),Lt(),Uh||(Uh=!0,i({},"default",(()=>At))),Vh||(Vh=!0,i({},"default",(()=>Ot))),_t(),Qh||(Qh=!0,Ma={},bt(),_t(),ka=da(Rt,2),i(Ma,"default",(()=>ka))),Ht(),Ft(),jt(),Bt(),Ut(),td||(td=!0,ja={},jt(),zt(),Wa=qt(-1,Pa),i(ja,"default",(()=>Wa))),$t(),nd||(nd=!0,qa={},$t(),Be(),i(qa,"default",(()=>Qt))),Gt(),Yt(),ad||(ad=!0,$a={},Jt(),Qa=Xt(1),i($a,"default",(()=>Qa))),ld||(ld=!0,Ka={},Jt(),Ga=Xt(-1),i(Ka,"default",(()=>Ga))),ti(),hd||(hd=!0,Ya={},ti(),Lt(),Je(),i(Ya,"default",(()=>ii))),dd||(dd=!0,Xa={},Je(),re(),le(),i(Xa,"default",(()=>ni))),ud||(ud=!0,Ja={},Je(),re(),le(),i(Ja,"default",(()=>ri))),oi(),fd||(fd=!0,tl={},D(),B(),W(),Yt(),ze(),il=T(((e,t,i)=>{var n,r;return Bs(t)?r=t:Ns(t)&&(n=t.slice(0,-1),t=t[t.length-1]),Zt(e,(e=>{var s=r;if(!s){if(n&&n.length&&(e=qe(e,n)),null==e)return;s=e[t]}return null==s?s:s.apply(e,i)}))})),i(tl,"default",(()=>il))),li(),md||(md=!0,rl={},ti(),Be(),i(rl,"default",(()=>ci))),di(),yd||(yd=!0,ol={},re(),Se(),Je(),Gt(),i(ol,"default",(()=>ui))),Sd||(Sd=!0,ll={},fi(),i(ll,"default",(()=>gi))),fi(),wd||(wd=!0,cl={},Je(),li(),Yt(),i(cl,"default",(()=>mi))),Cd||(Cd=!0,dl={},yi(),z(),ul=vi(((e,t,i)=>{q(e,i)?e[i].push(t):e[i]=[t]})),i(dl,"default",(()=>ul))),Ed||(Ed=!0,pl={},yi(),fl=vi(((e,t,i)=>{e[i]=t})),i(pl,"default",(()=>fl))),Td||(Td=!0,gl={},yi(),z(),ml=vi(((e,t,i)=>{q(e,i)?e[i]++:e[i]=1})),i(gl,"default",(()=>ml))),Dd||(Dd=!0,vl={},yi(),yl=vi(((e,t,i)=>{e[i?0:1].push(t)}),!0),i(vl,"default",(()=>yl))),Md||(Md=!0,bl={},W(),E(),I(),re(),Yt(),je(),Se(),Sl=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g,i(bl,"default",(()=>bi))),kd||(kd=!0,wl={},re(),le(),i(wl,"default",(()=>Si))),xi(),Od||(Od=!0,El={},D(),B(),Lt(),Yt(),xt(),oi(),xi(),Tl=T(((e,t)=>{var i,n=t[0];return Bs(n)?(n=kt(n),t.length>1&&(i=t[1])):(t=Zt(wt(t,!1,!1),String),n=(e,i)=>!si(t,i)),Cl(e,n,i)})),i(El,"default",(()=>Tl))),_d||(_d=!0,Ml={},Ei(),i(Ml,"default",(()=>Ti))),Ei(),Hd||(Hd=!0,Ll={},Mi(),i(Ll,"default",(()=>ki))),Mi(),Id||(Id=!0,Al={},ti(),i(Al,"default",(()=>Li))),Nd||(Nd=!0,Ol={},xt(),i(Ol,"default",(()=>Ai))),jd||(jd=!0,Pl={},D(),Oi(),Hl=T(((e,t)=>_l(e,t))),i(Pl,"default",(()=>Hl))),_i(),Bd||(Bd=!0,Nl={},D(),_i(),xt(),Fl=T((e=>Ri(wt(e,!0,!0)))),i(Nl,"default",(()=>Fl))),qd||(qd=!0,jl={},ne(),oi(),i(jl,"default",(()=>Pi))),Oi(),Ii(),Ud||(Ud=!0,Bl={},D(),Ii(),ql=T(Hi),i(Bl,"default",(()=>ql))),Vd||(Vd=!0,zl={},ne(),i(zl,"default",(()=>Ni))),$d||($d=!0,i({},"default",(()=>Fi))),Qd||(Qd=!0,Ul={},E(),i(Ul,"default",(()=>ji))),Gd||(Gd=!0,$l={},pe(),Gt(),Te(),E(),Bi(),i($l,"default",(()=>qi))),Zd||(Zd=!0,Ql={},pe(),Gt(),E(),Bi(),Kt(["pop","push","reverse","shift","sort","splice","unshift"],(function(e){var t=Vr[e];ue.prototype[e]=function(){var i=this._wrapped;return null!=i&&(t.apply(i,arguments),"shift"!==e&&"splice"!==e||0!==i.length||delete i[0]),Wi(this,i)}})),Kt(["concat","join","slice"],(function(e){var t=Vr[e];ue.prototype[e]=function(){var e=this._wrapped;return null!=e&&(e=t.apply(e,arguments)),Wi(this,e)}})),i(Ql,"default",(()=>ue))),i(Kl,"VERSION",(()=>zr)),i(Kl,"restArguments",(()=>T)),i(Kl,"isObject",(()=>M)),i(Kl,"isNull",(()=>L)),i(Kl,"isUndefined",(()=>A)),i(Kl,"isBoolean",(()=>O)),i(Kl,"isElement",(()=>_)),i(Kl,"isString",(()=>ps)),i(Kl,"isNumber",(()=>gs)),i(Kl,"isDate",(()=>vs)),i(Kl,"isRegExp",(()=>bs)),i(Kl,"isError",(()=>ws)),i(Kl,"isSymbol",(()=>Cs)),i(Kl,"isMap",(()=>Ts)),i(Kl,"isWeakMap",(()=>Ms)),i(Kl,"isSet",(()=>Ls)),i(Kl,"isWeakSet",(()=>Os)),i(Kl,"isArrayBuffer",(()=>_s)),i(Kl,"isDataView",(()=>Hs)),i(Kl,"isArray",(()=>Ns)),i(Kl,"isFunction",(()=>Bs)),i(Kl,"isArguments",(()=>Vs)),i(Kl,"isFinite",(()=>V)),i(Kl,"isNaN",(()=>$)),i(Kl,"isTypedArray",(()=>no)),i(Kl,"isEmpty",(()=>ce)),i(Kl,"isMatch",(()=>he)),i(Kl,"isEqual",(()=>me)),i(Kl,"keys",(()=>ae)),i(Kl,"allKeys",(()=>ve)),i(Kl,"values",(()=>be)),i(Kl,"pairs",(()=>we)),i(Kl,"invert",(()=>xe)),i(Kl,"methods",(()=>Ee)),i(Kl,"functions",(()=>Ee)),i(Kl,"extend",(()=>xo)),i(Kl,"assign",(()=>Eo)),i(Kl,"extendOwn",(()=>Eo)),i(Kl,"defaults",(()=>Do)),i(Kl,"create",(()=>_e)),i(Kl,"clone",(()=>Pe)),i(Kl,"tap",(()=>Ie)),i(Kl,"has",(()=>Ne)),i(Kl,"mapObject",(()=>et)),i(Kl,"identity",(()=>Fe)),i(Kl,"constant",(()=>K)),i(Kl,"noop",(()=>tt)),i(Kl,"property",(()=>Ue)),i(Kl,"propertyOf",(()=>it)),i(Kl,"matches",(()=>We)),i(Kl,"matcher",(()=>We)),i(Kl,"times",(()=>nt)),i(Kl,"random",(()=>rt)),i(Kl,"now",(()=>Uo)),i(Kl,"escape",(()=>Go)),i(Kl,"unescape",(()=>Jo)),i(Kl,"templateSettings",(()=>ta)),i(Kl,"template",(()=>pt)),i(Kl,"result",(()=>ft)),i(Kl,"uniqueId",(()=>gt)),i(Kl,"chain",(()=>mt)),i(Kl,"iteratee",(()=>Ze)),i(Kl,"partial",(()=>da)),i(Kl,"bind",(()=>pa)),i(Kl,"bindAll",(()=>ma)),i(Kl,"memoize",(()=>Ct)),i(Kl,"delay",(()=>ba)),i(Kl,"defer",(()=>wa)),i(Kl,"throttle",(()=>Tt)),i(Kl,"debounce",(()=>Dt)),i(Kl,"wrap",(()=>Mt)),i(Kl,"negate",(()=>kt)),i(Kl,"compose",(()=>At)),i(Kl,"after",(()=>Ot)),i(Kl,"before",(()=>Rt)),i(Kl,"once",(()=>ka)),i(Kl,"findKey",(()=>Pt)),i(Kl,"findIndex",(()=>Ra)),i(Kl,"findLastIndex",(()=>Pa)),i(Kl,"sortedIndex",(()=>Wt)),i(Kl,"indexOf",(()=>Fa)),i(Kl,"lastIndexOf",(()=>Wa)),i(Kl,"detect",(()=>Vt)),i(Kl,"find",(()=>Vt)),i(Kl,"findWhere",(()=>Qt)),i(Kl,"forEach",(()=>Kt)),i(Kl,"each",(()=>Kt)),i(Kl,"collect",(()=>Zt)),i(Kl,"map",(()=>Zt)),i(Kl,"inject",(()=>Qa)),i(Kl,"foldl",(()=>Qa)),i(Kl,"reduce",(()=>Qa)),i(Kl,"foldr",(()=>Ga)),i(Kl,"reduceRight",(()=>Ga)),i(Kl,"select",(()=>ei)),i(Kl,"filter",(()=>ei)),i(Kl,"reject",(()=>ii)),i(Kl,"all",(()=>ni)),i(Kl,"every",(()=>ni)),i(Kl,"any",(()=>ri)),i(Kl,"some",(()=>ri)),i(Kl,"include",(()=>si)),i(Kl,"includes",(()=>si)),i(Kl,"contains",(()=>si)),i(Kl,"invoke",(()=>il)),i(Kl,"pluck",(()=>ai)),i(Kl,"where",(()=>ci)),i(Kl,"max",(()=>hi)),i(Kl,"min",(()=>ui)),i(Kl,"shuffle",(()=>gi)),i(Kl,"sample",(()=>pi)),i(Kl,"sortBy",(()=>mi)),i(Kl,"groupBy",(()=>ul)),i(Kl,"indexBy",(()=>fl)),i(Kl,"countBy",(()=>ml)),i(Kl,"partition",(()=>yl)),i(Kl,"toArray",(()=>bi)),i(Kl,"size",(()=>Si)),i(Kl,"pick",(()=>Cl)),i(Kl,"omit",(()=>Tl)),i(Kl,"take",(()=>Ti)),i(Kl,"head",(()=>Ti)),i(Kl,"first",(()=>Ti)),i(Kl,"initial",(()=>Ci)),i(Kl,"last",(()=>ki)),i(Kl,"drop",(()=>Di)),i(Kl,"tail",(()=>Di)),i(Kl,"rest",(()=>Di)),i(Kl,"compact",(()=>Li)),i(Kl,"flatten",(()=>Ai)),i(Kl,"without",(()=>Hl)),i(Kl,"unique",(()=>Ri)),i(Kl,"uniq",(()=>Ri)),i(Kl,"union",(()=>Fl)),i(Kl,"intersection",(()=>Pi)),i(Kl,"difference",(()=>_l)),i(Kl,"transpose",(()=>Hi)),i(Kl,"unzip",(()=>Hi)),i(Kl,"zip",(()=>ql)),i(Kl,"object",(()=>Ni)),i(Kl,"range",(()=>Fi)),i(Kl,"chunk",(()=>ji)),i(Kl,"mixin",(()=>qi)),i(Kl,"default",(()=>ue))),Kl}function Ui(e,t=1){return e.replace("rgb(","rgba(").replace(")",`, ${t})`)}function Vi(e,t,i,n,r){if(null==n&&null==r)return[];let s=[{start:n,end:r,offscreenRow:0}];for(let e=0,t=i.length;t>e;e++){const t=i[e],n=[];for(let e=0,i=s.length;i>e;e++){const i=s[e];i.start>t.end&&0!==t.screenDelta?n.push({start:i.start+t.screenDelta,end:i.end+t.screenDelta,offscreenRow:i.offscreenRow}):i.start>t.end||t.start>i.end?n.push(i):(t.start>i.start&&n.push({start:i.start,end:t.start-1,offscreenRow:i.offscreenRow}),i.end>t.end&&n.push(0!==t.bufferDelta||0!==t.screenDelta?{start:t.end+t.screenDelta+1,end:i.end+t.screenDelta,offscreenRow:i.offscreenRow+t.end+1-i.start}:{start:t.end+1,end:i.end,offscreenRow:i.offscreenRow+t.end+1-i.start}))}s=n}return((e,t,i)=>{let n=0;for(;e.length>n;){const r=e[n];t>r.start&&(r.offscreenRow+=t-r.start,r.start=t),r.end>i&&(r.end=i),r.end>r.start||e.splice(n--,1),n++}return e.sort(((e,t)=>e.offscreenRow-t.offscreenRow))})(s,e,t)}function $i(e,...t){t.forEach((t=>{var i,n;i=e,Object.getOwnPropertyNames(n=t).forEach((e=>{0>["length","name","arguments","caller","prototype","includeInto"].indexOf(e)&&Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(n,e))})),Object.getOwnPropertyNames(n.prototype).forEach((e=>{"constructor"!==e&&Object.defineProperty(i.prototype,e,Object.getOwnPropertyDescriptor(n.prototype,e))}))}))}function Qi(e,t){return gr.registerOrUpdateElement(t,{class:e})}function Ki(e){au&&(au.textContent=`\n atom-text-editor[with-minimap].editor > div,\n atom-text-editor[with-minimap] > div {\n margin-left: ${e}px;\n }\n `)}function Gi(e){return{x:e.pageX,y:e.pageY,isLeftMouse:0===e.button,isMiddleMouse:1===e.button}}function Zi(e){const t=e.changedTouches[0];return{x:t.pageX,y:t.pageY,isLeftMouse:!0,isMiddleMouse:!1}}function Yi(e,t){if(!e)return;let i="";for(const e in t)i+=`${e}: ${t[e]}; `;e.style.cssText=i}function Xi(e=0,t=0,i=!1){return i?`translate3d(${e}px, ${t}px, 0)`:`translate(${e}px, ${t}px)`}function Ji(e=0,t=e,i=!1){return i?`scale3d(${e}, ${t}, 1)`:`scale(${e}, ${t})`}function en({from:e,to:t,duration:i,step:n}){const r=tn();let s;const o=()=>{const a=tn()-r;s=0===i?1:a/i,s>1&&(s=1);const l=(e=>.5-Math.cos(e*Math.PI)/2)(s);n(e+(t-e)*l,l),1>s&&requestAnimationFrame(o)};o()}function tn(){return new Date}function nn(e,t){bu[e]=t,Su[e]=new hr,Mu.emit("did-add-plugin",{name:e,plugin:t}),atom.config.get("minimap.displayPluginsControls")&&((e,t)=>{const i="minimap.plugins."+e,n=`minimap.plugins.${e}DecorationsZIndex`,r=pn();r.plugins.properties[e]={type:"boolean",title:e,description:`Whether the ${e} plugin is activated and displayed in the Minimap.`,default:!0},r.plugins.properties[e+"DecorationsZIndex"]={type:"integer",title:e+" decorations order",description:`The relative order of the ${e} plugin's decorations in the layer into which they are drawn. Note that this order only apply inside a layer, so highlight-over decorations will always be displayed above line decorations as they are rendered in different layers.`,default:0},void 0===atom.config.get(i)&&atom.config.set(i,!0),void 0===atom.config.get(n)&&atom.config.set(n,0),Su[e].add(atom.config.observe(i,(()=>{an(e)}))),Su[e].add(atom.config.observe(n,(i=>{hn(e),Mu.emit("did-change-plugin-order",{name:e,plugin:t,order:i})}))),Su[e].add(atom.commands.add("atom-workspace",{["minimap:toggle-"+e](){sn(e)}})),hn(e)})(e,t),an(e)}function rn(e){const t=bu[e];atom.config.get("minimap.displayPluginsControls")&&(e=>{Su[e].dispose(),delete Su[e],delete pn().plugins.properties[e]})(e),delete bu[e],Mu.emit("did-remove-plugin",{name:e,plugin:t})}function sn(e,t){const i="minimap.plugins."+e;null!=t?atom.config.set(i,t):atom.config.set(i,!atom.config.get(i)),an(e)}function on(){for(const[e,t]of function*(){for(const e in bu)yield[e,bu[e]]}())t.deactivatePlugin(),Mu.emit("did-deactivate-plugin",{name:e,plugin:t})}function an(e){const t=bu[e],i=t.isActive(),n=atom.config.get("minimap.plugins."+e);atom.config.get("minimap.displayPluginsControls")?n&&!i?ln(e,t):i&&!n&&cn(e,t):i?i&&cn(e,t):ln(e,t)}function ln(e,t){const i={name:e,plugin:t};t.activatePlugin(),Mu.emit("did-activate-plugin",i)}function cn(e,t){const i={name:e,plugin:t};t.deactivatePlugin(),Mu.emit("did-deactivate-plugin",i)}function hn(e){wu[e]=atom.config.get(`minimap.plugins.${e}DecorationsZIndex`)}function dn(){return wu}function un(e){if(e instanceof vu){const t=new lu;return t.setModel(e),t}}function pn(){return ku||atom.packages.getLoadedPackage("minimap").metadata.configSchema}function fn(){xu&&(Cu?(Cu=!1,Eu&&Eu.forEach(((e,t)=>{e.destroy(),Eu.delete(t)})),Tu.dispose()):(Cu=!0,Tu.add(atom.workspace.observeTextEditors((e=>{const t=Dn(e),i=atom.views.getView(t);Mu.emit("did-create-minimap",t),i.attach()})))))}async function gn(e){const{default:t}=await(fr||(fr=!0,An={},An=Promise.resolve(require("./minimap-plugin-generator-element.a47de6ae.js"))),An),i=new t;i.template=e,i.attach()}function mn(e){return Mu.on("did-activate",e)}function vn(e){return Mu.on("did-deactivate",e)}function yn(e){return Mu.on("did-create-minimap",e)}function bn(e){return Mu.on("did-add-plugin",e)}function Sn(e){return Mu.on("did-remove-plugin",e)}function wn(e){return Mu.on("did-activate-plugin",e)}function xn(e){return Mu.on("did-deactivate-plugin",e)}function Cn(e){return Mu.on("did-change-plugin-order",e)}function En(){return vu}function Tn(e){if(e)return Dn(e.getModel())}function Dn(e){if(!e)return;if(!Eu)return;let t=Eu.get(e);if(!t){t=new vu({textEditor:e}),Eu.set(e,t);const i=e.onDidDestroy((()=>{Eu&&Eu.delete(e),i.dispose()}))}return t}function Mn(e){if(e)return new vu({textEditor:e,standAlone:!0})}function kn(){return Dn(atom.workspace.getActiveTextEditor())}function Ln(e){if(e)return Eu&&Eu.forEach((t=>{e(t)})),yn((t=>{e(t)}))}var An,On,Rn,_n,Pn,Hn,In,Nn,Fn,jn,Wn,Bn,qn,zn,Un,Vn,$n,Qn,Kn,Gn,Zn,Yn,Xn,Jn,er,tr,ir,nr,rr,sr,or,ar=e(require("path")),lr=require("atom"),cr=n({},lr),{CompositeDisposable:hr,Disposable:dr,Emitter:ur}=lr,pr="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},fr=!1,gr={},mr=!1,vr=!1,yr=!1,br=!1,Sr=!1,wr=!1,xr=!1,Cr=!1,Er=!1,Tr=!1,Dr=!1,Mr=!1;gr={requirePackages(...e){return new Promise(((t,i)=>{var n,r,s,o;return s=[],n=[],r=e.length,o=()=>{if(0==--r)return n.length>0?i(n):t(s)},e.forEach(((e,t)=>{var i,r;return i=e=>(n[t]=e,o()),null!=(r=atom.packages.activatePackage(e).then((e=>(s[t]=e.mainModule,o())))).fail?r.fail(i):null!=r.catch?r.catch(i):void 0}))}))},registerOrUpdateElement:(xr||(xr=!0,zn={},({deprecate:rr}=(wr||(wr=!0,f()),qn)),null!=pr.__CUSTOM_HTML_ELEMENTS_CLASSES__?(pr.__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__=pr.__CUSTOM_HTML_ELEMENTS_CLASSES__,delete pr.__CUSTOM_HTML_ELEMENTS_CLASSES__):null==pr.__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__&&(pr.__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__={}),tr=["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"],nr=function(e,t){return tr.forEach((function(t){return Object.defineProperty(e,t,{value(){var e;return null!=(e=this["__"+t])?e.apply(this,arguments):void 0},writable:!0,enumerable:!0,configurable:!0})})),Object.getOwnPropertyNames(t).forEach((i=>{var n;if("constructor"!==i)return n=Object.getOwnPropertyDescriptor(t,i),tr.indexOf(i)>-1?Object.defineProperty(e,"__"+i,n):Object.defineProperty(e,i,n)}))},ir=(e,t)=>Object.getOwnPropertyNames(t).forEach((i=>{if("length"!==i&&"name"!==i&&"arguments"!==i&&"caller"!==i&&"prototype"!==i)return Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(t,i))})),zn=(e,t)=>{var i,n,r,s,o;return({class:r}=t),(s=null!=r?r.prototype:null!=(o=t.prototype)?o:t)===t&&rr("Using the prototype as the second argument is deprecated, use the prototype option instead"),__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__[e]?(i=__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__[e],nr(i.prototype,s),null!=r&&ir(i,r),i):(n=Object.create(HTMLElement.prototype),nr(n,s),i=document.registerElement(e,{prototype:Object.create(n)}),null!=r&&ir(i,r),__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__[e]=i)}),zn),Ancestors:m(),AncestorsMethods:m(),DisposableEvents:v(),EventsDelegation:(Dr||(Dr=!0,Qn={},Xn=g(),Yn=v(),({Disposable:Zn,CompositeDisposable:Gn}=cr),er=(e,t)=>{var i,n;for(i in n=[],e)n.push(t(i,e[i]));return n},Jn="__NONE__",Qn=function(){class e extends Xn{subscribeTo(e,t,i,n){var r,s;return e instanceof HTMLElement||([e,t,i,n]=[this,e,t,i]),"object"==typeof t&&([i,t,n]=[t,Jn,i]),null==this.eventsMap&&(this.eventsMap=new WeakMap),null==this.disposablesMap&&(this.disposablesMap=new WeakMap),null==this.eventsMap.get(e)&&this.eventsMap.set(e,{}),null==this.disposablesMap.get(e)&&this.disposablesMap.set(e,{}),s=this.eventsMap.get(e),r=this.disposablesMap.get(e),er(i,((i,o)=>(null==s[i]&&(s[i]={},r[i]=this.createEventListener(e,i,n)),s[i][t]=o))),new Zn((()=>this.unsubscribeFrom(e,t,i)))}unsubscribeFrom(e,t,i){var n,r,s;if(e instanceof HTMLElement||([e,t,i]=[this,e,t]),"object"==typeof t&&([i,t]=[t,Jn]),s=this.eventsMap.get(e)){for(r in i)delete s[r][t],0===Object.keys(s[r]).length&&((n=this.disposablesMap.get(e))[r].dispose(),delete n[r],delete s[r]);return 0===Object.keys(s).length?(this.eventsMap.delete(e),this.disposablesMap.delete(e)):void 0}}createEventListener(e,t,i){return this.addDisposableEventListener(e,t,(i=>{var n,r,s;if(n=null!=(r=this.eventsMap.get(e))?r[t]:void 0)return({target:s}=i),this.decorateEvent(i),this.eachSelectorFromTarget(i,s,n),i.isPropagationStopped||"function"==typeof n.__NONE__&&n.__NONE__(i),!0}),i)}eachSelectorFromTarget(e,t,i){return this.nodeAndItsAncestors(t,(t=>{if(!e.isPropagationStopped)return this.eachSelector(i,((i,n)=>{var r;if(r=this.targetMatch(t,i),!e.isImmediatePropagationStopped&&r)return n(e)}))}))}eachSelector(e,t){var i,n,r,s;for(-1!==(r=Object.keys(e)).indexOf(Jn)&&r.splice(r.indexOf(Jn),1),r.sort(((e,t)=>t.split(" ").length-e.split(" ").length)),i=0,s=r.length;s>i;i++)if(t(n=r[i],e[n]))return!0;return!1}targetMatch(e,t){var i;if(e.matches(t))return!0;for(i=e.parentNode;null!=i&&null!=i.matches;){if(i.matches(t))return!0;i=i.parentNode}return!1}nodeAndItsAncestors(e,t){var i,n;for(i=e.parentNode,t(e),n=[];null!=i&&null!=i.matches;)t(i),n.push(i=i.parentNode);return n}decorateEvent(e){var t,i;return t=Event.prototype.stopPropagation,e.stopPropagation=function(){return this.isPropagationStopped=!0,t.apply(this,arguments)},i=Event.prototype.stopImmediatePropagation,e.stopImmediatePropagation=function(){return this.isImmediatePropagationStopped=!0,i.apply(this,arguments)}}}return Yn.includeInto(e),e}()),Qn),SpacePenDSL:function(){var e,t,i,n,r,s,o;return Mr||(Mr=!0,Kn={},i=g(),s="a abbr address article aside audio b bdi bdo blockquote body button canvas caption cite code colgroup datalist dd del details dfn dialog div dl dt em fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 head header html i iframe ins kbd label legend li main map mark menu meter nav noscript object ol optgroup option output p pre progress q rp rt ruby s samp script section select small span strong style sub summary sup table tbody td textarea tfoot th thead time title tr u ul var video area base br col command embed hr img input keygen link meta param source track wbr".split(/\s+/),n={},"area base br col command embed hr img input keygen link meta param source track wbr".split(/\s+/).forEach((e=>n[e]=!0)),e=class extends i{buildContent(){if(null!=this.constructor.content)return r.buildContent(this,this.constructor.content)}},Kn=r=function(){class t extends i{static includeInto(e){return super.includeInto(e),Object.defineProperty(e,"content",{enumerable:!1,get(){return this.prototype.__content__},set(e){return this.prototype.__content__=e}}),Object.defineProperty(e.prototype,"createdCallback",{enumerable:!0,get(){return this.__create__},set(e){return this.__createdCallback__=e}}),Object.defineProperty(e.prototype,"__create__",{enumerable:!0,value(){if(null!=this.__content__&&t.buildContent(this,this.__content__),null!=this.__createdCallback__)return this.__createdCallback__()}}),e.useShadowRoot=()=>e.prototype.__useShadowRoot__=!0}static buildContent(e,t){var i,n,r;return r=new o,t.call(r),[i]=r.buildHtml(),(n=n=e.__useShadowRoot__?e.shadowRoot=e.createShadowRoot():e).innerHTML=i,this.wireOutlets(e,n)}static wireOutlets(e,t){var i,n,r,s;for(n=0,r=(s=t.querySelectorAll("[outlet]")).length;r>n;n++)e[(i=s[n]).getAttribute("outlet")]=i,i.removeAttribute("outlet")}}return t.Babel=e,t}(),o=function(){class e{constructor(){this.currentBuilder=new t}subview(e,t){return this.currentBuilder.subview(e,t)}text(e){return this.currentBuilder.text(e)}tag(e,...t){return this.currentBuilder.tag(e,...t)}raw(e){return this.currentBuilder.raw(e)}buildHtml(){return this.currentBuilder.buildHtml()}}return s.forEach((function(t){return e.prototype[t]=function(...e){return this.currentBuilder.tag(t,...e)}})),e}(),t=class{constructor(){this.document=[],this.postProcessingSteps=[]}buildHtml(){return[this.document.join(""),this.postProcessingSteps]}tag(e,...t){var i;if(i=this.extractOptions(t),this.openTag(e,i.attributes),!n.hasOwnProperty(e))return"function"==typeof i.content&&i.content(),i.text&&this.text(i.text),this.closeTag(e);if(null!=i.text||null!=i.content)throw Error(`Self-closing tag ${e} cannot have text or content`)}openTag(e,t){var i,n,r;return 0===this.document.length&&null==t&&(t={}),r=(n=(()=>{var e;for(i in e=[],t)e.push(`${i}="${t[i]}"`);return e})()).length?" "+n.join(" "):"",this.document.push(`<${e}${r}>`)}closeTag(e){return this.document.push(``)}text(e){var t;return t=e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">"),this.document.push(t)}raw(e){return this.document.push(e)}subview(e,t){var i;return i="subview-"+ ++idCounter,this.tag("div",{id:i}),this.postProcessingSteps.push((n=>(n[e]=t,t.parentView=n,n.find("div#"+i).replaceWith(t))))}extractOptions(e){var t,i,n,r;for(r={},i=0,n=e.length;n>i;i++)switch(typeof(t=e[i])){case"function":r.content=t;break;case"string":case"number":r.text=""+t;break;default:r.attributes=t}return r}}),Kn}()},(or={}).forEach=(e,t)=>{for(var i=0;e.length>i;i++){var n=t(e[i]);if(n)return n}};var kr,Lr,Ar,Or,Rr,_r=or.forEach;kr=e=>{var t=e.stateHandler.getState;return{isDetectable(e){var i=t(e);return i&&!!i.isDetectable},markAsDetectable(e){t(e).isDetectable=!0},isBusy:e=>!!t(e).busy,markBusy(e,i){t(e).busy=!!i}}},Lr=e=>{function t(t){var n=e.get(t);return void 0===n?[]:i[n]||[]}var i={};return{get:t,add(t,n){var r=e.get(t);i[r]||(i[r]=[]),i[r].push(n)},removeListener(e,i){for(var n=t(e),r=0,s=n.length;s>r;++r)if(n[r]===i){n.splice(r,1);break}},removeAllListeners(e){var i=t(e);i&&(i.length=0)}}},Ar=()=>{var e=1;return{generate:()=>e++}},Or=e=>{var t=e.idGenerator,i=e.stateHandler.getState;return{get(e){var t=i(e);return t&&void 0!==t.id?t.id:null},set(e){var n=i(e);if(!n)throw Error("setId required the element to have a resize detection state.");var r=t.generate();return n.id=r,r}}},Rr=e=>{function t(){}var i={log:t,warn:t,error:t};if(!e&&window.console){var n=(e,t)=>{e[t]=function(){var e=console[t];if(e.apply)e.apply(console,arguments);else for(var i=0;arguments.length>i;i++)e(arguments[i])}};n(i,"log"),n(i,"warn"),n(i,"error")}return i};var Pr={},Hr=Pr={};Hr.isIE=e=>{return!(-1===(t=navigator.userAgent.toLowerCase()).indexOf("msie")&&-1===t.indexOf("trident")&&-1===t.indexOf(" edge/")||e&&e!==(()=>{var e=3,t=document.createElement("div"),i=t.getElementsByTagName("i");do{t.innerHTML="\x3c!--[if gt IE "+ ++e+"]>4?e:void 0})());var t},Hr.isLegacyOpera=()=>!!window.opera;var Ir,Nr={};(Nr={}).getOption=(e,t,i)=>{var n=e[t];return null==n&&void 0!==i?i:n},Ir=e=>{function t(){for(l=!0;a.size();){var e=a;a=y(),e.process()}l=!1}function i(){o=setTimeout(t,0)}var n=(e=e||{}).reporter,r=Nr.getOption(e,"async",!0),s=Nr.getOption(e,"auto",!0);s&&!r&&(n&&n.warn("Invalid options combination. auto=true and async=false is invalid. Setting async=true."),r=!0);var o,a=y(),l=!1;return{add(e,t){!l&&s&&r&&0===a.size()&&i(),a.add(e,t)},force(e){l||(void 0===e&&(e=r),o&&(clearTimeout(o),o=null),e?i():t())}}};var Fr,jr={};jr={initState:e=>(e._erd={},b(e)),getState:b,cleanState(e){delete e._erd}},Fr=function(e){function t(t){var i=e.important?" !important; ":"; ";return(t.join(i)+i).trim()}function i(e){return s(e).object}var n=(e=e||{}).reporter,r=e.batchProcessor,s=e.stateHandler.getState;if(!n)throw Error("Missing required dependency: reporter.");return{makeDetectable(e,i,o){o||(o=i,i=e,e=null),e=e||{},Pr.isIE(8)?o(i):function(i,o){function a(){function t(){if("static"===h.position){i.style.setProperty("position","relative",e.important?"important":"");var t=(t,i,n,r)=>{var s=n[r];"auto"!==s&&"0"!==(e=>e.replace(/[^-\d\.]/g,""))(s)&&(t.warn("An element that is positioned static has style."+r+"="+s+" which is ignored due to the static positioning. The element will need to be positioned relative, so the style."+r+" will be set to 0. Element: ",i),i.style.setProperty(r,"0",e.important?"important":""))};t(n,i,h,"top"),t(n,i,h,"right"),t(n,i,h,"bottom"),t(n,i,h,"left")}}""!==h.position&&(t(),c=!0);var r=document.createElement("object");r.style.cssText=l,r.tabIndex=-1,r.type="text/html",r.setAttribute("aria-hidden","true"),r.onload=function(){c||t(),function e(t,i){if(!t.contentDocument){var n=s(t);return n.checkForObjectDocumentTimeoutId&&window.clearTimeout(n.checkForObjectDocumentTimeoutId),void(n.checkForObjectDocumentTimeoutId=setTimeout((()=>{n.checkForObjectDocumentTimeoutId=0,e(t,i)}),100))}i(t.contentDocument)}(this,(e=>{o(i)}))},Pr.isIE()||(r.data="about:blank"),s(i)&&(i.appendChild(r),s(i).object=r,Pr.isIE()&&(r.data="about:blank"))}var l=t(["display: block","position: absolute","top: 0","left: 0","width: 100%","height: 100%","border: none","padding: 0","margin: 0","opacity: 0","z-index: -1000","pointer-events: none"]),c=!1,h=window.getComputedStyle(i),d=i.offsetWidth,u=i.offsetHeight;s(i).startSize={width:d,height:u},r?r.add(a):a()}(i,o)},addListener(e,t){function n(){t(e)}if(Pr.isIE(8))s(e).object={proxy:n},e.attachEvent("onresize",n);else{var r=i(e);if(!r)throw Error("Element is not detectable by this strategy.");r.contentDocument.defaultView.addEventListener("resize",n)}},uninstall(e){if(s(e)){var t=i(e);t&&(Pr.isIE(8)?e.detachEvent("onresize",t.proxy):e.removeChild(t),s(e).checkForObjectDocumentTimeoutId&&window.clearTimeout(s(e).checkForObjectDocumentTimeoutId),delete s(e).object)}}}};var Wr,Br=or.forEach;Wr=e=>{function t(e){((e,t,n)=>{if(!e.getElementById(t)){var r=n+"_animation",s=n+"_animation_active",o="/* Created by the element-resize-detector library. */\n";o+="."+n+" > div::-webkit-scrollbar { "+i(["display: none"])+" }\n\n",o+="."+s+" { "+i(["-webkit-animation-duration: 0.1s","animation-duration: 0.1s","-webkit-animation-name: "+r,"animation-name: "+r])+" }\n",o+="@-webkit-keyframes "+r+" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\n",function(i,n){n=n||(t=>{e.head.appendChild(t)});var r=e.createElement("style");r.innerHTML=i,r.id=t,n(r)}(o+="@keyframes "+r+" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }")}})(e,"erd_scroll_detection_scrollbar_style",u)}function i(t){var i=e.important?" !important; ":"; ";return(t.join(i)+i).trim()}function n(e,t,i){if(e.addEventListener)e.addEventListener(t,i);else{if(!e.attachEvent)return a.error("[scroll] Don't know how to add event listeners.");e.attachEvent("on"+t,i)}}function r(e,t,i){if(e.removeEventListener)e.removeEventListener(t,i);else{if(!e.detachEvent)return a.error("[scroll] Don't know how to remove event listeners.");e.detachEvent("on"+t,i)}}function s(e){return c(e).container.childNodes[0].childNodes[0].childNodes[0]}function o(e){return c(e).container.childNodes[0].childNodes[0].childNodes[1]}var a=(e=e||{}).reporter,l=e.batchProcessor,c=e.stateHandler.getState,h=e.idHandler;if(!l)throw Error("Missing required dependency: batchProcessor");if(!a)throw Error("Missing required dependency: reporter.");var d=(()=>{var e=document.createElement("div");e.style.cssText=i(["position: absolute","width: 1000px","height: 1000px","visibility: hidden","margin: 0","padding: 0"]);var t=document.createElement("div");t.style.cssText=i(["position: absolute","width: 500px","height: 500px","overflow: scroll","visibility: none","top: -1500px","left: -1500px","visibility: hidden","margin: 0","padding: 0"]),t.appendChild(e),document.body.insertBefore(t,document.body.firstChild);var n=500-t.clientWidth,r=500-t.clientHeight;return document.body.removeChild(t),{width:n,height:r}})(),u="erd_scroll_detection_container";return t(window.document),{makeDetectable(e,t,r){function p(){if(e.debug){var i=[].slice.call(arguments);if(i.unshift(h.get(t),"Scroll: "),a.log.apply)a.log.apply(null,i);else for(var n=0;i.length>n;n++)a.log(i[n])}}function f(e){var t=c(e).container.childNodes[0],i=window.getComputedStyle(t);return!i.width||-1===i.width.indexOf("px")}function g(){var e=window.getComputedStyle(t),i={};return i.position=e.position,i.width=t.offsetWidth,i.height=t.offsetHeight,i.top=e.top,i.right=e.right,i.bottom=e.bottom,i.left=e.left,i.widthCSS=e.width,i.heightCSS=e.height,i}function m(){if(p("storeStyle invoked."),c(t)){var e=g();c(t).style=e}else p("Aborting because element has been uninstalled")}function v(e,t,i){c(e).lastWidth=t,c(e).lastHeight=i}function y(){return 2*d.width+1}function b(){return 2*d.height+1}function S(e){return e+10+y()}function w(e){return e+10+b()}function x(e,t,i){var n=s(e),r=o(e),a=S(t),l=w(i),c=(e=>2*e+y())(t),h=(e=>2*e+b())(i);n.scrollLeft=a,n.scrollTop=l,r.scrollLeft=c,r.scrollTop=h}function C(){var e=c(t).container;if(!e){(e=document.createElement("div")).className=u,e.style.cssText=i(["visibility: hidden","display: inline","width: 0px","height: 0px","z-index: -1","overflow: hidden","margin: 0","padding: 0"]),c(t).container=e,(e=>{e.className+=" "+u+"_animation_active"})(e),t.appendChild(e);var r=()=>{c(t).onRendered&&c(t).onRendered()};n(e,"animationstart",r),c(t).onAnimationStart=r}return e}function E(){function r(){c(t).onExpand&&c(t).onExpand()}function s(){c(t).onShrink&&c(t).onShrink()}if(p("Injecting elements"),c(t)){(()=>{var i=c(t).style;if("static"===i.position){t.style.setProperty("position","relative",e.important?"important":"");var n=(e,t,i,n)=>{var r=i[n];"auto"!==r&&"0"!==(e=>e.replace(/[^-\d\.]/g,""))(r)&&(e.warn("An element that is positioned static has style."+n+"="+r+" which is ignored due to the static positioning. The element will need to be positioned relative, so the style."+n+" will be set to 0. Element: ",t),t.style[n]=0)};n(a,t,i,"top"),n(a,t,i,"right"),n(a,t,i,"bottom"),n(a,t,i,"left")}})();var o=c(t).container;o||(o=C());var l,h,f,g,m=d.width,v=d.height,y=i(["position: absolute","flex: none","overflow: hidden","z-index: -1","visibility: hidden","width: 100%","height: 100%","left: 0px","top: 0px"]),b=i(["position: absolute","flex: none","overflow: hidden","z-index: -1","visibility: hidden"].concat(["left: "+(l=(l=-(1+m))?l+"px":"0"),"top: "+(h=(h=-(1+v))?h+"px":"0"),"right: "+(g=(g=-m)?g+"px":"0"),"bottom: "+(f=(f=-v)?f+"px":"0")])),S=i(["position: absolute","flex: none","overflow: scroll","z-index: -1","visibility: hidden","width: 100%","height: 100%"]),w=i(["position: absolute","flex: none","overflow: scroll","z-index: -1","visibility: hidden","width: 100%","height: 100%"]),x=i(["position: absolute","left: 0","top: 0"]),E=i(["position: absolute","width: 200%","height: 200%"]),T=document.createElement("div"),D=document.createElement("div"),M=document.createElement("div"),k=document.createElement("div"),L=document.createElement("div"),A=document.createElement("div");T.dir="ltr",T.style.cssText=y,T.className=u,D.className=u,D.style.cssText=b,M.style.cssText=S,k.style.cssText=x,L.style.cssText=w,A.style.cssText=E,M.appendChild(k),L.appendChild(A),D.appendChild(M),D.appendChild(L),T.appendChild(D),o.appendChild(T),n(M,"scroll",r),n(L,"scroll",s),c(t).onExpandScroll=r,c(t).onShrinkScroll=s}else p("Aborting because element has been uninstalled")}function T(){function i(t,i,n){var r=(e=>s(e).childNodes[0])(t),o=S(i),a=w(n);r.style.setProperty("width",o+"px",e.important?"important":""),r.style.setProperty("height",a+"px",e.important?"important":"")}function n(n){var s=t.offsetWidth,o=t.offsetHeight,d=s!==c(t).lastWidth||o!==c(t).lastHeight;p("Storing current size",s,o),v(t,s,o),l.add(0,(()=>{d&&(c(t)?r()?(e.debug&&(t.offsetWidth===s&&t.offsetHeight===o||a.warn(h.get(t),"Scroll: Size changed before updating detector elements.")),i(t,s,o)):p("Aborting because element container has not been initialized"):p("Aborting because element has been uninstalled"))})),l.add(1,(()=>{c(t)?r()?x(t,s,o):p("Aborting because element container has not been initialized"):p("Aborting because element has been uninstalled")})),d&&n&&l.add(2,(()=>{c(t)?r()?n():p("Aborting because element container has not been initialized"):p("Aborting because element has been uninstalled")}))}function r(){return!!c(t).container}function d(){p("notifyListenersIfNeeded invoked");var e=c(t);return void 0===c(t).lastNotifiedWidth&&e.lastWidth===e.startSize.width&&e.lastHeight===e.startSize.height?p("Not notifying: Size is the same as the start size, and there has been no notification yet."):e.lastWidth===e.lastNotifiedWidth&&e.lastHeight===e.lastNotifiedHeight?p("Not notifying: Size already notified"):(p("Current size not notified, notifying..."),e.lastNotifiedWidth=e.lastWidth,e.lastNotifiedHeight=e.lastHeight,void Br(c(t).listeners,(e=>{e(t)})))}function u(){p("Scroll detected."),f(t)?p("Scroll event fired while unrendered. Ignoring..."):n(d)}if(p("registerListenersAndPositionElements invoked."),c(t)){c(t).onRendered=()=>{if(p("startanimation triggered."),f(t))p("Ignoring since element is still unrendered...");else{p("Element rendered.");var e=s(t),i=o(t);0!==e.scrollLeft&&0!==e.scrollTop&&0!==i.scrollLeft&&0!==i.scrollTop||(p("Scrollbars out of sync. Updating detector elements..."),n(d))}},c(t).onExpand=u,c(t).onShrink=u;var g=c(t).style;i(t,g.width,g.height)}else p("Aborting because element has been uninstalled")}function D(){if(p("finalizeDomMutation invoked."),c(t)){var e=c(t).style;v(t,e.width,e.height),x(t,e.width,e.height)}else p("Aborting because element has been uninstalled")}function M(){r(t)}function k(){var e;p("Installing..."),c(t).listeners=[],e=g(),c(t).startSize={width:e.width,height:e.height},p("Element start size",c(t).startSize),l.add(0,m),l.add(1,E),l.add(2,T),l.add(3,D),l.add(4,M)}r||(r=t,t=e,e=null),e=e||{},p("Making detectable..."),(e=>!(e=>e===e.ownerDocument.body||e.ownerDocument.body.contains(e))(e)||null===window.getComputedStyle(e))(t)?(p("Element is detached"),C(),p("Waiting until element is attached..."),c(t).onRendered=()=>{p("Element is now attached"),k()}):k()},addListener(e,t){if(!c(e).listeners.push)throw Error("Cannot add listener to an element that is not detectable.");c(e).listeners.push(t)},uninstall(e){var t=c(e);t&&(t.onExpandScroll&&r(s(e),"scroll",t.onExpandScroll),t.onShrinkScroll&&r(o(e),"scroll",t.onShrinkScroll),t.onAnimationStart&&r(t.container,"animationstart",t.onAnimationStart),t.container&&e.removeChild(t.container))},initDocument:t}},sr=e=>{var t;if((e=e||{}).idHandler)t={get:t=>e.idHandler.get(t,!0),set:e.idHandler.set};else{var i=Ar(),n=Or({idGenerator:i,stateHandler:jr});t=n}var r=e.reporter;r||(r=Rr(!1===r));var s=C(e,"batchProcessor",Ir({reporter:r})),o={};o.callOnAdd=!!C(e,"callOnAdd",!0),o.debug=!!C(e,"debug",!1);var a,l=Lr(t),c=kr({stateHandler:jr}),h=C(e,"strategy","object"),d=C(e,"important",!1),u={reporter:r,batchProcessor:s,stateHandler:jr,idHandler:t,important:d};if("scroll"===h&&(Pr.isLegacyOpera()?(r.warn("Scroll strategy is not supported on legacy Opera. Changing to object strategy."),h="object"):Pr.isIE(9)&&(r.warn("Scroll strategy is not supported on IE9. Changing to object strategy."),h="object")),"scroll"===h)a=Wr(u);else{if("object"!==h)throw Error("Invalid strategy name: "+h);a=Fr(u)}var p={};return{listenTo(e,i,n){function s(e){var t=l.get(e);_r(t,(t=>{t(e)}))}function h(e,t,i){l.add(t,i),e&&i(t)}if(n||(n=i,i=e,e={}),!i)throw Error("At least one element required.");if(!n)throw Error("Listener required.");if(x(i))i=[i];else{if(!S(i))return r.error("Invalid arguments. Must be a DOM element or a collection of DOM elements.");i=w(i)}var u=0,f=C(e,"callOnAdd",o.callOnAdd),g=C(e,"onReady",(()=>{})),m=C(e,"debug",o.debug);_r(i,(e=>{jr.getState(e)||(jr.initState(e),t.set(e));var o=t.get(e);if(m&&r.log("Attaching listener to element",o,e),!c.isDetectable(e))return m&&r.log(o,"Not detectable."),c.isBusy(e)?(m&&r.log(o,"System busy making it detectable"),h(f,e,n),p[o]=p[o]||[],void p[o].push((()=>{++u===i.length&&g()}))):(m&&r.log(o,"Making detectable..."),c.markBusy(e,!0),a.makeDetectable({debug:m,important:d},e,(e=>{if(m&&r.log(o,"onElementDetectable"),jr.getState(e)){c.markAsDetectable(e),c.markBusy(e,!1),a.addListener(e,s),h(f,e,n);var t=jr.getState(e);t&&t.startSize&&(t.startSize.width===e.offsetWidth&&t.startSize.height===e.offsetHeight||s(e)),p[o]&&_r(p[o],(e=>{e()}))}else m&&r.log(o,"Element uninstalled before being detectable.");delete p[o],++u===i.length&&g()})));m&&r.log(o,"Already detecable, adding listener."),h(f,e,n),u++})),u===i.length&&g()},removeListener:l.removeListener,removeAllListeners:l.removeAllListeners,uninstall(e){if(!e)return r.error("At least one element is required.");if(x(e))e=[e];else{if(!S(e))return r.error("Invalid arguments. Must be a DOM element or a collection of DOM elements.");e=w(e)}_r(e,(e=>{l.removeAllListeners(e),a.uninstall(e),jr.cleanState(e)}))},initDocument(e){a.initDocument&&a.initDocument(e)}}};var qr,zr,Ur,Vr,$r,Qr,Kr,Gr,Zr,Yr,Xr,Jr,es,ts,is,ns,rs,ss,os,as,ls,cs,hs,ds,us,ps,fs,gs,ms,vs,ys,bs,Ss,ws,xs,Cs,Es,Ts,Ds,Ms,ks,Ls,As,Os,Rs,_s,Ps,Hs,Is,Ns,Fs,js,Ws,Bs,qs,zs,Us,Vs,$s,Qs,Ks,Gs,Zs,Ys,Xs,Js,eo,to,io,no,ro,so,oo,ao,lo,co,ho,uo,po,fo,go,mo,vo,yo,bo,So,wo,xo,Co,Eo,To,Do,Mo,ko,Lo,Ao,Oo,Ro,_o,Po,Ho,Io,No,Fo,jo,Wo,Bo,qo,zo,Uo,Vo,$o,Qo,Ko,Go,Zo,Yo,Xo,Jo,ea,ta,ia,na,ra,sa,oa,aa,la,ca,ha,da,ua,pa,fa,ga,ma,va,ya,ba,Sa,wa,xa,Ca,Ea,Ta,Da,Ma,ka,La,Aa,Oa,Ra,_a,Pa,Ha,Ia,Na,Fa,ja,Wa,Ba,qa,za,Ua,Va,$a,Qa,Ka,Ga,Za,Ya,Xa,Ja,el,tl,il,nl,rl,sl,ol,al,ll,cl,hl,dl,ul,pl,fl,gl,ml,vl,yl,bl,Sl,wl,xl,Cl,El,Tl,Dl,Ml,kl,Ll,Al,Ol,Rl,_l,Pl,Hl,Il,Nl,Fl,jl,Wl,Bl,ql,zl,Ul,Vl,$l,Ql,Kl,Gl,Zl,Yl,Xl,Jl,ec,tc,ic,nc,rc,sc,oc,ac={},lc=!1,cc=!1,hc=!1,dc=!1,uc=!1,pc=!1,fc=!1,gc=!1,mc=!1,vc=!1,yc=!1,bc=!1,Sc=!1,wc=!1,xc=!1,Cc=!1,Ec=!1,Tc=!1,Dc=!1,Mc=!1,kc=!1,Lc=!1,Ac=!1,Oc=!1,Rc=!1,_c=!1,Pc=!1,Hc=!1,Ic=!1,Nc=!1,Fc=!1,jc=!1,Wc=!1,Bc=!1,qc=!1,zc=!1,Uc=!1,Vc=!1,$c=!1,Qc=!1,Kc=!1,Gc=!1,Zc=!1,Yc=!1,Xc=!1,Jc=!1,eh=!1,th=!1,ih=!1,nh=!1,rh=!1,sh=!1,oh=!1,ah=!1,lh=!1,ch=!1,hh=!1,dh=!1,uh=!1,ph=!1,fh=!1,gh=!1,mh=!1,vh=!1,yh=!1,bh=!1,Sh=!1,wh=!1,xh=!1,Ch=!1,Eh=!1,Th=!1,Dh=!1,Mh=!1,kh=!1,Lh=!1,Ah=!1,Oh=!1,Rh=!1,_h=!1,Ph=!1,Hh=!1,Ih=!1,Nh=!1,Fh=!1,jh=!1,Wh=!1,Bh=!1,qh=!1,zh=!1,Uh=!1,Vh=!1,$h=!1,Qh=!1,Kh=!1,Gh=!1,Zh=!1,Yh=!1,Xh=!1,Jh=!1,ed=!1,td=!1,id=!1,nd=!1,rd=!1,sd=!1,od=!1,ad=!1,ld=!1,cd=!1,hd=!1,dd=!1,ud=!1,pd=!1,fd=!1,gd=!1,md=!1,vd=!1,yd=!1,bd=!1,Sd=!1,wd=!1,xd=!1,Cd=!1,Ed=!1,Td=!1,Dd=!1,Md=!1,kd=!1,Ld=!1,Ad=!1,Od=!1,Rd=!1,_d=!1,Pd=!1,Hd=!1,Id=!1,Nd=!1,Fd=!1,jd=!1,Wd=!1,Bd=!1,qd=!1,zd=!1,Ud=!1,Vd=!1,$d=!1,Qd=!1,Kd=!1,Gd=!1,Zd=!1,Yd=!1,Xd=!1,Jd=!1;oc=[].slice,Jd||(Jd=!0,t(Yl={}),Xd||(Xd=!0,Gl={},zi(),zi(),(Zl=qi(Kl))._=Zl,i(Gl,"default",(()=>Zl))),n(Yl,zi()),i(Yl,"default",(()=>Zl))),ec={cmd:"⌘",ctrl:"⌃",alt:"⌥",option:"⌥",shift:"⇧",enter:"⏎",left:"←",right:"→",up:"↑",down:"↓"},tc={cmd:"Cmd",ctrl:"Ctrl",alt:"Alt",option:"Alt",shift:"Shift",enter:"Enter",left:"Left",right:"Right",up:"Up",down:"Down"},nc={"~":"`",_:"-","+":"=","|":"\\","{":"[","}":"]",":":";",'"':"'","<":",",">":".","?":"/"},rc=e=>{var t,i,n,r,s;if(n=0,i=[],null==e)return i;for(t=r=0,s=e.length;s>r;t=++r)"."!==e[t]||0!==t&&"\\"===e[t-1]||(i.push(e.substring(n,t)),n=t+1);return i.push(e.substr(n,e.length)),i},Jl=e=>sc.isObject(e)&&!sc.isArray(e),ic={adviseBefore(e,t,i){var n;return n=e[t],e[t]=function(){var e;if(e=1>arguments.length?[]:oc.call(arguments,0),!1!==i.apply(this,e))return n.apply(this,e)}},camelize(e){return e?e.replace(/[_-]+(\w)/g,(e=>e[1].toUpperCase())):""},capitalize(e){return e?"github"===e.toLowerCase()?"GitHub":e[0].toUpperCase()+e.slice(1):""},compactObject(e){var t,i,n;for(t in i={},e)null!=(n=e[t])&&(i[t]=n);return i},dasherize(e){return e?(e=e[0].toLowerCase()+e.slice(1)).replace(/([A-Z])|(_)/g,((e,t)=>t?"-"+t.toLowerCase():"-")):""},deepClone(e){return sc.isArray(e)?e.map((e=>ic.deepClone(e))):sc.isObject(e)&&!sc.isFunction(e)?ic.mapObject(e,((e,t)=>[e,ic.deepClone(t)])):e},deepExtend(e){var t,i,n,r,s,o,a;for(r=e,t=0;++ts;s++)r[i=a[s]]=ic.deepExtend(r[i],n[i]);else r=ic.deepClone(n);return r},deepContains(e,t){var i,n;if(null==e)return!1;for(i=0,n=e.length;n>i;i++)if(sc.isEqual(e[i],t))return!0;return!1},endsWith(e,t){return null==t&&(t=""),!!e&&-1!==e.indexOf(t,e.length-t.length)},escapeAttribute(e){return e?e.replace(/"/g,""").replace(/\n/g,"").replace(/\\/g,"-"):""},escapeRegExp(e){return e?e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"):""},humanizeEventName(e,t){var i,n,r,s;return n=(s=e.split(":"))[0],null==(i=s[1])?ic.undasherize(n):(r=ic.undasherize(n),null==t&&(t=ic.undasherize(i)),r+": "+t)},humanizeKey(e,t){var i;return null==t&&(t=process.platform),e?(i="darwin"===t?ec:tc)[e]?i[e]:1===e.length&&null!=nc[e]?[i.shift,nc[e]]:1===e.length&&e===e.toUpperCase()&&e.toUpperCase()!==e.toLowerCase()?[i.shift,e.toUpperCase()]:1===e.length||/f[0-9]{1,2}/.test(e)?e.toUpperCase():"darwin"===t?e:ic.capitalize(e):e},humanizeKeystroke(e,t){var i,n,r,s,o,a,l,c,h,d;if(null==t&&(t=process.platform),!e)return e;for(i=[],l=0,h=(o=e.split(" ")).length;h>l;l++){for(s=[],n=c=0,d=(a=(e=o[l]).split("-")).length;d>c;n=++c)""===(r=a[n])&&""===a[n-1]&&(r="-"),r&&s.push(ic.humanizeKey(r,t));s=(s=sc.uniq(sc.flatten(s))).join("darwin"===t?"":"+"),i.push(s)}return i.join(" ")},isSubset(e,t){return sc.every(e,(e=>sc.include(t,e)))},losslessInvert(e){var t,i,n;for(i in t={},e)null==t[n=e[i]]&&(t[n]=[]),t[n].push(i);return t},mapObject(e,t){var i,n,r,s,o,a;for(n={},r=0,s=(o=Object.keys(e)).length;s>r;r++)n[i=(a=t(i=o[r],e[i]))[0]]=a[1];return n},multiplyString(e,t){var i,n;for(i="",n=0;t>n;)i+=e,n++;return i},pluralize(e,t,i){return null==e&&(e=0),null==i&&(i=t+"s"),1===e?e+" "+t:e+" "+i},remove(e,t){var i;return 0>(i=e.indexOf(t))||e.splice(i,1),e},setValueForKeyPath(e,t,i){var n,r;for(r=rc(t);r.length>1;)null==e[n=r.shift()]&&(e[n]={}),e=e[n];return null!=i?e[r.shift()]=i:delete e[r.shift()]},hasKeyPath(e,t){var i,n,r,s;for(r=0,s=(n=rc(t)).length;s>r;r++){if(!e.hasOwnProperty(i=n[r]))return!1;e=e[i]}return!0},spliceWithArray(e,t,i,n,r){var s,o,a,l;if(null==r&&(r=1e5),r>n.length)return e.splice.apply(e,[t,i].concat(oc.call(n)));for(e.splice(t,i),l=[],s=o=0,a=n.length;r>0?a>=o:o>=a;s=o+=r)l.push(e.splice.apply(e,[t+s,0].concat(oc.call(n.slice(s,s+r)))));return l},sum(e){var t,i,n;for(t=0,i=0,n=e.length;n>i;i++)t+=e[i];return t},uncamelcase(e){var t;return e?(t=e.replace(/([A-Z])|_+/g,((e,t)=>(null==t&&(t="")," "+t))),ic.capitalize(t.trim())):""},undasherize(e){return e?e.split("-").map(ic.capitalize).join(" "):""},underscore(e){return e?(e=e[0].toLowerCase()+e.slice(1)).replace(/([A-Z])|-+/g,((e,t)=>(null==t&&(t=""),"_"+t.toLowerCase()))):""},valueForKeyPath(e,t){var i,n,r;for(n=0,r=(i=rc(t)).length;r>n;n++)if(null==(e=e[i[n]]))return;return e},isEqual(e,t,i,n){return sc.isArray(i)&&sc.isArray(n)?Xl(e,t,i,n):Xl(e,t)},isEqualForProperties(){var e,t,i,n,r,s;for(e=arguments[0],t=arguments[1],r=0,s=(i=3>arguments.length?[]:oc.call(arguments,2)).length;s>r;r++)if(!sc.isEqual(e[n=i[r]],t[n]))return!1;return!0}},Xl=(e,t,i,n)=>{var r,s,o,a,l,c,h,d,u,p,f,g,m;if(null==i&&(i=[]),null==n&&(n=[]),e===t)return sc.isEqual(e,t);if(sc.isFunction(e)||sc.isFunction(t))return sc.isEqual(e,t);for(f=i.length;f--;)if(i[f]===e)return n[f]===t;if(i.push(e),n.push(t),d=!1,sc.isFunction(null!=e?e.isEqual:void 0))d=e.isEqual(t,i,n);else if(sc.isFunction(null!=t?t.isEqual:void 0))d=t.isEqual(e,n,i);else if(sc.isArray(e)&&sc.isArray(t)&&e.length===t.length){for(d=!0,u=g=0,m=e.length;m>g;u=++g)if(!Xl(e[u],t[u],i,n)){d=!1;break}}else if(sc.isRegExp(e)&&sc.isRegExp(t))d=sc.isEqual(e,t);else if(sc.isElement(e)&&sc.isElement(t))d=e===t;else if(sc.isObject(e)&&sc.isObject(t))if(l=t.constructor,s=sc.isFunction(r=e.constructor)&&r instanceof r,c=sc.isFunction(l)&&l instanceof l,r===l||s&&c){for(p in o=0,d=!0,e)if(a=e[p],sc.has(e,p)&&(o++,!sc.has(t,p)||!Xl(a,t[p],i,n))){d=!1;break}if(d){for(p in h=0,t)sc.has(t,p)&&h++;d=o===h}}else d=!1;else d=sc.isEqual(e,t);return i.pop(),n.pop(),d},ac=(sc=Yl).extend({},sc,ic),g();class eu{constructor(){this.canvas=document.createElement("canvas");const e="linux"!==process.platform;this.context=this.canvas.getContext("2d",{desynchronized:e}),this.canvas.webkitImageSmoothingEnabled=!1,this.context.imageSmoothingEnabled=!1,this.offscreenCanvas=document.createElement("canvas"),this.offscreenContext=this.offscreenCanvas.getContext("2d",{desynchronized:e}),this.offscreenCanvas.webkitImageSmoothingEnabled=!1,this.offscreenContext.imageSmoothingEnabled=!1}attach(e){this.canvas.parentNode||e.appendChild(this.canvas)}setSize(e=0,t=0){this.canvas.width=e,this.canvas.height=t,this.context.imageSmoothingEnabled=!1,this.resetOffscreenSize()}getSize(){return{width:this.canvas.width,height:this.canvas.height}}resetOffscreenSize(){this.offscreenCanvas.width=this.canvas.width,this.offscreenCanvas.height=this.canvas.height,this.offscreenContext.imageSmoothingEnabled=!1}copyToOffscreen(){this.canvas.width>0&&this.canvas.height>0&&this.offscreenContext.drawImage(this.canvas,0,0)}copyFromOffscreen(){this.offscreenCanvas.width>0&&this.offscreenCanvas.height>0&&this.context.drawImage(this.offscreenCanvas,0,0)}copyPartFromOffscreen(e,t,i){this.offscreenCanvas.width>0&&this.offscreenCanvas.height>0&&this.context.drawImage(this.offscreenCanvas,0,e,this.offscreenCanvas.width,i,0,t,this.offscreenCanvas.width,i)}clearCanvas(){this.context.clearRect(0,0,this.canvas.width,this.canvas.height)}}class tu{constructor(){this.domStylesCache=new Map}retrieveStyleFromDom(e,t,i,n=!0){const r=e.join(" ");let s=this.domStylesCache.get(r);if(n&&void 0!==s){const e=s[t];if(null!=e)return e}this.ensureDummyNodeExistence(i),void 0===s&&(s={},this.domStylesCache.set(r,s));let o=this.dummyNode;for(let t=0,i=e.length;i>t;t++){const i=e[t],n=document.createElement("span");n.className=i.replace(/\.+/g," "),null!=o&&o.appendChild(n),o=n}const a=window.getComputedStyle(o),l=a.getPropertyValue("-webkit-filter");let c=a.getPropertyValue(t);return l.indexOf("hue-rotate")>-1&&(c=function(e,t){const i=e.match(/rgb(a?)\((\d+), (\d+), (\d+)(, (\d+(\.\d+)?))?\)/);let[,,n,r,s,,o]=i,[,a]=t.match(/hue-rotate\((\d+)deg\)/);return[n,r,s,o,a]=[n,r,s,o,a].map(Number),[n,r,s]=((e,t,i,n)=>{function r(e){return Math.ceil(Math.max(0,Math.min(255,e)))}const s=[1,0,0,0,1,0,0,0,1],o=.2126,a=.7152,l=.0722,c=Math.cos(n*Math.PI/180),h=Math.sin(n*Math.PI/180);return s[0]=o+.7874*c-o*h,s[1]=a-a*c-a*h,s[2]=l-l*c+.9278*h,s[3]=o-o*c+.143*h,s[4]=a+(1-a)*c+.14*h,s[5]=l-l*c-.283*h,s[6]=o-o*c-.7874*h,s[7]=a-a*c+a*h,s[8]=l+.9278*c+l*h,[r(s[0]*e+s[1]*t+s[2]*i),r(s[3]*e+s[4]*t+s[5]*i),r(s[6]*e+s[7]*t+s[8]*i)]})(n,r,s,a),isNaN(o)?`rgb(${n}, ${r}, ${s})`:`rgba(${n}, ${r}, ${s}, ${o})`}(c,l)),""!==c&&(s[t]=c,this.domStylesCache.set(r,s)),this.dummyNode.innerHTML="",c}ensureDummyNodeExistence(e){null==this.dummyNode&&(this.dummyNode=document.createElement("span"),this.dummyNode.style.visibility="hidden"),e.appendChild(this.dummyNode)}invalidateDOMStylesCache(){this.domStylesCache.clear()}}var iu=e(g());class nu extends iu{initializeCanvas(){this.tokensLayer=new eu,this.backLayer=new eu,this.frontLayer=new eu,this.pendingChanges||(this.pendingChanges=[]),this.pendingBackDecorationChanges||(this.pendingBackDecorationChanges=[]),this.pendingFrontDecorationChanges||(this.pendingFrontDecorationChanges=[]),this.maxTokensInOneLine=atom.config.get("minimap.maxTokensInOneLine"),this.DOMStylesReader=new tu}getFrontCanvas(){return this.frontLayer.canvas}attachCanvases(e){this.backLayer.attach(e),this.tokensLayer.attach(e),this.frontLayer.attach(e)}setCanvasesSize(e,t){this.backLayer.setSize(e,t),this.tokensLayer.setSize(e,t),this.frontLayer.setSize(e,t)}updateCanvas(){const e=this.minimap.getFirstVisibleScreenRow(),t=this.minimap.getLastVisibleScreenRow();this.updateTokensLayer(e,t),this.updateBackDecorationsLayer(e,t),this.updateFrontDecorationsLayer(e,t),this.pendingChanges=[],this.pendingBackDecorationChanges=[],this.pendingFrontDecorationChanges=[],this.offscreenFirstRow=e,this.offscreenLastRow=t}updateTokensLayer(e,t){const i=Vi(e,t,this.pendingChanges,this.offscreenFirstRow,this.offscreenLastRow);this.redrawRangesOnLayer(this.tokensLayer,i,e,t,this.drawLines)}updateBackDecorationsLayer(e,t){const i=Vi(e,t,this.pendingBackDecorationChanges,this.offscreenFirstRow,this.offscreenLastRow);this.redrawRangesOnLayer(this.backLayer,i,e,t,this.drawBackDecorationsForLines)}updateFrontDecorationsLayer(e,t){const i=Vi(e,t,this.pendingFrontDecorationChanges,this.offscreenFirstRow,this.offscreenLastRow);this.redrawRangesOnLayer(this.frontLayer,i,e,t,this.drawFrontDecorationsForLines)}getTextOpacity(){return this.textOpacity}getDefaultColor(){return Ui(this.DOMStylesReader.retrieveStyleFromDom([".editor"],"color",this.minimap.getTextEditorElement(),!0),this.getTextOpacity())}getTokenColor(e){return Ui(this.DOMStylesReader.retrieveStyleFromDom(e.scopeDescriptor||e.scopes,"color",this.minimap.getTextEditorElement(),!0),this.getTextOpacity())}getDecorationColor(e){const t=e.getProperties();if(t.color)return t.color;if(t.scope){const e=t.scope.split(/\s+/);return this.DOMStylesReader.retrieveStyleFromDom(e,"background-color",this.minimap.getTextEditorElement(),!0)}return this.getDefaultColor()}redrawRangesOnLayer(e,t,i,n,r){const s=this.minimap.getDevicePixelRatio(),o=this.minimap.getLineHeight()*s;if(e.clearCanvas(),0===t.length)r.call(this,i,n,0);else{for(let n=0,r=t.length;r>n;n++){const r=t[n];e.copyPartFromOffscreen(r.offscreenRow*o,(r.start-i)*o,(r.end-r.start)*o)}this.drawLinesForRanges(r,t,i,n)}e.resetOffscreenSize(),e.copyToOffscreen()}drawLinesForRanges(e,t,i,n){let r=i;for(let n=0,s=t.length;s>n;n++){const s=t[n];e.call(this,r,s.start,r-i),r=s.end}r>n||e.call(this,r,n,r-i)}drawBackDecorationsForLines(e,t,i){if(e>t)return;const n=this.minimap.getDevicePixelRatio(),r=this.minimap.getLineHeight()*n,s=this.minimap.getCharHeight()*n,o=this.minimap.getCharWidth()*n,a=this.minimap.decorationsByTypeThenRows(e,t),{width:l,height:c}=this.tokensLayer.getSize(),h={context:this.backLayer.context,canvasWidth:l,canvasHeight:c,lineHeight:r,charWidth:o,charHeight:s,orders:dn()};for(let n=e;t>=n;n++)h.row=i+(n-e),h.yRow=h.row*r,h.screenRow=n,this.drawDecorations(n,a,h,{line:this.drawLineDecoration,"highlight-under":this.drawHighlightDecoration,"background-custom":this.drawCustomDecoration});this.backLayer.context.fill()}drawFrontDecorationsForLines(e,t,i){if(e>t)return;const n=this.minimap.getDevicePixelRatio(),r=this.minimap.getLineHeight()*n,s=this.minimap.getCharHeight()*n,o=this.minimap.getCharWidth()*n,a=this.minimap.decorationsByTypeThenRows(e,t),{width:l,height:c}=this.tokensLayer.getSize(),h={context:this.frontLayer.context,canvasWidth:l,canvasHeight:c,lineHeight:r,charWidth:o,charHeight:s,orders:dn()};for(let n=e;t>=n;n++)h.row=i+(n-e),h.yRow=h.row*r,h.screenRow=n,this.drawDecorations(n,a,h,{gutter:this.drawGutterDecoration,"highlight-over":this.drawHighlightDecoration,"highlight-outline":this.drawHighlightOutlineDecoration,"foreground-custom":this.drawCustomDecoration});h.context.fill()}drawLines(e,t,i){if(e>t)return;const n=this.minimap.getDevicePixelRatio(),r=this.minimap.getLineHeight()*n,s=this.minimap.getCharHeight()*n,o=this.minimap.getCharWidth()*n,a=this.displayCodeHighlights,l=this.tokensLayer.context,{width:c}=this.tokensLayer.getSize();let h,d,u=i*r-r;(function(e,t,i,n,r){const s=(e=>{const t=e.getInvisibles(),i=[];return null!=t.cr&&i.push(t.cr),null!=t.eol&&i.push(t.eol),null!=t.space&&i.push(t.space),null!=t.tab&&i.push(t.tab),0!==i.length?RegExp(i.filter((e=>"string"==typeof e)).map(ac.escapeRegExp).join("|"),"g"):null})(i);t=Math.min(t,i.getScreenLineCount());for(let o=e;t>o;o++){const e=i.tokensForScreenRow(o),t=Math.min(e.length,n);for(let i=0;t>i;i++){const t=e[i];r(o,{text:t.text.replace(s," "),scopes:t.scopes})}}})(e,t,this.minimap.getTextEditor(),this.maxTokensInOneLine,((e,t)=>{if(h!==e&&(d=0,u+=r,h=e,l.clearRect(d,u,c,r)),c>=d)if(/^\s+$/.test(t.text))d+=t.text.length*o;else{const e=a?this.getTokenColor(t):this.getDefaultColor();d=((e,t,i,n,r,s,o,a)=>{if(e.fillStyle=i,a){const i=t.length*s;return e.fillRect(n,r,i,o),n+i}{let i=0;for(let a=0,l=t.length;l>a;a++)/\s/.test(t[a])?(i>0&&e.fillRect(n-i*s,r,i*s,o),i=0):i++,n+=s;return i>0&&e.fillRect(n-i*s,r,i*s,o),n}})(l,t.text,e,d,u,o,s,this.ignoreWhitespacesInTokens)}})),l.fill()}drawDecorations(e,t,i,n){let r=[];i.context.clearRect(0,i.yRow,i.canvasWidth,i.lineHeight);for(const i in n)r=r.concat(null!=t[i]&&t[i][e]||[]);if(r.sort(((e,t)=>(i.orders[e.properties.plugin]||0)-(i.orders[t.properties.plugin]||0))),null!=r?r.length:void 0)for(let e=0,t=r.length;t>e;e++)n[r[e].properties.type].call(this,r[e],i)}drawLineDecoration(e,t){t.context.fillStyle=this.getDecorationColor(e),t.context.fillRect(0,t.yRow,t.canvasWidth,t.lineHeight)}drawGutterDecoration(e,t){t.context.fillStyle=this.getDecorationColor(e),t.context.fillRect(0,t.yRow,1,t.lineHeight)}drawHighlightDecoration(e,t){const i=e.getMarker().getScreenRange(),n=i.end.row-i.start.row;if(t.context.fillStyle=this.getDecorationColor(e),0===n)t.context.fillRect(i.start.column*t.charWidth,t.yRow,(i.end.column-i.start.column)*t.charWidth,t.lineHeight);else if(t.screenRow===i.start.row){const e=i.start.column*t.charWidth;t.context.fillRect(e,t.yRow,t.canvasWidth-e,t.lineHeight)}else t.context.fillRect(0,t.yRow,t.screenRow===i.end.row?i.end.column*t.charWidth:t.canvasWidth,t.lineHeight)}drawHighlightOutlineDecoration(e,t){let i,n,r,s,o,a;const{lineHeight:l,charWidth:c,canvasWidth:h,screenRow:d}=t,u=e.getMarker().getScreenRange(),p=u.end.row-u.start.row,f=t.yRow,g=f+l;t.context.fillStyle=this.getDecorationColor(e),0===p?(n=u.end.column-u.start.column,r=n*c,a=u.start.column*c,o=a+r,t.context.fillRect(a,f,r,1),t.context.fillRect(a,g-1,r,1),t.context.fillRect(a,f,1,l),t.context.fillRect(o,f,1,l)):1===p?(a=u.start.column*t.charWidth,o=u.end.column*t.charWidth,d===u.start.row?(r=t.canvasWidth-a,s=Math.max(a,o),i=t.canvasWidth-s,t.context.fillRect(a,f,r,1),t.context.fillRect(s,g-1,i,1),t.context.fillRect(a,f,1,l),t.context.fillRect(h-1,f,1,l)):(r=h-a,i=h-o,t.context.fillRect(0,f,a,1),t.context.fillRect(0,g-1,o,1),t.context.fillRect(0,f,1,l),t.context.fillRect(o,f,1,l))):(a=u.start.column*c,o=u.end.column*c,d===u.start.row?(r=h-a,t.context.fillRect(a,f,r,1),t.context.fillRect(a,f,1,l),t.context.fillRect(h-1,f,1,l)):d===u.end.row?(r=h-a,t.context.fillRect(0,g-1,o,1),t.context.fillRect(0,f,1,l),t.context.fillRect(o,f,1,l)):(t.context.fillRect(0,f,1,l),t.context.fillRect(h-1,f,1,l),d===u.start.row+1&&t.context.fillRect(0,f,a,1),d===u.end.row-1&&t.context.fillRect(o,g-1,h-o,1)))}drawCustomDecoration(e,t){const i=e.getProperties().render;i&&(t.color=this.getDecorationColor(e),i(e,t))}}var ru={};t(ru),i(ru,"default",(()=>Qi));const su=class{static initClass(){return $i(this,gr.EventsDelegation,gr.SpacePenDSL.Babel),Qi(this,"minimap-quick-settings")}static content(){this.div({class:"select-list popover-list minimap-quick-settings"},(()=>{this.input({type:"text",class:"hidden-input",outlet:"hiddenInput"}),this.ol({class:"list-group mark-active",outlet:"list"},(()=>{this.li({class:"separator",outlet:"separator"}),this.li({class:"code-highlights",outlet:"codeHighlights"},"code-highlights"),this.li({class:"absolute-mode",outlet:"absoluteMode"},"absolute-mode"),this.li({class:"adjust-absolute-mode-height",outlet:"adjustAbsoluteModeHeight"},"adjust-absolute-mode-height")})),this.div({class:"btn-group"},(()=>{this.button({class:"btn btn-default",outlet:"onLeftButton"},"On Left"),this.button({class:"btn btn-default",outlet:"onRightButton"},"On Right")}))}))}createdCallback(){this.buildContent()}setModel(e){this.selectedItem=null,this.minimap=e,this.emitter=new ur,this.subscriptions=new hr,this.plugins={},this.itemsActions=new WeakMap;const t=this.subscriptions;t.add(bn((({name:e,plugin:t})=>this.addItemFor(e,t)))),t.add(Sn((({name:e,plugin:t})=>this.removeItemFor(e,t)))),t.add(wn((({name:e,plugin:t})=>this.activateItem(e,t)))),t.add(xn((({name:e,plugin:t})=>this.deactivateItem(e,t)))),t.add(atom.commands.add("minimap-quick-settings",{"core:move-up":()=>{this.selectPreviousItem()},"core:move-down":()=>{this.selectNextItem()},"core:move-left"(){atom.config.set("minimap.displayMinimapOnLeft",!0)},"core:move-right"(){atom.config.set("minimap.displayMinimapOnLeft",!1)},"core:cancel":()=>{this.destroy()},"core:confirm":()=>{this.toggleSelectedItem()}})),this.codeHighlights.classList.toggle("active",this.minimap.displayCodeHighlights),t.add(this.subscribeTo(this.codeHighlights,{mousedown:e=>{e.preventDefault(),atom.config.set("minimap.displayCodeHighlights",!this.minimap.displayCodeHighlights)}})),this.itemsActions.set(this.codeHighlights,(()=>{atom.config.set("minimap.displayCodeHighlights",!this.minimap.displayCodeHighlights)})),t.add(this.subscribeTo(this.absoluteMode,{mousedown(e){e.preventDefault(),atom.config.set("minimap.absoluteMode",!atom.config.get("minimap.absoluteMode"))}})),this.itemsActions.set(this.absoluteMode,(()=>{atom.config.set("minimap.absoluteMode",!atom.config.get("minimap.absoluteMode"))})),t.add(this.subscribeTo(this.adjustAbsoluteModeHeight,{mousedown(e){e.preventDefault(),atom.config.set("minimap.adjustAbsoluteModeHeight",!atom.config.get("minimap.adjustAbsoluteModeHeight"))}})),this.itemsActions.set(this.adjustAbsoluteModeHeight,(()=>{atom.config.set("minimap.adjustAbsoluteModeHeight",!atom.config.get("minimap.adjustAbsoluteModeHeight"))})),t.add(this.subscribeTo(this.hiddenInput,{focusout:e=>{this.destroy()}},{passive:!0})),t.add(this.subscribeTo(this.onLeftButton,{mousedown(e){e.preventDefault(),atom.config.set("minimap.displayMinimapOnLeft",!0)}})),t.add(this.subscribeTo(this.onRightButton,{mousedown(e){e.preventDefault(),atom.config.set("minimap.displayMinimapOnLeft",!1)}})),t.add(atom.config.observe("minimap.displayCodeHighlights",(e=>{this.codeHighlights.classList.toggle("active",e)}))),t.add(atom.config.observe("minimap.absoluteMode",(e=>{this.absoluteMode.classList.toggle("active",e)}))),t.add(atom.config.observe("minimap.adjustAbsoluteModeHeight",(e=>{this.adjustAbsoluteModeHeight.classList.toggle("active",e)}))),t.add(atom.config.observe("minimap.displayMinimapOnLeft",(e=>{this.onLeftButton.classList.toggle("selected",e),this.onRightButton.classList.toggle("selected",!e)}))),this.initList()}onDidDestroy(e){return this.emitter.on("did-destroy",e)}attach(){atom.views.getView(atom.workspace).appendChild(this),this.hiddenInput.focus()}destroy(){this.emitter.emit("did-destroy"),this.subscriptions.dispose(),this.parentNode.removeChild(this)}initList(){this.itemsDisposables=new WeakMap;for(const e in bu)this.addItemFor(e,bu[e])}toggleSelectedItem(){const e=this.itemsActions.get(this.selectedItem);"function"==typeof e&&e()}selectNextItem(){this.selectedItem.classList.remove("selected"),null!=this.selectedItem.nextSibling?(this.selectedItem=this.selectedItem.nextSibling,this.selectedItem.matches(".separator")&&(this.selectedItem=this.selectedItem.nextSibling)):this.selectedItem=this.list.firstChild,this.selectedItem.classList.add("selected")}selectPreviousItem(){this.selectedItem.classList.remove("selected"),null!=this.selectedItem.previousSibling?(this.selectedItem=this.selectedItem.previousSibling,this.selectedItem.matches(".separator")&&(this.selectedItem=this.selectedItem.previousSibling)):this.selectedItem=this.list.lastChild,this.selectedItem.classList.add("selected")}addItemFor(e,t){const i=document.createElement("li"),n=()=>{sn(e)};t.isActive()&&i.classList.add("active"),i.textContent=e,this.itemsActions.set(i,n),this.itemsDisposables.set(i,this.addDisposableEventListener(i,"mousedown",(e=>{e.preventDefault(),n()}))),this.plugins[e]=i,this.list.insertBefore(i,this.separator),null==this.selectedItem&&(this.selectedItem=i,this.selectedItem.classList.add("selected"))}removeItemFor(e,t){try{this.list.removeChild(this.plugins[e])}catch(e){}delete this.plugins[e]}activateItem(e,t){this.plugins[e].classList.add("active")}deactivateItem(e,t){this.plugins[e].classList.remove("active")}}.initClass(),ou=e(sr)({strategy:"scroll"});let au;const lu=class{static initClass(){return $i(this,nu,gr.EventsDelegation,gr.AncestorsMethods),Qi(this,"atom-text-editor-minimap")}createdCallback(){this.minimap=void 0,this.width=void 0,this.height=void 0,this.subscriptions=new hr,this.visibleAreaSubscription=void 0,this.quickSettingsSubscription=void 0,this.dragSubscription=void 0,this.openQuickSettingSubscription=void 0,this.displayMinimapOnLeft=!1,this.minimapScrollIndicator=void 0,this.displayMinimapOnLeft=void 0,this.displayPluginsControls=void 0,this.textOpacity=void 0,this.displayCodeHighlights=void 0,this.adjustToSoftWrap=void 0,this.useHardwareAcceleration=void 0,this.absoluteMode=void 0,this.visibleArea=void 0,this.controls=void 0,this.scrollIndicator=void 0,this.openQuickSettings=void 0,this.quickSettingsElement=void 0,this.attached=void 0,this.attachedToTextEditor=void 0,this.standAlone=void 0,this.wasVisible=void 0,this.offscreenFirstRow=void 0,this.offscreenLastRow=void 0,this.frameRequested=void 0,this.flexBasis=void 0,this.initializeContent(),this.subscriptions.add(atom.config.observe("minimap.displayMinimapOnLeft",(e=>{this.displayMinimapOnLeft=e,e?au||(au=document.createElement("style"),au.setAttribute("context","atom-text-editor-minimap"),document.head.appendChild(au)):au&&(au.parentNode.removeChild(au),au=null),this.updateMinimapFlexPosition(),this.measureHeightAndWidth(!0,!0)})),atom.config.observe("minimap.minimapScrollIndicator",(e=>{this.minimapScrollIndicator=e,this.minimapScrollIndicator&&null==this.scrollIndicator&&!this.standAlone?this.initializeScrollIndicator():null!=this.scrollIndicator&&this.disposeScrollIndicator(),this.attached&&this.requestUpdate()})),atom.config.observe("minimap.displayPluginsControls",(e=>{this.displayPluginsControls=e,this.displayPluginsControls&&null==this.openQuickSettings&&!this.standAlone?this.initializeOpenQuickSettings():null!=this.openQuickSettings&&this.disposeOpenQuickSettings()})),atom.config.observe("minimap.textOpacity",(e=>{this.textOpacity=e,this.attached&&this.requestForcedUpdate()})),atom.config.observe("minimap.displayCodeHighlights",(e=>{this.displayCodeHighlights=e,this.attached&&this.requestForcedUpdate()})),atom.config.observe("minimap.smoothScrolling",(e=>{this.smoothScrolling=e,this.attached&&(this.smoothScrolling?this.requestUpdate():(this.backLayer.canvas.style.cssText="",this.tokensLayer.canvas.style.cssText="",this.frontLayer.canvas.style.cssText=""))})),atom.config.observe("minimap.adjustMinimapWidthToSoftWrap",(e=>{this.adjustToSoftWrap=e,this.attached&&this.measureHeightAndWidth()})),atom.config.observe("minimap.adjustMinimapWidthOnlyIfSmaller",(e=>{this.adjustOnlyIfSmaller=e,this.attached&&this.measureHeightAndWidth()})),atom.config.observe("minimap.useHardwareAcceleration",(e=>{this.useHardwareAcceleration=e,this.attached&&this.requestUpdate()})),atom.config.observe("minimap.absoluteMode",(e=>{this.absoluteMode=e,this.classList.toggle("absolute",this.absoluteMode)})),atom.config.observe("minimap.adjustAbsoluteModeHeight",(e=>{this.adjustAbsoluteModeHeight=e,this.classList.toggle("adjust-absolute-height",this.adjustAbsoluteModeHeight),this.attached&&this.measureHeightAndWidth()})),atom.config.observe("minimap.ignoreWhitespacesInTokens",(e=>{this.ignoreWhitespacesInTokens=e,this.attached&&this.requestForcedUpdate()})),atom.config.observe("editor.preferredLineLength",(()=>{this.attached&&this.measureHeightAndWidth()})),atom.config.observe("editor.softWrap",(()=>{this.attached&&this.requestUpdate()})),atom.config.observe("editor.showInvisibles",(()=>{this.attached&&this.requestUpdate()})),atom.config.observe("editor.invisibles",(()=>{this.attached&&this.requestUpdate()})),atom.config.observe("editor.softWrapAtPreferredLineLength",(()=>{this.attached&&this.requestUpdate()})))}attachedCallback(){if("function"==typeof atom.views.pollDocument)this.subscriptions.add(atom.views.pollDocument((()=>{this.pollDOM()})));else{this.intersectionObserver=new IntersectionObserver((e=>{const{intersectionRect:t}=e[e.length-1];(t.width>0||t.height>0)&&this.measureHeightAndWidth(!0,!0)})),this.intersectionObserver.observe(this),this.isVisible()&&this.measureHeightAndWidth(!0,!0);const e=()=>{this.measureHeightAndWidth(!1,!1)};ou.listenTo(this,e),window.addEventListener("resize",e,{passive:!0}),this.subscriptions.add(new dr((()=>{ou.removeListener(this,e)})),new dr((()=>{window.removeEventListener("resize",e)})))}this.measureHeightAndWidth(),this.updateMinimapFlexPosition(),this.attached=!0,this.attachedToTextEditor=this.queryParentSelector("atom-text-editor")===this.minimap.getTextEditorElement(),this.attachedToTextEditor&&this.minimap.getTextEditorElement().setAttribute("with-minimap",""),this.subscriptions.add(atom.styles.onDidAddStyleElement((()=>{this.DOMStylesReader.invalidateDOMStylesCache(),this.requestForcedUpdate()})),this.subscribeToMediaQuery())}detachedCallback(){this.minimap.getTextEditorElement().removeAttribute("with-minimap"),this.attached=!1}isVisible(){return this.offsetWidth>0||this.offsetHeight>0}attach(e){if(this.attached)return;const t=e||this.minimap.getTextEditorElement(),i=t.querySelectorAll("atom-text-editor-minimap");i.length&&[].forEach.call(i,(e=>{e.destroy()})),t.appendChild(this)}detach(){this.attached&&null!=this.parentNode&&this.parentNode.removeChild(this)}updateMinimapFlexPosition(){this.classList.toggle("left",this.displayMinimapOnLeft)}destroy(){this.subscriptions.dispose(),this.detach(),this.minimap=null}initializeContent(){this.initializeCanvas(),this.attachCanvases(this),this.createVisibleArea(),this.createControls(),this.subscriptions.add(this.subscribeTo(this,{mousewheel:e=>{!this.standAlone&&this.minimap.onMouseWheel&&this.minimap.onMouseWheel(e)}},{passive:!0}),this.subscribeTo(this.getFrontCanvas(),{mousedown:e=>{this.canvasPressed(Gi(e))},touchstart:e=>{this.canvasPressed(Zi(e))}},{passive:!0}))}createVisibleArea(){this.visibleArea||(this.visibleArea=document.createElement("div"),this.visibleArea.classList.add("minimap-visible-area"),this.appendChild(this.visibleArea),this.visibleAreaSubscription=this.subscribeTo(this.visibleArea,{mousedown:e=>{this.startDrag(Gi(e))},touchstart:e=>{this.startDrag(Zi(e))}},{passive:!0}),this.subscriptions.add(this.visibleAreaSubscription))}removeVisibleArea(){this.visibleArea&&(this.subscriptions.remove(this.visibleAreaSubscription),this.visibleAreaSubscription.dispose(),this.removeChild(this.visibleArea),delete this.visibleArea)}createControls(){this.controls||this.standAlone||(this.controls=document.createElement("div"),this.controls.classList.add("minimap-controls"),this.appendChild(this.controls))}removeControls(){this.controls&&(this.removeChild(this.controls),delete this.controls)}initializeScrollIndicator(){this.scrollIndicator||this.standAlone||(this.scrollIndicator=document.createElement("div"),this.scrollIndicator.classList.add("minimap-scroll-indicator"),this.controls.appendChild(this.scrollIndicator))}disposeScrollIndicator(){this.scrollIndicator&&(this.controls.removeChild(this.scrollIndicator),delete this.scrollIndicator)}initializeOpenQuickSettings(){this.openQuickSettings||this.standAlone||(this.openQuickSettings=document.createElement("div"),this.openQuickSettings.classList.add("open-minimap-quick-settings"),this.controls.appendChild(this.openQuickSettings),this.openQuickSettingSubscription=this.subscribeTo(this.openQuickSettings,{mousedown:e=>{if(e.preventDefault(),e.stopPropagation(),null!=this.quickSettingsElement)this.quickSettingsElement.destroy(),this.quickSettingsSubscription.dispose();else{this.quickSettingsElement=new su,this.quickSettingsElement.setModel(this),this.quickSettingsSubscription=this.quickSettingsElement.onDidDestroy((()=>{this.quickSettingsElement=null}));const{top:e,left:t,right:i}=this.getFrontCanvas().getBoundingClientRect();this.quickSettingsElement.style.top=e+"px",this.quickSettingsElement.attach(),this.quickSettingsElement.style.left=this.displayMinimapOnLeft?i+"px":t-this.quickSettingsElement.clientWidth+"px"}}}))}disposeOpenQuickSettings(){this.openQuickSettings&&(this.controls.removeChild(this.openQuickSettings),this.openQuickSettingSubscription.dispose(),delete this.openQuickSettings)}getModel(){return this.minimap}setModel(e){return this.minimap=e,this.subscriptions.add(this.minimap.onDidChangeScrollTop((()=>{this.requestUpdate()})),this.minimap.onDidChangeScrollLeft((()=>{this.requestUpdate()})),this.minimap.onDidDestroy((()=>{this.destroy()})),this.minimap.onDidChangeConfig((()=>{if(this.attached)return this.requestForcedUpdate()})),this.minimap.onDidChangeStandAlone((()=>{this.setStandAlone(this.minimap.isStandAlone()),this.requestUpdate()})),this.minimap.onDidChange((e=>{this.pendingChanges.push(e),this.requestUpdate()})),this.minimap.onDidChangeDecorationRange((e=>{const{type:t}=e;"line"===t||"highlight-under"===t||"background-custom"===t?this.pendingBackDecorationChanges.push(e):this.pendingFrontDecorationChanges.push(e),this.requestUpdate()})),Cn((()=>{this.requestForcedUpdate()}))),this.setStandAlone(this.minimap.isStandAlone()),null!=this.width&&null!=this.height&&this.minimap.setScreenHeightAndWidth(this.height,this.width),this.minimap}setStandAlone(e){this.standAlone=e,this.standAlone?(this.setAttribute("stand-alone",!0),this.disposeScrollIndicator(),this.disposeOpenQuickSettings(),this.removeControls(),this.removeVisibleArea()):(this.removeAttribute("stand-alone"),this.createVisibleArea(),this.createControls(),this.minimapScrollIndicator&&this.initializeScrollIndicator(),this.displayPluginsControls&&this.initializeOpenQuickSettings())}requestUpdate(){this.frameRequested||(this.frameRequested=!0,requestAnimationFrame((()=>{this.update(),this.frameRequested=!1})))}requestForcedUpdate(){this.offscreenFirstRow=null,this.offscreenLastRow=null,this.requestUpdate()}update(){if(!(this.attached&&this.isVisible()&&this.minimap))return;const e=this.minimap;e.enableCache();const t=this.getFrontCanvas(),i=this.minimap.getDevicePixelRatio(),n=e.getTextEditorScaledScrollLeft(),r=e.getTextEditorScaledScrollTop()-e.getScrollTop(),s=Math.min(t.width/i,this.width),o=s+n;this.adjustToSoftWrap&&this.flexBasis?(this.style.flexBasis=this.flexBasis+"px",this.style.width=this.flexBasis+"px"):(this.style.flexBasis=null,this.style.width=null),Yi(this.visibleArea,{width:Math.round(o)+"px",height:Math.round(e.getTextEditorScaledHeight())+"px",transform:Xi(0,r,this.useHardwareAcceleration),"border-left-width":Math.round(n)+"px"}),Yi(this.controls,{width:Math.round(s)+"px"});const a=e.getFirstVisibleScreenRow()*e.getLineHeight()-e.getScrollTop();if(this.smoothScrolling){let e=Xi(0,a,this.useHardwareAcceleration);if(1!==i){const t=1/i;e+=" "+Ji(t,t,this.useHardwareAcceleration)}Yi(this.backLayer.canvas,{transform:e}),Yi(this.tokensLayer.canvas,{transform:e}),Yi(this.frontLayer.canvas,{transform:e})}else{const e=1/i,t=Ji(e,e,this.useHardwareAcceleration);Yi(this.backLayer.canvas,{transform:t}),Yi(this.tokensLayer.canvas,{transform:t}),Yi(this.frontLayer.canvas,{transform:t})}if(this.minimapScrollIndicator&&!this.scrollIndicator&&e.canScroll()&&this.initializeScrollIndicator(),null!=this.scrollIndicator){const t=e.getScreenHeight(),i=t*(t/e.getHeight()),n=(t-i)*e.getScrollRatio();Yi(this.scrollIndicator,{height:i+"px",transform:Xi(0,n,this.useHardwareAcceleration)}),e.canScroll()||this.disposeScrollIndicator()}this.absoluteMode&&this.adjustAbsoluteModeHeight&&this.updateCanvasesSize(),this.updateCanvas(),e.clearCache()}setDisplayCodeHighlights(e){this.displayCodeHighlights=e,this.attached&&this.requestForcedUpdate()}pollDOM(){const e=this.checkForVisibilityChange();this.isVisible()&&(this.wasVisible||this.requestForcedUpdate(),this.measureHeightAndWidth(e,!1))}checkForVisibilityChange(){return this.isVisible()?!this.wasVisible&&(this.wasVisible=!0,this.wasVisible):this.wasVisible?(this.wasVisible=!1,!0):(this.wasVisible=!1,this.wasVisible)}measureHeightAndWidth(e,t=!0){if(!this.minimap)return;const i=this.style.flexBasis;this.style.flexBasis="";const n=this.width!==this.clientWidth||this.height!==this.clientHeight;this.height=this.clientHeight,this.width=this.clientWidth;let r=this.width;if(null!=this.minimap&&this.minimap.setScreenHeightAndWidth(this.height,this.width),(n||e||t)&&this.requestForcedUpdate(),this.isVisible())if(n||t){if(this.adjustToSoftWrap){const e=atom.config.get("editor.preferredLineLength"),t=atom.config.get("editor.softWrap"),i=atom.config.get("editor.softWrapAtPreferredLineLength"),n=e*this.minimap.getCharWidth();!(t&&i&&e)||n>this.width&&this.adjustOnlyIfSmaller?(Ki(r),delete this.flexBasis):(this.flexBasis=n,r=n,Ki(n))}else Ki(r),delete this.flexBasis;this.updateCanvasesSize(r)}else this.style.flexBasis=i}updateCanvasesSize(e){const t=this.minimap.getDevicePixelRatio(),i=this.height+this.minimap.getLineHeight(),n=this.absoluteMode&&this.adjustAbsoluteModeHeight?Math.min(this.minimap.getHeight(),i):i,r=this.getFrontCanvas();null==e&&(e=r.width/t),e===r.width&&n===r.height||(this.setCanvasesSize(e*t,n*t),this.absoluteMode&&this.adjustAbsoluteModeHeight&&(this.offscreenFirstRow=null,this.offscreenLastRow=null))}canvasPressed({y:e,isLeftMouse:t,isMiddleMouse:i}){if(!this.minimap.isStandAlone())if(t)this.canvasLeftMousePressed(e);else if(i){this.canvasMiddleMousePressed(e);const{top:t,height:i}=this.visibleArea.getBoundingClientRect();this.startDrag({y:t+i/2,isLeftMouse:!1,isMiddleMouse:!0})}}canvasLeftMousePressed(e){const t=e-this.getBoundingClientRect().top,i=Math.floor(t/this.minimap.getLineHeight())+this.minimap.getFirstVisibleScreenRow(),n=this.minimap.getTextEditor(),r=this.minimap.getTextEditorElement(),s=i*n.getLineHeightInPixels()-this.minimap.getTextEditorHeight()/2,o=r.pixelPositionForScreenPosition([i,0]).top-this.minimap.getTextEditorHeight()/2;if(atom.config.get("minimap.moveCursorOnMinimapClick")&&n.setCursorScreenPosition([i,0]),atom.config.get("minimap.scrollAnimation")){const e=atom.config.get("minimap.scrollAnimationDuration"),t=this.minimap.scrollIndependentlyOnMouseWheel(),i=this.minimap.getTextEditorScrollTop(),n=o;let r;if(t){const t=this.minimap.getScrollTop(),o=Math.min(1,s/(this.minimap.getTextEditorMaxScrollTop()||1))*this.minimap.getMaxScrollTop();r=(e,i)=>{null!==this.minimap&&(this.minimap.setTextEditorScrollTop(e,!0),this.minimap.setScrollTop(t+(o-t)*i))},en({from:i,to:n,duration:e,step:r})}else r=e=>{null!==this.minimap&&this.minimap.setTextEditorScrollTop(e)},en({from:i,to:n,duration:e,step:r})}else this.minimap.setTextEditorScrollTop(o)}canvasMiddleMousePressed(e){const{top:t}=this.getBoundingClientRect(),i=(e-t-this.minimap.getTextEditorScaledHeight()/2)/(this.minimap.getVisibleHeight()-this.minimap.getTextEditorScaledHeight());this.minimap.setTextEditorScrollTop(i*this.minimap.getTextEditorMaxScrollTop())}subscribeToMediaQuery(){const e=window.matchMedia("screen and (-webkit-min-device-pixel-ratio: 1.5)"),t=()=>{this.requestForcedUpdate()};return e.addEventListener("change",t),new dr((()=>{e.removeEventListener("change",t)}))}startDrag({y:e,isLeftMouse:t,isMiddleMouse:i}){if(!this.minimap)return;if(!t&&!i)return;const n={dragOffset:e-this.visibleArea.getBoundingClientRect().top,offsetTop:this.getBoundingClientRect().top},r=e=>this.drag(Gi(e),n),s=()=>this.endDrag(),o=e=>this.drag(Zi(e),n);document.body.addEventListener("mousemove",r,{passive:!0}),document.body.addEventListener("mouseup",s,{passive:!0}),document.body.addEventListener("mouseleave",s,{passive:!0}),document.body.addEventListener("touchmove",o,{passive:!0}),document.body.addEventListener("touchend",s,{passive:!0}),document.body.addEventListener("touchcancel",s,{passive:!0}),this.dragSubscription=new dr((()=>{document.body.removeEventListener("mousemove",r),document.body.removeEventListener("mouseup",s),document.body.removeEventListener("mouseleave",s),document.body.removeEventListener("touchmove",o),document.body.removeEventListener("touchend",s),document.body.removeEventListener("touchcancel",s)}))}drag({y:e,isLeftMouse:t,isMiddleMouse:i},n){if(!this.minimap)return;if(!t&&!i)return;const r=(e-n.offsetTop-n.dragOffset)/(this.minimap.getVisibleHeight()-this.minimap.getTextEditorScaledHeight());this.minimap.setTextEditorScrollTop(r*this.minimap.getTextEditorMaxScrollTop())}endDrag(){this.minimap&&this.dragSubscription.dispose()}}.initClass();var cu,hu,du=!1;let uu=0;class pu{static isType(e,t){return Array.isArray(e.type)?e.type.indexOf(t)>=0:t===e.type}constructor(e,t,i){this.marker=e,this.minimap=t,this.emitter=new ur,this.id=uu++,this.properties=null,this.setProperties(i),this.properties.id=this.id,this.destroyed=!1,this.markerDestroyDisposable=this.marker.onDidDestroy((()=>{this.destroy()})),this.screenRange=e.getScreenRange()}destroy(){this.destroyed||(this.markerDestroyDisposable.dispose(),this.markerDestroyDisposable=null,this.destroyed=!0,this.emitter.emit("did-destroy"),this.emitter.dispose())}isDestroyed(){return this.destroyed}onDidChangeProperties(e){return this.emitter.on("did-change-properties",e)}onDidDestroy(e){return this.emitter.on("did-destroy",e)}getId(){return this.id}getMarker(){return this.marker}isType(e){return pu.isType(this.properties,e)}getProperties(){return this.properties}setProperties(e){if(this.destroyed)return;const t=this.properties;this.properties=e,this.properties.id=this.id,this.emitter.emit("did-change-properties",{oldProperties:t,newProperties:e})}}class fu{initializeDecorations(){null==this.emitter&&(this.emitter=new ur),this.decorationsById=new Map,this.decorationsByMarkerId=new Map,this.decorationMarkerChangedSubscriptions=new Map,this.decorationMarkerDestroyedSubscriptions=new Map,this.decorationUpdatedSubscriptions=new Map,this.decorationDestroyedSubscriptions=new Map}getDecorations(){return this.decorationsById.values()}onDidAddDecoration(e){return this.emitter.on("did-add-decoration",e)}onDidRemoveDecoration(e){return this.emitter.on("did-remove-decoration",e)}onDidChangeDecoration(e){return this.emitter.on("did-change-decoration",e)}onDidChangeDecorationRange(e){return this.emitter.on("did-change-decoration-range",e)}onDidUpdateDecoration(e){return this.emitter.on("did-update-decoration",e)}decorationForId(e){return this.decorationsById.get(e)}decorationsForScreenRowRange(e,t){const i={},n=this.findMarkers({intersectsScreenRowRange:[e,t]});for(let e=0,t=n.length;t>e;e++){const t=n[e],r=this.decorationsByMarkerId.get(t.id);void 0!==r&&(i[t.id]=r)}return i}decorationsByTypeThenRows(){if(null!=this.decorationsByTypeThenRowsCache)return this.decorationsByTypeThenRowsCache;const e={},t=this.decorationsById.values();for(const i of t){const t=i.marker.getScreenRange(),n=i.getProperties().type;null==e[n]&&(e[n]={});for(let r=t.start.row,s=t.end.row;s>=r;r++)null==e[n][r]&&(e[n][r]=[]),e[n][r].push(i)}return this.decorationsByTypeThenRowsCache=e,e}invalidateDecorationForScreenRowsCache(){this.decorationsByTypeThenRowsCache=null}decorateMarker(e,t){if(this.destroyed||null==e)return;const{id:i}=e;"highlight"===t.type&&(t.type="highlight-over");const{type:n,plugin:r}=t;if(null==r&&(t.plugin=(()=>{const e=Error().stack.split("\n")[3].split("(")[1].replace(")",""),t=RegExp(atom.packages.getPackageDirPaths().join("|")+ac.escapeRegExp(ar.sep)),i=e.replace(t,"").split(ar.sep)[0].replace(/minimap-|-minimap/,"");return 0>i.indexOf(ar.sep)?i:void 0})()),null==t.scope&&null!=t.class){const e=t.class.split(" ").join(".");t.scope=".minimap ."+e}this.decorationMarkerDestroyedSubscriptions.has(i)||this.decorationMarkerDestroyedSubscriptions.set(i,e.onDidDestroy((()=>{this.removeAllDecorationsForMarker(e)}))),this.decorationMarkerChangedSubscriptions.has(i)||this.decorationMarkerChangedSubscriptions.set(i,e.onDidChange((t=>{const r=this.decorationsByMarkerId.get(i),s=e.getScreenRange();if(this.invalidateDecorationForScreenRowsCache(),void 0!==r)for(let i=0,n=r.length;n>i;i++){const n=r[i];this.emitter.emit("did-change-decoration",{marker:e,decoration:n,event:t}),this.emitDecorationChanges(n.type,n),n.screenRange=s}let o=t.oldTailScreenPosition,a=t.oldHeadScreenPosition,l=t.newTailScreenPosition,c=t.newHeadScreenPosition;o.row>a.row&&([o,a]=[a,o]),l.row>c.row&&([l,c]=[c,l]);const h=((e,t,i,n)=>{const r=[];return e.isLessThan(i)?r.push([e,i]):i.isLessThan(e)&&r.push([i,e]),t.isLessThan(n)?r.push([t,n]):n.isLessThan(t)&&r.push([n,t]),r})(o,a,l,c);for(let e=0,t=h.length;t>e;e++){const[t,i]=h[e];this.emitRangeChanges(n,{start:t,end:i},0)}})));const s=new pu(e,this,t);return this.decorationsByMarkerId.has(i)||this.decorationsByMarkerId.set(i,[]),this.decorationsByMarkerId.get(i).push(s),this.decorationsById.set(s.id,s),this.decorationUpdatedSubscriptions.has(s.id)||this.decorationUpdatedSubscriptions.set(s.id,s.onDidChangeProperties((e=>{this.emitDecorationChanges(n,s)}))),this.decorationDestroyedSubscriptions.set(s.id,s.onDidDestroy((()=>{this.removeDecoration(s)}))),this.emitDecorationChanges(n,s),this.emitter.emit("did-add-decoration",{marker:e,decoration:s}),s}emitDecorationChanges(e,t){if(this.editorDestroyed())return;this.invalidateDecorationForScreenRowsCache();const i=t.screenRange;i.start&&i.end&&this.emitRangeChanges(e,i,0)}emitRangeChanges(e,t,i){const n=t.start.row,r=t.end.row,s=this.getLastVisibleScreenRow(),o=this.getFirstVisibleScreenRow();null==i&&(i=s-o-(r-n)),this.emitter.emit("did-change-decoration-range",{start:n,end:r,screenDelta:i,type:e})}removeDecoration(e){if(null==e)return;const t=e.marker;let i;this.decorationsById.delete(e.id),i=this.decorationUpdatedSubscriptions.get(e.id),void 0!==i&&i.dispose(),i=this.decorationDestroyedSubscriptions.get(e.id),void 0!==i&&i.dispose(),this.decorationUpdatedSubscriptions.delete(e.id),this.decorationDestroyedSubscriptions.delete(e.id);const n=this.decorationsByMarkerId.get(t.id);if(void 0===n)return;this.emitDecorationChanges(e.getProperties().type,e);const r=n.indexOf(e);r>-1&&(n.splice(r,1),this.emitter.emit("did-remove-decoration",{marker:t,decoration:e}),0===n.length&&this.removedAllMarkerDecorations(t))}removeAllDecorationsForMarker(e){if(null==e)return;const t=this.decorationsByMarkerId.get(e.id);if(void 0!==t){for(let i=0,n=t.length;n>i;i++){const n=t[i];this.adapter.editorDestroyed()||this.emitDecorationChanges(n.getProperties().type,n),this.emitter.emit("did-remove-decoration",{marker:e,decoration:n})}this.removedAllMarkerDecorations(e)}}removedAllMarkerDecorations(e){null!=e&&(this.decorationMarkerChangedSubscriptions.get(e.id).dispose(),this.decorationMarkerDestroyedSubscriptions.get(e.id).dispose(),this.decorationsByMarkerId.delete(e.id),this.decorationMarkerChangedSubscriptions.delete(e.id),this.decorationMarkerDestroyedSubscriptions.delete(e.id))}removeAllDecorations(){const e=this.decorationMarkerChangedSubscriptions.values();for(const t of e)t.dispose();const t=this.decorationMarkerDestroyedSubscriptions.values();for(const e of t)e.dispose();const i=this.decorationUpdatedSubscriptions.values();for(const e of i)e.dispose();const n=this.decorationDestroyedSubscriptions.values();for(const e of n)e.dispose();const r=this.decorationsById.values();for(const e of r)e.destroy();this.decorationsById.clear(),this.decorationsByMarkerId.clear(),this.decorationMarkerChangedSubscriptions.clear(),this.decorationMarkerDestroyedSubscriptions.clear(),this.decorationUpdatedSubscriptions.clear(),this.decorationDestroyedSubscriptions.clear()}}class gu{constructor(e){this.textEditor=e,this.textEditorElement=atom.views.getView(this.textEditor)}enableCache(){this.useCache=!0}clearCache(){this.useCache=!1,delete this.heightCache,delete this.scrollTopCache,delete this.scrollLeftCache,delete this.maxScrollTopCache}onDidChangeScrollTop(e){return this.textEditorElement.onDidChangeScrollTop(e)}onDidChangeScrollLeft(e){return this.textEditorElement.onDidChangeScrollLeft(e)}getHeight(){return this.editorDestroyed()?0:this.useCache?(this.heightCache||(this.heightCache=this.textEditorElement.getHeight()),this.heightCache):this.textEditorElement.getHeight()}getScrollTop(){return this.editorDestroyed()?0:this.useCache?(this.scrollTopCache||(this.scrollTopCache=this.computeScrollTop()),this.scrollTopCache):this.computeScrollTop()}computeScrollTop(){if(this.editorDestroyed())return 0;const e=this.textEditorElement.getScrollTop(),t=this.textEditor.getLineHeightInPixels();let i=this.textEditorElement.getFirstVisibleScreenRow();if(Number.isNaN(i))return 0;let n=this.textEditorElement.pixelPositionForScreenPosition([i,0]).top;return n>e&&(i-=1,n=this.textEditorElement.pixelPositionForScreenPosition([i,0]).top),i*t+Math.min(e-n,t)}setScrollTop(e){this.editorDestroyed()||this.textEditorElement.setScrollTop(e)}getScrollLeft(){return this.editorDestroyed()?0:this.useCache?(this.scrollLeftCache||(this.scrollLeftCache=this.textEditorElement.getScrollLeft()),this.scrollLeftCache):this.textEditorElement.getScrollLeft()}getMaxScrollTop(){if(this.editorDestroyed())return 0;if(null!=this.maxScrollTopCache&&this.useCache)return this.maxScrollTopCache;let e;if(this.textEditorElement.getMaxScrollTop){if(e=this.textEditorElement.getMaxScrollTop(),parseFloat(atom.getVersion())>=1.13&&this.scrollPastEnd){const t=this.textEditor.getLineHeightInPixels();e-=this.getHeight()-3*t}}else if(e=this.textEditorElement.getScrollHeight()-this.getHeight(),this.scrollPastEnd){const t=this.textEditor.getLineHeightInPixels();e-=this.getHeight()-3*t}return this.useCache&&(this.maxScrollTopCache=e),e}editorDestroyed(){return!this.textEditor||this.textEditor.isDestroyed()||!this.textEditorElement.component||!this.textEditorElement.getModel()||!this.textEditorElement.parentNode}}let mu=1;class vu{static initClass(){return $i(this,fu),this}constructor(e={}){if(!e.textEditor)throw Error("Cannot create a minimap without an editor");if(this.textEditor=e.textEditor,this.editorElement=void 0,this.standAlone=e.standAlone,this.width=e.width,this.height=e.height,this.id=mu++,this.emitter=new ur,this.subscriptions=new hr,this.adapter=null,this.charHeight=null,this.configCharHeight=null,this.charWidth=null,this.configCharWidth=null,this.interline=null,this.configInterline=null,this.devicePixelRatioRounding=null,this.configDevicePixelRatioRounding=null,this.redrawDelay=0,this.destroyed=!1,this.scrollPastEnd=!1,this.pendingChangeEvents=[],this.flushChangesTimer=null,this.initializeDecorations(),null!=atom.views.getView(this.textEditor).getScrollTop)this.adapter=new gu(this.textEditor);else{atom.notifications.addWarning("LegacyAdapter of Minimap is deprecated and will be removed in the next major version. Please upgrade Atom to the latest version.");const e=(du||(du=!0,t(cu={}),hu=class{constructor(e){this.textEditor=e}enableCache(){this.useCache=!0}clearCache(){this.useCache=!1,delete this.heightCache,delete this.scrollTopCache,delete this.scrollLeftCache,delete this.maxScrollTopCache}onDidChangeScrollTop(e){return this.textEditor.onDidChangeScrollTop(e)}onDidChangeScrollLeft(e){return this.textEditor.onDidChangeScrollLeft(e)}getHeight(){return this.useCache?(this.heightCache||(this.heightCache=this.textEditor.getHeight()),this.heightCache):this.textEditor.getHeight()}getScrollTop(){return this.useCache?(this.scrollTopCache||(this.scrollTopCache=this.textEditor.getScrollTop()),this.scrollTopCache):this.textEditor.getScrollTop()}setScrollTop(e){return this.textEditor.setScrollTop(e)}getScrollLeft(){return this.useCache?(this.scrollLeftCache||(this.scrollLeftCache=this.textEditor.getScrollLeft()),this.scrollLeftCache):this.textEditor.getScrollLeft()}getMaxScrollTop(){if(null!=this.maxScrollTopCache&&this.useCache)return this.maxScrollTopCache;let e=this.textEditor.displayBuffer.getMaxScrollTop();const t=this.textEditor.getLineHeightInPixels();return this.scrollPastEnd&&(e-=this.getHeight()-3*t),this.useCache&&(this.maxScrollTopCache=e),e}editorDestroyed(){return!this.textEditor||this.textEditor.isDestroyed()}},i(cu,"default",(()=>hu))),cu);this.adapter=new e(this.textEditor)}this.scrollTop=0;const n=this.subscriptions;let r=this.subscribeToConfig();n.add(r),n.add(this.textEditor.onDidChangeGrammar((()=>{n.remove(r),r.dispose(),r=this.subscribeToConfig(),n.add(r)}))),n.add(this.adapter.onDidChangeScrollTop((()=>{this.standAlone||this.ignoreTextEditorScroll||this.inChangeScrollTop||(this.inChangeScrollTop=!0,this.updateScrollTop(),this.emitter.emit("did-change-scroll-top",this),this.inChangeScrollTop=!1),this.ignoreTextEditorScroll&&(this.ignoreTextEditorScroll=!1)}))),n.add(this.adapter.onDidChangeScrollLeft((()=>{this.standAlone||this.emitter.emit("did-change-scroll-left",this)}))),n.add(this.textEditor.onDidChange((e=>{this.scheduleChanges(e)}))),n.add(this.textEditor.onDidDestroy((()=>{this.destroy()}))),n.add(this.textEditor.onDidTokenize((()=>{this.emitter.emit("did-change-config")})))}destroy(){this.destroyed||(clearTimeout(this.flushChangesTimer),this.flushChangesTimer=null,this.pendingChangeEvents=[],this.removeAllDecorations(),this.subscriptions.dispose(),this.subscriptions=null,this.textEditor=null,this.emitter.emit("did-destroy"),this.emitter.dispose(),this.destroyed=!0)}isDestroyed(){return this.destroyed}scheduleChanges(e){this.pendingChangeEvents=this.pendingChangeEvents.concat(e),this.redrawDelay||this.requestFlushChanges(),this.flushChangesTimer||(this.flushChangesTimer=setTimeout((()=>{this.requestFlushChanges()}),this.redrawDelay))}flushChanges(){clearTimeout(this.flushChangesTimer),this.flushChangesTimer=null,this.emitChanges(this.pendingChangeEvents),this.pendingChangeEvents=[]}requestFlushChanges(){this.requestedFlushChanges||(this.requestedFlushChanges=requestAnimationFrame((()=>{this.flushChanges(),this.requestedFlushChanges&&(cancelAnimationFrame(this.requestedFlushChanges),this.requestedFlushChanges=null)})))}onDidChange(e){return this.emitter.on("did-change",e)}onDidChangeConfig(e){return this.emitter.on("did-change-config",e)}onDidChangeScrollTop(e){return this.emitter.on("did-change-scroll-top",e)}onDidChangeScrollLeft(e){return this.emitter.on("did-change-scroll-left",e)}onDidChangeStandAlone(e){return this.emitter.on("did-change-stand-alone",e)}onDidDestroy(e){return this.emitter.on("did-destroy",e)}subscribeToConfig(){const e=new hr,t={scope:this.textEditor.getRootScopeDescriptor()};return e.add(atom.config.observe("editor.scrollPastEnd",t,(e=>{this.scrollPastEnd=e,this.adapter.scrollPastEnd=this.scrollPastEnd,this.emitter.emit("did-change-config")}))),e.add(atom.config.observe("minimap.charHeight",t,(e=>{this.configCharHeight=e,this.updateScrollTop(),this.emitter.emit("did-change-config")}))),e.add(atom.config.observe("minimap.charWidth",t,(e=>{this.configCharWidth=e,this.updateScrollTop(),this.emitter.emit("did-change-config")}))),e.add(atom.config.observe("minimap.interline",t,(e=>{this.configInterline=e,this.updateScrollTop(),this.emitter.emit("did-change-config")}))),e.add(atom.config.observe("minimap.independentMinimapScroll",t,(e=>{this.independentMinimapScroll=e,this.updateScrollTop()}))),e.add(atom.config.observe("minimap.scrollSensitivity",t,(e=>{this.scrollSensitivity=e}))),e.add(atom.config.observe("minimap.redrawDelay",t,(e=>{this.redrawDelay=e}))),e.add(atom.config.observe("minimap.devicePixelRatioRounding",t,(e=>{this.configDevicePixelRatioRounding=e,this.updateScrollTop(),this.emitter.emit("did-change-config")}))),e}isStandAlone(){return this.standAlone}setStandAlone(e){e!==this.standAlone&&(this.standAlone=e,this.emitter.emit("did-change-stand-alone",this))}getTextEditor(){return this.textEditor}getTextEditorElement(){return this.editorElement||(this.editorElement=atom.views.getView(this.getTextEditor())),this.editorElement}getTextEditorScaledHeight(){return this.adapter.getHeight()*this.getVerticalScaleFactor()}getTextEditorScaledScrollTop(){return this.adapter.getScrollTop()*this.getVerticalScaleFactor()}getTextEditorScaledScrollLeft(){return this.adapter.getScrollLeft()*this.getHorizontalScaleFactor()}getTextEditorMaxScrollTop(){return this.adapter.getMaxScrollTop()}getTextEditorScrollTop(){return this.adapter.getScrollTop()}setTextEditorScrollTop(e,t=!1){this.ignoreTextEditorScroll=t,this.adapter.setScrollTop(e)}getTextEditorScrollLeft(){return this.adapter.getScrollLeft()}getTextEditorHeight(){return this.adapter.getHeight()}getTextEditorScrollRatio(){return this.adapter.getScrollTop()/(this.getTextEditorMaxScrollTop()||1)}getCapedTextEditorScrollRatio(){return Math.min(1,this.getTextEditorScrollRatio())}getHeight(){return this.textEditor.getScreenLineCount()*this.getLineHeight()}getWidth(){return this.textEditor.getMaxScreenLineLength()*this.getCharWidth()}getVisibleHeight(){return Math.min(this.getScreenHeight(),this.getHeight())}getScreenHeight(){return this.isStandAlone()?null!=this.height?this.height:this.getHeight():this.adapter.getHeight()}getVisibleWidth(){return Math.min(this.getScreenWidth(),this.getWidth())}getScreenWidth(){return this.isStandAlone()&&null!=this.width?this.width:this.getWidth()}setScreenHeightAndWidth(e,t){this.width===t&&this.height===e||(this.height=e,this.width=t,this.updateScrollTop())}getVerticalScaleFactor(){return this.getLineHeight()/this.textEditor.getLineHeightInPixels()}getHorizontalScaleFactor(){return this.getCharWidth()/this.textEditor.getDefaultCharWidth()}getLineHeight(){return this.getCharHeight()+this.getInterline()}getCharWidth(){return null!=this.charWidth?this.charWidth:this.configCharWidth}setCharWidth(e){this.charWidth=Math.floor(e),this.emitter.emit("did-change-config")}getCharHeight(){return null!=this.charHeight?this.charHeight:this.configCharHeight}setCharHeight(e){this.charHeight=Math.floor(e),this.emitter.emit("did-change-config")}getInterline(){return null!=this.interline?this.interline:this.configInterline}setInterline(e){this.interline=Math.floor(e),this.emitter.emit("did-change-config")}getDevicePixelRatioRounding(){return null!=this.devicePixelRatioRounding?this.devicePixelRatioRounding:this.configDevicePixelRatioRounding}setDevicePixelRatioRounding(e){this.devicePixelRatioRounding=e,this.emitter.emit("did-change-config")}getDevicePixelRatio(){return this.getDevicePixelRatioRounding()?Math.floor(devicePixelRatio):devicePixelRatio}getFirstVisibleScreenRow(){return Math.floor(this.getScrollTop()/this.getLineHeight())}getLastVisibleScreenRow(){return Math.ceil((this.getScrollTop()+this.getScreenHeight())/this.getLineHeight())}scrollIndependentlyOnMouseWheel(){return this.independentMinimapScroll}getScrollTop(){return this.standAlone||this.independentMinimapScroll?this.scrollTop:this.getScrollTopFromEditor()}setScrollTop(e){this.scrollTop=Math.max(0,Math.min(this.getMaxScrollTop(),e)),(this.standAlone||this.independentMinimapScroll)&&this.emitter.emit("did-change-scroll-top",this)}getScrollRatio(){return this.getScrollTop()/this.getMaxScrollTop()}updateScrollTop(){if(this.independentMinimapScroll){try{this.setScrollTop(this.getScrollTopFromEditor())}catch(e){}this.emitter.emit("did-change-scroll-top",this)}}getScrollTopFromEditor(){return Math.abs(this.getCapedTextEditorScrollRatio()*this.getMaxScrollTop())}getMaxScrollTop(){return Math.max(0,this.getHeight()-this.getScreenHeight())}canScroll(){return this.getMaxScrollTop()>0}onMouseWheel(e){if(this.scrollIndependentlyOnMouseWheel()){if(e.stopPropagation(),!this.canScroll())return;const{wheelDeltaY:t}=e,i=this.getScrollTop()-Math.round(t*this.scrollSensitivity);e.preventDefault(),this.setScrollTop(i)}}getMarker(e){return this.textEditor.getMarker(e)}findMarkers(e){try{return this.textEditor.findMarkers(e)}catch(e){return[]}}markBufferRange(e){return this.textEditor.markBufferRange(e)}emitChanges(e){this.emitter.emit("did-change",e)}enableCache(){this.adapter.enableCache()}clearCache(){this.adapter.clearCache()}editorDestroyed(){this.adapter.editorDestroyed()}}exports.Minimap=vu,vu.initClass();var yu={};exports.config=yu,yu=JSON.parse('{"plugins":{"type":"object","properties":{}},"autoToggle":{"title":"Show Minimap On Atom Start","type":"boolean","default":true,"order":1},"displayMinimapOnLeft":{"type":"boolean","default":false,"order":2},"displayCodeHighlights":{"type":"boolean","default":true,"description":"Toggles the render of the buffer tokens in the minimap.","order":3},"displayPluginsControls":{"type":"boolean","default":true,"description":"You need to restart Atom for this setting to be effective.","order":4},"minimapScrollIndicator":{"type":"boolean","default":true,"description":"Toggles the display of a side line showing which part of the buffer is currently displayed by the minimap. This side line will only appear if the minimap is taller than the editor view height.","order":5},"adjustMinimapWidthToSoftWrap":{"type":"boolean","default":true,"description":"If this option is enabled and Soft Wrap is checked then the Minimap max width is set to the Preferred Line Length value.","order":6},"adjustMinimapWidthOnlyIfSmaller":{"type":"boolean","default":true,"description":"If this option and `adjustMinimapWidthToSoftWrap` are enabled the minimap width will never go past the limit sets by CSS. On the other hand, when disabled the minimap will expand to honor the preferred line width.","order":7},"ignoreWhitespacesInTokens":{"type":"boolean","default":false,"description":"When enabled, text editor tokens are rendered as plain blocks, with no regards to the whitespaces they contains.","order":8},"charWidth":{"type":"number","default":1,"minimum":0.5,"order":9},"charHeight":{"type":"number","default":2,"minimum":0.5,"order":10},"interline":{"type":"number","default":1,"minimum":0,"description":"The space between lines in the minimap in pixels.","order":11},"textOpacity":{"type":"number","default":0.6,"minimum":0,"maximum":1,"description":"The opacity used to render the line\'s text in the minimap.","order":12},"moveCursorOnMinimapClick":{"type":"boolean","default":false,"description":"Moves the cursor to the beginning of the target line when clicking on the minimap","order":13},"independentMinimapScroll":{"type":"boolean","title":"Independent Minimap Scroll On Mouse Wheel Events","default":false,"description":"When enabled, using the mouse wheel over the Minimap will make it scroll independently of the text editor. The Minimap will still sync with the editor whenever the editor is scrolled, but it will no longer relay the mouse wheel events to the editor.","order":14},"scrollSensitivity":{"type":"number","default":0.5,"description":"The scrolling speed when the `Independent Minimap Scroll On Mouse Wheel Events` setting is enabled.","order":15},"smoothScrolling":{"type":"boolean","default":false,"description":"Whether to offset the minimap canvas when scrolling to keep the scroll smooth. When `true` the minimap canvas will be offseted, resulting in a smoother scroll, but with the side-effect of a blurry minimap when the canvas is placed between pixels. When `false` the canvas will always stay at the same position, and will never look blurry, but the scroll will appear more jagged.","order":16},"createPluginInDevMode":{"type":"boolean","default":false,"order":17},"absoluteMode":{"type":"boolean","default":false,"description":"When enabled the text editor content will be able to flow below the minimap.","order":18},"adjustAbsoluteModeHeight":{"type":"boolean","default":false,"description":"When enabled and `Absolute Mode` is also enabled, the minimap height will be adjusted to only take the space required by the text editor content, leaving the space below triggering mouse events on the text editor. **Be aware this can have some impact on performances as the minimap canvases will be resized every time a change in the editor make its height change.**","order":19},"redrawDelay":{"type":"number","default":400,"minimum":0,"maximum":2000,"description":"Controls how often (in ms) the minimap should redraw itself after changing the text editor\'s contents. Setting this to 100ms or higher could dramatically improve editor responsiveness when working with large files. A value of 0 will cause the minimap to redraw itself immediately on each change.","order":20},"devicePixelRatioRounding":{"type":"boolean","default":true,"description":"Toggles the rounding of the devicePixelRatio in the minimap.","order":21},"useHardwareAcceleration":{"type":"boolean","default":true,"order":22},"scrollAnimation":{"type":"boolean","default":false,"description":"Enables animations when scrolling by clicking on the minimap.","order":23},"scrollAnimationDuration":{"type":"integer","default":300,"description":"The duration of scrolling animations when clicking on the minimap.","order":24},"maxTokensInOneLine":{"type":"integer","default":160,"description":"The maximum number of tokens that are rendered for each line.","order":25}}'),exports.config=yu;const bu={};exports.plugins=bu;const Su={},wu={};exports.registerPlugin=nn,exports.unregisterPlugin=rn,exports.togglePluginActivation=sn,exports.deactivateAllPlugins=on,exports.activatePlugin=ln,exports.deactivatePlugin=cn,exports.getPluginsOrder=dn;let xu=!1,Cu=!1,Eu=null,Tu=null,Du=null;const Mu=new ur;exports.emitter=Mu,exports.activate=()=>{xu||(Du=atom.commands.add("atom-workspace",{"minimap:toggle"(){fn()},async"minimap:generate-coffee-plugin"(){await gn("coffee")},async"minimap:generate-javascript-plugin"(){await gn("javascript")},async"minimap:generate-babel-plugin"(){await gn("babel")}}),Eu=new Map,Tu=new hr,xu=!0,atom.config.get("minimap.autoToggle")&&fn())},exports.minimapViewProvider=un,exports.deactivate=()=>{xu&&(on(),Eu&&Eu.forEach(((e,t)=>{e.destroy(),Eu.delete(t)})),Tu.dispose(),Tu=null,Du.dispose(),Du=null,Eu=void 0,Cu=!1,xu=!1)};var ku=e(yu);exports.getConfigSchema=pn,exports.toggle=fn,exports.onDidActivate=mn,exports.onDidDeactivate=vn,exports.onDidCreateMinimap=yn,exports.onDidAddPlugin=bn,exports.onDidRemovePlugin=Sn,exports.onDidActivatePlugin=wn,exports.onDidDeactivatePlugin=xn,exports.onDidChangePluginOrder=Cn,exports.minimapClass=En,exports.minimapForEditorElement=Tn,exports.minimapForEditor=Dn,exports.standAloneMinimapForEditor=Mn,exports.getActiveMinimap=kn,exports.observeMinimaps=Ln;const Lu={minimapViewProvider:un,getConfigSchema:pn,onDidActivate:mn,onDidDeactivate:vn,onDidCreateMinimap:yn,onDidAddPlugin:bn,onDidRemovePlugin:Sn,onDidActivatePlugin:wn,onDidDeactivatePlugin:xn,onDidChangePluginOrder:Cn,minimapClass:En,minimapForEditorElement:Tn,minimapForEditor:Dn,standAloneMinimapForEditor:Mn,getActiveMinimap:kn,observeMinimaps:Ln,registerPlugin:nn,unregisterPlugin:rn,togglePluginActivation:sn,deactivateAllPlugins:on,activatePlugin:ln,deactivatePlugin:cn,getPluginsOrder:dn};exports.provideMinimapServiceV1=()=>Lu,exports.$a7d4afabad3ac01364c7629a89eaa9d8$init=()=>ac,exports.$4a2375bcc1817d0a9f962e73140919e0$init=()=>ru; +function e(e){return e&&e.__esModule?e.default:e}function t(e){Object.defineProperty(e,"__esModule",{value:!0})}function i(e,t,i){Object.defineProperty(e,t,{get:i,enumerable:!0})}function n(e,t){return Object.keys(t).forEach((i=>{"default"!==i&&"__esModule"!==i&&Object.defineProperty(e,i,{enumerable:!0,get:()=>t[i]})})),e}function r(e,t){for(var i=0;t.length>i;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function s(e,t,i){return t&&r(e.prototype,t),i&&r(e,i),e}function o(){return br||(br=!0,Pn={},Pn=function(){function e(t){((e,t)=>{if(!(this instanceof t))throw new TypeError("Cannot call a class as a function")})(0,e),this.disposed=!1,this.disposalAction=t}return s(e,null,[{key:"isDisposable",value:e=>"function"==typeof(null!=e?e.dispose:void 0)}]),s(e,[{key:"dispose",value(){this.disposed||(this.disposed=!0,"function"==typeof this.disposalAction&&this.disposalAction(),this.disposalAction=null)}}]),e}()),Pn}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var i=0;t.length>i;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function c(e){if(null==In&&(In=o()),!In.isDisposable(e))throw new TypeError("Arguments to CompositeDisposable.add must have a .dispose() method")}function h(){return Sr||(Sr=!0,Hn={},Hn=function(){function e(){a(this,e),this.disposed=!1,this.disposables=new Set;var t=!0,i=!1,n=void 0;try{for(var r,s=arguments[Symbol.iterator]();!(t=(r=s.next()).done);t=!0)this.add(r.value)}catch(e){i=!0,n=e}finally{try{t||null==s.return||s.return()}finally{if(i)throw n}}}var t;return(t=[{key:"dispose",value(){this.disposed||(this.disposed=!0,this.disposables.forEach((e=>e.dispose())),this.disposables=null)}},{key:"add",value(){if(!this.disposed){var e=!0,t=!1,i=void 0;try{for(var n,r=arguments[Symbol.iterator]();!(e=(n=r.next()).done);e=!0){var s=n.value;c(s),this.disposables.add(s)}}catch(e){t=!0,i=e}finally{try{e||null==r.return||r.return()}finally{if(t)throw i}}}}},{key:"remove",value(e){this.disposed||this.disposables.delete(e)}},{key:"delete",value(e){this.remove(e)}},{key:"clear",value(){this.disposed||this.disposables.clear()}}])&&l(e.prototype,t),e}()),Hn}function d(e,t){for(var i=0;t.length>i;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function u(e,t,i){return t&&d(e.prototype,t),i&&d(e,i),e}function p(){Bn={},wr||(wr=!0,Nn={},Fn=o(),jn=h(),(Wn=function(){function e(){((e,t)=>{if(!(this instanceof t))throw new TypeError("Cannot call a class as a function")})(0,e),this.disposed=!1,this.clear()}return u(e,null,[{key:"onEventHandlerException",value(e){var t=this;return 0===this.exceptionHandlers.length&&(this.dispatch=this.exceptionHandlingDispatch),this.exceptionHandlers.push(e),new Fn((()=>{if(t.exceptionHandlers.splice(t.exceptionHandlers.indexOf(e),1),0===t.exceptionHandlers.length)return t.dispatch=t.simpleDispatch}))}},{key:"simpleDispatch",value:(e,t)=>e(t)},{key:"exceptionHandlingDispatch",value(e,t){try{return e(t)}catch(e){return this.exceptionHandlers.map((t=>t(e)))}}}]),u(e,[{key:"clear",value(){null!=this.subscriptions&&this.subscriptions.dispose(),this.subscriptions=new jn,this.handlersByEventName={}}},{key:"dispose",value(){this.subscriptions.dispose(),this.handlersByEventName=null,this.disposed=!0}},{key:"on",value(e,t,i){var n=this;if(null==i&&(i=!1),this.disposed)throw Error("Emitter has been disposed");if("function"!=typeof t)throw Error("Handler must be a function");this.handlersByEventName[e]?i?this.handlersByEventName[e].unshift(t):this.handlersByEventName[e].push(t):this.handlersByEventName[e]=[t];var r=new Fn((()=>(n.subscriptions.remove(r),n.off(e,t))));return this.subscriptions.add(r),r}},{key:"once",value(e,t,i){null==i&&(i=!1);var n=this.on(e,(e=>(n.dispose(),t(e))),i);return n}},{key:"preempt",value(e,t){return this.on(e,t,!0)}},{key:"off",value(e,t){if(!this.disposed){var i=this.handlersByEventName[e];if(i){var n=i.indexOf(t);0>n||i.splice(n,1),0===i.length&&delete this.handlersByEventName[e]}}}},{key:"emit",value(e,t){var i=this.handlersByEventName&&this.handlersByEventName[e];if(i)for(var n=i.slice(),r=0;n.length>r;r++)this.constructor.dispatch(n[r],t)}},{key:"emitAsync",value(e,t){var i=this,n=this.handlersByEventName&&this.handlersByEventName[e];if(n){var r=n.map((e=>i.constructor.dispatch(e,t)));return Promise.all(r).then((()=>{}))}return Promise.resolve()}},{key:"getEventNames",value(){return Object.keys(this.handlersByEventName)}},{key:"listenerCountForEventName",value(e){var t=this.handlersByEventName[e];return null==t?0:t.length}},{key:"getTotalListenerCount",value(){for(var e=0,t=Object.keys(this.handlersByEventName),i=0;t.length>i;i++)e+=this.handlersByEventName[t[i]].length;return e}}]),e}()).dispatch=Wn.simpleDispatch,Wn.exceptionHandlers=[],Nn=Wn),Bn.Emitter=Nn,qn=o(),Bn.Disposable=qn,zn=h(),Bn.CompositeDisposable=zn}function f(){var e,t,i,n;Un={},yr||(yr=!0,_n={},_n=function(){function e(e,t,i){this.message=e,this.fileName=t,this.lineNumber=i,this.callCount=0,this.stackCount=0,this.stacks={},this.stackCallCounts={}}return e.getFunctionNameFromCallsite=e=>{},e.deserialize=t=>{var i,n,r,s,o;for(r=t.stacks,i=new e(t.message,t.fileName,t.lineNumber),s=0,o=r.length;o>s;s++)i.addStack(n=r[s],n.metadata);return i},e.prototype.getFunctionNameFromCallsite=e=>{var t,i,n;return null!=e.functionName?e.functionName:e.isToplevel()?null!=(t=e.getFunctionName())?t:"":e.isConstructor()?"new "+e.getFunctionName():e.getMethodName()&&!e.getFunctionName()?e.getMethodName():e.getTypeName()+"."+(null!=(i=null!=(n=e.getMethodName())?n:e.getFunctionName())?i:"")},e.prototype.getLocationFromCallsite=function(e){return null==e?"unknown":null!=e.location?e.location:e.isNative()?"native":e.isEval()?"eval at "+this.getLocationFromCallsite(e.getEvalOrigin()):e.getFileName()+":"+e.getLineNumber()+":"+e.getColumnNumber()},e.prototype.getFileNameFromCallSite=e=>{var t;return null!=(t=e.fileName)?t:e.getFileName()},e.prototype.getOriginName=function(){return this.originName},e.prototype.getMessage=function(){return this.message},e.prototype.getStacks=function(){var e,t,i,n,r;for(e in i=[],r=this.stacks)(t=this.parseStack(n=r[e])).callCount=this.stackCallCounts[e],t.metadata=n.metadata,i.push(t);return i},e.prototype.getStackCount=function(){return this.stackCount},e.prototype.getCallCount=function(){return this.callCount},e.prototype.addStack=function(e,t){var i,n,r;return null==this.originName&&(this.originName=this.getFunctionNameFromCallsite(e[0])),null==this.fileName&&(this.fileName=this.getFileNameFromCallSite(e[0])),null==this.lineNumber&&(this.lineNumber="function"==typeof(n=e[0]).getLineNumber?n.getLineNumber():void 0),this.callCount++,e.metadata=t,i=this.getLocationFromCallsite(e[1]),null==this.stacks[i]&&(this.stacks[i]=e,this.stackCount++),null==(r=this.stackCallCounts)[i]&&(r[i]=0),this.stackCallCounts[i]++},e.prototype.parseStack=function(e){return e.map((t=this,e=>({functionName:t.getFunctionNameFromCallsite(e),location:t.getLocationFromCallsite(e),fileName:t.getFileNameFromCallSite(e)})));var t},e.prototype.serialize=function(){return{message:this.getMessage(),lineNumber:this.lineNumber,fileName:this.fileName,stacks:this.getStacks()}},e}()),e=_n,null==gr.__grim__&&(t=(xr||(xr=!0,p()),Bn).Emitter,n=gr.__grim__={deprecations:{},emitter:new t,includeDeprecatedAPIs:!0,getDeprecations(){var e,t,i,r,s,o,a;for(r in e=[],a=n.deprecations)for(s in t=a[r])for(o in i=t[s])e.push(i[o]);return e},getDeprecationsLength(){return this.getDeprecations().length},clearDeprecations(){n.deprecations={}},logDeprecations(){var e,t,i,n;for((t=this.getDeprecations()).sort(((e,t)=>t.getCallCount()-e.getCallCount())),console.warn("\nCalls to deprecated functions\n-----------------------------"),i=0,n=t.length;n>i;i++)console.warn("("+(e=t[i]).getCallCount()+") "+e.getOriginName()+" : "+e.getMessage(),e)},deprecate(t,r){var s,o,a,l,c,h,d,u,p,f,g,m,v;h=Error.stackTraceLimit;try{Error.stackTraceLimit=7,u=(u=null!=(m="function"==typeof(a=Error()).getRawStack?a.getRawStack():void 0)?m:i(a)).slice(1)}finally{Error.stackTraceLimit=h}l=(o=u[0]).getFileName(),c=o.getLineNumber(),d=null!=(v=null!=r?r.packageName:void 0)?v:"",null==(p=n.deprecations)[l]&&(p[l]={}),null==(f=n.deprecations[l])[c]&&(f[c]={}),null==(g=n.deprecations[l][c])[d]&&(g[d]=new e(t)),(s=n.deprecations[l][c][d]).addStack(u,r),n.emitter.emit("updated",s)},addSerializedDeprecation(t){var i,r,s,o,a,l,c,h,d,u,p,f,g,m,v;for(o=(i=e.deserialize(t)).getMessage(),r=i.fileName,s=i.lineNumber,a=null!=(g=null!=(m=(c=i.getStacks())[0])&&null!=(v=m.metadata)?v.packageName:void 0)?g:"",null==(h=n.deprecations)[r]&&(h[r]={}),null==(d=n.deprecations[r])[s]&&(d[s]={}),null==(u=n.deprecations[r][s])[a]&&(u[a]=new e(o,r,s)),i=n.deprecations[r][s][a],p=0,f=c.length;f>p;p++)i.addStack(l=c[p],l.metadata);n.emitter.emit("updated",i)},on(e,t){return n.emitter.on(e,t)}}),i=e=>{var t,n;return t=Error.prepareStackTrace,Error.prepareStackTrace=(e,t)=>t,Error.captureStackTrace(e,i),n=e.stack,Error.prepareStackTrace=t,n},Un=gr.__grim__}function g(){return Tr||(Tr=!0,$n={},function(){var e,t,i,n;for(n in $n=i=function(){function i(){"function"==typeof this.extended&&this.extended()}return i.includeInto=function(t){var i,n,r;for(i in this.extend(t.prototype),this)n=this[i],-1===e.indexOf(i)&&(t.hasOwnProperty(i)||(t[i]=n));return null!=(r=this.included)?r.call(t):void 0},i.extend=function(e){var i,n,r,s,o;for(n=0,r=(s=Object.getOwnPropertyNames(this.prototype)).length;r>n;n++)-1===t.indexOf(i=s[n])&&(e.hasOwnProperty(i)||(e[i]=this.prototype[i]));return null!=(o=this.prototype.extended)?o.call(e):void 0},i}(),e=["__super__"],i)e.push(n);t=["constructor","extended"]}()),$n}function m(){var e;return Mr||(Mr=!0,Qn={},e=g(),Qn=class t extends e{static parents(e,t="*"){var i;return i=[],this.eachParent(e,(e=>{if("function"==typeof e.matches?e.matches(t):void 0)return i.push(e)})),i}static eachParent(e,t){var i,n;for(null!=(i=e.parentNode)&&t(i),n=[];i=i.parentNode;)n.push(null!=i?t(i):void 0);return n}parents(e="*"){return t.parents(this,e)}queryParentSelectorAll(e){if(null==e)throw Error("::queryParentSelectorAll requires a valid selector as argument");return this.parents(e)}queryParentSelector(e){if(null==e)throw Error("::queryParentSelector requires a valid selector as argument");return this.queryParentSelectorAll(e)[0]}eachParent(e){return t.eachParent(this,e)}}),Qn}function v(){var e,t;return kr||(kr=!0,Kn={},t=g(),({Disposable:e}=dr),Kn=class extends t{addDisposableEventListener(t,i,n,r){return t.addEventListener(i,n,r),new e((()=>t.removeEventListener(i,n)))}}),Kn}function y(){var e={},t=0,i=0,n=0;return{add(r,s){s||(s=r,r=0),r>i?i=r:n>r&&(n=r),e[r]||(e[r]=[]),e[r].push(s),t++},process(){for(var t=n;i>=t;t++)for(var r=e[t],s=0;r.length>s;s++)(0,r[s])()},size:()=>t}}function b(e){return e._erd}function S(e){return Array.isArray(e)||void 0!==e.length}function w(e){if(Array.isArray(e))return e;var t=[];return Hr(e,(e=>{t.push(e)})),t}function x(e){return e&&1===e.nodeType}function E(e,t,i){var n=e[t];return null==n&&void 0!==i?i:n}function C(){return hc||(hc=!0,Vr="1.11.0",i(Ur={},"VERSION",(()=>Vr)),$r="object"==typeof self&&self.self===self&&self||"object"==typeof gr&&gr.global===gr&&gr||Function("","return this")()||{},i(Ur,"root",(()=>$r)),Qr=Array.prototype,Kr=Object.prototype,i(Ur,"ObjProto",(()=>Kr)),i(Ur,"ArrayProto",(()=>Qr)),Zr="undefined"!=typeof Symbol?Symbol.prototype:null,i(Ur,"SymbolProto",(()=>Zr)),Yr=Qr.push,Gr=Qr.slice,Xr=Kr.toString,Jr=Kr.hasOwnProperty,i(Ur,"hasOwnProperty",(()=>Jr)),i(Ur,"toString",(()=>Xr)),i(Ur,"slice",(()=>Gr)),i(Ur,"push",(()=>Yr)),es="undefined"!=typeof ArrayBuffer,i(Ur,"supportsArrayBuffer",(()=>es)),ts=Array.isArray,is=Object.keys,ns=Object.create,rs=es&&ArrayBuffer.isView,i(Ur,"nativeIsView",(()=>rs)),i(Ur,"nativeCreate",(()=>ns)),i(Ur,"nativeKeys",(()=>is)),i(Ur,"nativeIsArray",(()=>ts)),ss=isNaN,os=isFinite,i(Ur,"_isFinite",(()=>os)),i(Ur,"_isNaN",(()=>ss)),as=!{toString:null}.propertyIsEnumerable("toString"),i(Ur,"hasEnumBug",(()=>as)),ls=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],i(Ur,"nonEnumerableProps",(()=>ls)),cs=9007199254740991,i(Ur,"MAX_ARRAY_INDEX",(()=>cs))),Ur}function T(e,t){return t=null==t?e.length-1:+t,function(){for(var i=Math.max(arguments.length-t,0),n=Array(i),r=0;i>r;r++)n[r]=arguments[r+t];switch(t){case 0:return e.call(this,n);case 1:return e.call(this,arguments[0],n);case 2:return e.call(this,arguments[0],arguments[1],n)}var s=Array(t+1);for(r=0;t>r;r++)s[r]=arguments[r];return s[t]=n,e.apply(this,s)}}function M(){return dc||(dc=!0,i(hs={},"default",(()=>T))),hs}function k(e){var t=typeof e;return"function"===t||"object"===t&&!!e}function D(){return uc||(uc=!0,i(ds={},"default",(()=>k))),ds}function L(e){return null===e}function A(e){return void 0===e}function O(e){return!0===e||!1===e||"[object Boolean]"===Xr.call(e)}function R(){return gc||(gc=!0,us={},C(),i(us,"default",(()=>O))),us}function _(e){return!(!e||1!==e.nodeType)}function P(e){return t=>Xr.call(t)==="[object "+e+"]"}function H(){return vc||(vc=!0,ps={},C(),i(ps,"default",(()=>P))),ps}function I(){return yc||(yc=!0,fs={},H(),gs=P("String"),i(fs,"default",(()=>gs))),fs}function N(){return bc||(bc=!0,ms={},H(),vs=P("Number"),i(ms,"default",(()=>vs))),ms}function F(){return Ec||(Ec=!0,Cs={},H(),Ts=P("Symbol"),i(Cs,"default",(()=>Ts))),Cs}function j(){return Lc||(Lc=!0,Is={},H(),Ns=P("DataView"),i(Is,"default",(()=>Ns))),Is}function W(){return Ac||(Ac=!0,Fs={},C(),H(),js=ts||P("Array"),i(Fs,"default",(()=>js))),Fs}function B(){return Oc||(Oc=!0,Ws={},H(),C(),Bs=P("Function"),qs=$r.document&&$r.document.childNodes,"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof qs&&(Bs=e=>"function"==typeof e||!1),zs=Bs,i(Ws,"default",(()=>zs))),Ws}function q(e,t){return null!=e&&Jr.call(e,t)}function z(){return Rc||(Rc=!0,Us={},C(),i(Us,"default",(()=>q))),Us}function U(){return _c||(_c=!0,Vs={},H(),z(),$s=P("Arguments"),function(){$s(arguments)||($s=e=>q(e,"callee"))}(),Qs=$s,i(Vs,"default",(()=>Qs))),Vs}function V(e){return!Ts(e)&&os(e)&&!isNaN(parseFloat(e))}function $(e){return vs(e)&&ss(e)}function Q(){return Hc||(Hc=!0,Zs={},C(),N(),i(Zs,"default",(()=>$))),Zs}function K(e){return()=>e}function Z(){return Ic||(Ic=!0,i(Ys={},"default",(()=>K))),Ys}function Y(e){return t=>{var i=e(t);return"number"==typeof i&&i>=0&&cs>=i}}function G(){return Nc||(Nc=!0,Gs={},C(),i(Gs,"default",(()=>Y))),Gs}function X(e){return t=>null==t?void 0:t[e]}function J(){return Fc||(Fc=!0,i(Xs={},"default",(()=>X))),Xs}function ee(){return jc||(jc=!0,Js={},J(),eo=X("byteLength"),i(Js,"default",(()=>eo))),Js}function te(e){return rs?rs(e)&&!Ns(e):io(e)&&ro.test(Xr.call(e))}function ie(){return Bc||(Bc=!0,no={},C(),j(),Z(),Wc||(Wc=!0,to={},G(),ee(),io=Y(eo),i(to,"default",(()=>io))),ro=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/,so=es?te:K(!1),i(no,"default",(()=>so))),no}function ne(){return qc||(qc=!0,oo={},J(),ao=X("length"),i(oo,"default",(()=>ao))),oo}function re(){return zc||(zc=!0,lo={},G(),ne(),co=Y(ao),i(lo,"default",(()=>co))),lo}function se(e,t){t=(e=>{for(var t={},i=e.length,n=0;i>n;++n)t[e[n]]=!0;return{contains(e){return t[e]},push(i){return t[i]=!0,e.push(i)}}})(t);var i=ls.length,n=e.constructor,r=zs(n)&&n.prototype||Kr,s="constructor";for(q(e,s)&&!t.contains(s)&&t.push(s);i--;)(s=ls[i])in e&&e[s]!==r[s]&&!t.contains(s)&&t.push(s)}function oe(){return Uc||(Uc=!0,ho={},C(),B(),z(),i(ho,"default",(()=>se))),ho}function ae(e){if(!k(e))return[];if(is)return is(e);var t=[];for(var i in e)q(e,i)&&t.push(i);return as&&se(e,t),t}function le(){return Vc||(Vc=!0,uo={},D(),C(),z(),oe(),i(uo,"default",(()=>ae))),uo}function ce(e){return null==e||(co(e)&&(js(e)||gs(e)||Qs(e))?0===e.length:0===ae(e).length)}function he(e,t){var i=ae(t),n=i.length;if(null==e)return!n;for(var r=Object(e),s=0;n>s;s++){var o=i[s];if(t[o]!==r[o]||!(o in r))return!1}return!0}function de(){return Qc||(Qc=!0,fo={},le(),i(fo,"default",(()=>he))),fo}function ue(e){return e instanceof ue?e:this instanceof ue?void(this._wrapped=e):new ue(e)}function pe(){return Kc||(Kc=!0,go={},C(),i(go,"default",(()=>ue)),ue.VERSION=Vr,ue.prototype.valueOf=ue.prototype.toJSON=ue.prototype.value=function(){return this._wrapped},ue.prototype.toString=function(){return this._wrapped+""}),go}function fe(e,t,i,n){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return!1;if(e!=e)return t!=t;var r=typeof e;return("function"===r||"object"===r||"object"==typeof t)&&ge(e,t,i,n)}function ge(e,t,i,n){e instanceof ue&&(e=e._wrapped),t instanceof ue&&(t=t._wrapped);var r=Xr.call(e);if(r!==Xr.call(t))return!1;switch(r){case"[object RegExp]":case"[object String]":return""+e==""+t;case"[object Number]":return+e!=+e?+t!=+t:0==+e?1/+e==1/t:+e==+t;case"[object Date]":case"[object Boolean]":return+e==+t;case"[object Symbol]":return Zr.valueOf.call(e)===Zr.valueOf.call(t);case"[object ArrayBuffer]":return ge(new DataView(e),new DataView(t),i,n);case"[object DataView]":var s=eo(e);if(s!==eo(t))return!1;for(;s--;)if(e.getUint8(s)!==t.getUint8(s))return!1;return!0}if(so(e))return ge(new DataView(e.buffer),new DataView(t.buffer),i,n);var o="[object Array]"===r;if(!o){if("object"!=typeof e||"object"!=typeof t)return!1;var a=e.constructor,l=t.constructor;if(a!==l&&!(zs(a)&&a instanceof a&&zs(l)&&l instanceof l)&&"constructor"in e&&"constructor"in t)return!1}n=n||[];for(var c=(i=i||[]).length;c--;)if(i[c]===e)return n[c]===t;if(i.push(e),n.push(t),o){if((c=e.length)!==t.length)return!1;for(;c--;)if(!fe(e[c],t[c],i,n))return!1}else{var h,d=ae(e);if(c=d.length,ae(t).length!==c)return!1;for(;c--;)if(!q(t,h=d[c])||!fe(e[h],t[h],i,n))return!1}return i.pop(),n.pop(),!0}function me(e,t){return fe(e,t)}function ve(e){if(!k(e))return[];var t=[];for(var i in e)t.push(i);return as&&se(e,t),t}function ye(){return Yc||(Yc=!0,vo={},D(),C(),oe(),i(vo,"default",(()=>ve))),vo}function be(e){for(var t=ae(e),i=t.length,n=Array(i),r=0;i>r;r++)n[r]=e[t[r]];return n}function Se(){return Gc||(Gc=!0,yo={},le(),i(yo,"default",(()=>be))),yo}function we(e){for(var t=ae(e),i=t.length,n=Array(i),r=0;i>r;r++)n[r]=[t[r],e[t[r]]];return n}function xe(e){for(var t={},i=ae(e),n=0,r=i.length;r>n;n++)t[e[i[n]]]=i[n];return t}function Ee(){return Jc||(Jc=!0,So={},le(),i(So,"default",(()=>xe))),So}function Ce(e){var t=[];for(var i in e)zs(e[i])&&t.push(i);return t.sort()}function Te(){return eh||(eh=!0,wo={},B(),i(wo,"default",(()=>Ce))),wo}function Me(e,t){return function(i){var n=arguments.length;if(t&&(i=Object(i)),2>n||null==i)return i;for(var r=1;n>r;r++)for(var s=arguments[r],o=e(s),a=o.length,l=0;a>l;l++){var c=o[l];t&&void 0!==i[c]||(i[c]=s[c])}return i}}function ke(){return th||(th=!0,i(xo={},"default",(()=>Me))),xo}function De(){return ih||(ih=!0,Eo={},ke(),ye(),Co=Me(ve),i(Eo,"default",(()=>Co))),Eo}function Le(){return nh||(nh=!0,To={},ke(),le(),Mo=Me(ae),i(To,"default",(()=>Mo))),To}function Ae(){return rh||(rh=!0,ko={},ke(),ye(),Do=Me(ve,!0),i(ko,"default",(()=>Do))),ko}function Oe(e){if(!k(e))return{};if(ns)return ns(e);var t=()=>{};t.prototype=e;var i=new t;return t.prototype=null,i}function Re(){return sh||(sh=!0,Lo={},D(),C(),i(Lo,"default",(()=>Oe))),Lo}function _e(e,t){var i=Oe(e);return t&&Mo(i,t),i}function Pe(e){return k(e)?js(e)?e.slice():Co({},e):e}function He(){return ah||(ah=!0,Oo={},D(),W(),De(),i(Oo,"default",(()=>Pe))),Oo}function Ie(e,t){return t(e),e}function Ne(e,t){if(!js(t))return q(e,t);for(var i=t.length,n=0;i>n;n++){var r=t[n];if(null==e||!Jr.call(e,r))return!1;e=e[r]}return!!i}function Fe(e){return e}function je(){return hh||(hh=!0,i(_o={},"default",(()=>Fe))),_o}function We(e){return e=Mo({},e),t=>he(t,e)}function Be(){return dh||(dh=!0,Po={},Le(),de(),i(Po,"default",(()=>We))),Po}function qe(e,t){for(var i=t.length,n=0;i>n;n++){if(null==e)return;e=e[t[n]]}return i?e:void 0}function ze(){return uh||(uh=!0,i(Ho={},"default",(()=>qe))),Ho}function Ue(e){return js(e)?t=>qe(t,e):X(e)}function Ve(){return ph||(ph=!0,Io={},W(),J(),ze(),i(Io,"default",(()=>Ue))),Io}function $e(e,t,i){if(void 0===t)return e;switch(null==i?3:i){case 1:return i=>e.call(t,i);case 3:return(i,n,r)=>e.call(t,i,n,r);case 4:return(i,n,r,s)=>e.call(t,i,n,r,s)}return function(){return e.apply(t,arguments)}}function Qe(){return fh||(fh=!0,i(No={},"default",(()=>$e))),No}function Ke(e,t,i){return null==e?Fe:zs(e)?$e(e,t,i):k(e)&&!js(e)?We(e):Ue(e)}function Ze(){return gh||(gh=!0,Fo={},je(),B(),D(),W(),Be(),Ve(),Qe(),i(Fo,"default",(()=>Ke))),Fo}function Ye(e,t){return Ke(e,t,1/0)}function Ge(){return mh||(mh=!0,jo={},pe(),Ze(),i(jo,"default",(()=>Ye)),ue.iteratee=Ye),jo}function Xe(e,t,i){return ue.iteratee!==Ye?ue.iteratee(e,t):Ke(e,t,i)}function Je(){return vh||(vh=!0,Wo={},pe(),Ze(),Ge(),i(Wo,"default",(()=>Xe))),Wo}function et(e,t,i){t=Xe(t,i);for(var n=ae(e),r=n.length,s={},o=0;r>o;o++){var a=n[o];s[a]=t(e[a],a,e)}return s}function tt(){}function it(e){return null==e?()=>{}:t=>js(t)?qe(e,t):e[t]}function nt(e,t,i){var n=Array(Math.max(0,e));t=$e(t,i,1);for(var r=0;e>r;r++)n[r]=t(r);return n}function rt(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))}function st(){return xh||(xh=!0,i(Uo={},"default",(()=>rt))),Uo}function ot(){return Eh||(Eh=!0,$o=Date.now||(()=>(new Date).getTime()),i(Vo={},"default",(()=>$o))),Vo}function at(e){var t=t=>e[t],i="(?:"+ae(e).join("|")+")",n=RegExp(i),r=RegExp(i,"g");return e=>n.test(e=null==e?"":""+e)?e.replace(r,t):e}function lt(){return Ch||(Ch=!0,Qo={},le(),i(Qo,"default",(()=>at))),Qo}function ct(){return Th||(Th=!0,Zo={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},i(Ko={},"default",(()=>Zo))),Ko}function ht(){return Dh||(Dh=!0,ea={},lt(),kh||(kh=!0,Xo={},Ee(),ct(),Jo=xe(Zo),i(Xo,"default",(()=>Jo))),ta=at(Jo),i(ea,"default",(()=>ta))),ea}function dt(){return Lh||(Lh=!0,ia={},pe(),na=ue.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},i(ia,"default",(()=>na))),ia}function ut(e){return"\\"+oa[e]}function pt(e,t,i){!t&&i&&(t=i),t=Do({},t,ue.templateSettings);var n,r=RegExp([(t.escape||sa).source,(t.interpolate||sa).source,(t.evaluate||sa).source].join("|")+"|$","g"),s=0,o="__p+='";e.replace(r,((t,i,n,r,a)=>(o+=e.slice(s,a).replace(aa,ut),s=a+t.length,i?o+="'+\n((__t=("+i+"))==null?'':_.escape(__t))+\n'":n?o+="'+\n((__t=("+n+"))==null?'':__t)+\n'":r&&(o+="';\n"+r+"\n__p+='"),t))),o+="';\n",t.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{n=Function(t.variable||"obj","_",o)}catch(e){throw e.source=o,e}var a=function(e){return n.call(this,e,ue)};return a.source="function("+(t.variable||"obj")+"){\n"+o+"}",a}function ft(e,t,i){js(t)||(t=[t]);var n=t.length;if(!n)return zs(i)?i.call(e):i;for(var r=0;n>r;r++){var s=null==e?void 0:e[t[r]];void 0===s&&(s=i,r=n),e=zs(s)?s.call(e):s}return e}function gt(e){var t=++ca+"";return e?e+t:t}function mt(e){var t=ue(e);return t._chain=!0,t}function vt(e,t,i,n,r){if(!(n instanceof t))return e.apply(i,r);var s=Oe(e.prototype),o=e.apply(s,r);return k(o)?o:s}function yt(){return Ph||(Ph=!0,da={},Re(),D(),i(da,"default",(()=>vt))),da}function bt(){return Hh||(Hh=!0,ua={},M(),yt(),pe(),(pa=T((function(e,t){var i=pa.placeholder,n=function(){for(var r=0,s=t.length,o=Array(s),a=0;s>a;a++)o[a]=t[a]===i?arguments[r++]:t[a];for(;arguments.length>r;)o.push(arguments[r++]);return vt(e,n,this,this,o)};return n}))).placeholder=ue,i(ua,"default",(()=>pa))),ua}function St(){return Ih||(Ih=!0,fa={},M(),B(),yt(),ga=T((function(e,t,i){if(!zs(e))throw new TypeError("Bind must be called on a function");var n=T((function(r){return vt(e,n,t,this,i.concat(r))}));return n})),i(fa,"default",(()=>ga))),fa}function wt(e,t,i,n){if(n=n||[],t||0===t){if(0>=t)return n.concat(e)}else t=1/0;for(var r=n.length,s=0,o=ao(e);o>s;s++){var a=e[s];if(co(a)&&(js(a)||Qs(a)))if(t>1)wt(a,t-1,i,n),r=n.length;else for(var l=0,c=a.length;c>l;)n[r++]=a[l++];else i||(n[r++]=a)}return n}function xt(){return Nh||(Nh=!0,ma={},ne(),re(),W(),U(),i(ma,"default",(()=>wt))),ma}function Et(e,t){var i=function(n){var r=i.cache,s=""+(t?t.apply(this,arguments):n);return q(r,s)||(r[s]=e.apply(this,arguments)),r[s]};return i.cache={},i}function Ct(){return Wh||(Wh=!0,Sa={},M(),wa=T(((e,t,i)=>setTimeout((()=>e.apply(null,i)),t))),i(Sa,"default",(()=>wa))),Sa}function Tt(e,t,i){var n,r,s,o,a=0;i||(i={});var l=()=>{a=!1===i.leading?0:$o(),n=null,o=e.apply(r,s),n||(r=s=null)},c=function(){var c=$o();a||!1!==i.leading||(a=c);var h=t-(c-a);return r=this,s=arguments,0>=h||h>t?(n&&(clearTimeout(n),n=null),a=c,o=e.apply(r,s),n||(r=s=null)):n||!1===i.trailing||(n=setTimeout(l,h)),o};return c.cancel=()=>{clearTimeout(n),a=0,n=r=s=null},c}function Mt(e,t,i){var n,r,s=(t,i)=>{n=null,i&&(r=e.apply(t,i))},o=T((function(o){if(n&&clearTimeout(n),i){var a=!n;n=setTimeout(s,t),a&&(r=e.apply(this,o))}else n=wa(s,t,this,o);return r}));return o.cancel=()=>{clearTimeout(n),n=null},o}function kt(e,t){return pa(t,e)}function Dt(e){return function(){return!e.apply(this,arguments)}}function Lt(){return Vh||(Vh=!0,i(ka={},"default",(()=>Dt))),ka}function At(){var e=arguments,t=e.length-1;return function(){for(var i=t,n=e[t].apply(this,arguments);i--;)n=e[i].call(this,n);return n}}function Ot(e,t){return function(){if(1>--e)return t.apply(this,arguments)}}function Rt(e,t){var i;return function(){return--e>0&&(i=t.apply(this,arguments)),e>1||(t=null),i}}function _t(){return Kh||(Kh=!0,i(Da={},"default",(()=>Rt))),Da}function Pt(e,t,i){t=Xe(t,i);for(var n,r=ae(e),s=0,o=r.length;o>s;s++)if(t(e[n=r[s]],n,e))return n}function Ht(){return Yh||(Yh=!0,Oa={},Je(),le(),i(Oa,"default",(()=>Pt))),Oa}function It(e){return(t,i,n)=>{i=Xe(i,n);for(var r=ao(t),s=e>0?0:r-1;s>=0&&r>s;s+=e)if(i(t[s],s,t))return s;return-1}}function Nt(){return Gh||(Gh=!0,Ra={},Je(),ne(),i(Ra,"default",(()=>It))),Ra}function Ft(){return Xh||(Xh=!0,_a={},Nt(),Pa=It(1),i(_a,"default",(()=>Pa))),_a}function jt(){return Jh||(Jh=!0,Ha={},Nt(),Ia=It(-1),i(Ha,"default",(()=>Ia))),Ha}function Wt(e,t,i,n){for(var r=(i=Xe(i,n,1))(t),s=0,o=ao(e);o>s;){var a=Math.floor((s+o)/2);i(e[a])Wt))),Na}function qt(e,t,i){return(n,r,s)=>{var o=0,a=ao(n);if("number"==typeof s)e>0?o=0>s?Math.max(s+a,o):s:a=0>s?s+a+1:Math.min(s+1,a);else if(i&&s&&a)return n[s=i(n,r)]===r?s:-1;if(r!=r)return 0>(s=t(Gr.call(n,o,a),$))?-1:s+o;for(s=e>0?o:a-1;s>=0&&a>s;s+=e)if(n[s]===r)return s;return-1}}function zt(){return td||(td=!0,Fa={},ne(),C(),Q(),i(Fa,"default",(()=>qt))),Fa}function Ut(){return id||(id=!0,ja={},Bt(),Ft(),zt(),Wa=qt(1,Pa,Wt),i(ja,"default",(()=>Wa))),ja}function Vt(e,t,i){var n=(co(e)?Pa:Pt)(e,t,i);if(void 0!==n&&-1!==n)return e[n]}function $t(){return rd||(rd=!0,za={},re(),Ft(),Ht(),i(za,"default",(()=>Vt))),za}function Qt(e,t){return Vt(e,We(t))}function Kt(e,t,i){var n,r;if(t=$e(t,i),co(e))for(n=0,r=e.length;r>n;n++)t(e[n],n,e);else{var s=ae(e);for(n=0,r=s.length;r>n;n++)t(e[s[n]],s[n],e)}return e}function Zt(){return od||(od=!0,Va={},Qe(),re(),le(),i(Va,"default",(()=>Kt))),Va}function Yt(e,t,i){t=Xe(t,i);for(var n=!co(e)&&ae(e),r=(n||e).length,s=Array(r),o=0;r>o;o++){var a=n?n[o]:o;s[o]=t(e[a],a,e)}return s}function Gt(){return ad||(ad=!0,$a={},Je(),re(),le(),i($a,"default",(()=>Yt))),$a}function Xt(e){var t=(t,i,n,r)=>{var s=!co(t)&&ae(t),o=(s||t).length,a=e>0?0:o-1;for(r||(n=t[s?s[a]:a],a+=e);a>=0&&o>a;a+=e){var l=s?s[a]:a;n=i(n,t[l],l,t)}return n};return function(e,i,n,r){var s=arguments.length>=3;return t(e,$e(i,r,4),n,s)}}function Jt(){return ld||(ld=!0,Qa={},re(),le(),Qe(),i(Qa,"default",(()=>Xt))),Qa}function ei(e,t,i){var n=[];return t=Xe(t,i),Kt(e,((e,i,r)=>{t(e,i,r)&&n.push(e)})),n}function ti(){return dd||(dd=!0,Xa={},Je(),Zt(),i(Xa,"default",(()=>ei))),Xa}function ii(e,t,i){return ei(e,Dt(Xe(t)),i)}function ni(e,t,i){t=Xe(t,i);for(var n=!co(e)&&ae(e),r=(n||e).length,s=0;r>s;s++){var o=n?n[s]:s;if(!t(e[o],o,e))return!1}return!0}function ri(e,t,i){t=Xe(t,i);for(var n=!co(e)&&ae(e),r=(n||e).length,s=0;r>s;s++){var o=n?n[s]:s;if(t(e[o],o,e))return!0}return!1}function si(e,t,i,n){return co(e)||(e=be(e)),("number"!=typeof i||n)&&(i=0),Wa(e,t,i)>=0}function oi(){return gd||(gd=!0,il={},re(),Se(),Ut(),i(il,"default",(()=>si))),il}function ai(e,t){return Yt(e,Ue(t))}function li(){return vd||(vd=!0,sl={},Gt(),Ve(),i(sl,"default",(()=>ai))),sl}function ci(e,t){return ei(e,We(t))}function hi(e,t,i){var n,r,s=-1/0,o=-1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var a=0,l=(e=co(e)?e:be(e)).length;l>a;a++)null!=(n=e[a])&&n>s&&(s=n);else t=Xe(t,i),Kt(e,((e,i,n)=>{((r=t(e,i,n))>o||r===-1/0&&s===-1/0)&&(s=e,o=r)}));return s}function di(){return bd||(bd=!0,al={},re(),Se(),Je(),Zt(),i(al,"default",(()=>hi))),al}function ui(e,t,i){var n,r,s=1/0,o=1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var a=0,l=(e=co(e)?e:be(e)).length;l>a;a++)null!=(n=e[a])&&s>n&&(s=n);else t=Xe(t,i),Kt(e,((e,i,n)=>{r=t(e,i,n),(o>r||r===1/0&&s===1/0)&&(s=e,o=r)}));return s}function pi(e,t,i){if(null==t||i)return co(e)||(e=be(e)),e[rt(e.length-1)];var n=co(e)?Pe(e):be(e),r=ao(n);t=Math.max(Math.min(t,r),0);for(var s=r-1,o=0;t>o;o++){var a=rt(o,s),l=n[o];n[o]=n[a],n[a]=l}return n.slice(0,t)}function fi(){return wd||(wd=!0,cl={},re(),He(),Se(),ne(),st(),i(cl,"default",(()=>pi))),cl}function gi(e){return pi(e,1/0)}function mi(e,t,i){var n=0;return t=Xe(t,i),ai(Yt(e,((e,i,r)=>({value:e,index:n++,criteria:t(e,i,r)}))).sort(((e,t)=>{var i=e.criteria,n=t.criteria;if(i!==n){if(i>n||void 0===i)return 1;if(n>i||void 0===n)return-1}return e.index-t.index})),"value")}function vi(e,t){return(i,n,r)=>{var s=t?[[],[]]:{};return n=Xe(n,r),Kt(i,((t,r)=>{var o=n(t,r,i);e(s,t,o)})),s}}function yi(){return Cd||(Cd=!0,ul={},Je(),Zt(),i(ul,"default",(()=>vi))),ul}function bi(e){return e?js(e)?Gr.call(e):gs(e)?e.match(xl):co(e)?Yt(e,Fe):be(e):[]}function Si(e){return null==e?0:co(e)?e.length:ae(e).length}function wi(e,t,i){return t in i}function xi(){return Rd||(Rd=!0,Cl={},M(),B(),Qe(),ye(),Od||(Od=!0,i({},"default",(()=>wi))),xt(),Tl=T(((e,t)=>{var i={},n=t[0];if(null==e)return i;zs(n)?(t.length>1&&(n=$e(n,t[1])),t=ve(e)):(n=wi,t=wt(t,!1,!1),e=Object(e));for(var r=0,s=t.length;s>r;r++){var o=t[r],a=e[o];n(a,o,e)&&(i[o]=a)}return i})),i(Cl,"default",(()=>Tl))),Cl}function Ei(e,t,i){return Gr.call(e,0,Math.max(0,e.length-(null==t||i?1:t)))}function Ci(){return Pd||(Pd=!0,Dl={},C(),i(Dl,"default",(()=>Ei))),Dl}function Ti(e,t,i){return null==e||1>e.length?null==t||i?void 0:[]:null==t||i?e[0]:Ei(e,e.length-t)}function Mi(e,t,i){return Gr.call(e,null==t||i?1:t)}function ki(){return Id||(Id=!0,Al={},C(),i(Al,"default",(()=>Mi))),Al}function Di(e,t,i){return null==e||1>e.length?null==t||i?void 0:[]:null==t||i?e[e.length-1]:Mi(e,Math.max(0,e.length-t))}function Li(e){return ei(e,Boolean)}function Ai(e,t){return wt(e,t,!1)}function Oi(){return Wd||(Wd=!0,Pl={},M(),xt(),ti(),oi(),Hl=T(((e,t)=>(t=wt(t,!0,!0),ei(e,(e=>!si(t,e)))))),i(Pl,"default",(()=>Hl))),Pl}function Ri(e,t,i,n){O(t)||(n=i,i=t,t=!1),null!=i&&(i=Xe(i,n));for(var r=[],s=[],o=0,a=ao(e);a>o;o++){var l=e[o],c=i?i(l,o,e):l;t&&!i?(o&&s===c||r.push(l),s=c):i?si(s,c)||(s.push(c),r.push(l)):si(r,l)||r.push(l)}return r}function _i(){return qd||(qd=!0,Fl={},R(),Je(),ne(),oi(),i(Fl,"default",(()=>Ri))),Fl}function Pi(e){for(var t=[],i=arguments.length,n=0,r=ao(e);r>n;n++){var s=e[n];if(!si(t,s)){var o;for(o=1;i>o&&si(arguments[o],s);o++);o===i&&t.push(s)}}return t}function Hi(e){for(var t=e&&hi(e,ao).length||0,i=Array(t),n=0;t>n;n++)i[n]=ai(e,n);return i}function Ii(){return Vd||(Vd=!0,ql={},di(),ne(),li(),i(ql,"default",(()=>Hi))),ql}function Ni(e,t){for(var i={},n=0,r=ao(e);r>n;n++)t?i[e[n]]=t[n]:i[e[n][0]]=e[n][1];return i}function Fi(e,t,i){null==t&&(t=e||0,e=0),i||(i=e>t?-1:1);for(var n=Math.max(Math.ceil((t-e)/i),0),r=Array(n),s=0;n>s;s++,e+=i)r[s]=e;return r}function ji(e,t){if(null==t||1>t)return[];for(var i=[],n=0,r=e.length;r>n;)i.push(Gr.call(e,n,n+=t));return i}function Wi(e,t){return e._chain?ue(t).chain():t}function Bi(){return Yd||(Yd=!0,Ql={},pe(),i(Ql,"default",(()=>Wi))),Ql}function qi(e){return Kt(Ce(e),(function(t){var i=ue[t]=e[t];ue.prototype[t]=function(){var e=[this._wrapped];return Yr.apply(e,arguments),Wi(this,i.apply(ue,e))}})),ue}function zi(){return Jd||(Jd=!0,Yl={},C(),M(),D(),pc||(pc=!0,i({},"default",(()=>L))),fc||(fc=!0,i({},"default",(()=>A))),R(),mc||(mc=!0,i({},"default",(()=>_))),I(),N(),Sc||(Sc=!0,ys={},H(),bs=P("Date"),i(ys,"default",(()=>bs))),wc||(wc=!0,Ss={},H(),ws=P("RegExp"),i(Ss,"default",(()=>ws))),xc||(xc=!0,xs={},H(),Es=P("Error"),i(xs,"default",(()=>Es))),F(),Cc||(Cc=!0,Ms={},H(),ks=P("Map"),i(Ms,"default",(()=>ks))),Tc||(Tc=!0,Ds={},H(),Ls=P("WeakMap"),i(Ds,"default",(()=>Ls))),Mc||(Mc=!0,As={},H(),Os=P("Set"),i(As,"default",(()=>Os))),kc||(kc=!0,Rs={},H(),_s=P("WeakSet"),i(Rs,"default",(()=>_s))),Dc||(Dc=!0,Ps={},H(),Hs=P("ArrayBuffer"),i(Ps,"default",(()=>Hs))),j(),W(),B(),U(),Pc||(Pc=!0,Ks={},C(),F(),i(Ks,"default",(()=>V))),Q(),ie(),$c||($c=!0,po={},re(),W(),I(),U(),le(),i(po,"default",(()=>ce))),de(),Zc||(Zc=!0,mo={},pe(),C(),ee(),ie(),B(),le(),z(),i(mo,"default",(()=>me))),le(),ye(),Se(),Xc||(Xc=!0,bo={},le(),i(bo,"default",(()=>we))),Ee(),Te(),De(),Le(),Ae(),oh||(oh=!0,Ao={},Re(),Le(),i(Ao,"default",(()=>_e))),He(),lh||(lh=!0,i({},"default",(()=>Ie))),ch||(ch=!0,Ro={},W(),z(),C(),i(Ro,"default",(()=>Ne))),yh||(yh=!0,Bo={},Je(),le(),i(Bo,"default",(()=>et))),je(),Z(),bh||(bh=!0,i({},"default",(()=>tt))),Ve(),Sh||(Sh=!0,qo={},W(),ze(),i(qo,"default",(()=>it))),Be(),wh||(wh=!0,zo={},Qe(),i(zo,"default",(()=>nt))),st(),ot(),Mh||(Mh=!0,Yo={},lt(),ct(),Go=at(Zo),i(Yo,"default",(()=>Go))),ht(),dt(),Ah||(Ah=!0,ra={},Ae(),pe(),dt(),sa=/(.)^/,oa={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},aa=/\\|'|\r|\n|\u2028|\u2029/g,i(ra,"default",(()=>pt))),Oh||(Oh=!0,la={},W(),B(),i(la,"default",(()=>ft))),Rh||(Rh=!0,ca=0,i({},"default",(()=>gt))),_h||(_h=!0,ha={},pe(),i(ha,"default",(()=>mt))),Ge(),bt(),St(),Fh||(Fh=!0,va={},M(),xt(),St(),ya=T(((e,t)=>{var i=(t=wt(t,!1,!1)).length;if(1>i)throw Error("bindAll must be passed function names");for(;i--;){var n=t[i];e[n]=ga(e[n],e)}return e})),i(va,"default",(()=>ya))),jh||(jh=!0,ba={},z(),i(ba,"default",(()=>Et))),Ct(),Bh||(Bh=!0,xa={},bt(),Ct(),pe(),Ea=pa(wa,ue,1),i(xa,"default",(()=>Ea))),qh||(qh=!0,Ca={},ot(),i(Ca,"default",(()=>Tt))),zh||(zh=!0,Ta={},M(),Ct(),i(Ta,"default",(()=>Mt))),Uh||(Uh=!0,Ma={},bt(),i(Ma,"default",(()=>kt))),Lt(),$h||($h=!0,i({},"default",(()=>At))),Qh||(Qh=!0,i({},"default",(()=>Ot))),_t(),Zh||(Zh=!0,La={},bt(),_t(),Aa=pa(Rt,2),i(La,"default",(()=>Aa))),Ht(),Ft(),jt(),Bt(),Ut(),nd||(nd=!0,Ba={},jt(),zt(),qa=qt(-1,Ia),i(Ba,"default",(()=>qa))),$t(),sd||(sd=!0,Ua={},$t(),Be(),i(Ua,"default",(()=>Qt))),Zt(),Gt(),cd||(cd=!0,Ka={},Jt(),Za=Xt(1),i(Ka,"default",(()=>Za))),hd||(hd=!0,Ya={},Jt(),Ga=Xt(-1),i(Ya,"default",(()=>Ga))),ti(),ud||(ud=!0,Ja={},ti(),Lt(),Je(),i(Ja,"default",(()=>ii))),pd||(pd=!0,el={},Je(),re(),le(),i(el,"default",(()=>ni))),fd||(fd=!0,tl={},Je(),re(),le(),i(tl,"default",(()=>ri))),oi(),md||(md=!0,nl={},M(),B(),W(),Gt(),ze(),rl=T(((e,t,i)=>{var n,r;return zs(t)?r=t:js(t)&&(n=t.slice(0,-1),t=t[t.length-1]),Yt(e,(e=>{var s=r;if(!s){if(n&&n.length&&(e=qe(e,n)),null==e)return;s=e[t]}return null==s?s:s.apply(e,i)}))})),i(nl,"default",(()=>rl))),li(),yd||(yd=!0,ol={},ti(),Be(),i(ol,"default",(()=>ci))),di(),Sd||(Sd=!0,ll={},re(),Se(),Je(),Zt(),i(ll,"default",(()=>ui))),xd||(xd=!0,hl={},fi(),i(hl,"default",(()=>gi))),fi(),Ed||(Ed=!0,dl={},Je(),li(),Gt(),i(dl,"default",(()=>mi))),Td||(Td=!0,pl={},yi(),z(),fl=vi(((e,t,i)=>{q(e,i)?e[i].push(t):e[i]=[t]})),i(pl,"default",(()=>fl))),Md||(Md=!0,gl={},yi(),ml=vi(((e,t,i)=>{e[i]=t})),i(gl,"default",(()=>ml))),kd||(kd=!0,vl={},yi(),z(),yl=vi(((e,t,i)=>{q(e,i)?e[i]++:e[i]=1})),i(vl,"default",(()=>yl))),Dd||(Dd=!0,bl={},yi(),Sl=vi(((e,t,i)=>{e[i?0:1].push(t)}),!0),i(bl,"default",(()=>Sl))),Ld||(Ld=!0,wl={},W(),C(),I(),re(),Gt(),je(),Se(),xl=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g,i(wl,"default",(()=>bi))),Ad||(Ad=!0,El={},re(),le(),i(El,"default",(()=>Si))),xi(),_d||(_d=!0,Ml={},M(),B(),Lt(),Gt(),xt(),oi(),xi(),kl=T(((e,t)=>{var i,n=t[0];return zs(n)?(n=Dt(n),t.length>1&&(i=t[1])):(t=Yt(wt(t,!1,!1),String),n=(e,i)=>!si(t,i)),Tl(e,n,i)})),i(Ml,"default",(()=>kl))),Hd||(Hd=!0,Ll={},Ci(),i(Ll,"default",(()=>Ti))),Ci(),Nd||(Nd=!0,Ol={},ki(),i(Ol,"default",(()=>Di))),ki(),Fd||(Fd=!0,Rl={},ti(),i(Rl,"default",(()=>Li))),jd||(jd=!0,_l={},xt(),i(_l,"default",(()=>Ai))),Bd||(Bd=!0,Il={},M(),Oi(),Nl=T(((e,t)=>Hl(e,t))),i(Il,"default",(()=>Nl))),_i(),zd||(zd=!0,jl={},M(),_i(),xt(),Wl=T((e=>Ri(wt(e,!0,!0)))),i(jl,"default",(()=>Wl))),Ud||(Ud=!0,Bl={},ne(),oi(),i(Bl,"default",(()=>Pi))),Oi(),Ii(),$d||($d=!0,zl={},M(),Ii(),Ul=T(Hi),i(zl,"default",(()=>Ul))),Qd||(Qd=!0,Vl={},ne(),i(Vl,"default",(()=>Ni))),Kd||(Kd=!0,i({},"default",(()=>Fi))),Zd||(Zd=!0,$l={},C(),i($l,"default",(()=>ji))),Gd||(Gd=!0,Kl={},pe(),Zt(),Te(),C(),Bi(),i(Kl,"default",(()=>qi))),Xd||(Xd=!0,Zl={},pe(),Zt(),C(),Bi(),Kt(["pop","push","reverse","shift","sort","splice","unshift"],(function(e){var t=Qr[e];ue.prototype[e]=function(){var i=this._wrapped;return null!=i&&(t.apply(i,arguments),"shift"!==e&&"splice"!==e||0!==i.length||delete i[0]),Wi(this,i)}})),Kt(["concat","join","slice"],(function(e){var t=Qr[e];ue.prototype[e]=function(){var e=this._wrapped;return null!=e&&(e=t.apply(e,arguments)),Wi(this,e)}})),i(Zl,"default",(()=>ue))),i(Yl,"VERSION",(()=>Vr)),i(Yl,"restArguments",(()=>T)),i(Yl,"isObject",(()=>k)),i(Yl,"isNull",(()=>L)),i(Yl,"isUndefined",(()=>A)),i(Yl,"isBoolean",(()=>O)),i(Yl,"isElement",(()=>_)),i(Yl,"isString",(()=>gs)),i(Yl,"isNumber",(()=>vs)),i(Yl,"isDate",(()=>bs)),i(Yl,"isRegExp",(()=>ws)),i(Yl,"isError",(()=>Es)),i(Yl,"isSymbol",(()=>Ts)),i(Yl,"isMap",(()=>ks)),i(Yl,"isWeakMap",(()=>Ls)),i(Yl,"isSet",(()=>Os)),i(Yl,"isWeakSet",(()=>_s)),i(Yl,"isArrayBuffer",(()=>Hs)),i(Yl,"isDataView",(()=>Ns)),i(Yl,"isArray",(()=>js)),i(Yl,"isFunction",(()=>zs)),i(Yl,"isArguments",(()=>Qs)),i(Yl,"isFinite",(()=>V)),i(Yl,"isNaN",(()=>$)),i(Yl,"isTypedArray",(()=>so)),i(Yl,"isEmpty",(()=>ce)),i(Yl,"isMatch",(()=>he)),i(Yl,"isEqual",(()=>me)),i(Yl,"keys",(()=>ae)),i(Yl,"allKeys",(()=>ve)),i(Yl,"values",(()=>be)),i(Yl,"pairs",(()=>we)),i(Yl,"invert",(()=>xe)),i(Yl,"methods",(()=>Ce)),i(Yl,"functions",(()=>Ce)),i(Yl,"extend",(()=>Co)),i(Yl,"assign",(()=>Mo)),i(Yl,"extendOwn",(()=>Mo)),i(Yl,"defaults",(()=>Do)),i(Yl,"create",(()=>_e)),i(Yl,"clone",(()=>Pe)),i(Yl,"tap",(()=>Ie)),i(Yl,"has",(()=>Ne)),i(Yl,"mapObject",(()=>et)),i(Yl,"identity",(()=>Fe)),i(Yl,"constant",(()=>K)),i(Yl,"noop",(()=>tt)),i(Yl,"property",(()=>Ue)),i(Yl,"propertyOf",(()=>it)),i(Yl,"matches",(()=>We)),i(Yl,"matcher",(()=>We)),i(Yl,"times",(()=>nt)),i(Yl,"random",(()=>rt)),i(Yl,"now",(()=>$o)),i(Yl,"escape",(()=>Go)),i(Yl,"unescape",(()=>ta)),i(Yl,"templateSettings",(()=>na)),i(Yl,"template",(()=>pt)),i(Yl,"result",(()=>ft)),i(Yl,"uniqueId",(()=>gt)),i(Yl,"chain",(()=>mt)),i(Yl,"iteratee",(()=>Ye)),i(Yl,"partial",(()=>pa)),i(Yl,"bind",(()=>ga)),i(Yl,"bindAll",(()=>ya)),i(Yl,"memoize",(()=>Et)),i(Yl,"delay",(()=>wa)),i(Yl,"defer",(()=>Ea)),i(Yl,"throttle",(()=>Tt)),i(Yl,"debounce",(()=>Mt)),i(Yl,"wrap",(()=>kt)),i(Yl,"negate",(()=>Dt)),i(Yl,"compose",(()=>At)),i(Yl,"after",(()=>Ot)),i(Yl,"before",(()=>Rt)),i(Yl,"once",(()=>Aa)),i(Yl,"findKey",(()=>Pt)),i(Yl,"findIndex",(()=>Pa)),i(Yl,"findLastIndex",(()=>Ia)),i(Yl,"sortedIndex",(()=>Wt)),i(Yl,"indexOf",(()=>Wa)),i(Yl,"lastIndexOf",(()=>qa)),i(Yl,"detect",(()=>Vt)),i(Yl,"find",(()=>Vt)),i(Yl,"findWhere",(()=>Qt)),i(Yl,"forEach",(()=>Kt)),i(Yl,"each",(()=>Kt)),i(Yl,"collect",(()=>Yt)),i(Yl,"map",(()=>Yt)),i(Yl,"inject",(()=>Za)),i(Yl,"foldl",(()=>Za)),i(Yl,"reduce",(()=>Za)),i(Yl,"foldr",(()=>Ga)),i(Yl,"reduceRight",(()=>Ga)),i(Yl,"select",(()=>ei)),i(Yl,"filter",(()=>ei)),i(Yl,"reject",(()=>ii)),i(Yl,"all",(()=>ni)),i(Yl,"every",(()=>ni)),i(Yl,"any",(()=>ri)),i(Yl,"some",(()=>ri)),i(Yl,"include",(()=>si)),i(Yl,"includes",(()=>si)),i(Yl,"contains",(()=>si)),i(Yl,"invoke",(()=>rl)),i(Yl,"pluck",(()=>ai)),i(Yl,"where",(()=>ci)),i(Yl,"max",(()=>hi)),i(Yl,"min",(()=>ui)),i(Yl,"shuffle",(()=>gi)),i(Yl,"sample",(()=>pi)),i(Yl,"sortBy",(()=>mi)),i(Yl,"groupBy",(()=>fl)),i(Yl,"indexBy",(()=>ml)),i(Yl,"countBy",(()=>yl)),i(Yl,"partition",(()=>Sl)),i(Yl,"toArray",(()=>bi)),i(Yl,"size",(()=>Si)),i(Yl,"pick",(()=>Tl)),i(Yl,"omit",(()=>kl)),i(Yl,"take",(()=>Ti)),i(Yl,"head",(()=>Ti)),i(Yl,"first",(()=>Ti)),i(Yl,"initial",(()=>Ei)),i(Yl,"last",(()=>Di)),i(Yl,"drop",(()=>Mi)),i(Yl,"tail",(()=>Mi)),i(Yl,"rest",(()=>Mi)),i(Yl,"compact",(()=>Li)),i(Yl,"flatten",(()=>Ai)),i(Yl,"without",(()=>Nl)),i(Yl,"unique",(()=>Ri)),i(Yl,"uniq",(()=>Ri)),i(Yl,"union",(()=>Wl)),i(Yl,"intersection",(()=>Pi)),i(Yl,"difference",(()=>Hl)),i(Yl,"transpose",(()=>Hi)),i(Yl,"unzip",(()=>Hi)),i(Yl,"zip",(()=>Ul)),i(Yl,"object",(()=>Ni)),i(Yl,"range",(()=>Fi)),i(Yl,"chunk",(()=>ji)),i(Yl,"mixin",(()=>qi)),i(Yl,"default",(()=>ue))),Yl}function Ui(e,t,i){const n=e.getMarker().getScreenRange(),r=n.end.row-n.start.row;if(t.context.fillStyle=i,0===r)t.context.fillRect(n.start.column*t.charWidth,t.yRow,(n.end.column-n.start.column)*t.charWidth,t.lineHeight);else if(t.screenRow===n.start.row){const e=n.start.column*t.charWidth;t.context.fillRect(e,t.yRow,t.canvasWidth-e,t.lineHeight)}else t.context.fillRect(0,t.yRow,t.screenRow===n.end.row?n.end.column*t.charWidth:t.canvasWidth,t.lineHeight)}function Vi(e,t,i,n){const r=e.getProperties().render;r&&(t.color=i,r(e,t,n))}function $i(e,t=1){return e.replace("rgb(","rgba(").replace(")",`, ${t})`)}function Qi(e,t,i,n,r){if(null==n&&null==r)return[];let s=[{start:n,end:r,offscreenRow:0}];for(let e=0,t=i.length;t>e;e++){const t=i[e],n=[];for(let e=0,i=s.length;i>e;e++){const i=s[e];i.start>t.end&&0!==t.screenDelta?n.push({start:i.start+t.screenDelta,end:i.end+t.screenDelta,offscreenRow:i.offscreenRow}):i.start>t.end||t.start>i.end?n.push(i):(t.start>i.start&&n.push({start:i.start,end:t.start-1,offscreenRow:i.offscreenRow}),i.end>t.end&&n.push(0!==t.bufferDelta||0!==t.screenDelta?{start:t.end+t.screenDelta+1,end:i.end+t.screenDelta,offscreenRow:i.offscreenRow+t.end+1-i.start}:{start:t.end+1,end:i.end,offscreenRow:i.offscreenRow+t.end+1-i.start}))}s=n}return((e,t,i)=>{let n=0;for(;e.length>n;){const r=e[n];t>r.start&&(r.offscreenRow+=t-r.start,r.start=t),r.end>i&&(r.end=i),r.end>r.start||e.splice(n--,1),n++}return e.sort(((e,t)=>e.offscreenRow-t.offscreenRow))})(s,e,t)}function Ki(e,...t){t.forEach((t=>{var i,n;i=e,Object.getOwnPropertyNames(n=t).forEach((e=>{0>["length","name","arguments","caller","prototype","includeInto"].indexOf(e)&&Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(n,e))})),Object.getOwnPropertyNames(n.prototype).forEach((e=>{"constructor"!==e&&Object.defineProperty(i.prototype,e,Object.getOwnPropertyDescriptor(n.prototype,e))}))}))}function Zi(e,t){return vr.registerOrUpdateElement(t,{class:e})}function Yi(e){du&&(du.textContent=`\n atom-text-editor[with-minimap].editor > div,\n atom-text-editor[with-minimap] > div {\n margin-left: ${e}px;\n }\n `)}function Gi(e){return{x:e.pageX,y:e.pageY,isLeftMouse:0===e.button,isMiddleMouse:1===e.button}}function Xi(e){const t=e.changedTouches[0];return{x:t.pageX,y:t.pageY,isLeftMouse:!0,isMiddleMouse:!1}}function Ji(e,t){if(!e)return;let i="";for(const e in t)i+=`${e}: ${t[e]}; `;e.style.cssText=i}function en(e=0,t=0,i=!1){return i?`translate3d(${e}px, ${t}px, 0)`:`translate(${e}px, ${t}px)`}function tn(e=0,t=e,i=!1){return i?`scale3d(${e}, ${t}, 1)`:`scale(${e}, ${t})`}function nn({from:e,to:t,duration:i,step:n}){const r=rn();let s;const o=()=>{const a=rn()-r;s=0===i?1:a/i,s>1&&(s=1);const l=(e=>.5-Math.cos(e*Math.PI)/2)(s);n(e+(t-e)*l,l),1>s&&requestAnimationFrame(o)};o()}function rn(){return new Date}function sn(e,t){Eu[e]=t,Cu[e]=new ur,Ou.emit("did-add-plugin",{name:e,plugin:t}),atom.config.get("minimap.displayPluginsControls")&&((e,t)=>{const i="minimap.plugins."+e,n=`minimap.plugins.${e}DecorationsZIndex`,r=gn();r.plugins.properties[e]={type:"boolean",title:e,description:`Whether the ${e} plugin is activated and displayed in the Minimap.`,default:!0},r.plugins.properties[e+"DecorationsZIndex"]={type:"integer",title:e+" decorations order",description:`The relative order of the ${e} plugin's decorations in the layer into which they are drawn. Note that this order only apply inside a layer, so highlight-over decorations will always be displayed above line decorations as they are rendered in different layers.`,default:0},void 0===atom.config.get(i)&&atom.config.set(i,!0),void 0===atom.config.get(n)&&atom.config.set(n,0),Cu[e].add(atom.config.observe(i,(()=>{cn(e)}))),Cu[e].add(atom.config.observe(n,(i=>{un(e),Ou.emit("did-change-plugin-order",{name:e,plugin:t,order:i})}))),Cu[e].add(atom.commands.add("atom-workspace",{["minimap:toggle-"+e](){an(e)}})),un(e)})(e,t),cn(e)}function on(e){const t=Eu[e];atom.config.get("minimap.displayPluginsControls")&&(e=>{Cu[e].dispose(),delete Cu[e],delete gn().plugins.properties[e]})(e),delete Eu[e],Ou.emit("did-remove-plugin",{name:e,plugin:t})}function an(e,t){const i="minimap.plugins."+e;null!=t?atom.config.set(i,t):atom.config.set(i,!atom.config.get(i)),cn(e)}function ln(){for(const[e,t]of function*(){for(const e in Eu)yield[e,Eu[e]]}())t.deactivatePlugin(),Ou.emit("did-deactivate-plugin",{name:e,plugin:t})}function cn(e){const t=Eu[e],i=t.isActive(),n=atom.config.get("minimap.plugins."+e);atom.config.get("minimap.displayPluginsControls")?n&&!i?hn(e,t):i&&!n&&dn(e,t):i?i&&dn(e,t):hn(e,t)}function hn(e,t){const i={name:e,plugin:t};t.activatePlugin(),Ou.emit("did-activate-plugin",i)}function dn(e,t){const i={name:e,plugin:t};t.deactivatePlugin(),Ou.emit("did-deactivate-plugin",i)}function un(e){Tu[e]=atom.config.get(`minimap.plugins.${e}DecorationsZIndex`)}function pn(){return Tu}function fn(e){if(e instanceof wu){const t=new uu;return t.setModel(e),t}}function gn(){return Ru||atom.packages.getLoadedPackage("minimap").metadata.configSchema}function mn(){Mu&&(ku?(ku=!1,Du&&Du.forEach(((e,t)=>{e.destroy(),Du.delete(t)})),Lu.dispose()):(ku=!0,Lu.add(atom.workspace.observeTextEditors((e=>{const t=Dn(e),i=atom.views.getView(t);Ou.emit("did-create-minimap",t),i.attach()})))))}async function vn(e){const{default:t}=await(mr||(mr=!0,Rn={},Rn=Promise.resolve(require("./minimap-plugin-generator-element.a47de6ae.js"))),Rn),i=new t;i.template=e,i.attach()}function yn(e){return Ou.on("did-activate",e)}function bn(e){return Ou.on("did-deactivate",e)}function Sn(e){return Ou.on("did-create-minimap",e)}function wn(e){return Ou.on("did-add-plugin",e)}function xn(e){return Ou.on("did-remove-plugin",e)}function En(e){return Ou.on("did-activate-plugin",e)}function Cn(e){return Ou.on("did-deactivate-plugin",e)}function Tn(e){return Ou.on("did-change-plugin-order",e)}function Mn(){return wu}function kn(e){if(e)return Dn(e.getModel())}function Dn(e){if(!e)return;if(!Du)return;let t=Du.get(e);if(!t){t=new wu({textEditor:e}),Du.set(e,t);const i=e.onDidDestroy((()=>{Du&&Du.delete(e),i.dispose()}))}return t}function Ln(e){if(e)return new wu({textEditor:e,standAlone:!0})}function An(){return Dn(atom.workspace.getActiveTextEditor())}function On(e){if(e)return Du&&Du.forEach((t=>{e(t)})),Sn((t=>{e(t)}))}var Rn,_n,Pn,Hn,In,Nn,Fn,jn,Wn,Bn,qn,zn,Un,Vn,$n,Qn,Kn,Zn,Yn,Gn,Xn,Jn,er,tr,ir,nr,rr,sr,or,ar,lr,cr=e(require("path")),hr=require("atom"),dr=n({},hr),{CompositeDisposable:ur,Disposable:pr,Emitter:fr}=hr,gr="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},mr=!1,vr={},yr=!1,br=!1,Sr=!1,wr=!1,xr=!1,Er=!1,Cr=!1,Tr=!1,Mr=!1,kr=!1,Dr=!1,Lr=!1;vr={requirePackages(...e){return new Promise(((t,i)=>{var n,r,s,o;return s=[],n=[],r=e.length,o=()=>{if(0==--r)return n.length>0?i(n):t(s)},e.forEach(((e,t)=>{var i,r;return i=e=>(n[t]=e,o()),null!=(r=atom.packages.activatePackage(e).then((e=>(s[t]=e.mainModule,o())))).fail?r.fail(i):null!=r.catch?r.catch(i):void 0}))}))},registerOrUpdateElement:(Cr||(Cr=!0,Vn={},({deprecate:or}=(Er||(Er=!0,f()),Un)),null!=gr.__CUSTOM_HTML_ELEMENTS_CLASSES__?(gr.__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__=gr.__CUSTOM_HTML_ELEMENTS_CLASSES__,delete gr.__CUSTOM_HTML_ELEMENTS_CLASSES__):null==gr.__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__&&(gr.__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__={}),nr=["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"],sr=function(e,t){return nr.forEach((function(t){return Object.defineProperty(e,t,{value(){var e;return null!=(e=this["__"+t])?e.apply(this,arguments):void 0},writable:!0,enumerable:!0,configurable:!0})})),Object.getOwnPropertyNames(t).forEach((i=>{var n;if("constructor"!==i)return n=Object.getOwnPropertyDescriptor(t,i),nr.indexOf(i)>-1?Object.defineProperty(e,"__"+i,n):Object.defineProperty(e,i,n)}))},rr=(e,t)=>Object.getOwnPropertyNames(t).forEach((i=>{if("length"!==i&&"name"!==i&&"arguments"!==i&&"caller"!==i&&"prototype"!==i)return Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(t,i))})),Vn=(e,t)=>{var i,n,r,s,o;return({class:r}=t),(s=null!=r?r.prototype:null!=(o=t.prototype)?o:t)===t&&or("Using the prototype as the second argument is deprecated, use the prototype option instead"),__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__[e]?(i=__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__[e],sr(i.prototype,s),null!=r&&rr(i,r),i):(n=Object.create(HTMLElement.prototype),sr(n,s),i=document.registerElement(e,{prototype:Object.create(n)}),null!=r&&rr(i,r),__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__[e]=i)}),Vn),Ancestors:m(),AncestorsMethods:m(),DisposableEvents:v(),EventsDelegation:(Dr||(Dr=!0,Zn={},er=g(),Jn=v(),({Disposable:Xn,CompositeDisposable:Gn}=dr),ir=(e,t)=>{var i,n;for(i in n=[],e)n.push(t(i,e[i]));return n},tr="__NONE__",Zn=function(){class e extends er{subscribeTo(e,t,i,n){var r,s;return e instanceof HTMLElement||([e,t,i,n]=[this,e,t,i]),"object"==typeof t&&([i,t,n]=[t,tr,i]),null==this.eventsMap&&(this.eventsMap=new WeakMap),null==this.disposablesMap&&(this.disposablesMap=new WeakMap),null==this.eventsMap.get(e)&&this.eventsMap.set(e,{}),null==this.disposablesMap.get(e)&&this.disposablesMap.set(e,{}),s=this.eventsMap.get(e),r=this.disposablesMap.get(e),ir(i,((i,o)=>(null==s[i]&&(s[i]={},r[i]=this.createEventListener(e,i,n)),s[i][t]=o))),new Xn((()=>this.unsubscribeFrom(e,t,i)))}unsubscribeFrom(e,t,i){var n,r,s;if(e instanceof HTMLElement||([e,t,i]=[this,e,t]),"object"==typeof t&&([i,t]=[t,tr]),s=this.eventsMap.get(e)){for(r in i)delete s[r][t],0===Object.keys(s[r]).length&&((n=this.disposablesMap.get(e))[r].dispose(),delete n[r],delete s[r]);return 0===Object.keys(s).length?(this.eventsMap.delete(e),this.disposablesMap.delete(e)):void 0}}createEventListener(e,t,i){return this.addDisposableEventListener(e,t,(i=>{var n,r,s;if(n=null!=(r=this.eventsMap.get(e))?r[t]:void 0)return({target:s}=i),this.decorateEvent(i),this.eachSelectorFromTarget(i,s,n),i.isPropagationStopped||"function"==typeof n.__NONE__&&n.__NONE__(i),!0}),i)}eachSelectorFromTarget(e,t,i){return this.nodeAndItsAncestors(t,(t=>{if(!e.isPropagationStopped)return this.eachSelector(i,((i,n)=>{var r;if(r=this.targetMatch(t,i),!e.isImmediatePropagationStopped&&r)return n(e)}))}))}eachSelector(e,t){var i,n,r,s;for(-1!==(r=Object.keys(e)).indexOf(tr)&&r.splice(r.indexOf(tr),1),r.sort(((e,t)=>t.split(" ").length-e.split(" ").length)),i=0,s=r.length;s>i;i++)if(t(n=r[i],e[n]))return!0;return!1}targetMatch(e,t){var i;if(e.matches(t))return!0;for(i=e.parentNode;null!=i&&null!=i.matches;){if(i.matches(t))return!0;i=i.parentNode}return!1}nodeAndItsAncestors(e,t){var i,n;for(i=e.parentNode,t(e),n=[];null!=i&&null!=i.matches;)t(i),n.push(i=i.parentNode);return n}decorateEvent(e){var t,i;return t=Event.prototype.stopPropagation,e.stopPropagation=function(){return this.isPropagationStopped=!0,t.apply(this,arguments)},i=Event.prototype.stopImmediatePropagation,e.stopImmediatePropagation=function(){return this.isImmediatePropagationStopped=!0,i.apply(this,arguments)}}}return Jn.includeInto(e),e}()),Zn),SpacePenDSL:function(){var e,t,i,n,r,s,o;return Lr||(Lr=!0,Yn={},i=g(),s="a abbr address article aside audio b bdi bdo blockquote body button canvas caption cite code colgroup datalist dd del details dfn dialog div dl dt em fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 head header html i iframe ins kbd label legend li main map mark menu meter nav noscript object ol optgroup option output p pre progress q rp rt ruby s samp script section select small span strong style sub summary sup table tbody td textarea tfoot th thead time title tr u ul var video area base br col command embed hr img input keygen link meta param source track wbr".split(/\s+/),n={},"area base br col command embed hr img input keygen link meta param source track wbr".split(/\s+/).forEach((e=>n[e]=!0)),e=class extends i{buildContent(){if(null!=this.constructor.content)return r.buildContent(this,this.constructor.content)}},Yn=r=function(){class t extends i{static includeInto(e){return super.includeInto(e),Object.defineProperty(e,"content",{enumerable:!1,get(){return this.prototype.__content__},set(e){return this.prototype.__content__=e}}),Object.defineProperty(e.prototype,"createdCallback",{enumerable:!0,get(){return this.__create__},set(e){return this.__createdCallback__=e}}),Object.defineProperty(e.prototype,"__create__",{enumerable:!0,value(){if(null!=this.__content__&&t.buildContent(this,this.__content__),null!=this.__createdCallback__)return this.__createdCallback__()}}),e.useShadowRoot=()=>e.prototype.__useShadowRoot__=!0}static buildContent(e,t){var i,n,r;return r=new o,t.call(r),[i]=r.buildHtml(),(n=n=e.__useShadowRoot__?e.shadowRoot=e.createShadowRoot():e).innerHTML=i,this.wireOutlets(e,n)}static wireOutlets(e,t){var i,n,r,s;for(n=0,r=(s=t.querySelectorAll("[outlet]")).length;r>n;n++)e[(i=s[n]).getAttribute("outlet")]=i,i.removeAttribute("outlet")}}return t.Babel=e,t}(),o=function(){class e{constructor(){this.currentBuilder=new t}subview(e,t){return this.currentBuilder.subview(e,t)}text(e){return this.currentBuilder.text(e)}tag(e,...t){return this.currentBuilder.tag(e,...t)}raw(e){return this.currentBuilder.raw(e)}buildHtml(){return this.currentBuilder.buildHtml()}}return s.forEach((function(t){return e.prototype[t]=function(...e){return this.currentBuilder.tag(t,...e)}})),e}(),t=class{constructor(){this.document=[],this.postProcessingSteps=[]}buildHtml(){return[this.document.join(""),this.postProcessingSteps]}tag(e,...t){var i;if(i=this.extractOptions(t),this.openTag(e,i.attributes),!n.hasOwnProperty(e))return"function"==typeof i.content&&i.content(),i.text&&this.text(i.text),this.closeTag(e);if(null!=i.text||null!=i.content)throw Error(`Self-closing tag ${e} cannot have text or content`)}openTag(e,t){var i,n,r;return 0===this.document.length&&null==t&&(t={}),r=(n=(()=>{var e;for(i in e=[],t)e.push(`${i}="${t[i]}"`);return e})()).length?" "+n.join(" "):"",this.document.push(`<${e}${r}>`)}closeTag(e){return this.document.push(``)}text(e){var t;return t=e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">"),this.document.push(t)}raw(e){return this.document.push(e)}subview(e,t){var i;return i="subview-"+ ++idCounter,this.tag("div",{id:i}),this.postProcessingSteps.push((n=>(n[e]=t,t.parentView=n,n.find("div#"+i).replaceWith(t))))}extractOptions(e){var t,i,n,r;for(r={},i=0,n=e.length;n>i;i++)switch(typeof(t=e[i])){case"function":r.content=t;break;case"string":case"number":r.text=""+t;break;default:r.attributes=t}return r}}),Yn}()},(lr={}).forEach=(e,t)=>{for(var i=0;e.length>i;i++){var n=t(e[i]);if(n)return n}};var Ar,Or,Rr,_r,Pr,Hr=lr.forEach;Ar=e=>{var t=e.stateHandler.getState;return{isDetectable(e){var i=t(e);return i&&!!i.isDetectable},markAsDetectable(e){t(e).isDetectable=!0},isBusy:e=>!!t(e).busy,markBusy(e,i){t(e).busy=!!i}}},Or=e=>{function t(t){var n=e.get(t);return void 0===n?[]:i[n]||[]}var i={};return{get:t,add(t,n){var r=e.get(t);i[r]||(i[r]=[]),i[r].push(n)},removeListener(e,i){for(var n=t(e),r=0,s=n.length;s>r;++r)if(n[r]===i){n.splice(r,1);break}},removeAllListeners(e){var i=t(e);i&&(i.length=0)}}},Rr=()=>{var e=1;return{generate:()=>e++}},_r=e=>{var t=e.idGenerator,i=e.stateHandler.getState;return{get(e){var t=i(e);return t&&void 0!==t.id?t.id:null},set(e){var n=i(e);if(!n)throw Error("setId required the element to have a resize detection state.");var r=t.generate();return n.id=r,r}}},Pr=e=>{function t(){}var i={log:t,warn:t,error:t};if(!e&&window.console){var n=(e,t)=>{e[t]=function(){var e=console[t];if(e.apply)e.apply(console,arguments);else for(var i=0;arguments.length>i;i++)e(arguments[i])}};n(i,"log"),n(i,"warn"),n(i,"error")}return i};var Ir={},Nr=Ir={};Nr.isIE=e=>{return!(-1===(t=navigator.userAgent.toLowerCase()).indexOf("msie")&&-1===t.indexOf("trident")&&-1===t.indexOf(" edge/")||e&&e!==(()=>{var e=3,t=document.createElement("div"),i=t.getElementsByTagName("i");do{t.innerHTML="\x3c!--[if gt IE "+ ++e+"]>4?e:void 0})());var t},Nr.isLegacyOpera=()=>!!window.opera;var Fr,jr={};(jr={}).getOption=(e,t,i)=>{var n=e[t];return null==n&&void 0!==i?i:n},Fr=e=>{function t(){for(l=!0;a.size();){var e=a;a=y(),e.process()}l=!1}function i(){o=setTimeout(t,0)}var n=(e=e||{}).reporter,r=jr.getOption(e,"async",!0),s=jr.getOption(e,"auto",!0);s&&!r&&(n&&n.warn("Invalid options combination. auto=true and async=false is invalid. Setting async=true."),r=!0);var o,a=y(),l=!1;return{add(e,t){!l&&s&&r&&0===a.size()&&i(),a.add(e,t)},force(e){l||(void 0===e&&(e=r),o&&(clearTimeout(o),o=null),e?i():t())}}};var Wr,Br={};Br={initState:e=>(e._erd={},b(e)),getState:b,cleanState(e){delete e._erd}},Wr=function(e){function t(t){var i=e.important?" !important; ":"; ";return(t.join(i)+i).trim()}function i(e){return s(e).object}var n=(e=e||{}).reporter,r=e.batchProcessor,s=e.stateHandler.getState;if(!n)throw Error("Missing required dependency: reporter.");return{makeDetectable(e,i,o){o||(o=i,i=e,e=null),e=e||{},Ir.isIE(8)?o(i):function(i,o){function a(){function t(){if("static"===h.position){i.style.setProperty("position","relative",e.important?"important":"");var t=(t,i,n,r)=>{var s=n[r];"auto"!==s&&"0"!==(e=>e.replace(/[^-\d\.]/g,""))(s)&&(t.warn("An element that is positioned static has style."+r+"="+s+" which is ignored due to the static positioning. The element will need to be positioned relative, so the style."+r+" will be set to 0. Element: ",i),i.style.setProperty(r,"0",e.important?"important":""))};t(n,i,h,"top"),t(n,i,h,"right"),t(n,i,h,"bottom"),t(n,i,h,"left")}}""!==h.position&&(t(),c=!0);var r=document.createElement("object");r.style.cssText=l,r.tabIndex=-1,r.type="text/html",r.setAttribute("aria-hidden","true"),r.onload=function(){c||t(),function e(t,i){if(!t.contentDocument){var n=s(t);return n.checkForObjectDocumentTimeoutId&&window.clearTimeout(n.checkForObjectDocumentTimeoutId),void(n.checkForObjectDocumentTimeoutId=setTimeout((()=>{n.checkForObjectDocumentTimeoutId=0,e(t,i)}),100))}i(t.contentDocument)}(this,(e=>{o(i)}))},Ir.isIE()||(r.data="about:blank"),s(i)&&(i.appendChild(r),s(i).object=r,Ir.isIE()&&(r.data="about:blank"))}var l=t(["display: block","position: absolute","top: 0","left: 0","width: 100%","height: 100%","border: none","padding: 0","margin: 0","opacity: 0","z-index: -1000","pointer-events: none"]),c=!1,h=window.getComputedStyle(i),d=i.offsetWidth,u=i.offsetHeight;s(i).startSize={width:d,height:u},r?r.add(a):a()}(i,o)},addListener(e,t){function n(){t(e)}if(Ir.isIE(8))s(e).object={proxy:n},e.attachEvent("onresize",n);else{var r=i(e);if(!r)throw Error("Element is not detectable by this strategy.");r.contentDocument.defaultView.addEventListener("resize",n)}},uninstall(e){if(s(e)){var t=i(e);t&&(Ir.isIE(8)?e.detachEvent("onresize",t.proxy):e.removeChild(t),s(e).checkForObjectDocumentTimeoutId&&window.clearTimeout(s(e).checkForObjectDocumentTimeoutId),delete s(e).object)}}}};var qr,zr=lr.forEach;qr=e=>{function t(e){((e,t,n)=>{if(!e.getElementById(t)){var r=n+"_animation",s=n+"_animation_active",o="/* Created by the element-resize-detector library. */\n";o+="."+n+" > div::-webkit-scrollbar { "+i(["display: none"])+" }\n\n",o+="."+s+" { "+i(["-webkit-animation-duration: 0.1s","animation-duration: 0.1s","-webkit-animation-name: "+r,"animation-name: "+r])+" }\n",o+="@-webkit-keyframes "+r+" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\n",function(i,n){n=n||(t=>{e.head.appendChild(t)});var r=e.createElement("style");r.innerHTML=i,r.id=t,n(r)}(o+="@keyframes "+r+" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }")}})(e,"erd_scroll_detection_scrollbar_style",u)}function i(t){var i=e.important?" !important; ":"; ";return(t.join(i)+i).trim()}function n(e,t,i){if(e.addEventListener)e.addEventListener(t,i);else{if(!e.attachEvent)return a.error("[scroll] Don't know how to add event listeners.");e.attachEvent("on"+t,i)}}function r(e,t,i){if(e.removeEventListener)e.removeEventListener(t,i);else{if(!e.detachEvent)return a.error("[scroll] Don't know how to remove event listeners.");e.detachEvent("on"+t,i)}}function s(e){return c(e).container.childNodes[0].childNodes[0].childNodes[0]}function o(e){return c(e).container.childNodes[0].childNodes[0].childNodes[1]}var a=(e=e||{}).reporter,l=e.batchProcessor,c=e.stateHandler.getState,h=e.idHandler;if(!l)throw Error("Missing required dependency: batchProcessor");if(!a)throw Error("Missing required dependency: reporter.");var d=(()=>{var e=document.createElement("div");e.style.cssText=i(["position: absolute","width: 1000px","height: 1000px","visibility: hidden","margin: 0","padding: 0"]);var t=document.createElement("div");t.style.cssText=i(["position: absolute","width: 500px","height: 500px","overflow: scroll","visibility: none","top: -1500px","left: -1500px","visibility: hidden","margin: 0","padding: 0"]),t.appendChild(e),document.body.insertBefore(t,document.body.firstChild);var n=500-t.clientWidth,r=500-t.clientHeight;return document.body.removeChild(t),{width:n,height:r}})(),u="erd_scroll_detection_container";return t(window.document),{makeDetectable(e,t,r){function p(){if(e.debug){var i=[].slice.call(arguments);if(i.unshift(h.get(t),"Scroll: "),a.log.apply)a.log.apply(null,i);else for(var n=0;i.length>n;n++)a.log(i[n])}}function f(e){var t=c(e).container.childNodes[0],i=window.getComputedStyle(t);return!i.width||-1===i.width.indexOf("px")}function g(){var e=window.getComputedStyle(t),i={};return i.position=e.position,i.width=t.offsetWidth,i.height=t.offsetHeight,i.top=e.top,i.right=e.right,i.bottom=e.bottom,i.left=e.left,i.widthCSS=e.width,i.heightCSS=e.height,i}function m(){if(p("storeStyle invoked."),c(t)){var e=g();c(t).style=e}else p("Aborting because element has been uninstalled")}function v(e,t,i){c(e).lastWidth=t,c(e).lastHeight=i}function y(){return 2*d.width+1}function b(){return 2*d.height+1}function S(e){return e+10+y()}function w(e){return e+10+b()}function x(e,t,i){var n=s(e),r=o(e),a=S(t),l=w(i),c=(e=>2*e+y())(t),h=(e=>2*e+b())(i);n.scrollLeft=a,n.scrollTop=l,r.scrollLeft=c,r.scrollTop=h}function E(){var e=c(t).container;if(!e){(e=document.createElement("div")).className=u,e.style.cssText=i(["visibility: hidden","display: inline","width: 0px","height: 0px","z-index: -1","overflow: hidden","margin: 0","padding: 0"]),c(t).container=e,(e=>{e.className+=" "+u+"_animation_active"})(e),t.appendChild(e);var r=()=>{c(t).onRendered&&c(t).onRendered()};n(e,"animationstart",r),c(t).onAnimationStart=r}return e}function C(){function r(){c(t).onExpand&&c(t).onExpand()}function s(){c(t).onShrink&&c(t).onShrink()}if(p("Injecting elements"),c(t)){(()=>{var i=c(t).style;if("static"===i.position){t.style.setProperty("position","relative",e.important?"important":"");var n=(e,t,i,n)=>{var r=i[n];"auto"!==r&&"0"!==(e=>e.replace(/[^-\d\.]/g,""))(r)&&(e.warn("An element that is positioned static has style."+n+"="+r+" which is ignored due to the static positioning. The element will need to be positioned relative, so the style."+n+" will be set to 0. Element: ",t),t.style[n]=0)};n(a,t,i,"top"),n(a,t,i,"right"),n(a,t,i,"bottom"),n(a,t,i,"left")}})();var o=c(t).container;o||(o=E());var l,h,f,g,m=d.width,v=d.height,y=i(["position: absolute","flex: none","overflow: hidden","z-index: -1","visibility: hidden","width: 100%","height: 100%","left: 0px","top: 0px"]),b=i(["position: absolute","flex: none","overflow: hidden","z-index: -1","visibility: hidden"].concat(["left: "+(l=(l=-(1+m))?l+"px":"0"),"top: "+(h=(h=-(1+v))?h+"px":"0"),"right: "+(g=(g=-m)?g+"px":"0"),"bottom: "+(f=(f=-v)?f+"px":"0")])),S=i(["position: absolute","flex: none","overflow: scroll","z-index: -1","visibility: hidden","width: 100%","height: 100%"]),w=i(["position: absolute","flex: none","overflow: scroll","z-index: -1","visibility: hidden","width: 100%","height: 100%"]),x=i(["position: absolute","left: 0","top: 0"]),C=i(["position: absolute","width: 200%","height: 200%"]),T=document.createElement("div"),M=document.createElement("div"),k=document.createElement("div"),D=document.createElement("div"),L=document.createElement("div"),A=document.createElement("div");T.dir="ltr",T.style.cssText=y,T.className=u,M.className=u,M.style.cssText=b,k.style.cssText=S,D.style.cssText=x,L.style.cssText=w,A.style.cssText=C,k.appendChild(D),L.appendChild(A),M.appendChild(k),M.appendChild(L),T.appendChild(M),o.appendChild(T),n(k,"scroll",r),n(L,"scroll",s),c(t).onExpandScroll=r,c(t).onShrinkScroll=s}else p("Aborting because element has been uninstalled")}function T(){function i(t,i,n){var r=(e=>s(e).childNodes[0])(t),o=S(i),a=w(n);r.style.setProperty("width",o+"px",e.important?"important":""),r.style.setProperty("height",a+"px",e.important?"important":"")}function n(n){var s=t.offsetWidth,o=t.offsetHeight,d=s!==c(t).lastWidth||o!==c(t).lastHeight;p("Storing current size",s,o),v(t,s,o),l.add(0,(()=>{d&&(c(t)?r()?(e.debug&&(t.offsetWidth===s&&t.offsetHeight===o||a.warn(h.get(t),"Scroll: Size changed before updating detector elements.")),i(t,s,o)):p("Aborting because element container has not been initialized"):p("Aborting because element has been uninstalled"))})),l.add(1,(()=>{c(t)?r()?x(t,s,o):p("Aborting because element container has not been initialized"):p("Aborting because element has been uninstalled")})),d&&n&&l.add(2,(()=>{c(t)?r()?n():p("Aborting because element container has not been initialized"):p("Aborting because element has been uninstalled")}))}function r(){return!!c(t).container}function d(){p("notifyListenersIfNeeded invoked");var e=c(t);return void 0===c(t).lastNotifiedWidth&&e.lastWidth===e.startSize.width&&e.lastHeight===e.startSize.height?p("Not notifying: Size is the same as the start size, and there has been no notification yet."):e.lastWidth===e.lastNotifiedWidth&&e.lastHeight===e.lastNotifiedHeight?p("Not notifying: Size already notified"):(p("Current size not notified, notifying..."),e.lastNotifiedWidth=e.lastWidth,e.lastNotifiedHeight=e.lastHeight,void zr(c(t).listeners,(e=>{e(t)})))}function u(){p("Scroll detected."),f(t)?p("Scroll event fired while unrendered. Ignoring..."):n(d)}if(p("registerListenersAndPositionElements invoked."),c(t)){c(t).onRendered=()=>{if(p("startanimation triggered."),f(t))p("Ignoring since element is still unrendered...");else{p("Element rendered.");var e=s(t),i=o(t);0!==e.scrollLeft&&0!==e.scrollTop&&0!==i.scrollLeft&&0!==i.scrollTop||(p("Scrollbars out of sync. Updating detector elements..."),n(d))}},c(t).onExpand=u,c(t).onShrink=u;var g=c(t).style;i(t,g.width,g.height)}else p("Aborting because element has been uninstalled")}function M(){if(p("finalizeDomMutation invoked."),c(t)){var e=c(t).style;v(t,e.width,e.height),x(t,e.width,e.height)}else p("Aborting because element has been uninstalled")}function k(){r(t)}function D(){var e;p("Installing..."),c(t).listeners=[],e=g(),c(t).startSize={width:e.width,height:e.height},p("Element start size",c(t).startSize),l.add(0,m),l.add(1,C),l.add(2,T),l.add(3,M),l.add(4,k)}r||(r=t,t=e,e=null),e=e||{},p("Making detectable..."),(e=>!(e=>e===e.ownerDocument.body||e.ownerDocument.body.contains(e))(e)||null===window.getComputedStyle(e))(t)?(p("Element is detached"),E(),p("Waiting until element is attached..."),c(t).onRendered=()=>{p("Element is now attached"),D()}):D()},addListener(e,t){if(!c(e).listeners.push)throw Error("Cannot add listener to an element that is not detectable.");c(e).listeners.push(t)},uninstall(e){var t=c(e);t&&(t.onExpandScroll&&r(s(e),"scroll",t.onExpandScroll),t.onShrinkScroll&&r(o(e),"scroll",t.onShrinkScroll),t.onAnimationStart&&r(t.container,"animationstart",t.onAnimationStart),t.container&&e.removeChild(t.container))},initDocument:t}},ar=e=>{var t;if((e=e||{}).idHandler)t={get:t=>e.idHandler.get(t,!0),set:e.idHandler.set};else{var i=Rr(),n=_r({idGenerator:i,stateHandler:Br});t=n}var r=e.reporter;r||(r=Pr(!1===r));var s=E(e,"batchProcessor",Fr({reporter:r})),o={};o.callOnAdd=!!E(e,"callOnAdd",!0),o.debug=!!E(e,"debug",!1);var a,l=Or(t),c=Ar({stateHandler:Br}),h=E(e,"strategy","object"),d=E(e,"important",!1),u={reporter:r,batchProcessor:s,stateHandler:Br,idHandler:t,important:d};if("scroll"===h&&(Ir.isLegacyOpera()?(r.warn("Scroll strategy is not supported on legacy Opera. Changing to object strategy."),h="object"):Ir.isIE(9)&&(r.warn("Scroll strategy is not supported on IE9. Changing to object strategy."),h="object")),"scroll"===h)a=qr(u);else{if("object"!==h)throw Error("Invalid strategy name: "+h);a=Wr(u)}var p={};return{listenTo(e,i,n){function s(e){var t=l.get(e);Hr(t,(t=>{t(e)}))}function h(e,t,i){l.add(t,i),e&&i(t)}if(n||(n=i,i=e,e={}),!i)throw Error("At least one element required.");if(!n)throw Error("Listener required.");if(x(i))i=[i];else{if(!S(i))return r.error("Invalid arguments. Must be a DOM element or a collection of DOM elements.");i=w(i)}var u=0,f=E(e,"callOnAdd",o.callOnAdd),g=E(e,"onReady",(()=>{})),m=E(e,"debug",o.debug);Hr(i,(e=>{Br.getState(e)||(Br.initState(e),t.set(e));var o=t.get(e);if(m&&r.log("Attaching listener to element",o,e),!c.isDetectable(e))return m&&r.log(o,"Not detectable."),c.isBusy(e)?(m&&r.log(o,"System busy making it detectable"),h(f,e,n),p[o]=p[o]||[],void p[o].push((()=>{++u===i.length&&g()}))):(m&&r.log(o,"Making detectable..."),c.markBusy(e,!0),a.makeDetectable({debug:m,important:d},e,(e=>{if(m&&r.log(o,"onElementDetectable"),Br.getState(e)){c.markAsDetectable(e),c.markBusy(e,!1),a.addListener(e,s),h(f,e,n);var t=Br.getState(e);t&&t.startSize&&(t.startSize.width===e.offsetWidth&&t.startSize.height===e.offsetHeight||s(e)),p[o]&&Hr(p[o],(e=>{e()}))}else m&&r.log(o,"Element uninstalled before being detectable.");delete p[o],++u===i.length&&g()})));m&&r.log(o,"Already detecable, adding listener."),h(f,e,n),u++})),u===i.length&&g()},removeListener:l.removeListener,removeAllListeners:l.removeAllListeners,uninstall(e){if(!e)return r.error("At least one element is required.");if(x(e))e=[e];else{if(!S(e))return r.error("Invalid arguments. Must be a DOM element or a collection of DOM elements.");e=w(e)}Hr(e,(e=>{l.removeAllListeners(e),a.uninstall(e),Br.cleanState(e)}))},initDocument(e){a.initDocument&&a.initDocument(e)}}};var Ur,Vr,$r,Qr,Kr,Zr,Yr,Gr,Xr,Jr,es,ts,is,ns,rs,ss,os,as,ls,cs,hs,ds,us,ps,fs,gs,ms,vs,ys,bs,Ss,ws,xs,Es,Cs,Ts,Ms,ks,Ds,Ls,As,Os,Rs,_s,Ps,Hs,Is,Ns,Fs,js,Ws,Bs,qs,zs,Us,Vs,$s,Qs,Ks,Zs,Ys,Gs,Xs,Js,eo,to,io,no,ro,so,oo,ao,lo,co,ho,uo,po,fo,go,mo,vo,yo,bo,So,wo,xo,Eo,Co,To,Mo,ko,Do,Lo,Ao,Oo,Ro,_o,Po,Ho,Io,No,Fo,jo,Wo,Bo,qo,zo,Uo,Vo,$o,Qo,Ko,Zo,Yo,Go,Xo,Jo,ea,ta,ia,na,ra,sa,oa,aa,la,ca,ha,da,ua,pa,fa,ga,ma,va,ya,ba,Sa,wa,xa,Ea,Ca,Ta,Ma,ka,Da,La,Aa,Oa,Ra,_a,Pa,Ha,Ia,Na,Fa,ja,Wa,Ba,qa,za,Ua,Va,$a,Qa,Ka,Za,Ya,Ga,Xa,Ja,el,tl,il,nl,rl,sl,ol,al,ll,cl,hl,dl,ul,pl,fl,gl,ml,vl,yl,bl,Sl,wl,xl,El,Cl,Tl,Ml,kl,Dl,Ll,Al,Ol,Rl,_l,Pl,Hl,Il,Nl,Fl,jl,Wl,Bl,ql,zl,Ul,Vl,$l,Ql,Kl,Zl,Yl,Gl,Xl,Jl,ec,tc,ic,nc,rc,sc,oc,ac,lc,cc={},hc=!1,dc=!1,uc=!1,pc=!1,fc=!1,gc=!1,mc=!1,vc=!1,yc=!1,bc=!1,Sc=!1,wc=!1,xc=!1,Ec=!1,Cc=!1,Tc=!1,Mc=!1,kc=!1,Dc=!1,Lc=!1,Ac=!1,Oc=!1,Rc=!1,_c=!1,Pc=!1,Hc=!1,Ic=!1,Nc=!1,Fc=!1,jc=!1,Wc=!1,Bc=!1,qc=!1,zc=!1,Uc=!1,Vc=!1,$c=!1,Qc=!1,Kc=!1,Zc=!1,Yc=!1,Gc=!1,Xc=!1,Jc=!1,eh=!1,th=!1,ih=!1,nh=!1,rh=!1,sh=!1,oh=!1,ah=!1,lh=!1,ch=!1,hh=!1,dh=!1,uh=!1,ph=!1,fh=!1,gh=!1,mh=!1,vh=!1,yh=!1,bh=!1,Sh=!1,wh=!1,xh=!1,Eh=!1,Ch=!1,Th=!1,Mh=!1,kh=!1,Dh=!1,Lh=!1,Ah=!1,Oh=!1,Rh=!1,_h=!1,Ph=!1,Hh=!1,Ih=!1,Nh=!1,Fh=!1,jh=!1,Wh=!1,Bh=!1,qh=!1,zh=!1,Uh=!1,Vh=!1,$h=!1,Qh=!1,Kh=!1,Zh=!1,Yh=!1,Gh=!1,Xh=!1,Jh=!1,ed=!1,td=!1,id=!1,nd=!1,rd=!1,sd=!1,od=!1,ad=!1,ld=!1,cd=!1,hd=!1,dd=!1,ud=!1,pd=!1,fd=!1,gd=!1,md=!1,vd=!1,yd=!1,bd=!1,Sd=!1,wd=!1,xd=!1,Ed=!1,Cd=!1,Td=!1,Md=!1,kd=!1,Dd=!1,Ld=!1,Ad=!1,Od=!1,Rd=!1,_d=!1,Pd=!1,Hd=!1,Id=!1,Nd=!1,Fd=!1,jd=!1,Wd=!1,Bd=!1,qd=!1,zd=!1,Ud=!1,Vd=!1,$d=!1,Qd=!1,Kd=!1,Zd=!1,Yd=!1,Gd=!1,Xd=!1,Jd=!1,eu=!1,tu=!1;lc=[].slice,tu||(tu=!0,t(Jl={}),eu||(eu=!0,Gl={},zi(),zi(),(Xl=qi(Yl))._=Xl,i(Gl,"default",(()=>Xl))),n(Jl,zi()),i(Jl,"default",(()=>Xl))),ic={cmd:"⌘",ctrl:"⌃",alt:"⌥",option:"⌥",shift:"⇧",enter:"⏎",left:"←",right:"→",up:"↑",down:"↓"},nc={cmd:"Cmd",ctrl:"Ctrl",alt:"Alt",option:"Alt",shift:"Shift",enter:"Enter",left:"Left",right:"Right",up:"Up",down:"Down"},sc={"~":"`",_:"-","+":"=","|":"\\","{":"[","}":"]",":":";",'"':"'","<":",",">":".","?":"/"},oc=e=>{var t,i,n,r,s;if(n=0,i=[],null==e)return i;for(t=r=0,s=e.length;s>r;t=++r)"."!==e[t]||0!==t&&"\\"===e[t-1]||(i.push(e.substring(n,t)),n=t+1);return i.push(e.substr(n,e.length)),i},tc=e=>ac.isObject(e)&&!ac.isArray(e),rc={adviseBefore(e,t,i){var n;return n=e[t],e[t]=function(){var e;if(e=1>arguments.length?[]:lc.call(arguments,0),!1!==i.apply(this,e))return n.apply(this,e)}},camelize(e){return e?e.replace(/[_-]+(\w)/g,(e=>e[1].toUpperCase())):""},capitalize(e){return e?"github"===e.toLowerCase()?"GitHub":e[0].toUpperCase()+e.slice(1):""},compactObject(e){var t,i,n;for(t in i={},e)null!=(n=e[t])&&(i[t]=n);return i},dasherize(e){return e?(e=e[0].toLowerCase()+e.slice(1)).replace(/([A-Z])|(_)/g,((e,t)=>t?"-"+t.toLowerCase():"-")):""},deepClone(e){return ac.isArray(e)?e.map((e=>rc.deepClone(e))):ac.isObject(e)&&!ac.isFunction(e)?rc.mapObject(e,((e,t)=>[e,rc.deepClone(t)])):e},deepExtend(e){var t,i,n,r,s,o,a;for(r=e,t=0;++ts;s++)r[i=a[s]]=rc.deepExtend(r[i],n[i]);else r=rc.deepClone(n);return r},deepContains(e,t){var i,n;if(null==e)return!1;for(i=0,n=e.length;n>i;i++)if(ac.isEqual(e[i],t))return!0;return!1},endsWith(e,t){return null==t&&(t=""),!!e&&-1!==e.indexOf(t,e.length-t.length)},escapeAttribute(e){return e?e.replace(/"/g,""").replace(/\n/g,"").replace(/\\/g,"-"):""},escapeRegExp(e){return e?e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"):""},humanizeEventName(e,t){var i,n,r,s;return n=(s=e.split(":"))[0],null==(i=s[1])?rc.undasherize(n):(r=rc.undasherize(n),null==t&&(t=rc.undasherize(i)),r+": "+t)},humanizeKey(e,t){var i;return null==t&&(t=process.platform),e?(i="darwin"===t?ic:nc)[e]?i[e]:1===e.length&&null!=sc[e]?[i.shift,sc[e]]:1===e.length&&e===e.toUpperCase()&&e.toUpperCase()!==e.toLowerCase()?[i.shift,e.toUpperCase()]:1===e.length||/f[0-9]{1,2}/.test(e)?e.toUpperCase():"darwin"===t?e:rc.capitalize(e):e},humanizeKeystroke(e,t){var i,n,r,s,o,a,l,c,h,d;if(null==t&&(t=process.platform),!e)return e;for(i=[],l=0,h=(o=e.split(" ")).length;h>l;l++){for(s=[],n=c=0,d=(a=(e=o[l]).split("-")).length;d>c;n=++c)""===(r=a[n])&&""===a[n-1]&&(r="-"),r&&s.push(rc.humanizeKey(r,t));s=(s=ac.uniq(ac.flatten(s))).join("darwin"===t?"":"+"),i.push(s)}return i.join(" ")},isSubset(e,t){return ac.every(e,(e=>ac.include(t,e)))},losslessInvert(e){var t,i,n;for(i in t={},e)null==t[n=e[i]]&&(t[n]=[]),t[n].push(i);return t},mapObject(e,t){var i,n,r,s,o,a;for(n={},r=0,s=(o=Object.keys(e)).length;s>r;r++)n[i=(a=t(i=o[r],e[i]))[0]]=a[1];return n},multiplyString(e,t){var i,n;for(i="",n=0;t>n;)i+=e,n++;return i},pluralize(e,t,i){return null==e&&(e=0),null==i&&(i=t+"s"),1===e?e+" "+t:e+" "+i},remove(e,t){var i;return 0>(i=e.indexOf(t))||e.splice(i,1),e},setValueForKeyPath(e,t,i){var n,r;for(r=oc(t);r.length>1;)null==e[n=r.shift()]&&(e[n]={}),e=e[n];return null!=i?e[r.shift()]=i:delete e[r.shift()]},hasKeyPath(e,t){var i,n,r,s;for(r=0,s=(n=oc(t)).length;s>r;r++){if(!e.hasOwnProperty(i=n[r]))return!1;e=e[i]}return!0},spliceWithArray(e,t,i,n,r){var s,o,a,l;if(null==r&&(r=1e5),r>n.length)return e.splice.apply(e,[t,i].concat(lc.call(n)));for(e.splice(t,i),l=[],s=o=0,a=n.length;r>0?a>=o:o>=a;s=o+=r)l.push(e.splice.apply(e,[t+s,0].concat(lc.call(n.slice(s,s+r)))));return l},sum(e){var t,i,n;for(t=0,i=0,n=e.length;n>i;i++)t+=e[i];return t},uncamelcase(e){var t;return e?(t=e.replace(/([A-Z])|_+/g,((e,t)=>(null==t&&(t="")," "+t))),rc.capitalize(t.trim())):""},undasherize(e){return e?e.split("-").map(rc.capitalize).join(" "):""},underscore(e){return e?(e=e[0].toLowerCase()+e.slice(1)).replace(/([A-Z])|-+/g,((e,t)=>(null==t&&(t=""),"_"+t.toLowerCase()))):""},valueForKeyPath(e,t){var i,n,r;for(n=0,r=(i=oc(t)).length;r>n;n++)if(null==(e=e[i[n]]))return;return e},isEqual(e,t,i,n){return ac.isArray(i)&&ac.isArray(n)?ec(e,t,i,n):ec(e,t)},isEqualForProperties(){var e,t,i,n,r,s;for(e=arguments[0],t=arguments[1],r=0,s=(i=3>arguments.length?[]:lc.call(arguments,2)).length;s>r;r++)if(!ac.isEqual(e[n=i[r]],t[n]))return!1;return!0}},ec=(e,t,i,n)=>{var r,s,o,a,l,c,h,d,u,p,f,g,m;if(null==i&&(i=[]),null==n&&(n=[]),e===t)return ac.isEqual(e,t);if(ac.isFunction(e)||ac.isFunction(t))return ac.isEqual(e,t);for(f=i.length;f--;)if(i[f]===e)return n[f]===t;if(i.push(e),n.push(t),d=!1,ac.isFunction(null!=e?e.isEqual:void 0))d=e.isEqual(t,i,n);else if(ac.isFunction(null!=t?t.isEqual:void 0))d=t.isEqual(e,n,i);else if(ac.isArray(e)&&ac.isArray(t)&&e.length===t.length){for(d=!0,u=g=0,m=e.length;m>g;u=++g)if(!ec(e[u],t[u],i,n)){d=!1;break}}else if(ac.isRegExp(e)&&ac.isRegExp(t))d=ac.isEqual(e,t);else if(ac.isElement(e)&&ac.isElement(t))d=e===t;else if(ac.isObject(e)&&ac.isObject(t))if(l=t.constructor,s=ac.isFunction(r=e.constructor)&&r instanceof r,c=ac.isFunction(l)&&l instanceof l,r===l||s&&c){for(p in o=0,d=!0,e)if(a=e[p],ac.has(e,p)&&(o++,!ac.has(t,p)||!ec(a,t[p],i,n))){d=!1;break}if(d){for(p in h=0,t)ac.has(t,p)&&h++;d=o===h}}else d=!1;else d=ac.isEqual(e,t);return i.pop(),n.pop(),d},cc=(ac=Jl).extend({},ac,rc),g();class iu{constructor(){this.canvas=document.createElement("canvas");const e="linux"!==process.platform;this.context=this.canvas.getContext("2d",{desynchronized:e}),this.canvas.webkitImageSmoothingEnabled=!1,this.context.imageSmoothingEnabled=!1,this.offscreenCanvas=document.createElement("canvas"),this.offscreenContext=this.offscreenCanvas.getContext("2d",{desynchronized:e}),this.offscreenCanvas.webkitImageSmoothingEnabled=!1,this.offscreenContext.imageSmoothingEnabled=!1}attach(e){this.canvas.parentNode||e.appendChild(this.canvas)}setSize(e=0,t=0){this.canvas.width=e,this.canvas.height=t,this.context.imageSmoothingEnabled=!1,this.resetOffscreenSize()}getSize(){return{width:this.canvas.width,height:this.canvas.height}}resetOffscreenSize(){this.offscreenCanvas.width=this.canvas.width,this.offscreenCanvas.height=this.canvas.height,this.offscreenContext.imageSmoothingEnabled=!1}copyToOffscreen(){this.canvas.width>0&&this.canvas.height>0&&this.offscreenContext.drawImage(this.canvas,0,0)}copyFromOffscreen(){this.offscreenCanvas.width>0&&this.offscreenCanvas.height>0&&this.context.drawImage(this.offscreenCanvas,0,0)}copyPartFromOffscreen(e,t,i){this.offscreenCanvas.width>0&&this.offscreenCanvas.height>0&&this.context.drawImage(this.offscreenCanvas,0,e,this.offscreenCanvas.width,i,0,t,this.offscreenCanvas.width,i)}clearCanvas(){this.context.clearRect(0,0,this.canvas.width,this.canvas.height)}}class nu{constructor(){this.domStylesCache=new Map}retrieveStyleFromDom(e,t,i,n=!0){const r=e.join(" ");let s=this.domStylesCache.get(r);if(n&&void 0!==s){const e=s[t];if(null!=e)return e}this.ensureDummyNodeExistence(i),void 0===s&&(s={},this.domStylesCache.set(r,s));let o=this.dummyNode;for(let t=0,i=e.length;i>t;t++){const i=e[t],n=document.createElement("span");n.className=i.replace(/\.+/g," "),null!=o&&o.appendChild(n),o=n}const a=window.getComputedStyle(o),l=a.getPropertyValue("-webkit-filter");let c=a.getPropertyValue(t);return l.indexOf("hue-rotate")>-1&&(c=function(e,t){const i=e.match(/rgb(a?)\((\d+), (\d+), (\d+)(, (\d+(\.\d+)?))?\)/);let[,,n,r,s,,o]=i,[,a]=t.match(/hue-rotate\((\d+)deg\)/);return[n,r,s,o,a]=[n,r,s,o,a].map(Number),[n,r,s]=((e,t,i,n)=>{function r(e){return Math.ceil(Math.max(0,Math.min(255,e)))}const s=[1,0,0,0,1,0,0,0,1],o=.2126,a=.7152,l=.0722,c=Math.cos(n*Math.PI/180),h=Math.sin(n*Math.PI/180);return s[0]=o+.7874*c-o*h,s[1]=a-a*c-a*h,s[2]=l-l*c+.9278*h,s[3]=o-o*c+.143*h,s[4]=a+(1-a)*c+.14*h,s[5]=l-l*c-.283*h,s[6]=o-o*c-.7874*h,s[7]=a-a*c+a*h,s[8]=l+.9278*c+l*h,[r(s[0]*e+s[1]*t+s[2]*i),r(s[3]*e+s[4]*t+s[5]*i),r(s[6]*e+s[7]*t+s[8]*i)]})(n,r,s,a),isNaN(o)?`rgb(${n}, ${r}, ${s})`:`rgba(${n}, ${r}, ${s}, ${o})`}(c,l)),""!==c&&(s[t]=c,this.domStylesCache.set(r,s)),this.dummyNode.innerHTML="",c}ensureDummyNodeExistence(e){null==this.dummyNode&&(this.dummyNode=document.createElement("span"),this.dummyNode.style.visibility="hidden"),e.appendChild(this.dummyNode)}invalidateDOMStylesCache(){this.domStylesCache.clear()}}var ru=e(g());class su extends ru{initializeCanvas(){this.tokensLayer=new iu,this.backLayer=new iu,this.frontLayer=new iu,this.pendingChanges||(this.pendingChanges=[]),this.pendingBackDecorationChanges||(this.pendingBackDecorationChanges=[]),this.pendingFrontDecorationChanges||(this.pendingFrontDecorationChanges=[]),this.maxTokensInOneLine=atom.config.get("minimap.maxTokensInOneLine"),this.DOMStylesReader=new nu}getFrontCanvas(){return this.frontLayer.canvas}attachCanvases(e){this.backLayer.attach(e),this.tokensLayer.attach(e),this.frontLayer.attach(e)}setCanvasesSize(e,t){this.backLayer.setSize(e,t),this.tokensLayer.setSize(e,t),this.frontLayer.setSize(e,t)}updateCanvas(){const e=this.minimap.getFirstVisibleScreenRow(),t=this.minimap.getLastVisibleScreenRow();this.updateTokensLayer(e,t),this.updateBackDecorationsLayer(e,t),this.updateFrontDecorationsLayer(e,t),this.pendingChanges=[],this.pendingBackDecorationChanges=[],this.pendingFrontDecorationChanges=[],this.offscreenFirstRow=e,this.offscreenLastRow=t}updateTokensLayer(e,t){const i=Qi(e,t,this.pendingChanges,this.offscreenFirstRow,this.offscreenLastRow);this.redrawRangesOnLayer(this.tokensLayer,i,e,t,this.drawLines)}updateBackDecorationsLayer(e,t){const i=Qi(e,t,this.pendingBackDecorationChanges,this.offscreenFirstRow,this.offscreenLastRow);this.redrawRangesOnLayer(this.backLayer,i,e,t,this.drawBackDecorationsForLines)}updateFrontDecorationsLayer(e,t){const i=Qi(e,t,this.pendingFrontDecorationChanges,this.offscreenFirstRow,this.offscreenLastRow);this.redrawRangesOnLayer(this.frontLayer,i,e,t,this.drawFrontDecorationsForLines)}getTextOpacity(){return this.textOpacity}getDefaultColor(e){return $i(this.DOMStylesReader.retrieveStyleFromDom([".editor"],"color",e,!0),this.getTextOpacity())}getTokenColor(e,t){return $i(this.DOMStylesReader.retrieveStyleFromDom(e.scopeDescriptor||e.scopes,"color",t,!0),this.getTextOpacity())}getDecorationColor(e,t){const i=e.getProperties();if(i.color)return i.color;if(i.scope){const e=i.scope.split(/\s+/);return this.DOMStylesReader.retrieveStyleFromDom(e,"background-color",t,!0)}return this.getDefaultColor(t)}redrawRangesOnLayer(e,t,i,n,r){const s=this.minimap.getDevicePixelRatio(),o=this.minimap.getLineHeight()*s;if(e.clearCanvas(),0===t.length)r.call(this,i,n,0);else{for(let n=0,r=t.length;r>n;n++){const r=t[n];e.copyPartFromOffscreen(r.offscreenRow*o,(r.start-i)*o,(r.end-r.start)*o)}this.drawLinesForRanges(r,t,i,n)}e.resetOffscreenSize(),e.copyToOffscreen()}drawLinesForRanges(e,t,i,n){let r=i;for(let n=0,s=t.length;s>n;n++){const s=t[n];e.call(this,r,s.start,r-i),r=s.end}r>n||e.call(this,r,n,r-i)}drawBackDecorationsForLines(e,t,i){if(e>t)return;const n=this.minimap.getDevicePixelRatio(),r=this.minimap.getLineHeight()*n,s=this.minimap.getCharHeight()*n,o=this.minimap.getCharWidth()*n,a=this.minimap.decorationsByTypeThenRows(e,t),{width:l,height:c}=this.tokensLayer.getSize(),h={context:this.backLayer.context,canvasWidth:l,canvasHeight:c,lineHeight:r,charWidth:o,charHeight:s,orders:pn()},d=this.minimap.getTextEditorElement();ou["background-custom"]=(e,t,i)=>Vi(e,t,i,d);for(let n=e;t>=n;n++)h.row=i+(n-e),h.yRow=h.row*r,h.screenRow=n,this.drawDecorations(n,a,h,ou,d);this.backLayer.context.fill()}drawFrontDecorationsForLines(e,t,i){if(e>t)return;const n=this.minimap.getDevicePixelRatio(),r=this.minimap.getLineHeight()*n,s=this.minimap.getCharHeight()*n,o=this.minimap.getCharWidth()*n,a=this.minimap.decorationsByTypeThenRows(e,t),{width:l,height:c}=this.tokensLayer.getSize(),h={context:this.frontLayer.context,canvasWidth:l,canvasHeight:c,lineHeight:r,charWidth:o,charHeight:s,orders:pn()},d=this.minimap.getTextEditorElement();au["foreground-custom"]=(e,t,i)=>Vi(e,t,i,d);for(let n=e;t>=n;n++)h.row=i+(n-e),h.yRow=h.row*r,h.screenRow=n,this.drawDecorations(n,a,h,au,d);h.context.fill()}drawLines(e,t,i){if(e>t)return;const n=this.minimap.getDevicePixelRatio(),r=this.minimap.getLineHeight()*n,s=this.minimap.getCharHeight()*n,o=this.minimap.getCharWidth()*n,a=this.displayCodeHighlights,l=this.tokensLayer.context,{width:c}=this.tokensLayer.getSize(),h=this.minimap.getTextEditor(),d=this.minimap.getTextEditorElement();let u,p,f=i*r-r;(function(e,t,i,n,r){const s=(e=>{const t=e.getInvisibles(),i=[];return null!=t.cr&&i.push(t.cr),null!=t.eol&&i.push(t.eol),null!=t.space&&i.push(t.space),null!=t.tab&&i.push(t.tab),0!==i.length?RegExp(i.filter((e=>"string"==typeof e)).map(cc.escapeRegExp).join("|"),"g"):null})(i);t=Math.min(t,i.getScreenLineCount());for(let o=e;t>o;o++){const e=i.tokensForScreenRow(o),t=Math.min(e.length,n);for(let i=0;t>i;i++){const t=e[i];r(o,{text:t.text.replace(s," "),scopes:t.scopes})}}})(e,t,h,this.maxTokensInOneLine,((e,t)=>{if(u!==e&&(p=0,f+=r,u=e,l.clearRect(p,f,c,r)),c>=p)if(/^\s+$/.test(t.text))p+=t.text.length*o;else{const e=a?this.getTokenColor(t,d):this.getDefaultColor(d);p=((e,t,i,n,r,s,o,a)=>{if(e.fillStyle=i,a){const i=t.length*s;return e.fillRect(n,r,i,o),n+i}{let i=0;for(let a=0,l=t.length;l>a;a++)/\s/.test(t[a])?(i>0&&e.fillRect(n-i*s,r,i*s,o),i=0):i++,n+=s;return i>0&&e.fillRect(n-i*s,r,i*s,o),n}})(l,t.text,e,p,f,o,s,this.ignoreWhitespacesInTokens)}})),l.fill()}drawDecorations(e,t,i,n,r){let s=[];i.context.clearRect(0,i.yRow,i.canvasWidth,i.lineHeight);for(const i in n)s=s.concat(null!=t[i]&&t[i][e]||[]);if(s.sort(((e,t)=>(i.orders[e.properties.plugin]||0)-(i.orders[t.properties.plugin]||0))),null!=s?s.length:void 0)for(let e=0,t=s.length;t>e;e++){const t=s[e];(0,n[t.properties.type])(t,i,this.getDecorationColor(t,r))}}}const ou={line(e,t,i){t.context.fillStyle=i,t.context.fillRect(0,t.yRow,t.canvasWidth,t.lineHeight)},"highlight-under":Ui},au={gutter(e,t,i){t.context.fillStyle=i,t.context.fillRect(0,t.yRow,1,t.lineHeight)},"highlight-over":Ui,"highlight-outline"(e,t,i){let n,r,s,o,a,l;const{lineHeight:c,charWidth:h,canvasWidth:d,screenRow:u}=t,p=e.getMarker().getScreenRange(),f=p.end.row-p.start.row,g=t.yRow,m=g+c;t.context.fillStyle=i,0===f?(r=p.end.column-p.start.column,s=r*h,l=p.start.column*h,a=l+s,t.context.fillRect(l,g,s,1),t.context.fillRect(l,m-1,s,1),t.context.fillRect(l,g,1,c),t.context.fillRect(a,g,1,c)):1===f?(l=p.start.column*t.charWidth,a=p.end.column*t.charWidth,u===p.start.row?(s=t.canvasWidth-l,o=Math.max(l,a),n=t.canvasWidth-o,t.context.fillRect(l,g,s,1),t.context.fillRect(o,m-1,n,1),t.context.fillRect(l,g,1,c),t.context.fillRect(d-1,g,1,c)):(s=d-l,n=d-a,t.context.fillRect(0,g,l,1),t.context.fillRect(0,m-1,a,1),t.context.fillRect(0,g,1,c),t.context.fillRect(a,g,1,c))):(l=p.start.column*h,a=p.end.column*h,u===p.start.row?(s=d-l,t.context.fillRect(l,g,s,1),t.context.fillRect(l,g,1,c),t.context.fillRect(d-1,g,1,c)):u===p.end.row?(s=d-l,t.context.fillRect(0,m-1,a,1),t.context.fillRect(0,g,1,c),t.context.fillRect(a,g,1,c)):(t.context.fillRect(0,g,1,c),t.context.fillRect(d-1,g,1,c),u===p.start.row+1&&t.context.fillRect(0,g,l,1),u===p.end.row-1&&t.context.fillRect(a,m-1,d-a,1)))}};var lu={};t(lu),i(lu,"default",(()=>Zi));const cu=class{static initClass(){return Ki(this,vr.EventsDelegation,vr.SpacePenDSL.Babel),Zi(this,"minimap-quick-settings")}static content(){this.div({class:"select-list popover-list minimap-quick-settings"},(()=>{this.input({type:"text",class:"hidden-input",outlet:"hiddenInput"}),this.ol({class:"list-group mark-active",outlet:"list"},(()=>{this.li({class:"separator",outlet:"separator"}),this.li({class:"code-highlights",outlet:"codeHighlights"},"code-highlights"),this.li({class:"absolute-mode",outlet:"absoluteMode"},"absolute-mode"),this.li({class:"adjust-absolute-mode-height",outlet:"adjustAbsoluteModeHeight"},"adjust-absolute-mode-height")})),this.div({class:"btn-group"},(()=>{this.button({class:"btn btn-default",outlet:"onLeftButton"},"On Left"),this.button({class:"btn btn-default",outlet:"onRightButton"},"On Right")}))}))}createdCallback(){this.buildContent()}setModel(e){this.selectedItem=null,this.minimap=e,this.emitter=new fr,this.subscriptions=new ur,this.plugins={},this.itemsActions=new WeakMap;const t=this.subscriptions;t.add(wn((({name:e,plugin:t})=>this.addItemFor(e,t)))),t.add(xn((({name:e,plugin:t})=>this.removeItemFor(e,t)))),t.add(En((({name:e,plugin:t})=>this.activateItem(e,t)))),t.add(Cn((({name:e,plugin:t})=>this.deactivateItem(e,t)))),t.add(atom.commands.add("minimap-quick-settings",{"core:move-up":()=>{this.selectPreviousItem()},"core:move-down":()=>{this.selectNextItem()},"core:move-left"(){atom.config.set("minimap.displayMinimapOnLeft",!0)},"core:move-right"(){atom.config.set("minimap.displayMinimapOnLeft",!1)},"core:cancel":()=>{this.destroy()},"core:confirm":()=>{this.toggleSelectedItem()}})),this.codeHighlights.classList.toggle("active",this.minimap.displayCodeHighlights),t.add(this.subscribeTo(this.codeHighlights,{mousedown:e=>{e.preventDefault(),atom.config.set("minimap.displayCodeHighlights",!this.minimap.displayCodeHighlights)}})),this.itemsActions.set(this.codeHighlights,(()=>{atom.config.set("minimap.displayCodeHighlights",!this.minimap.displayCodeHighlights)})),t.add(this.subscribeTo(this.absoluteMode,{mousedown(e){e.preventDefault(),atom.config.set("minimap.absoluteMode",!atom.config.get("minimap.absoluteMode"))}})),this.itemsActions.set(this.absoluteMode,(()=>{atom.config.set("minimap.absoluteMode",!atom.config.get("minimap.absoluteMode"))})),t.add(this.subscribeTo(this.adjustAbsoluteModeHeight,{mousedown(e){e.preventDefault(),atom.config.set("minimap.adjustAbsoluteModeHeight",!atom.config.get("minimap.adjustAbsoluteModeHeight"))}})),this.itemsActions.set(this.adjustAbsoluteModeHeight,(()=>{atom.config.set("minimap.adjustAbsoluteModeHeight",!atom.config.get("minimap.adjustAbsoluteModeHeight"))})),t.add(this.subscribeTo(this.hiddenInput,{focusout:e=>{this.destroy()}},{passive:!0})),t.add(this.subscribeTo(this.onLeftButton,{mousedown(e){e.preventDefault(),atom.config.set("minimap.displayMinimapOnLeft",!0)}})),t.add(this.subscribeTo(this.onRightButton,{mousedown(e){e.preventDefault(),atom.config.set("minimap.displayMinimapOnLeft",!1)}})),t.add(atom.config.observe("minimap.displayCodeHighlights",(e=>{this.codeHighlights.classList.toggle("active",e)}))),t.add(atom.config.observe("minimap.absoluteMode",(e=>{this.absoluteMode.classList.toggle("active",e)}))),t.add(atom.config.observe("minimap.adjustAbsoluteModeHeight",(e=>{this.adjustAbsoluteModeHeight.classList.toggle("active",e)}))),t.add(atom.config.observe("minimap.displayMinimapOnLeft",(e=>{this.onLeftButton.classList.toggle("selected",e),this.onRightButton.classList.toggle("selected",!e)}))),this.initList()}onDidDestroy(e){return this.emitter.on("did-destroy",e)}attach(){atom.views.getView(atom.workspace).appendChild(this),this.hiddenInput.focus()}destroy(){this.emitter.emit("did-destroy"),this.subscriptions.dispose(),this.parentNode.removeChild(this)}initList(){this.itemsDisposables=new WeakMap;for(const e in Eu)this.addItemFor(e,Eu[e])}toggleSelectedItem(){const e=this.itemsActions.get(this.selectedItem);"function"==typeof e&&e()}selectNextItem(){this.selectedItem.classList.remove("selected"),null!=this.selectedItem.nextSibling?(this.selectedItem=this.selectedItem.nextSibling,this.selectedItem.matches(".separator")&&(this.selectedItem=this.selectedItem.nextSibling)):this.selectedItem=this.list.firstChild,this.selectedItem.classList.add("selected")}selectPreviousItem(){this.selectedItem.classList.remove("selected"),null!=this.selectedItem.previousSibling?(this.selectedItem=this.selectedItem.previousSibling,this.selectedItem.matches(".separator")&&(this.selectedItem=this.selectedItem.previousSibling)):this.selectedItem=this.list.lastChild,this.selectedItem.classList.add("selected")}addItemFor(e,t){const i=document.createElement("li"),n=()=>{an(e)};t.isActive()&&i.classList.add("active"),i.textContent=e,this.itemsActions.set(i,n),this.itemsDisposables.set(i,this.addDisposableEventListener(i,"mousedown",(e=>{e.preventDefault(),n()}))),this.plugins[e]=i,this.list.insertBefore(i,this.separator),null==this.selectedItem&&(this.selectedItem=i,this.selectedItem.classList.add("selected"))}removeItemFor(e,t){try{this.list.removeChild(this.plugins[e])}catch(e){}delete this.plugins[e]}activateItem(e,t){this.plugins[e].classList.add("active")}deactivateItem(e,t){this.plugins[e].classList.remove("active")}}.initClass(),hu=e(ar)({strategy:"scroll"});let du;const uu=class{static initClass(){return Ki(this,su,vr.EventsDelegation,vr.AncestorsMethods),Zi(this,"atom-text-editor-minimap")}createdCallback(){this.minimap=void 0,this.width=void 0,this.height=void 0,this.subscriptions=new ur,this.visibleAreaSubscription=void 0,this.quickSettingsSubscription=void 0,this.dragSubscription=void 0,this.openQuickSettingSubscription=void 0,this.displayMinimapOnLeft=!1,this.minimapScrollIndicator=void 0,this.displayMinimapOnLeft=void 0,this.displayPluginsControls=void 0,this.textOpacity=void 0,this.displayCodeHighlights=void 0,this.adjustToSoftWrap=void 0,this.useHardwareAcceleration=void 0,this.absoluteMode=void 0,this.visibleArea=void 0,this.controls=void 0,this.scrollIndicator=void 0,this.openQuickSettings=void 0,this.quickSettingsElement=void 0,this.attached=void 0,this.attachedToTextEditor=void 0,this.standAlone=void 0,this.wasVisible=void 0,this.offscreenFirstRow=void 0,this.offscreenLastRow=void 0,this.frameRequested=void 0,this.flexBasis=void 0,this.initializeContent(),this.subscriptions.add(atom.config.observe("minimap.displayMinimapOnLeft",(e=>{this.displayMinimapOnLeft=e,e?du||(du=document.createElement("style"),du.setAttribute("context","atom-text-editor-minimap"),document.head.appendChild(du)):du&&(du.parentNode.removeChild(du),du=null),this.updateMinimapFlexPosition(),this.measureHeightAndWidth(!0,!0)})),atom.config.observe("minimap.minimapScrollIndicator",(e=>{this.minimapScrollIndicator=e,this.minimapScrollIndicator&&null==this.scrollIndicator&&!this.standAlone?this.initializeScrollIndicator():null!=this.scrollIndicator&&this.disposeScrollIndicator(),this.attached&&this.requestUpdate()})),atom.config.observe("minimap.displayPluginsControls",(e=>{this.displayPluginsControls=e,this.displayPluginsControls&&null==this.openQuickSettings&&!this.standAlone?this.initializeOpenQuickSettings():null!=this.openQuickSettings&&this.disposeOpenQuickSettings()})),atom.config.observe("minimap.textOpacity",(e=>{this.textOpacity=e,this.attached&&this.requestForcedUpdate()})),atom.config.observe("minimap.displayCodeHighlights",(e=>{this.displayCodeHighlights=e,this.attached&&this.requestForcedUpdate()})),atom.config.observe("minimap.smoothScrolling",(e=>{this.smoothScrolling=e,this.attached&&(this.smoothScrolling?this.requestUpdate():(this.backLayer.canvas.style.cssText="",this.tokensLayer.canvas.style.cssText="",this.frontLayer.canvas.style.cssText=""))})),atom.config.observe("minimap.adjustMinimapWidthToSoftWrap",(e=>{this.adjustToSoftWrap=e,this.attached&&this.measureHeightAndWidth()})),atom.config.observe("minimap.adjustMinimapWidthOnlyIfSmaller",(e=>{this.adjustOnlyIfSmaller=e,this.attached&&this.measureHeightAndWidth()})),atom.config.observe("minimap.useHardwareAcceleration",(e=>{this.useHardwareAcceleration=e,this.attached&&this.requestUpdate()})),atom.config.observe("minimap.absoluteMode",(e=>{this.absoluteMode=e,this.classList.toggle("absolute",this.absoluteMode)})),atom.config.observe("minimap.adjustAbsoluteModeHeight",(e=>{this.adjustAbsoluteModeHeight=e,this.classList.toggle("adjust-absolute-height",this.adjustAbsoluteModeHeight),this.attached&&this.measureHeightAndWidth()})),atom.config.observe("minimap.ignoreWhitespacesInTokens",(e=>{this.ignoreWhitespacesInTokens=e,this.attached&&this.requestForcedUpdate()})),atom.config.observe("editor.preferredLineLength",(()=>{this.attached&&this.measureHeightAndWidth()})),atom.config.observe("editor.softWrap",(()=>{this.attached&&this.requestUpdate()})),atom.config.observe("editor.showInvisibles",(()=>{this.attached&&this.requestUpdate()})),atom.config.observe("editor.invisibles",(()=>{this.attached&&this.requestUpdate()})),atom.config.observe("editor.softWrapAtPreferredLineLength",(()=>{this.attached&&this.requestUpdate()})))}attachedCallback(){if("function"==typeof atom.views.pollDocument)this.subscriptions.add(atom.views.pollDocument((()=>{this.pollDOM()})));else{this.intersectionObserver=new IntersectionObserver((e=>{const{intersectionRect:t}=e[e.length-1];(t.width>0||t.height>0)&&this.measureHeightAndWidth(!0,!0)})),this.intersectionObserver.observe(this),this.isVisible()&&this.measureHeightAndWidth(!0,!0);const e=()=>{this.measureHeightAndWidth(!1,!1)};hu.listenTo(this,e),window.addEventListener("resize",e,{passive:!0}),this.subscriptions.add(new pr((()=>{hu.removeListener(this,e)})),new pr((()=>{window.removeEventListener("resize",e)})))}this.measureHeightAndWidth(),this.updateMinimapFlexPosition(),this.attached=!0,this.attachedToTextEditor=this.queryParentSelector("atom-text-editor")===this.minimap.getTextEditorElement(),this.attachedToTextEditor&&this.minimap.getTextEditorElement().setAttribute("with-minimap",""),this.subscriptions.add(atom.styles.onDidAddStyleElement((()=>{this.DOMStylesReader.invalidateDOMStylesCache(),this.requestForcedUpdate()})),this.subscribeToMediaQuery())}detachedCallback(){this.minimap.getTextEditorElement().removeAttribute("with-minimap"),this.attached=!1}isVisible(){return this.offsetWidth>0||this.offsetHeight>0}attach(e){if(this.attached)return;const t=e||this.minimap.getTextEditorElement(),i=t.querySelectorAll("atom-text-editor-minimap");i.length&&[].forEach.call(i,(e=>{e.destroy()})),t.appendChild(this)}detach(){this.attached&&null!=this.parentNode&&this.parentNode.removeChild(this)}updateMinimapFlexPosition(){this.classList.toggle("left",this.displayMinimapOnLeft)}destroy(){this.subscriptions.dispose(),this.detach(),this.minimap=null}initializeContent(){this.initializeCanvas(),this.attachCanvases(this),this.createVisibleArea(),this.createControls(),this.subscriptions.add(this.subscribeTo(this,{mousewheel:e=>{!this.standAlone&&this.minimap.onMouseWheel&&this.minimap.onMouseWheel(e)}},{passive:!0}),this.subscribeTo(this.getFrontCanvas(),{mousedown:e=>{this.canvasPressed(Gi(e))},touchstart:e=>{this.canvasPressed(Xi(e))}},{passive:!0}))}createVisibleArea(){this.visibleArea||(this.visibleArea=document.createElement("div"),this.visibleArea.classList.add("minimap-visible-area"),this.appendChild(this.visibleArea),this.visibleAreaSubscription=this.subscribeTo(this.visibleArea,{mousedown:e=>{this.startDrag(Gi(e))},touchstart:e=>{this.startDrag(Xi(e))}},{passive:!0}),this.subscriptions.add(this.visibleAreaSubscription))}removeVisibleArea(){this.visibleArea&&(this.subscriptions.remove(this.visibleAreaSubscription),this.visibleAreaSubscription.dispose(),this.removeChild(this.visibleArea),delete this.visibleArea)}createControls(){this.controls||this.standAlone||(this.controls=document.createElement("div"),this.controls.classList.add("minimap-controls"),this.appendChild(this.controls))}removeControls(){this.controls&&(this.removeChild(this.controls),delete this.controls)}initializeScrollIndicator(){this.scrollIndicator||this.standAlone||(this.scrollIndicator=document.createElement("div"),this.scrollIndicator.classList.add("minimap-scroll-indicator"),this.controls.appendChild(this.scrollIndicator))}disposeScrollIndicator(){this.scrollIndicator&&(this.controls.removeChild(this.scrollIndicator),delete this.scrollIndicator)}initializeOpenQuickSettings(){this.openQuickSettings||this.standAlone||(this.openQuickSettings=document.createElement("div"),this.openQuickSettings.classList.add("open-minimap-quick-settings"),this.controls.appendChild(this.openQuickSettings),this.openQuickSettingSubscription=this.subscribeTo(this.openQuickSettings,{mousedown:e=>{if(e.preventDefault(),e.stopPropagation(),null!=this.quickSettingsElement)this.quickSettingsElement.destroy(),this.quickSettingsSubscription.dispose();else{this.quickSettingsElement=new cu,this.quickSettingsElement.setModel(this),this.quickSettingsSubscription=this.quickSettingsElement.onDidDestroy((()=>{this.quickSettingsElement=null}));const{top:e,left:t,right:i}=this.getFrontCanvas().getBoundingClientRect();this.quickSettingsElement.style.top=e+"px",this.quickSettingsElement.attach(),this.quickSettingsElement.style.left=this.displayMinimapOnLeft?i+"px":t-this.quickSettingsElement.clientWidth+"px"}}}))}disposeOpenQuickSettings(){this.openQuickSettings&&(this.controls.removeChild(this.openQuickSettings),this.openQuickSettingSubscription.dispose(),delete this.openQuickSettings)}getModel(){return this.minimap}setModel(e){return this.minimap=e,this.subscriptions.add(this.minimap.onDidChangeScrollTop((()=>{this.requestUpdate()})),this.minimap.onDidChangeScrollLeft((()=>{this.requestUpdate()})),this.minimap.onDidDestroy((()=>{this.destroy()})),this.minimap.onDidChangeConfig((()=>{if(this.attached)return this.requestForcedUpdate()})),this.minimap.onDidChangeStandAlone((()=>{this.setStandAlone(this.minimap.isStandAlone()),this.requestUpdate()})),this.minimap.onDidChange((e=>{this.pendingChanges.push(e),this.requestUpdate()})),this.minimap.onDidChangeDecorationRange((e=>{const{type:t}=e;"line"===t||"highlight-under"===t||"background-custom"===t?this.pendingBackDecorationChanges.push(e):this.pendingFrontDecorationChanges.push(e),this.requestUpdate()})),Tn((()=>{this.requestForcedUpdate()}))),this.setStandAlone(this.minimap.isStandAlone()),null!=this.width&&null!=this.height&&this.minimap.setScreenHeightAndWidth(this.height,this.width),this.minimap}setStandAlone(e){this.standAlone=e,this.standAlone?(this.setAttribute("stand-alone",!0),this.disposeScrollIndicator(),this.disposeOpenQuickSettings(),this.removeControls(),this.removeVisibleArea()):(this.removeAttribute("stand-alone"),this.createVisibleArea(),this.createControls(),this.minimapScrollIndicator&&this.initializeScrollIndicator(),this.displayPluginsControls&&this.initializeOpenQuickSettings())}requestUpdate(){this.frameRequested||(this.frameRequested=!0,requestAnimationFrame((()=>{this.update(),this.frameRequested=!1})))}requestForcedUpdate(){this.offscreenFirstRow=null,this.offscreenLastRow=null,this.requestUpdate()}update(){if(!(this.attached&&this.isVisible()&&this.minimap))return;const e=this.minimap;e.enableCache();const t=this.getFrontCanvas(),i=this.minimap.getDevicePixelRatio(),n=e.getTextEditorScaledScrollLeft(),r=e.getTextEditorScaledScrollTop()-e.getScrollTop(),s=Math.min(t.width/i,this.width),o=s+n;this.adjustToSoftWrap&&this.flexBasis?(this.style.flexBasis=this.flexBasis+"px",this.style.width=this.flexBasis+"px"):(this.style.flexBasis=null,this.style.width=null),Ji(this.visibleArea,{width:Math.round(o)+"px",height:Math.round(e.getTextEditorScaledHeight())+"px",transform:en(0,r,this.useHardwareAcceleration),"border-left-width":Math.round(n)+"px"}),Ji(this.controls,{width:Math.round(s)+"px"});const a=e.getFirstVisibleScreenRow()*e.getLineHeight()-e.getScrollTop();if(this.smoothScrolling){let e=en(0,a,this.useHardwareAcceleration);if(1!==i){const t=1/i;e+=" "+tn(t,t,this.useHardwareAcceleration)}Ji(this.backLayer.canvas,{transform:e}),Ji(this.tokensLayer.canvas,{transform:e}),Ji(this.frontLayer.canvas,{transform:e})}else{const e=1/i,t=tn(e,e,this.useHardwareAcceleration);Ji(this.backLayer.canvas,{transform:t}),Ji(this.tokensLayer.canvas,{transform:t}),Ji(this.frontLayer.canvas,{transform:t})}if(this.minimapScrollIndicator&&!this.scrollIndicator&&e.canScroll()&&this.initializeScrollIndicator(),null!=this.scrollIndicator){const t=e.getScreenHeight(),i=t*(t/e.getHeight()),n=(t-i)*e.getScrollRatio();Ji(this.scrollIndicator,{height:i+"px",transform:en(0,n,this.useHardwareAcceleration)}),e.canScroll()||this.disposeScrollIndicator()}this.absoluteMode&&this.adjustAbsoluteModeHeight&&this.updateCanvasesSize(),this.updateCanvas(),e.clearCache()}setDisplayCodeHighlights(e){this.displayCodeHighlights=e,this.attached&&this.requestForcedUpdate()}pollDOM(){const e=this.checkForVisibilityChange();this.isVisible()&&(this.wasVisible||this.requestForcedUpdate(),this.measureHeightAndWidth(e,!1))}checkForVisibilityChange(){return this.isVisible()?!this.wasVisible&&(this.wasVisible=!0,this.wasVisible):this.wasVisible?(this.wasVisible=!1,!0):(this.wasVisible=!1,this.wasVisible)}measureHeightAndWidth(e,t=!0){if(!this.minimap)return;const i=this.style.flexBasis;this.style.flexBasis="";const n=this.width!==this.clientWidth||this.height!==this.clientHeight;this.height=this.clientHeight,this.width=this.clientWidth;let r=this.width;if(null!=this.minimap&&this.minimap.setScreenHeightAndWidth(this.height,this.width),(n||e||t)&&this.requestForcedUpdate(),this.isVisible())if(n||t){if(this.adjustToSoftWrap){const e=atom.config.get("editor.preferredLineLength"),t=atom.config.get("editor.softWrap"),i=atom.config.get("editor.softWrapAtPreferredLineLength"),n=e*this.minimap.getCharWidth();!(t&&i&&e)||n>this.width&&this.adjustOnlyIfSmaller?(Yi(r),delete this.flexBasis):(this.flexBasis=n,r=n,Yi(n))}else Yi(r),delete this.flexBasis;this.updateCanvasesSize(r)}else this.style.flexBasis=i}updateCanvasesSize(e){const t=this.minimap.getDevicePixelRatio(),i=this.height+this.minimap.getLineHeight(),n=this.absoluteMode&&this.adjustAbsoluteModeHeight?Math.min(this.minimap.getHeight(),i):i,r=this.getFrontCanvas();null==e&&(e=r.width/t),e===r.width&&n===r.height||(this.setCanvasesSize(e*t,n*t),this.absoluteMode&&this.adjustAbsoluteModeHeight&&(this.offscreenFirstRow=null,this.offscreenLastRow=null))}canvasPressed({y:e,isLeftMouse:t,isMiddleMouse:i}){if(!this.minimap.isStandAlone())if(t)this.canvasLeftMousePressed(e);else if(i){this.canvasMiddleMousePressed(e);const{top:t,height:i}=this.visibleArea.getBoundingClientRect();this.startDrag({y:t+i/2,isLeftMouse:!1,isMiddleMouse:!0})}}canvasLeftMousePressed(e){const t=e-this.getBoundingClientRect().top,i=Math.floor(t/this.minimap.getLineHeight())+this.minimap.getFirstVisibleScreenRow(),n=this.minimap.getTextEditor(),r=this.minimap.getTextEditorElement(),s=i*n.getLineHeightInPixels()-this.minimap.getTextEditorHeight()/2,o=r.pixelPositionForScreenPosition([i,0]).top-this.minimap.getTextEditorHeight()/2;if(atom.config.get("minimap.moveCursorOnMinimapClick")&&n.setCursorScreenPosition([i,0]),atom.config.get("minimap.scrollAnimation")){const e=atom.config.get("minimap.scrollAnimationDuration"),t=this.minimap.scrollIndependentlyOnMouseWheel(),i=this.minimap.getTextEditorScrollTop(),n=o;let r;if(t){const t=this.minimap.getScrollTop(),o=Math.min(1,s/(this.minimap.getTextEditorMaxScrollTop()||1))*this.minimap.getMaxScrollTop();r=(e,i)=>{null!==this.minimap&&(this.minimap.setTextEditorScrollTop(e,!0),this.minimap.setScrollTop(t+(o-t)*i))},nn({from:i,to:n,duration:e,step:r})}else r=e=>{null!==this.minimap&&this.minimap.setTextEditorScrollTop(e)},nn({from:i,to:n,duration:e,step:r})}else this.minimap.setTextEditorScrollTop(o)}canvasMiddleMousePressed(e){const{top:t}=this.getBoundingClientRect(),i=(e-t-this.minimap.getTextEditorScaledHeight()/2)/(this.minimap.getVisibleHeight()-this.minimap.getTextEditorScaledHeight());this.minimap.setTextEditorScrollTop(i*this.minimap.getTextEditorMaxScrollTop())}subscribeToMediaQuery(){const e=window.matchMedia("screen and (-webkit-min-device-pixel-ratio: 1.5)"),t=()=>{this.requestForcedUpdate()};return e.addEventListener("change",t),new pr((()=>{e.removeEventListener("change",t)}))}startDrag({y:e,isLeftMouse:t,isMiddleMouse:i}){if(!this.minimap)return;if(!t&&!i)return;const n={dragOffset:e-this.visibleArea.getBoundingClientRect().top,offsetTop:this.getBoundingClientRect().top},r=e=>this.drag(Gi(e),n),s=()=>this.endDrag(),o=e=>this.drag(Xi(e),n);document.body.addEventListener("mousemove",r,{passive:!0}),document.body.addEventListener("mouseup",s,{passive:!0}),document.body.addEventListener("mouseleave",s,{passive:!0}),document.body.addEventListener("touchmove",o,{passive:!0}),document.body.addEventListener("touchend",s,{passive:!0}),document.body.addEventListener("touchcancel",s,{passive:!0}),this.dragSubscription=new pr((()=>{document.body.removeEventListener("mousemove",r),document.body.removeEventListener("mouseup",s),document.body.removeEventListener("mouseleave",s),document.body.removeEventListener("touchmove",o),document.body.removeEventListener("touchend",s),document.body.removeEventListener("touchcancel",s)}))}drag({y:e,isLeftMouse:t,isMiddleMouse:i},n){if(!this.minimap)return;if(!t&&!i)return;const r=(e-n.offsetTop-n.dragOffset)/(this.minimap.getVisibleHeight()-this.minimap.getTextEditorScaledHeight());this.minimap.setTextEditorScrollTop(r*this.minimap.getTextEditorMaxScrollTop())}endDrag(){this.minimap&&this.dragSubscription.dispose()}}.initClass();var pu,fu,gu=!1;let mu=0;class vu{static isType(e,t){return Array.isArray(e.type)?e.type.indexOf(t)>=0:t===e.type}constructor(e,t,i){this.marker=e,this.minimap=t,this.emitter=new fr,this.id=mu++,this.properties=null,this.setProperties(i),this.properties.id=this.id,this.destroyed=!1,this.markerDestroyDisposable=this.marker.onDidDestroy((()=>{this.destroy()})),this.screenRange=e.getScreenRange()}destroy(){this.destroyed||(this.markerDestroyDisposable.dispose(),this.markerDestroyDisposable=null,this.destroyed=!0,this.emitter.emit("did-destroy"),this.emitter.dispose())}isDestroyed(){return this.destroyed}onDidChangeProperties(e){return this.emitter.on("did-change-properties",e)}onDidDestroy(e){return this.emitter.on("did-destroy",e)}getId(){return this.id}getMarker(){return this.marker}isType(e){return vu.isType(this.properties,e)}getProperties(){return this.properties}setProperties(e){if(this.destroyed)return;const t=this.properties;this.properties=e,this.properties.id=this.id,this.emitter.emit("did-change-properties",{oldProperties:t,newProperties:e})}}class yu{initializeDecorations(){null==this.emitter&&(this.emitter=new fr),this.decorationsById=new Map,this.decorationsByMarkerId=new Map,this.decorationMarkerChangedSubscriptions=new Map,this.decorationMarkerDestroyedSubscriptions=new Map,this.decorationUpdatedSubscriptions=new Map,this.decorationDestroyedSubscriptions=new Map}getDecorations(){return this.decorationsById.values()}onDidAddDecoration(e){return this.emitter.on("did-add-decoration",e)}onDidRemoveDecoration(e){return this.emitter.on("did-remove-decoration",e)}onDidChangeDecoration(e){return this.emitter.on("did-change-decoration",e)}onDidChangeDecorationRange(e){return this.emitter.on("did-change-decoration-range",e)}onDidUpdateDecoration(e){return this.emitter.on("did-update-decoration",e)}decorationForId(e){return this.decorationsById.get(e)}decorationsForScreenRowRange(e,t){const i={},n=this.findMarkers({intersectsScreenRowRange:[e,t]});for(let e=0,t=n.length;t>e;e++){const t=n[e],r=this.decorationsByMarkerId.get(t.id);void 0!==r&&(i[t.id]=r)}return i}decorationsByTypeThenRows(){if(null!=this.decorationsByTypeThenRowsCache)return this.decorationsByTypeThenRowsCache;const e={},t=this.decorationsById.values();for(const i of t){const t=i.marker.getScreenRange(),n=i.getProperties().type;null==e[n]&&(e[n]={});for(let r=t.start.row,s=t.end.row;s>=r;r++)null==e[n][r]&&(e[n][r]=[]),e[n][r].push(i)}return this.decorationsByTypeThenRowsCache=e,e}invalidateDecorationForScreenRowsCache(){this.decorationsByTypeThenRowsCache=null}decorateMarker(e,t){if(this.destroyed||null==e)return;const{id:i}=e;"highlight"===t.type&&(t.type="highlight-over");const{type:n,plugin:r}=t;if(null==r&&(t.plugin=(()=>{const e=Error().stack.split("\n")[3].split("(")[1].replace(")",""),t=RegExp(atom.packages.getPackageDirPaths().join("|")+cc.escapeRegExp(cr.sep)),i=e.replace(t,"").split(cr.sep)[0].replace(/minimap-|-minimap/,"");return 0>i.indexOf(cr.sep)?i:void 0})()),null==t.scope&&null!=t.class){const e=t.class.split(" ").join(".");t.scope=".minimap ."+e}this.decorationMarkerDestroyedSubscriptions.has(i)||this.decorationMarkerDestroyedSubscriptions.set(i,e.onDidDestroy((()=>{this.removeAllDecorationsForMarker(e)}))),this.decorationMarkerChangedSubscriptions.has(i)||this.decorationMarkerChangedSubscriptions.set(i,e.onDidChange((t=>{const r=this.decorationsByMarkerId.get(i),s=e.getScreenRange();if(this.invalidateDecorationForScreenRowsCache(),void 0!==r)for(let i=0,n=r.length;n>i;i++){const n=r[i];this.emitter.emit("did-change-decoration",{marker:e,decoration:n,event:t}),this.emitDecorationChanges(n.type,n),n.screenRange=s}let o=t.oldTailScreenPosition,a=t.oldHeadScreenPosition,l=t.newTailScreenPosition,c=t.newHeadScreenPosition;o.row>a.row&&([o,a]=[a,o]),l.row>c.row&&([l,c]=[c,l]);const h=((e,t,i,n)=>{const r=[];return e.isLessThan(i)?r.push([e,i]):i.isLessThan(e)&&r.push([i,e]),t.isLessThan(n)?r.push([t,n]):n.isLessThan(t)&&r.push([n,t]),r})(o,a,l,c);for(let e=0,t=h.length;t>e;e++){const[t,i]=h[e];this.emitRangeChanges(n,{start:t,end:i},0)}})));const s=new vu(e,this,t);return this.decorationsByMarkerId.has(i)||this.decorationsByMarkerId.set(i,[]),this.decorationsByMarkerId.get(i).push(s),this.decorationsById.set(s.id,s),this.decorationUpdatedSubscriptions.has(s.id)||this.decorationUpdatedSubscriptions.set(s.id,s.onDidChangeProperties((e=>{this.emitDecorationChanges(n,s)}))),this.decorationDestroyedSubscriptions.set(s.id,s.onDidDestroy((()=>{this.removeDecoration(s)}))),this.emitDecorationChanges(n,s),this.emitter.emit("did-add-decoration",{marker:e,decoration:s}),s}emitDecorationChanges(e,t){if(this.editorDestroyed())return;this.invalidateDecorationForScreenRowsCache();const i=t.screenRange;i.start&&i.end&&this.emitRangeChanges(e,i,0)}emitRangeChanges(e,t,i){const n=t.start.row,r=t.end.row,s=this.getLastVisibleScreenRow(),o=this.getFirstVisibleScreenRow();null==i&&(i=s-o-(r-n)),this.emitter.emit("did-change-decoration-range",{start:n,end:r,screenDelta:i,type:e})}removeDecoration(e){if(null==e)return;const t=e.marker;let i;this.decorationsById.delete(e.id),i=this.decorationUpdatedSubscriptions.get(e.id),void 0!==i&&i.dispose(),i=this.decorationDestroyedSubscriptions.get(e.id),void 0!==i&&i.dispose(),this.decorationUpdatedSubscriptions.delete(e.id),this.decorationDestroyedSubscriptions.delete(e.id);const n=this.decorationsByMarkerId.get(t.id);if(void 0===n)return;this.emitDecorationChanges(e.getProperties().type,e);const r=n.indexOf(e);r>-1&&(n.splice(r,1),this.emitter.emit("did-remove-decoration",{marker:t,decoration:e}),0===n.length&&this.removedAllMarkerDecorations(t))}removeAllDecorationsForMarker(e){if(null==e)return;const t=this.decorationsByMarkerId.get(e.id);if(void 0!==t){for(let i=0,n=t.length;n>i;i++){const n=t[i];this.adapter.editorDestroyed()||this.emitDecorationChanges(n.getProperties().type,n),this.emitter.emit("did-remove-decoration",{marker:e,decoration:n})}this.removedAllMarkerDecorations(e)}}removedAllMarkerDecorations(e){null!=e&&(this.decorationMarkerChangedSubscriptions.get(e.id).dispose(),this.decorationMarkerDestroyedSubscriptions.get(e.id).dispose(),this.decorationsByMarkerId.delete(e.id),this.decorationMarkerChangedSubscriptions.delete(e.id),this.decorationMarkerDestroyedSubscriptions.delete(e.id))}removeAllDecorations(){const e=this.decorationMarkerChangedSubscriptions.values();for(const t of e)t.dispose();const t=this.decorationMarkerDestroyedSubscriptions.values();for(const e of t)e.dispose();const i=this.decorationUpdatedSubscriptions.values();for(const e of i)e.dispose();const n=this.decorationDestroyedSubscriptions.values();for(const e of n)e.dispose();const r=this.decorationsById.values();for(const e of r)e.destroy();this.decorationsById.clear(),this.decorationsByMarkerId.clear(),this.decorationMarkerChangedSubscriptions.clear(),this.decorationMarkerDestroyedSubscriptions.clear(),this.decorationUpdatedSubscriptions.clear(),this.decorationDestroyedSubscriptions.clear()}}class bu{constructor(e){this.textEditor=e,this.textEditorElement=atom.views.getView(this.textEditor)}enableCache(){this.useCache=!0}clearCache(){this.useCache=!1,delete this.heightCache,delete this.scrollTopCache,delete this.scrollLeftCache,delete this.maxScrollTopCache}onDidChangeScrollTop(e){return this.textEditorElement.onDidChangeScrollTop(e)}onDidChangeScrollLeft(e){return this.textEditorElement.onDidChangeScrollLeft(e)}getHeight(){return this.editorDestroyed()?0:this.useCache?(this.heightCache||(this.heightCache=this.textEditorElement.getHeight()),this.heightCache):this.textEditorElement.getHeight()}getScrollTop(){return this.editorDestroyed()?0:this.useCache?(this.scrollTopCache||(this.scrollTopCache=this.computeScrollTop()),this.scrollTopCache):this.computeScrollTop()}computeScrollTop(){if(this.editorDestroyed())return 0;const e=this.textEditorElement.getScrollTop(),t=this.textEditor.getLineHeightInPixels();let i=this.textEditorElement.getFirstVisibleScreenRow();if(Number.isNaN(i))return 0;let n=this.textEditorElement.pixelPositionForScreenPosition([i,0]).top;return n>e&&(i-=1,n=this.textEditorElement.pixelPositionForScreenPosition([i,0]).top),i*t+Math.min(e-n,t)}setScrollTop(e){this.editorDestroyed()||this.textEditorElement.setScrollTop(e)}getScrollLeft(){return this.editorDestroyed()?0:this.useCache?(this.scrollLeftCache||(this.scrollLeftCache=this.textEditorElement.getScrollLeft()),this.scrollLeftCache):this.textEditorElement.getScrollLeft()}getMaxScrollTop(){if(this.editorDestroyed())return 0;if(null!=this.maxScrollTopCache&&this.useCache)return this.maxScrollTopCache;let e;if(this.textEditorElement.getMaxScrollTop){if(e=this.textEditorElement.getMaxScrollTop(),parseFloat(atom.getVersion())>=1.13&&this.scrollPastEnd){const t=this.textEditor.getLineHeightInPixels();e-=this.getHeight()-3*t}}else if(e=this.textEditorElement.getScrollHeight()-this.getHeight(),this.scrollPastEnd){const t=this.textEditor.getLineHeightInPixels();e-=this.getHeight()-3*t}return this.useCache&&(this.maxScrollTopCache=e),e}editorDestroyed(){return!this.textEditor||this.textEditor.isDestroyed()||!this.textEditorElement.component||!this.textEditorElement.getModel()||!this.textEditorElement.parentNode}}let Su=1;class wu{static initClass(){return Ki(this,yu),this}constructor(e={}){if(!e.textEditor)throw Error("Cannot create a minimap without an editor");if(this.textEditor=e.textEditor,this.editorElement=void 0,this.standAlone=e.standAlone,this.width=e.width,this.height=e.height,this.id=Su++,this.emitter=new fr,this.subscriptions=new ur,this.adapter=null,this.charHeight=null,this.configCharHeight=null,this.charWidth=null,this.configCharWidth=null,this.interline=null,this.configInterline=null,this.devicePixelRatioRounding=null,this.configDevicePixelRatioRounding=null,this.redrawDelay=0,this.destroyed=!1,this.scrollPastEnd=!1,this.pendingChangeEvents=[],this.flushChangesTimer=null,this.initializeDecorations(),null!=atom.views.getView(this.textEditor).getScrollTop)this.adapter=new bu(this.textEditor);else{atom.notifications.addWarning("LegacyAdapter of Minimap is deprecated and will be removed in the next major version. Please upgrade Atom to the latest version.");const e=(gu||(gu=!0,t(pu={}),fu=class{constructor(e){this.textEditor=e}enableCache(){this.useCache=!0}clearCache(){this.useCache=!1,delete this.heightCache,delete this.scrollTopCache,delete this.scrollLeftCache,delete this.maxScrollTopCache}onDidChangeScrollTop(e){return this.textEditor.onDidChangeScrollTop(e)}onDidChangeScrollLeft(e){return this.textEditor.onDidChangeScrollLeft(e)}getHeight(){return this.useCache?(this.heightCache||(this.heightCache=this.textEditor.getHeight()),this.heightCache):this.textEditor.getHeight()}getScrollTop(){return this.useCache?(this.scrollTopCache||(this.scrollTopCache=this.textEditor.getScrollTop()),this.scrollTopCache):this.textEditor.getScrollTop()}setScrollTop(e){return this.textEditor.setScrollTop(e)}getScrollLeft(){return this.useCache?(this.scrollLeftCache||(this.scrollLeftCache=this.textEditor.getScrollLeft()),this.scrollLeftCache):this.textEditor.getScrollLeft()}getMaxScrollTop(){if(null!=this.maxScrollTopCache&&this.useCache)return this.maxScrollTopCache;let e=this.textEditor.displayBuffer.getMaxScrollTop();const t=this.textEditor.getLineHeightInPixels();return this.scrollPastEnd&&(e-=this.getHeight()-3*t),this.useCache&&(this.maxScrollTopCache=e),e}editorDestroyed(){return!this.textEditor||this.textEditor.isDestroyed()}},i(pu,"default",(()=>fu))),pu);this.adapter=new e(this.textEditor)}this.scrollTop=0;const n=this.subscriptions;let r=this.subscribeToConfig();n.add(r),n.add(this.textEditor.onDidChangeGrammar((()=>{n.remove(r),r.dispose(),r=this.subscribeToConfig(),n.add(r)}))),n.add(this.adapter.onDidChangeScrollTop((()=>{this.standAlone||this.ignoreTextEditorScroll||this.inChangeScrollTop||(this.inChangeScrollTop=!0,this.updateScrollTop(),this.emitter.emit("did-change-scroll-top",this),this.inChangeScrollTop=!1),this.ignoreTextEditorScroll&&(this.ignoreTextEditorScroll=!1)}))),n.add(this.adapter.onDidChangeScrollLeft((()=>{this.standAlone||this.emitter.emit("did-change-scroll-left",this)}))),n.add(this.textEditor.onDidChange((e=>{this.scheduleChanges(e)}))),n.add(this.textEditor.onDidDestroy((()=>{this.destroy()}))),n.add(this.textEditor.onDidTokenize((()=>{this.emitter.emit("did-change-config")})))}destroy(){this.destroyed||(clearTimeout(this.flushChangesTimer),this.flushChangesTimer=null,this.pendingChangeEvents=[],this.removeAllDecorations(),this.subscriptions.dispose(),this.subscriptions=null,this.textEditor=null,this.emitter.emit("did-destroy"),this.emitter.dispose(),this.destroyed=!0)}isDestroyed(){return this.destroyed}scheduleChanges(e){this.pendingChangeEvents=this.pendingChangeEvents.concat(e),this.redrawDelay||this.requestFlushChanges(),this.flushChangesTimer||(this.flushChangesTimer=setTimeout((()=>{this.requestFlushChanges()}),this.redrawDelay))}flushChanges(){clearTimeout(this.flushChangesTimer),this.flushChangesTimer=null,this.emitChanges(this.pendingChangeEvents),this.pendingChangeEvents=[]}requestFlushChanges(){this.requestedFlushChanges||(this.requestedFlushChanges=requestAnimationFrame((()=>{this.flushChanges(),this.requestedFlushChanges&&(cancelAnimationFrame(this.requestedFlushChanges),this.requestedFlushChanges=null)})))}onDidChange(e){return this.emitter.on("did-change",e)}onDidChangeConfig(e){return this.emitter.on("did-change-config",e)}onDidChangeScrollTop(e){return this.emitter.on("did-change-scroll-top",e)}onDidChangeScrollLeft(e){return this.emitter.on("did-change-scroll-left",e)}onDidChangeStandAlone(e){return this.emitter.on("did-change-stand-alone",e)}onDidDestroy(e){return this.emitter.on("did-destroy",e)}subscribeToConfig(){const e=new ur,t={scope:this.textEditor.getRootScopeDescriptor()};return e.add(atom.config.observe("editor.scrollPastEnd",t,(e=>{this.scrollPastEnd=e,this.adapter.scrollPastEnd=this.scrollPastEnd,this.emitter.emit("did-change-config")}))),e.add(atom.config.observe("minimap.charHeight",t,(e=>{this.configCharHeight=e,this.updateScrollTop(),this.emitter.emit("did-change-config")}))),e.add(atom.config.observe("minimap.charWidth",t,(e=>{this.configCharWidth=e,this.updateScrollTop(),this.emitter.emit("did-change-config")}))),e.add(atom.config.observe("minimap.interline",t,(e=>{this.configInterline=e,this.updateScrollTop(),this.emitter.emit("did-change-config")}))),e.add(atom.config.observe("minimap.independentMinimapScroll",t,(e=>{this.independentMinimapScroll=e,this.updateScrollTop()}))),e.add(atom.config.observe("minimap.scrollSensitivity",t,(e=>{this.scrollSensitivity=e}))),e.add(atom.config.observe("minimap.redrawDelay",t,(e=>{this.redrawDelay=e}))),e.add(atom.config.observe("minimap.devicePixelRatioRounding",t,(e=>{this.configDevicePixelRatioRounding=e,this.updateScrollTop(),this.emitter.emit("did-change-config")}))),e}isStandAlone(){return this.standAlone}setStandAlone(e){e!==this.standAlone&&(this.standAlone=e,this.emitter.emit("did-change-stand-alone",this))}getTextEditor(){return this.textEditor}getTextEditorElement(){return this.editorElement||(this.editorElement=atom.views.getView(this.getTextEditor())),this.editorElement}getTextEditorScaledHeight(){return this.adapter.getHeight()*this.getVerticalScaleFactor()}getTextEditorScaledScrollTop(){return this.adapter.getScrollTop()*this.getVerticalScaleFactor()}getTextEditorScaledScrollLeft(){return this.adapter.getScrollLeft()*this.getHorizontalScaleFactor()}getTextEditorMaxScrollTop(){return this.adapter.getMaxScrollTop()}getTextEditorScrollTop(){return this.adapter.getScrollTop()}setTextEditorScrollTop(e,t=!1){this.ignoreTextEditorScroll=t,this.adapter.setScrollTop(e)}getTextEditorScrollLeft(){return this.adapter.getScrollLeft()}getTextEditorHeight(){return this.adapter.getHeight()}getTextEditorScrollRatio(){return this.adapter.getScrollTop()/(this.getTextEditorMaxScrollTop()||1)}getCapedTextEditorScrollRatio(){return Math.min(1,this.getTextEditorScrollRatio())}getHeight(){return this.textEditor.getScreenLineCount()*this.getLineHeight()}getWidth(){return this.textEditor.getMaxScreenLineLength()*this.getCharWidth()}getVisibleHeight(){return Math.min(this.getScreenHeight(),this.getHeight())}getScreenHeight(){return this.isStandAlone()?null!=this.height?this.height:this.getHeight():this.adapter.getHeight()}getVisibleWidth(){return Math.min(this.getScreenWidth(),this.getWidth())}getScreenWidth(){return this.isStandAlone()&&null!=this.width?this.width:this.getWidth()}setScreenHeightAndWidth(e,t){this.width===t&&this.height===e||(this.height=e,this.width=t,this.updateScrollTop())}getVerticalScaleFactor(){return this.getLineHeight()/this.textEditor.getLineHeightInPixels()}getHorizontalScaleFactor(){return this.getCharWidth()/this.textEditor.getDefaultCharWidth()}getLineHeight(){return this.getCharHeight()+this.getInterline()}getCharWidth(){return null!=this.charWidth?this.charWidth:this.configCharWidth}setCharWidth(e){this.charWidth=Math.floor(e),this.emitter.emit("did-change-config")}getCharHeight(){return null!=this.charHeight?this.charHeight:this.configCharHeight}setCharHeight(e){this.charHeight=Math.floor(e),this.emitter.emit("did-change-config")}getInterline(){return null!=this.interline?this.interline:this.configInterline}setInterline(e){this.interline=Math.floor(e),this.emitter.emit("did-change-config")}getDevicePixelRatioRounding(){return null!=this.devicePixelRatioRounding?this.devicePixelRatioRounding:this.configDevicePixelRatioRounding}setDevicePixelRatioRounding(e){this.devicePixelRatioRounding=e,this.emitter.emit("did-change-config")}getDevicePixelRatio(){return this.getDevicePixelRatioRounding()?Math.floor(devicePixelRatio):devicePixelRatio}getFirstVisibleScreenRow(){return Math.floor(this.getScrollTop()/this.getLineHeight())}getLastVisibleScreenRow(){return Math.ceil((this.getScrollTop()+this.getScreenHeight())/this.getLineHeight())}scrollIndependentlyOnMouseWheel(){return this.independentMinimapScroll}getScrollTop(){return this.standAlone||this.independentMinimapScroll?this.scrollTop:this.getScrollTopFromEditor()}setScrollTop(e){this.scrollTop=Math.max(0,Math.min(this.getMaxScrollTop(),e)),(this.standAlone||this.independentMinimapScroll)&&this.emitter.emit("did-change-scroll-top",this)}getScrollRatio(){return this.getScrollTop()/this.getMaxScrollTop()}updateScrollTop(){if(this.independentMinimapScroll){try{this.setScrollTop(this.getScrollTopFromEditor())}catch(e){}this.emitter.emit("did-change-scroll-top",this)}}getScrollTopFromEditor(){return Math.abs(this.getCapedTextEditorScrollRatio()*this.getMaxScrollTop())}getMaxScrollTop(){return Math.max(0,this.getHeight()-this.getScreenHeight())}canScroll(){return this.getMaxScrollTop()>0}onMouseWheel(e){if(this.scrollIndependentlyOnMouseWheel()){if(e.stopPropagation(),!this.canScroll())return;const{wheelDeltaY:t}=e,i=this.getScrollTop()-Math.round(t*this.scrollSensitivity);e.preventDefault(),this.setScrollTop(i)}}getMarker(e){return this.textEditor.getMarker(e)}findMarkers(e){try{return this.textEditor.findMarkers(e)}catch(e){return[]}}markBufferRange(e){return this.textEditor.markBufferRange(e)}emitChanges(e){this.emitter.emit("did-change",e)}enableCache(){this.adapter.enableCache()}clearCache(){this.adapter.clearCache()}editorDestroyed(){this.adapter.editorDestroyed()}}exports.Minimap=wu,wu.initClass();var xu={};exports.config=xu,xu=JSON.parse('{"plugins":{"type":"object","properties":{}},"autoToggle":{"title":"Show Minimap On Atom Start","type":"boolean","default":true,"order":1},"displayMinimapOnLeft":{"type":"boolean","default":false,"order":2},"displayCodeHighlights":{"type":"boolean","default":true,"description":"Toggles the render of the buffer tokens in the minimap.","order":3},"displayPluginsControls":{"type":"boolean","default":true,"description":"You need to restart Atom for this setting to be effective.","order":4},"minimapScrollIndicator":{"type":"boolean","default":true,"description":"Toggles the display of a side line showing which part of the buffer is currently displayed by the minimap. This side line will only appear if the minimap is taller than the editor view height.","order":5},"adjustMinimapWidthToSoftWrap":{"type":"boolean","default":true,"description":"If this option is enabled and Soft Wrap is checked then the Minimap max width is set to the Preferred Line Length value.","order":6},"adjustMinimapWidthOnlyIfSmaller":{"type":"boolean","default":true,"description":"If this option and `adjustMinimapWidthToSoftWrap` are enabled the minimap width will never go past the limit sets by CSS. On the other hand, when disabled the minimap will expand to honor the preferred line width.","order":7},"ignoreWhitespacesInTokens":{"type":"boolean","default":false,"description":"When enabled, text editor tokens are rendered as plain blocks, with no regards to the whitespaces they contains.","order":8},"charWidth":{"type":"number","default":1,"minimum":0.5,"order":9},"charHeight":{"type":"number","default":2,"minimum":0.5,"order":10},"interline":{"type":"number","default":1,"minimum":0,"description":"The space between lines in the minimap in pixels.","order":11},"textOpacity":{"type":"number","default":0.6,"minimum":0,"maximum":1,"description":"The opacity used to render the line\'s text in the minimap.","order":12},"moveCursorOnMinimapClick":{"type":"boolean","default":false,"description":"Moves the cursor to the beginning of the target line when clicking on the minimap","order":13},"independentMinimapScroll":{"type":"boolean","title":"Independent Minimap Scroll On Mouse Wheel Events","default":false,"description":"When enabled, using the mouse wheel over the Minimap will make it scroll independently of the text editor. The Minimap will still sync with the editor whenever the editor is scrolled, but it will no longer relay the mouse wheel events to the editor.","order":14},"scrollSensitivity":{"type":"number","default":0.5,"description":"The scrolling speed when the `Independent Minimap Scroll On Mouse Wheel Events` setting is enabled.","order":15},"smoothScrolling":{"type":"boolean","default":false,"description":"Whether to offset the minimap canvas when scrolling to keep the scroll smooth. When `true` the minimap canvas will be offseted, resulting in a smoother scroll, but with the side-effect of a blurry minimap when the canvas is placed between pixels. When `false` the canvas will always stay at the same position, and will never look blurry, but the scroll will appear more jagged.","order":16},"createPluginInDevMode":{"type":"boolean","default":false,"order":17},"absoluteMode":{"type":"boolean","default":false,"description":"When enabled the text editor content will be able to flow below the minimap.","order":18},"adjustAbsoluteModeHeight":{"type":"boolean","default":false,"description":"When enabled and `Absolute Mode` is also enabled, the minimap height will be adjusted to only take the space required by the text editor content, leaving the space below triggering mouse events on the text editor. **Be aware this can have some impact on performances as the minimap canvases will be resized every time a change in the editor make its height change.**","order":19},"redrawDelay":{"type":"number","default":400,"minimum":0,"maximum":2000,"description":"Controls how often (in ms) the minimap should redraw itself after changing the text editor\'s contents. Setting this to 100ms or higher could dramatically improve editor responsiveness when working with large files. A value of 0 will cause the minimap to redraw itself immediately on each change.","order":20},"devicePixelRatioRounding":{"type":"boolean","default":true,"description":"Toggles the rounding of the devicePixelRatio in the minimap.","order":21},"useHardwareAcceleration":{"type":"boolean","default":true,"order":22},"scrollAnimation":{"type":"boolean","default":false,"description":"Enables animations when scrolling by clicking on the minimap.","order":23},"scrollAnimationDuration":{"type":"integer","default":300,"description":"The duration of scrolling animations when clicking on the minimap.","order":24},"maxTokensInOneLine":{"type":"integer","default":160,"description":"The maximum number of tokens that are rendered for each line.","order":25}}'),exports.config=xu;const Eu={};exports.plugins=Eu;const Cu={},Tu={};exports.registerPlugin=sn,exports.unregisterPlugin=on,exports.togglePluginActivation=an,exports.deactivateAllPlugins=ln,exports.activatePlugin=hn,exports.deactivatePlugin=dn,exports.getPluginsOrder=pn;let Mu=!1,ku=!1,Du=null,Lu=null,Au=null;const Ou=new fr;exports.emitter=Ou,exports.activate=()=>{Mu||(Au=atom.commands.add("atom-workspace",{"minimap:toggle"(){mn()},async"minimap:generate-coffee-plugin"(){await vn("coffee")},async"minimap:generate-javascript-plugin"(){await vn("javascript")},async"minimap:generate-babel-plugin"(){await vn("babel")}}),Du=new Map,Lu=new ur,Mu=!0,atom.config.get("minimap.autoToggle")&&mn())},exports.minimapViewProvider=fn,exports.deactivate=()=>{Mu&&(ln(),Du&&Du.forEach(((e,t)=>{e.destroy(),Du.delete(t)})),Lu.dispose(),Lu=null,Au.dispose(),Au=null,Du=void 0,ku=!1,Mu=!1)};var Ru=e(xu);exports.getConfigSchema=gn,exports.toggle=mn,exports.onDidActivate=yn,exports.onDidDeactivate=bn,exports.onDidCreateMinimap=Sn,exports.onDidAddPlugin=wn,exports.onDidRemovePlugin=xn,exports.onDidActivatePlugin=En,exports.onDidDeactivatePlugin=Cn,exports.onDidChangePluginOrder=Tn,exports.minimapClass=Mn,exports.minimapForEditorElement=kn,exports.minimapForEditor=Dn,exports.standAloneMinimapForEditor=Ln,exports.getActiveMinimap=An,exports.observeMinimaps=On;const _u={minimapViewProvider:fn,getConfigSchema:gn,onDidActivate:yn,onDidDeactivate:bn,onDidCreateMinimap:Sn,onDidAddPlugin:wn,onDidRemovePlugin:xn,onDidActivatePlugin:En,onDidDeactivatePlugin:Cn,onDidChangePluginOrder:Tn,minimapClass:Mn,minimapForEditorElement:kn,minimapForEditor:Dn,standAloneMinimapForEditor:Ln,getActiveMinimap:An,observeMinimaps:On,registerPlugin:sn,unregisterPlugin:on,togglePluginActivation:an,deactivateAllPlugins:ln,activatePlugin:hn,deactivatePlugin:dn,getPluginsOrder:pn};exports.provideMinimapServiceV1=()=>_u,exports.$a7d4afabad3ac01364c7629a89eaa9d8$init=()=>cc,exports.$4a2375bcc1817d0a9f962e73140919e0$init=()=>lu; //# sourceMappingURL=main.js.map diff --git a/dist/main.js.map b/dist/main.js.map index d7dad5e0..864215d4 100644 --- a/dist/main.js.map +++ b/dist/main.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["./node_modules/@parcel/scope-hoisting/lib/helpers.js","./node_modules/event-kit/dist/disposable.js","./node_modules/event-kit/dist/composite-disposable.js","./node_modules/event-kit/dist/emitter.js","./node_modules/event-kit/dist/event-kit.js","./node_modules/grim/lib/grim.js","./node_modules/grim/lib/deprecation.js","./node_modules/mixto/lib/mixin.js","./node_modules/atom-utils-plus/lib/mixins/ancestors.js","./node_modules/atom-utils-plus/lib/mixins/disposable-events.js","./node_modules/batch-processor/src/batch-processor.js","./node_modules/element-resize-detector/src/state-handler.js","./node_modules/element-resize-detector/src/element-resize-detector.js","./node_modules/underscore/modules/_setup.js","./node_modules/underscore/modules/restArguments.js","./node_modules/underscore/modules/isObject.js","./node_modules/underscore/modules/isNull.js","./node_modules/underscore/modules/isUndefined.js","./node_modules/underscore/modules/isBoolean.js","./node_modules/underscore/modules/isElement.js","./node_modules/underscore/modules/_tagTester.js","./node_modules/underscore/modules/isString.js","./node_modules/underscore/modules/isNumber.js","./node_modules/underscore/modules/isSymbol.js","./node_modules/underscore/modules/isDataView.js","./node_modules/underscore/modules/isArray.js","./node_modules/underscore/modules/isFunction.js","./node_modules/underscore/modules/_has.js","./node_modules/underscore/modules/isArguments.js","./node_modules/underscore/modules/isFinite.js","./node_modules/underscore/modules/isNaN.js","./node_modules/underscore/modules/constant.js","./node_modules/underscore/modules/_createSizePropertyCheck.js","./node_modules/underscore/modules/_shallowProperty.js","./node_modules/underscore/modules/_getByteLength.js","./node_modules/underscore/modules/isTypedArray.js","./node_modules/underscore/modules/_isBufferLike.js","./node_modules/underscore/modules/_getLength.js","./node_modules/underscore/modules/_isArrayLike.js","./node_modules/underscore/modules/_collectNonEnumProps.js","./node_modules/underscore/modules/keys.js","./node_modules/underscore/modules/isEmpty.js","./node_modules/underscore/modules/isMatch.js","./node_modules/underscore/modules/underscore.js","./node_modules/underscore/modules/isEqual.js","./node_modules/underscore/modules/allKeys.js","./node_modules/underscore/modules/values.js","./node_modules/underscore/modules/pairs.js","./node_modules/underscore/modules/invert.js","./node_modules/underscore/modules/functions.js","./node_modules/underscore/modules/_createAssigner.js","./node_modules/underscore/modules/extend.js","./node_modules/underscore/modules/extendOwn.js","./node_modules/underscore/modules/defaults.js","./node_modules/underscore/modules/_baseCreate.js","./node_modules/underscore/modules/create.js","./node_modules/underscore/modules/clone.js","./node_modules/underscore/modules/tap.js","./node_modules/underscore/modules/has.js","./node_modules/underscore/modules/identity.js","./node_modules/underscore/modules/matcher.js","./node_modules/underscore/modules/_deepGet.js","./node_modules/underscore/modules/property.js","./node_modules/underscore/modules/_optimizeCb.js","./node_modules/underscore/modules/_baseIteratee.js","./node_modules/underscore/modules/iteratee.js","./node_modules/underscore/modules/_cb.js","./node_modules/underscore/modules/mapObject.js","./node_modules/underscore/modules/noop.js","./node_modules/underscore/modules/propertyOf.js","./node_modules/underscore/modules/times.js","./node_modules/underscore/modules/random.js","./node_modules/underscore/modules/now.js","./node_modules/underscore/modules/_createEscaper.js","./node_modules/underscore/modules/_escapeMap.js","./node_modules/underscore/modules/_unescapeMap.js","./node_modules/underscore/modules/unescape.js","./node_modules/underscore/modules/templateSettings.js","./node_modules/underscore/modules/template.js","./node_modules/underscore/modules/result.js","./node_modules/underscore/modules/uniqueId.js","./node_modules/underscore/modules/chain.js","./node_modules/underscore/modules/_executeBound.js","./node_modules/underscore/modules/partial.js","./node_modules/underscore/modules/bind.js","./node_modules/underscore/modules/_flatten.js","./node_modules/underscore/modules/memoize.js","./node_modules/underscore/modules/delay.js","./node_modules/underscore/modules/throttle.js","./node_modules/underscore/modules/debounce.js","./node_modules/underscore/modules/wrap.js","./node_modules/underscore/modules/negate.js","./node_modules/underscore/modules/compose.js","./node_modules/underscore/modules/after.js","./node_modules/underscore/modules/before.js","./node_modules/underscore/modules/findKey.js","./node_modules/underscore/modules/_createPredicateIndexFinder.js","./node_modules/underscore/modules/findIndex.js","./node_modules/underscore/modules/findLastIndex.js","./node_modules/underscore/modules/sortedIndex.js","./node_modules/underscore/modules/_createIndexFinder.js","./node_modules/underscore/modules/indexOf.js","./node_modules/underscore/modules/find.js","./node_modules/underscore/modules/findWhere.js","./node_modules/underscore/modules/each.js","./node_modules/underscore/modules/map.js","./node_modules/underscore/modules/_createReduce.js","./node_modules/underscore/modules/filter.js","./node_modules/underscore/modules/reject.js","./node_modules/underscore/modules/every.js","./node_modules/underscore/modules/some.js","./node_modules/underscore/modules/contains.js","./node_modules/underscore/modules/pluck.js","./node_modules/underscore/modules/where.js","./node_modules/underscore/modules/max.js","./node_modules/underscore/modules/min.js","./node_modules/underscore/modules/sample.js","./node_modules/underscore/modules/shuffle.js","./node_modules/underscore/modules/sortBy.js","./node_modules/underscore/modules/_group.js","./node_modules/underscore/modules/toArray.js","./node_modules/underscore/modules/size.js","./node_modules/underscore/modules/_keyInObj.js","./node_modules/underscore/modules/pick.js","./node_modules/underscore/modules/initial.js","./node_modules/underscore/modules/first.js","./node_modules/underscore/modules/rest.js","./node_modules/underscore/modules/last.js","./node_modules/underscore/modules/compact.js","./node_modules/underscore/modules/flatten.js","./node_modules/underscore/modules/difference.js","./node_modules/underscore/modules/uniq.js","./node_modules/underscore/modules/intersection.js","./node_modules/underscore/modules/unzip.js","./node_modules/underscore/modules/object.js","./node_modules/underscore/modules/range.js","./node_modules/underscore/modules/chunk.js","./node_modules/underscore/modules/_chainResult.js","./node_modules/underscore/modules/mixin.js","./node_modules/underscore/modules/isDate.js","./node_modules/underscore/modules/isRegExp.js","./node_modules/underscore/modules/isError.js","./node_modules/underscore/modules/isMap.js","./node_modules/underscore/modules/isWeakMap.js","./node_modules/underscore/modules/isSet.js","./node_modules/underscore/modules/isWeakSet.js","./node_modules/underscore/modules/isArrayBuffer.js","./node_modules/underscore/modules/escape.js","./node_modules/underscore/modules/bindAll.js","./node_modules/underscore/modules/defer.js","./node_modules/underscore/modules/once.js","./node_modules/underscore/modules/lastIndexOf.js","./node_modules/underscore/modules/reduce.js","./node_modules/underscore/modules/reduceRight.js","./node_modules/underscore/modules/invoke.js","./node_modules/underscore/modules/groupBy.js","./node_modules/underscore/modules/indexBy.js","./node_modules/underscore/modules/countBy.js","./node_modules/underscore/modules/partition.js","./node_modules/underscore/modules/omit.js","./node_modules/underscore/modules/without.js","./node_modules/underscore/modules/union.js","./node_modules/underscore/modules/zip.js","./node_modules/underscore/modules/underscore-array-methods.js","./lib/mixins/canvas-drawer.js","./lib/decorators/include.js","./lib/decorators/element.js","./lib/minimap-element.js","./lib/plugin-management.js","./lib/main.js","./node_modules/@parcel/runtime-js/lib/JSRuntime.js","./node_modules/atom-utils-plus/lib/mixins/events-delegation.js","./node_modules/atom-utils-plus/lib/register-or-update-element.js","./node_modules/atom-utils-plus/lib/atom-utils.js","./node_modules/atom-utils-plus/lib/mixins/space-pen-dsl.js","./node_modules/element-resize-detector/src/collection-utils.js","./node_modules/element-resize-detector/src/element-utils.js","./node_modules/element-resize-detector/src/listener-handler.js","./node_modules/element-resize-detector/src/id-generator.js","./node_modules/element-resize-detector/src/id-handler.js","./node_modules/element-resize-detector/src/reporter.js","./node_modules/element-resize-detector/src/browser-detector.js","./node_modules/batch-processor/src/utils.js","./node_modules/element-resize-detector/src/detection-strategy/object.js","./node_modules/element-resize-detector/src/detection-strategy/scroll.js","./node_modules/underscore/modules/index-default.js","./node_modules/underscore-plus/lib/underscore-plus.js","./lib/canvas-layer.js","./lib/dom-styles-reader.js","./lib/minimap-quick-settings-element.js","./lib/adapters/legacy-adapter.js","./lib/decoration.js","./lib/decoration-management.js","./lib/adapters/stable-adapter.js","./lib/minimap.js","./lib/config.json"],"sourcesContent":["function $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true});\n}\n\nfunction $parcel$export(e, n, v) {\n Object.defineProperty(e, n, {get: v, enumerable: true});\n}\n\nfunction $parcel$exportWildcard(dest, source) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule') {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function get() {\n return source[key];\n },\n });\n });\n\n return dest;\n}\n\nfunction $parcel$missingModule(name) {\n var err = new Error(\"Cannot find module '\" + name + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n}\n\nvar $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// Essential: A handle to a resource that can be disposed. For example,\n// {Emitter::on} returns disposables representing subscriptions.\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n _createClass(Disposable, null, [{\n key: \"isDisposable\",\n // Public: Ensure that `object` correctly implements the `Disposable`\n // contract.\n //\n // * `object` An {Object} you want to perform the check against.\n //\n // Returns a {Boolean} indicating whether `object` is a valid `Disposable`.\n value: function isDisposable(object) {\n return typeof (object != null ? object.dispose : undefined) === \"function\";\n }\n /*\n Section: Construction and Destruction\n */\n // Public: Construct a Disposable\n //\n // * `disposalAction` A {Function} to call when {::dispose} is called for the\n // first time.\n\n }]);\n\n function Disposable(disposalAction) {\n _classCallCheck(this, Disposable);\n\n this.disposed = false;\n this.disposalAction = disposalAction;\n } // Public: Perform the disposal action, indicating that the resource associated\n // with this disposable is no longer needed.\n //\n // You can call this method more than once, but the disposal action will only\n // be performed the first time.\n\n\n _createClass(Disposable, [{\n key: \"dispose\",\n value: function dispose() {\n if (!this.disposed) {\n this.disposed = true;\n\n if (typeof this.disposalAction === \"function\") {\n this.disposalAction();\n }\n\n this.disposalAction = null;\n }\n }\n }]);\n\n return Disposable;\n}();","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar CompositeDisposable;\nvar Disposable; // Essential: An object that aggregates multiple {Disposable} instances together\n// into a single disposable, so they can all be disposed as a group.\n//\n// These are very useful when subscribing to multiple events.\n//\n// ## Examples\n//\n// ```js\n// const {CompositeDisposable} = require('atom')\n//\n// class Something {\n// constructor() {\n// this.disposables = new CompositeDisposable()\n// const editor = atom.workspace.getActiveTextEditor()\n// this.disposables.add(editor.onDidChange(() => {})\n// this.disposables.add(editor.onDidChangePath(() => {})\n// }\n//\n// destroy() {\n// this.disposables.dispose();\n// }\n// }\n// ```\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n /*\n Section: Construction and Destruction\n */\n // Public: Construct an instance, optionally with one or more disposables\n function CompositeDisposable() {\n _classCallCheck(this, CompositeDisposable);\n\n this.disposed = false;\n this.disposables = new Set();\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = arguments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var disposable = _step.value;\n this.add(disposable);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } // Public: Dispose all disposables added to this composite disposable.\n //\n // If this object has already been disposed, this method has no effect.\n\n\n _createClass(CompositeDisposable, [{\n key: \"dispose\",\n value: function dispose() {\n if (!this.disposed) {\n this.disposed = true;\n this.disposables.forEach(function (disposable) {\n return disposable.dispose();\n });\n this.disposables = null;\n }\n }\n /*\n Section: Managing Disposables\n */\n // Public: Add disposables to be disposed when the composite is disposed.\n //\n // If this object has already been disposed, this method has no effect.\n //\n // * `...disposables` {Disposable} instances or any objects with `.dispose()`\n // methods.\n\n }, {\n key: \"add\",\n value: function add() {\n if (!this.disposed) {\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = arguments[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var disposable = _step2.value;\n assertDisposable(disposable);\n this.disposables.add(disposable);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n }\n } // Public: Remove a previously added disposable.\n //\n // * `disposable` {Disposable} instance or any object with a `.dispose()`\n // method.\n\n }, {\n key: \"remove\",\n value: function remove(disposable) {\n if (!this.disposed) {\n this.disposables.delete(disposable);\n }\n } // Public: Alias to {CompositeDisposable::remove}\n\n }, {\n key: \"delete\",\n value: function _delete(disposable) {\n this.remove(disposable);\n } // Public: Clear all disposables. They will not be disposed by the next call\n // to dispose.\n\n }, {\n key: \"clear\",\n value: function clear() {\n if (!this.disposed) {\n this.disposables.clear();\n }\n }\n }]);\n\n return CompositeDisposable;\n}();\n\nfunction assertDisposable(disposable) {\n if (Disposable == null) {\n Disposable = require(\"./disposable\");\n }\n\n if (!Disposable.isDisposable(disposable)) {\n throw new TypeError(\"Arguments to CompositeDisposable.add must have a .dispose() method\");\n }\n}","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar Disposable = require(\"./disposable\");\n\nvar CompositeDisposable = require(\"./composite-disposable\"); // Essential: Utility class to be used when implementing event-based APIs that\n// allows for handlers registered via `::on` to be invoked with calls to\n// `::emit`. Instances of this class are intended to be used internally by\n// classes that expose an event-based API.\n//\n// For example:\n//\n// ```js\n// class User {\n// constructor() {\n// this.emitter = new Emitter()\n// }\n//\n// onDidChangeName(callback) {\n// this.emitter.on('did-change-name', callback)\n// }\n//\n// setName(name) {\n// if (name !== this.name) {\n// this.name = name\n// this.emitter.emit('did-change-name', name)\n// }\n//\n// return this.name\n// }\n// }\n// ```\n\n\nvar Emitter =\n/*#__PURE__*/\nfunction () {\n _createClass(Emitter, null, [{\n key: \"onEventHandlerException\",\n value: function onEventHandlerException(exceptionHandler) {\n var _this = this;\n\n if (this.exceptionHandlers.length === 0) {\n this.dispatch = this.exceptionHandlingDispatch;\n }\n\n this.exceptionHandlers.push(exceptionHandler);\n return new Disposable(function () {\n _this.exceptionHandlers.splice(_this.exceptionHandlers.indexOf(exceptionHandler), 1);\n\n if (_this.exceptionHandlers.length === 0) {\n return _this.dispatch = _this.simpleDispatch;\n }\n });\n }\n }, {\n key: \"simpleDispatch\",\n value: function simpleDispatch(handler, value) {\n return handler(value);\n }\n }, {\n key: \"exceptionHandlingDispatch\",\n value: function exceptionHandlingDispatch(handler, value) {\n try {\n return handler(value);\n } catch (exception) {\n return this.exceptionHandlers.map(function (exceptionHandler) {\n return exceptionHandler(exception);\n });\n }\n }\n /*\n Section: Construction and Destruction\n */\n // Public: Construct an emitter.\n //\n // ```js\n // this.emitter = new Emitter()\n // ```\n\n }]);\n\n function Emitter() {\n _classCallCheck(this, Emitter);\n\n this.disposed = false;\n this.clear();\n } // Public: Clear out any existing subscribers.\n\n\n _createClass(Emitter, [{\n key: \"clear\",\n value: function clear() {\n if (this.subscriptions != null) {\n this.subscriptions.dispose();\n }\n\n this.subscriptions = new CompositeDisposable();\n this.handlersByEventName = {};\n } // Public: Unsubscribe all handlers.\n\n }, {\n key: \"dispose\",\n value: function dispose() {\n this.subscriptions.dispose();\n this.handlersByEventName = null;\n this.disposed = true;\n }\n /*\n Section: Event Subscription\n */\n // Public: Register the given handler function to be invoked whenever events by\n // the given name are emitted via {::emit}.\n //\n // * `eventName` {String} naming the event that you want to invoke the handler\n // when emitted.\n // * `handler` {Function} to invoke when {::emit} is called with the given\n // event name.\n //\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\n\n }, {\n key: \"on\",\n value: function on(eventName, handler, unshift) {\n var _this2 = this;\n\n if (unshift == null) {\n unshift = false;\n }\n\n if (this.disposed) {\n throw new Error(\"Emitter has been disposed\");\n }\n\n if (typeof handler !== \"function\") {\n throw new Error(\"Handler must be a function\");\n }\n\n var currentHandlers = this.handlersByEventName[eventName];\n\n if (currentHandlers) {\n if (unshift) {\n this.handlersByEventName[eventName].unshift(handler);\n } else {\n this.handlersByEventName[eventName].push(handler);\n }\n } else {\n this.handlersByEventName[eventName] = [handler];\n } // When the emitter is disposed, we want to dispose of all subscriptions.\n // However, we also need to stop tracking disposables when they're disposed\n // from outside, otherwise this class will hold references to all the\n // disposables it created (instead of just the active ones).\n\n\n var cleanup = new Disposable(function () {\n _this2.subscriptions.remove(cleanup);\n\n return _this2.off(eventName, handler);\n });\n this.subscriptions.add(cleanup);\n return cleanup;\n } // Public: Register the given handler function to be invoked the next time an\n // events with the given name is emitted via {::emit}.\n //\n // * `eventName` {String} naming the event that you want to invoke the handler\n // when emitted.\n // * `handler` {Function} to invoke when {::emit} is called with the given\n // event name.\n //\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\n\n }, {\n key: \"once\",\n value: function once(eventName, handler, unshift) {\n if (unshift == null) {\n unshift = false;\n }\n\n var wrapped = function wrapped(value) {\n disposable.dispose();\n return handler(value);\n };\n\n var disposable = this.on(eventName, wrapped, unshift);\n return disposable;\n } // Public: Register the given handler function to be invoked *before* all\n // other handlers existing at the time of subscription whenever events by the\n // given name are emitted via {::emit}.\n //\n // Use this method when you need to be the first to handle a given event. This\n // could be required when a data structure in a parent object needs to be\n // updated before third-party event handlers registered on a child object via a\n // public API are invoked. Your handler could itself be preempted via\n // subsequent calls to this method, but this can be controlled by keeping\n // methods based on `::preempt` private.\n //\n // * `eventName` {String} naming the event that you want to invoke the handler\n // when emitted.\n // * `handler` {Function} to invoke when {::emit} is called with the given\n // event name.\n //\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\n\n }, {\n key: \"preempt\",\n value: function preempt(eventName, handler) {\n return this.on(eventName, handler, true);\n } // Private: Used by the disposable.\n\n }, {\n key: \"off\",\n value: function off(eventName, handlerToRemove) {\n if (this.disposed) {\n return;\n }\n\n var handlers = this.handlersByEventName[eventName];\n\n if (handlers) {\n var handlerIndex = handlers.indexOf(handlerToRemove);\n\n if (handlerIndex >= 0) {\n handlers.splice(handlerIndex, 1);\n }\n\n if (handlers.length === 0) {\n delete this.handlersByEventName[eventName];\n }\n }\n }\n /*\n Section: Event Emission\n */\n // Public: Invoke handlers registered via {::on} for the given event name.\n //\n // * `eventName` The name of the event to emit. Handlers registered with {::on}\n // for the same name will be invoked.\n // * `value` Callbacks will be invoked with this value as an argument.\n\n }, {\n key: \"emit\",\n value: function emit(eventName, value) {\n var handlers = this.handlersByEventName && this.handlersByEventName[eventName];\n\n if (handlers) {\n // create a copy of `handlers` so that if any handler mutates `handlers`\n // (e.g. by calling `on` on this same emitter), this does not result in\n // changing the handlers being called during this same `emit`.\n var handlersCopy = handlers.slice();\n\n for (var i = 0; i < handlersCopy.length; i++) {\n this.constructor.dispatch(handlersCopy[i], value);\n }\n }\n }\n }, {\n key: \"emitAsync\",\n value: function emitAsync(eventName, value) {\n var _this3 = this;\n\n var handlers = this.handlersByEventName && this.handlersByEventName[eventName];\n\n if (handlers) {\n var promises = handlers.map(function (handler) {\n return _this3.constructor.dispatch(handler, value);\n });\n return Promise.all(promises).then(function () {});\n }\n\n return Promise.resolve();\n }\n }, {\n key: \"getEventNames\",\n value: function getEventNames() {\n return Object.keys(this.handlersByEventName);\n }\n }, {\n key: \"listenerCountForEventName\",\n value: function listenerCountForEventName(eventName) {\n var handlers = this.handlersByEventName[eventName];\n return handlers == null ? 0 : handlers.length;\n }\n }, {\n key: \"getTotalListenerCount\",\n value: function getTotalListenerCount() {\n var result = 0;\n\n var _arr = Object.keys(this.handlersByEventName);\n\n for (var _i = 0; _i < _arr.length; _i++) {\n var eventName = _arr[_i];\n result += this.handlersByEventName[eventName].length;\n }\n\n return result;\n }\n }]);\n\n return Emitter;\n}();\n\nEmitter.dispatch = Emitter.simpleDispatch;\nEmitter.exceptionHandlers = [];\nmodule.exports = Emitter;","\"use strict\";\n\nexports.Emitter = require(\"./emitter\");\nexports.Disposable = require(\"./disposable\");\nexports.CompositeDisposable = require(\"./composite-disposable\");","(function() {\n var Deprecation, Emitter, getRawStack, grim;\n\n Deprecation = require('./deprecation');\n\n if (global.__grim__ == null) {\n Emitter = require('event-kit').Emitter;\n grim = global.__grim__ = {\n deprecations: {},\n emitter: new Emitter,\n includeDeprecatedAPIs: true,\n getDeprecations: function() {\n var deprecation, deprecations, deprecationsByLineNumber, deprecationsByPackage, fileName, lineNumber, packageName, _ref;\n deprecations = [];\n _ref = grim.deprecations;\n for (fileName in _ref) {\n deprecationsByLineNumber = _ref[fileName];\n for (lineNumber in deprecationsByLineNumber) {\n deprecationsByPackage = deprecationsByLineNumber[lineNumber];\n for (packageName in deprecationsByPackage) {\n deprecation = deprecationsByPackage[packageName];\n deprecations.push(deprecation);\n }\n }\n }\n return deprecations;\n },\n getDeprecationsLength: function() {\n return this.getDeprecations().length;\n },\n clearDeprecations: function() {\n grim.deprecations = {};\n },\n logDeprecations: function() {\n var deprecation, deprecations, _i, _len;\n deprecations = this.getDeprecations();\n deprecations.sort(function(a, b) {\n return b.getCallCount() - a.getCallCount();\n });\n console.warn(\"\\nCalls to deprecated functions\\n-----------------------------\");\n for (_i = 0, _len = deprecations.length; _i < _len; _i++) {\n deprecation = deprecations[_i];\n console.warn(\"(\" + (deprecation.getCallCount()) + \") \" + (deprecation.getOriginName()) + \" : \" + (deprecation.getMessage()), deprecation);\n }\n },\n deprecate: function(message, metadata) {\n var deprecation, deprecationSite, error, fileName, lineNumber, originalStackTraceLimit, packageName, stack, _base, _base1, _base2, _ref, _ref1;\n originalStackTraceLimit = Error.stackTraceLimit;\n try {\n Error.stackTraceLimit = 7;\n error = new Error;\n stack = (_ref = typeof error.getRawStack === \"function\" ? error.getRawStack() : void 0) != null ? _ref : getRawStack(error);\n stack = stack.slice(1);\n } finally {\n Error.stackTraceLimit = originalStackTraceLimit;\n }\n deprecationSite = stack[0];\n fileName = deprecationSite.getFileName();\n lineNumber = deprecationSite.getLineNumber();\n packageName = (_ref1 = metadata != null ? metadata.packageName : void 0) != null ? _ref1 : \"\";\n if ((_base = grim.deprecations)[fileName] == null) {\n _base[fileName] = {};\n }\n if ((_base1 = grim.deprecations[fileName])[lineNumber] == null) {\n _base1[lineNumber] = {};\n }\n if ((_base2 = grim.deprecations[fileName][lineNumber])[packageName] == null) {\n _base2[packageName] = new Deprecation(message);\n }\n deprecation = grim.deprecations[fileName][lineNumber][packageName];\n deprecation.addStack(stack, metadata);\n grim.emitter.emit(\"updated\", deprecation);\n },\n addSerializedDeprecation: function(serializedDeprecation) {\n var deprecation, fileName, lineNumber, message, packageName, stack, stacks, _base, _base1, _base2, _i, _len, _ref, _ref1, _ref2;\n deprecation = Deprecation.deserialize(serializedDeprecation);\n message = deprecation.getMessage();\n fileName = deprecation.fileName, lineNumber = deprecation.lineNumber;\n stacks = deprecation.getStacks();\n packageName = (_ref = (_ref1 = stacks[0]) != null ? (_ref2 = _ref1.metadata) != null ? _ref2.packageName : void 0 : void 0) != null ? _ref : \"\";\n if ((_base = grim.deprecations)[fileName] == null) {\n _base[fileName] = {};\n }\n if ((_base1 = grim.deprecations[fileName])[lineNumber] == null) {\n _base1[lineNumber] = {};\n }\n if ((_base2 = grim.deprecations[fileName][lineNumber])[packageName] == null) {\n _base2[packageName] = new Deprecation(message, fileName, lineNumber);\n }\n deprecation = grim.deprecations[fileName][lineNumber][packageName];\n for (_i = 0, _len = stacks.length; _i < _len; _i++) {\n stack = stacks[_i];\n deprecation.addStack(stack, stack.metadata);\n }\n grim.emitter.emit(\"updated\", deprecation);\n },\n on: function(eventName, callback) {\n return grim.emitter.on(eventName, callback);\n }\n };\n }\n\n getRawStack = function(error) {\n var originalPrepareStackTrace, result;\n originalPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = function(error, stack) {\n return stack;\n };\n Error.captureStackTrace(error, getRawStack);\n result = error.stack;\n Error.prepareStackTrace = originalPrepareStackTrace;\n return result;\n };\n\n module.exports = global.__grim__;\n\n}).call(this);\n","(function() {\n var Deprecation, SourceMapCache;\n\n SourceMapCache = {};\n\n module.exports = Deprecation = (function() {\n Deprecation.getFunctionNameFromCallsite = function(callsite) {};\n\n Deprecation.deserialize = function(_arg) {\n var deprecation, fileName, lineNumber, message, stack, stacks, _i, _len;\n message = _arg.message, fileName = _arg.fileName, lineNumber = _arg.lineNumber, stacks = _arg.stacks;\n deprecation = new Deprecation(message, fileName, lineNumber);\n for (_i = 0, _len = stacks.length; _i < _len; _i++) {\n stack = stacks[_i];\n deprecation.addStack(stack, stack.metadata);\n }\n return deprecation;\n };\n\n function Deprecation(message, fileName, lineNumber) {\n this.message = message;\n this.fileName = fileName;\n this.lineNumber = lineNumber;\n this.callCount = 0;\n this.stackCount = 0;\n this.stacks = {};\n this.stackCallCounts = {};\n }\n\n Deprecation.prototype.getFunctionNameFromCallsite = function(callsite) {\n var _ref, _ref1, _ref2;\n if (callsite.functionName != null) {\n return callsite.functionName;\n }\n if (callsite.isToplevel()) {\n return (_ref = callsite.getFunctionName()) != null ? _ref : '';\n } else {\n if (callsite.isConstructor()) {\n return \"new \" + (callsite.getFunctionName());\n } else if (callsite.getMethodName() && !callsite.getFunctionName()) {\n return callsite.getMethodName();\n } else {\n return \"\" + (callsite.getTypeName()) + \".\" + ((_ref1 = (_ref2 = callsite.getMethodName()) != null ? _ref2 : callsite.getFunctionName()) != null ? _ref1 : '');\n }\n }\n };\n\n Deprecation.prototype.getLocationFromCallsite = function(callsite) {\n var column, fileName, line;\n if (callsite == null) {\n return \"unknown\";\n }\n if (callsite.location != null) {\n return callsite.location;\n }\n if (callsite.isNative()) {\n return \"native\";\n } else if (callsite.isEval()) {\n return \"eval at \" + (this.getLocationFromCallsite(callsite.getEvalOrigin()));\n } else {\n fileName = callsite.getFileName();\n line = callsite.getLineNumber();\n column = callsite.getColumnNumber();\n return \"\" + fileName + \":\" + line + \":\" + column;\n }\n };\n\n Deprecation.prototype.getFileNameFromCallSite = function(callsite) {\n var _ref;\n return (_ref = callsite.fileName) != null ? _ref : callsite.getFileName();\n };\n\n Deprecation.prototype.getOriginName = function() {\n return this.originName;\n };\n\n Deprecation.prototype.getMessage = function() {\n return this.message;\n };\n\n Deprecation.prototype.getStacks = function() {\n var location, parsedStack, parsedStacks, stack, _ref;\n parsedStacks = [];\n _ref = this.stacks;\n for (location in _ref) {\n stack = _ref[location];\n parsedStack = this.parseStack(stack);\n parsedStack.callCount = this.stackCallCounts[location];\n parsedStack.metadata = stack.metadata;\n parsedStacks.push(parsedStack);\n }\n return parsedStacks;\n };\n\n Deprecation.prototype.getStackCount = function() {\n return this.stackCount;\n };\n\n Deprecation.prototype.getCallCount = function() {\n return this.callCount;\n };\n\n Deprecation.prototype.addStack = function(stack, metadata) {\n var callerLocation, _base, _base1;\n if (this.originName == null) {\n this.originName = this.getFunctionNameFromCallsite(stack[0]);\n }\n if (this.fileName == null) {\n this.fileName = this.getFileNameFromCallSite(stack[0]);\n }\n if (this.lineNumber == null) {\n this.lineNumber = typeof (_base = stack[0]).getLineNumber === \"function\" ? _base.getLineNumber() : void 0;\n }\n this.callCount++;\n stack.metadata = metadata;\n callerLocation = this.getLocationFromCallsite(stack[1]);\n if (this.stacks[callerLocation] == null) {\n this.stacks[callerLocation] = stack;\n this.stackCount++;\n }\n if ((_base1 = this.stackCallCounts)[callerLocation] == null) {\n _base1[callerLocation] = 0;\n }\n return this.stackCallCounts[callerLocation]++;\n };\n\n Deprecation.prototype.parseStack = function(stack) {\n return stack.map((function(_this) {\n return function(callsite) {\n return {\n functionName: _this.getFunctionNameFromCallsite(callsite),\n location: _this.getLocationFromCallsite(callsite),\n fileName: _this.getFileNameFromCallSite(callsite)\n };\n };\n })(this));\n };\n\n Deprecation.prototype.serialize = function() {\n return {\n message: this.getMessage(),\n lineNumber: this.lineNumber,\n fileName: this.fileName,\n stacks: this.getStacks()\n };\n };\n\n return Deprecation;\n\n })();\n\n}).call(this);\n","(function() {\n var ExcludedClassProperties, ExcludedPrototypeProperties, Mixin, name;\n\n module.exports = Mixin = (function() {\n Mixin.includeInto = function(constructor) {\n var name, value, _ref;\n this.extend(constructor.prototype);\n for (name in this) {\n value = this[name];\n if (ExcludedClassProperties.indexOf(name) === -1) {\n if (!constructor.hasOwnProperty(name)) {\n constructor[name] = value;\n }\n }\n }\n return (_ref = this.included) != null ? _ref.call(constructor) : void 0;\n };\n\n Mixin.extend = function(object) {\n var name, _i, _len, _ref, _ref1;\n _ref = Object.getOwnPropertyNames(this.prototype);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n name = _ref[_i];\n if (ExcludedPrototypeProperties.indexOf(name) === -1) {\n if (!object.hasOwnProperty(name)) {\n object[name] = this.prototype[name];\n }\n }\n }\n return (_ref1 = this.prototype.extended) != null ? _ref1.call(object) : void 0;\n };\n\n function Mixin() {\n if (typeof this.extended === \"function\") {\n this.extended();\n }\n }\n\n return Mixin;\n\n })();\n\n ExcludedClassProperties = ['__super__'];\n\n for (name in Mixin) {\n ExcludedClassProperties.push(name);\n }\n\n ExcludedPrototypeProperties = ['constructor', 'extended'];\n\n}).call(this);\n","// Generated by CoffeeScript 2.5.1\n(function() {\n var Ancestors, Mixin;\n\n Mixin = require('mixto');\n\n // Public\n module.exports = Ancestors = class Ancestors extends Mixin {\n /* Public */\n static parents(node, selector = '*') {\n var parents;\n parents = [];\n this.eachParent(node, function(parent) {\n if (typeof parent.matches === \"function\" ? parent.matches(selector) : void 0) {\n return parents.push(parent);\n }\n });\n return parents;\n }\n\n static eachParent(node, block) {\n var parent, results;\n parent = node.parentNode;\n if (parent != null) {\n block(parent);\n }\n results = [];\n while (parent = parent.parentNode) {\n if (parent != null) {\n results.push(block(parent));\n } else {\n results.push(void 0);\n }\n }\n return results;\n }\n\n parents(selector = '*') {\n return Ancestors.parents(this, selector);\n }\n\n queryParentSelectorAll(selector) {\n if (selector == null) {\n throw new Error('::queryParentSelectorAll requires a valid selector as argument');\n }\n return this.parents(selector);\n }\n\n queryParentSelector(selector) {\n if (selector == null) {\n throw new Error('::queryParentSelector requires a valid selector as argument');\n }\n return this.queryParentSelectorAll(selector)[0];\n }\n\n eachParent(block) {\n return Ancestors.eachParent(this, block);\n }\n\n };\n\n}).call(this);\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jZXN0b3JzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvbWl4aW5zL2FuY2VzdG9ycy5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUEsTUFBQSxTQUFBLEVBQUE7O0VBQUEsS0FBQSxHQUFRLE9BQUEsQ0FBUSxPQUFSLEVBQVI7OztFQUdBLE1BQU0sQ0FBQyxPQUFQLEdBQ00sWUFBTixNQUFBLFVBQUEsUUFBd0IsTUFBeEIsQ0FBQTs7SUFJWSxPQUFULE9BQVMsQ0FBQyxJQUFELEVBQU8sV0FBUyxHQUFoQixDQUFBO0FBQ1osVUFBQTtNQUFJLE9BQUEsR0FBVTtNQUNWLElBQUMsQ0FBQSxVQUFELENBQVksSUFBWixFQUFrQixRQUFBLENBQUMsTUFBRCxDQUFBO1FBQVksMkNBQXdCLE1BQU0sQ0FBQyxRQUFTLGtCQUF4QztpQkFBQSxPQUFPLENBQUMsSUFBUixDQUFhLE1BQWIsRUFBQTs7TUFBWixDQUFsQjthQUNBO0lBSFE7O0lBS0csT0FBWixVQUFZLENBQUMsSUFBRCxFQUFPLEtBQVAsQ0FBQTtBQUNmLFVBQUEsTUFBQSxFQUFBO01BQUksTUFBQSxHQUFTLElBQUksQ0FBQztNQUVkLElBQWlCLGNBQWpCO1FBQUEsS0FBQSxDQUFNLE1BQU4sRUFBQTs7QUFDQTthQUFNLE1BQUEsR0FBUyxNQUFNLENBQUMsVUFBdEI7UUFDRSxJQUFpQixjQUFqQjt1QkFBQSxLQUFBLENBQU0sTUFBTixHQUFBO1NBQUEsTUFBQTsrQkFBQTs7TUFERixDQUFBOztJQUpXOztJQU9iLE9BQVMsQ0FBQyxXQUFTLEdBQVYsQ0FBQTthQUFrQixTQUFTLENBQUMsT0FBVixDQUFrQixJQUFsQixFQUF3QixRQUF4QjtJQUFsQjs7SUFFVCxzQkFBd0IsQ0FBQyxRQUFELENBQUE7TUFDdEIsSUFBTyxnQkFBUDtRQUNFLE1BQU0sSUFBSSxLQUFKLENBQVUsZ0VBQVYsRUFEUjs7YUFFQSxJQUFDLENBQUEsT0FBRCxDQUFTLFFBQVQ7SUFIc0I7O0lBS3hCLG1CQUFxQixDQUFDLFFBQUQsQ0FBQTtNQUNuQixJQUFPLGdCQUFQO1FBQ0UsTUFBTSxJQUFJLEtBQUosQ0FBVSw2REFBVixFQURSOzthQUVBLElBQUMsQ0FBQSxzQkFBRCxDQUF3QixRQUF4QixDQUFpQyxDQUFDLENBQUQ7SUFIZDs7SUFLckIsVUFBWSxDQUFDLEtBQUQsQ0FBQTthQUFXLFNBQVMsQ0FBQyxVQUFWLENBQXFCLElBQXJCLEVBQTJCLEtBQTNCO0lBQVg7O0VBNUJkO0FBSkEiLCJzb3VyY2VzQ29udGVudCI6WyJNaXhpbiA9IHJlcXVpcmUgJ21peHRvJ1xuXG4jIFB1YmxpY1xubW9kdWxlLmV4cG9ydHMgPVxuY2xhc3MgQW5jZXN0b3JzIGV4dGVuZHMgTWl4aW5cblxuICAjIyMgUHVibGljICMjI1xuXG4gIEBwYXJlbnRzOiAobm9kZSwgc2VsZWN0b3I9JyonKSAtPlxuICAgIHBhcmVudHMgPSBbXVxuICAgIEBlYWNoUGFyZW50IG5vZGUsIChwYXJlbnQpIC0+IHBhcmVudHMucHVzaChwYXJlbnQpIGlmIHBhcmVudC5tYXRjaGVzPyhzZWxlY3RvcilcbiAgICBwYXJlbnRzXG5cbiAgQGVhY2hQYXJlbnQ6IChub2RlLCBibG9jaykgLT5cbiAgICBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGVcblxuICAgIGJsb2NrKHBhcmVudCkgaWYgcGFyZW50P1xuICAgIHdoaWxlIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlXG4gICAgICBibG9jayhwYXJlbnQpIGlmIHBhcmVudD9cblxuICBwYXJlbnRzOiAoc2VsZWN0b3I9JyonKSAtPiBBbmNlc3RvcnMucGFyZW50cyh0aGlzLCBzZWxlY3RvcilcblxuICBxdWVyeVBhcmVudFNlbGVjdG9yQWxsOiAoc2VsZWN0b3IpIC0+XG4gICAgdW5sZXNzIHNlbGVjdG9yP1xuICAgICAgdGhyb3cgbmV3IEVycm9yICc6OnF1ZXJ5UGFyZW50U2VsZWN0b3JBbGwgcmVxdWlyZXMgYSB2YWxpZCBzZWxlY3RvciBhcyBhcmd1bWVudCdcbiAgICBAcGFyZW50cyhzZWxlY3RvcilcblxuICBxdWVyeVBhcmVudFNlbGVjdG9yOiAoc2VsZWN0b3IpIC0+XG4gICAgdW5sZXNzIHNlbGVjdG9yP1xuICAgICAgdGhyb3cgbmV3IEVycm9yICc6OnF1ZXJ5UGFyZW50U2VsZWN0b3IgcmVxdWlyZXMgYSB2YWxpZCBzZWxlY3RvciBhcyBhcmd1bWVudCdcbiAgICBAcXVlcnlQYXJlbnRTZWxlY3RvckFsbChzZWxlY3RvcilbMF1cblxuICBlYWNoUGFyZW50OiAoYmxvY2spIC0+IEFuY2VzdG9ycy5lYWNoUGFyZW50KHRoaXMsIGJsb2NrKVxuIl19\n//# sourceURL=/home/runner/work/atom-utils-plus/atom-utils-plus/lib/mixins/ancestors.coffee","// Generated by CoffeeScript 2.5.1\n(function() {\n var Disposable, DisposableEvents, Mixin;\n\n Mixin = require('mixto');\n\n ({Disposable} = require('atom'));\n\n module.exports = DisposableEvents = class DisposableEvents extends Mixin {\n addDisposableEventListener(object, event, listener, options) {\n object.addEventListener(event, listener, options);\n return new Disposable(function() {\n return object.removeEventListener(event, listener);\n });\n }\n\n };\n\n}).call(this);\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcG9zYWJsZS1ldmVudHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9taXhpbnMvZGlzcG9zYWJsZS1ldmVudHMuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBLE1BQUEsVUFBQSxFQUFBLGdCQUFBLEVBQUE7O0VBQUEsS0FBQSxHQUFRLE9BQUEsQ0FBUSxPQUFSOztFQUNSLENBQUEsQ0FBQyxVQUFELENBQUEsR0FBZSxPQUFBLENBQVEsTUFBUixDQUFmOztFQUVBLE1BQU0sQ0FBQyxPQUFQLEdBQ00sbUJBQU4sTUFBQSxpQkFBQSxRQUErQixNQUEvQjtJQUNFLDBCQUE0QixDQUFDLE1BQUQsRUFBUyxLQUFULEVBQWdCLFFBQWhCLEVBQTBCLE9BQTFCLENBQUE7TUFDMUIsTUFBTSxDQUFDLGdCQUFQLENBQXdCLEtBQXhCLEVBQStCLFFBQS9CLEVBQXlDLE9BQXpDO2FBQ0EsSUFBSSxVQUFKLENBQWUsUUFBQSxDQUFBLENBQUE7ZUFBRyxNQUFNLENBQUMsbUJBQVAsQ0FBMkIsS0FBM0IsRUFBa0MsUUFBbEM7TUFBSCxDQUFmO0lBRjBCOztFQUQ5QjtBQUpBIiwic291cmNlc0NvbnRlbnQiOlsiTWl4aW4gPSByZXF1aXJlICdtaXh0bydcbntEaXNwb3NhYmxlfSA9IHJlcXVpcmUgJ2F0b20nXG5cbm1vZHVsZS5leHBvcnRzID1cbmNsYXNzIERpc3Bvc2FibGVFdmVudHMgZXh0ZW5kcyBNaXhpblxuICBhZGREaXNwb3NhYmxlRXZlbnRMaXN0ZW5lcjogKG9iamVjdCwgZXZlbnQsIGxpc3RlbmVyLCBvcHRpb25zKSAtPlxuICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyIGV2ZW50LCBsaXN0ZW5lciwgb3B0aW9uc1xuICAgIG5ldyBEaXNwb3NhYmxlIC0+IG9iamVjdC5yZW1vdmVFdmVudExpc3RlbmVyIGV2ZW50LCBsaXN0ZW5lclxuIl19\n//# sourceURL=/home/runner/work/atom-utils-plus/atom-utils-plus/lib/mixins/disposable-events.coffee","\"use strict\";\n\nvar utils = require(\"./utils\");\n\nmodule.exports = function batchProcessorMaker(options) {\n options = options || {};\n var reporter = options.reporter;\n var asyncProcess = utils.getOption(options, \"async\", true);\n var autoProcess = utils.getOption(options, \"auto\", true);\n\n if(autoProcess && !asyncProcess) {\n reporter && reporter.warn(\"Invalid options combination. auto=true and async=false is invalid. Setting async=true.\");\n asyncProcess = true;\n }\n\n var batch = Batch();\n var asyncFrameHandler;\n var isProcessing = false;\n\n function addFunction(level, fn) {\n if(!isProcessing && autoProcess && asyncProcess && batch.size() === 0) {\n // Since this is async, it is guaranteed to be executed after that the fn is added to the batch.\n // This needs to be done before, since we're checking the size of the batch to be 0.\n processBatchAsync();\n }\n\n batch.add(level, fn);\n }\n\n function processBatch() {\n // Save the current batch, and create a new batch so that incoming functions are not added into the currently processing batch.\n // Continue processing until the top-level batch is empty (functions may be added to the new batch while processing, and so on).\n isProcessing = true;\n while (batch.size()) {\n var processingBatch = batch;\n batch = Batch();\n processingBatch.process();\n }\n isProcessing = false;\n }\n\n function forceProcessBatch(localAsyncProcess) {\n if (isProcessing) {\n return;\n }\n\n if(localAsyncProcess === undefined) {\n localAsyncProcess = asyncProcess;\n }\n\n if(asyncFrameHandler) {\n cancelFrame(asyncFrameHandler);\n asyncFrameHandler = null;\n }\n\n if(localAsyncProcess) {\n processBatchAsync();\n } else {\n processBatch();\n }\n }\n\n function processBatchAsync() {\n asyncFrameHandler = requestFrame(processBatch);\n }\n\n function clearBatch() {\n batch = {};\n batchSize = 0;\n topLevel = 0;\n bottomLevel = 0;\n }\n\n function cancelFrame(listener) {\n // var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout;\n var cancel = clearTimeout;\n return cancel(listener);\n }\n\n function requestFrame(callback) {\n // var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function(fn) { return window.setTimeout(fn, 20); };\n var raf = function(fn) { return setTimeout(fn, 0); };\n return raf(callback);\n }\n\n return {\n add: addFunction,\n force: forceProcessBatch\n };\n};\n\nfunction Batch() {\n var batch = {};\n var size = 0;\n var topLevel = 0;\n var bottomLevel = 0;\n\n function add(level, fn) {\n if(!fn) {\n fn = level;\n level = 0;\n }\n\n if(level > topLevel) {\n topLevel = level;\n } else if(level < bottomLevel) {\n bottomLevel = level;\n }\n\n if(!batch[level]) {\n batch[level] = [];\n }\n\n batch[level].push(fn);\n size++;\n }\n\n function process() {\n for(var level = bottomLevel; level <= topLevel; level++) {\n var fns = batch[level];\n\n for(var i = 0; i < fns.length; i++) {\n var fn = fns[i];\n fn();\n }\n }\n }\n\n function getSize() {\n return size;\n }\n\n return {\n add: add,\n process: process,\n size: getSize\n };\n}\n","\"use strict\";\n\nvar prop = \"_erd\";\n\nfunction initState(element) {\n element[prop] = {};\n return getState(element);\n}\n\nfunction getState(element) {\n return element[prop];\n}\n\nfunction cleanState(element) {\n delete element[prop];\n}\n\nmodule.exports = {\n initState: initState,\n getState: getState,\n cleanState: cleanState\n};\n","\"use strict\";\n\nvar forEach = require(\"./collection-utils\").forEach;\nvar elementUtilsMaker = require(\"./element-utils\");\nvar listenerHandlerMaker = require(\"./listener-handler\");\nvar idGeneratorMaker = require(\"./id-generator\");\nvar idHandlerMaker = require(\"./id-handler\");\nvar reporterMaker = require(\"./reporter\");\nvar browserDetector = require(\"./browser-detector\");\nvar batchProcessorMaker = require(\"batch-processor\");\nvar stateHandler = require(\"./state-handler\");\n\n//Detection strategies.\nvar objectStrategyMaker = require(\"./detection-strategy/object.js\");\nvar scrollStrategyMaker = require(\"./detection-strategy/scroll.js\");\n\nfunction isCollection(obj) {\n return Array.isArray(obj) || obj.length !== undefined;\n}\n\nfunction toArray(collection) {\n if (!Array.isArray(collection)) {\n var array = [];\n forEach(collection, function (obj) {\n array.push(obj);\n });\n return array;\n } else {\n return collection;\n }\n}\n\nfunction isElement(obj) {\n return obj && obj.nodeType === 1;\n}\n\n/**\n * @typedef idHandler\n * @type {object}\n * @property {function} get Gets the resize detector id of the element.\n * @property {function} set Generate and sets the resize detector id of the element.\n */\n\n/**\n * @typedef Options\n * @type {object}\n * @property {boolean} callOnAdd Determines if listeners should be called when they are getting added.\n Default is true. If true, the listener is guaranteed to be called when it has been added.\n If false, the listener will not be guarenteed to be called when it has been added (does not prevent it from being called).\n * @property {idHandler} idHandler A custom id handler that is responsible for generating, setting and retrieving id's for elements.\n If not provided, a default id handler will be used.\n * @property {reporter} reporter A custom reporter that handles reporting logs, warnings and errors.\n If not provided, a default id handler will be used.\n If set to false, then nothing will be reported.\n * @property {boolean} debug If set to true, the the system will report debug messages as default for the listenTo method.\n */\n\n/**\n * Creates an element resize detector instance.\n * @public\n * @param {Options?} options Optional global options object that will decide how this instance will work.\n */\nmodule.exports = function(options) {\n options = options || {};\n\n //idHandler is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var idHandler;\n\n if (options.idHandler) {\n // To maintain compatability with idHandler.get(element, readonly), make sure to wrap the given idHandler\n // so that readonly flag always is true when it's used here. This may be removed next major version bump.\n idHandler = {\n get: function (element) { return options.idHandler.get(element, true); },\n set: options.idHandler.set\n };\n } else {\n var idGenerator = idGeneratorMaker();\n var defaultIdHandler = idHandlerMaker({\n idGenerator: idGenerator,\n stateHandler: stateHandler\n });\n idHandler = defaultIdHandler;\n }\n\n //reporter is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var reporter = options.reporter;\n\n if(!reporter) {\n //If options.reporter is false, then the reporter should be quiet.\n var quiet = reporter === false;\n reporter = reporterMaker(quiet);\n }\n\n //batchProcessor is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var batchProcessor = getOption(options, \"batchProcessor\", batchProcessorMaker({ reporter: reporter }));\n\n //Options to be used as default for the listenTo function.\n var globalOptions = {};\n globalOptions.callOnAdd = !!getOption(options, \"callOnAdd\", true);\n globalOptions.debug = !!getOption(options, \"debug\", false);\n\n var eventListenerHandler = listenerHandlerMaker(idHandler);\n var elementUtils = elementUtilsMaker({\n stateHandler: stateHandler\n });\n\n //The detection strategy to be used.\n var detectionStrategy;\n var desiredStrategy = getOption(options, \"strategy\", \"object\");\n var importantCssRules = getOption(options, \"important\", false);\n var strategyOptions = {\n reporter: reporter,\n batchProcessor: batchProcessor,\n stateHandler: stateHandler,\n idHandler: idHandler,\n important: importantCssRules\n };\n\n if(desiredStrategy === \"scroll\") {\n if (browserDetector.isLegacyOpera()) {\n reporter.warn(\"Scroll strategy is not supported on legacy Opera. Changing to object strategy.\");\n desiredStrategy = \"object\";\n } else if (browserDetector.isIE(9)) {\n reporter.warn(\"Scroll strategy is not supported on IE9. Changing to object strategy.\");\n desiredStrategy = \"object\";\n }\n }\n\n if(desiredStrategy === \"scroll\") {\n detectionStrategy = scrollStrategyMaker(strategyOptions);\n } else if(desiredStrategy === \"object\") {\n detectionStrategy = objectStrategyMaker(strategyOptions);\n } else {\n throw new Error(\"Invalid strategy name: \" + desiredStrategy);\n }\n\n //Calls can be made to listenTo with elements that are still being installed.\n //Also, same elements can occur in the elements list in the listenTo function.\n //With this map, the ready callbacks can be synchronized between the calls\n //so that the ready callback can always be called when an element is ready - even if\n //it wasn't installed from the function itself.\n var onReadyCallbacks = {};\n\n /**\n * Makes the given elements resize-detectable and starts listening to resize events on the elements. Calls the event callback for each event for each element.\n * @public\n * @param {Options?} options Optional options object. These options will override the global options. Some options may not be overriden, such as idHandler.\n * @param {element[]|element} elements The given array of elements to detect resize events of. Single element is also valid.\n * @param {function} listener The callback to be executed for each resize event for each element.\n */\n function listenTo(options, elements, listener) {\n function onResizeCallback(element) {\n var listeners = eventListenerHandler.get(element);\n forEach(listeners, function callListenerProxy(listener) {\n listener(element);\n });\n }\n\n function addListener(callOnAdd, element, listener) {\n eventListenerHandler.add(element, listener);\n\n if(callOnAdd) {\n listener(element);\n }\n }\n\n //Options object may be omitted.\n if(!listener) {\n listener = elements;\n elements = options;\n options = {};\n }\n\n if(!elements) {\n throw new Error(\"At least one element required.\");\n }\n\n if(!listener) {\n throw new Error(\"Listener required.\");\n }\n\n if (isElement(elements)) {\n // A single element has been passed in.\n elements = [elements];\n } else if (isCollection(elements)) {\n // Convert collection to array for plugins.\n // TODO: May want to check so that all the elements in the collection are valid elements.\n elements = toArray(elements);\n } else {\n return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n }\n\n var elementsReady = 0;\n\n var callOnAdd = getOption(options, \"callOnAdd\", globalOptions.callOnAdd);\n var onReadyCallback = getOption(options, \"onReady\", function noop() {});\n var debug = getOption(options, \"debug\", globalOptions.debug);\n\n forEach(elements, function attachListenerToElement(element) {\n if (!stateHandler.getState(element)) {\n stateHandler.initState(element);\n idHandler.set(element);\n }\n\n var id = idHandler.get(element);\n\n debug && reporter.log(\"Attaching listener to element\", id, element);\n\n if(!elementUtils.isDetectable(element)) {\n debug && reporter.log(id, \"Not detectable.\");\n if(elementUtils.isBusy(element)) {\n debug && reporter.log(id, \"System busy making it detectable\");\n\n //The element is being prepared to be detectable. Do not make it detectable.\n //Just add the listener, because the element will soon be detectable.\n addListener(callOnAdd, element, listener);\n onReadyCallbacks[id] = onReadyCallbacks[id] || [];\n onReadyCallbacks[id].push(function onReady() {\n elementsReady++;\n\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n });\n return;\n }\n\n debug && reporter.log(id, \"Making detectable...\");\n //The element is not prepared to be detectable, so do prepare it and add a listener to it.\n elementUtils.markBusy(element, true);\n return detectionStrategy.makeDetectable({ debug: debug, important: importantCssRules }, element, function onElementDetectable(element) {\n debug && reporter.log(id, \"onElementDetectable\");\n\n if (stateHandler.getState(element)) {\n elementUtils.markAsDetectable(element);\n elementUtils.markBusy(element, false);\n detectionStrategy.addListener(element, onResizeCallback);\n addListener(callOnAdd, element, listener);\n\n // Since the element size might have changed since the call to \"listenTo\", we need to check for this change,\n // so that a resize event may be emitted.\n // Having the startSize object is optional (since it does not make sense in some cases such as unrendered elements), so check for its existance before.\n // Also, check the state existance before since the element may have been uninstalled in the installation process.\n var state = stateHandler.getState(element);\n if (state && state.startSize) {\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n if (state.startSize.width !== width || state.startSize.height !== height) {\n onResizeCallback(element);\n }\n }\n\n if(onReadyCallbacks[id]) {\n forEach(onReadyCallbacks[id], function(callback) {\n callback();\n });\n }\n } else {\n // The element has been unisntalled before being detectable.\n debug && reporter.log(id, \"Element uninstalled before being detectable.\");\n }\n\n delete onReadyCallbacks[id];\n\n elementsReady++;\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n });\n }\n\n debug && reporter.log(id, \"Already detecable, adding listener.\");\n\n //The element has been prepared to be detectable and is ready to be listened to.\n addListener(callOnAdd, element, listener);\n elementsReady++;\n });\n\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n }\n\n function uninstall(elements) {\n if(!elements) {\n return reporter.error(\"At least one element is required.\");\n }\n\n if (isElement(elements)) {\n // A single element has been passed in.\n elements = [elements];\n } else if (isCollection(elements)) {\n // Convert collection to array for plugins.\n // TODO: May want to check so that all the elements in the collection are valid elements.\n elements = toArray(elements);\n } else {\n return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n }\n\n forEach(elements, function (element) {\n eventListenerHandler.removeAllListeners(element);\n detectionStrategy.uninstall(element);\n stateHandler.cleanState(element);\n });\n }\n\n function initDocument(targetDocument) {\n detectionStrategy.initDocument && detectionStrategy.initDocument(targetDocument);\n }\n\n return {\n listenTo: listenTo,\n removeListener: eventListenerHandler.removeListener,\n removeAllListeners: eventListenerHandler.removeAllListeners,\n uninstall: uninstall,\n initDocument: initDocument\n };\n};\n\nfunction getOption(options, name, defaultValue) {\n var value = options[name];\n\n if((value === undefined || value === null) && defaultValue !== undefined) {\n return defaultValue;\n }\n\n return value;\n}\n","// Current version.\nexport var VERSION = '1.11.0';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n Function('return this')() ||\n {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n","// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n}\n","// Is a given variable an object?\nexport default function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n}\n","// Is a given value equal to null?\nexport default function isNull(obj) {\n return obj === null;\n}\n","// Is a given variable undefined?\nexport default function isUndefined(obj) {\n return obj === void 0;\n}\n","import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n","// Is a given value a DOM element?\nexport default function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n}\n","import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n return function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('DataView');\n","import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n","import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n}\n\nexport default isFunction;\n","import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n}\n","import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n}());\n\nexport default isArguments;\n","import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n","import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n return isNumber(obj) && _isNaN(obj);\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n return function() {\n return value;\n };\n}\n","import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n}\n","// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n}\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n","import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n","import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key]; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = isFunction(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n}\n","import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n if (isArrayLike(obj) && (isArray(obj) || isString(obj) || isArguments(obj))) return obj.length === 0;\n return keys(obj).length === 0;\n}\n","import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n}\n","import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n return String(this._wrapped);\n};\n","import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport keys from './keys.js';\nimport has from './_has.js';\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n // Coerce to `DataView` so we can fall through to the next case.\n return deepEq(new DataView(a), new DataView(b), aStack, bStack);\n case '[object DataView]':\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) {\n return false;\n }\n while (byteLength--) {\n if (a.getUint8(byteLength) !== b.getUint8(byteLength)) {\n return false;\n }\n }\n return true;\n }\n\n if (isTypedArray(a)) {\n // Coerce typed arrays to `DataView`.\n return deepEq(new DataView(a.buffer), new DataView(b.buffer), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n}\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n return eq(a, b);\n}\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n}\n","import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n}\n","import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n}\n","import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n}\n","// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n","import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n}\n","import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n}\n","import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n","// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n}\n","import isArray from './isArray.js';\nimport _has from './_has.js';\nimport { hasOwnProperty } from './_setup.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n if (!isArray(path)) {\n return _has(obj, path);\n }\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (obj == null || !hasOwnProperty.call(obj, key)) {\n return false;\n }\n obj = obj[key];\n }\n return !!length;\n}\n","// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n return value;\n}\n","import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n}\n","// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n}\n","import isArray from './isArray.js';\nimport shallowProperty from './_shallowProperty.js';\nimport deepGet from './_deepGet.js';\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n if (!isArray(path)) {\n return shallowProperty(path);\n }\n return function(obj) {\n return deepGet(obj, path);\n };\n}\n","// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n}\n","import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n}\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n if (_.iteratee !== iteratee) return _.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n","import isArray from './isArray.js';\nimport deepGet from './_deepGet.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n if (obj == null) {\n return function(){};\n }\n return function(path) {\n return !isArray(path) ? obj[path] : deepGet(obj, path);\n };\n}\n","import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n}\n","// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n}\n","// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n return new Date().getTime();\n};\n","import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n}\n","// Internal list of HTML entities for escaping.\nexport default {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n","import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n","import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n};\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n return '\\\\' + escapes[match];\n}\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n}\n","import isArray from './isArray.js';\nimport isFunction from './isFunction.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n if (!isArray(path)) path = [path];\n var length = path.length;\n if (!length) {\n return isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n}\n","// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n","import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n}\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n}\n","import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n});\n","import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n}\n","import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n}\n","import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n});\n","import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n","import restArguments from './restArguments.js';\nimport delay from './delay.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n var timeout, result;\n\n var later = function(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function(args) {\n if (timeout) clearTimeout(timeout);\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n}\n","import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n return partial(wrapper, func);\n}\n","// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n}\n","// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n}\n","// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n}\n","// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n}\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n}\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n}\n","import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n}\n","import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n","import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n}\n","import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n}\n","import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n}\n","import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n}\n","import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n return map(obj, property(key));\n}\n","import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport clone from './clone.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? clone(obj) : values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n}\n","import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n return sample(obj, Infinity);\n}\n","import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n}\n","import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n","// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n return key in obj;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n});\n","import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n","import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n}\n","import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n}\n","import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n}\n","import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n return filter(array, Boolean);\n}\n","import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n return _flatten(array, depth, false);\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n});\n","import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n}\n","import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n}\n","import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n var length = array && max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n}\n","import getLength from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n}\n","// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n}\n","import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n}\n","import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Map');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakMap');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Set');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n","import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n});\n","import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n","import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n","import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n","import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n","import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport isArray from './isArray.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction(path)) {\n func = path;\n } else if (isArray(path)) {\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n","import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n result[key] = value;\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n});\n","import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n}, true);\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n});\n","import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n});\n","import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n return uniq(flatten(arrays, true, true));\n});\n","import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n","import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n});\n\nexport default _;\n","'use strict'\n\nimport { escapeRegExp } from 'underscore-plus'\nimport Mixin from 'mixto'\n\nimport * as Main from '../main'\nimport CanvasLayer from '../canvas-layer'\nimport DOMStylesReader from '../dom-styles-reader'\n\n/**\n * The `CanvasDrawer` mixin is responsible for the rendering of a `Minimap`\n * in a `canvas` element.\n *\n * This mixin is injected in the `MinimapElement` prototype, so all these\n * methods are available on any `MinimapElement` instance.\n */\nexport default class CanvasDrawer extends Mixin {\n /**\n * Initializes the canvas elements needed to perform the `Minimap` rendering.\n */\n initializeCanvas () {\n /**\n * The main canvas layer where lines are rendered.\n * @type {CanvasLayer}\n */\n this.tokensLayer = new CanvasLayer()\n /**\n * The canvas layer for decorations below the text.\n * @type {CanvasLayer}\n */\n this.backLayer = new CanvasLayer()\n /**\n * The canvas layer for decorations above the text.\n * @type {CanvasLayer}\n */\n this.frontLayer = new CanvasLayer()\n\n if (!this.pendingChanges) {\n /**\n * Stores the changes from the text editor.\n * @type {Array}\n * @access private\n */\n this.pendingChanges = []\n }\n\n if (!this.pendingBackDecorationChanges) {\n /**\n * Stores the changes from the minimap back decorations.\n * @type {Array}\n * @access private\n */\n this.pendingBackDecorationChanges = []\n }\n\n if (!this.pendingFrontDecorationChanges) {\n /**\n * Stores the changes from the minimap front decorations.\n * @type {Array}\n * @access private\n */\n this.pendingFrontDecorationChanges = []\n }\n\n // the maximum number of tokens to render in one line\n this.maxTokensInOneLine = atom.config.get('minimap.maxTokensInOneLine')\n\n /**\n * This MinimapElement's DOMStylesReader\n */\n this.DOMStylesReader = new DOMStylesReader()\n }\n\n /**\n * Returns the uppermost canvas in the MinimapElement.\n *\n * @return {HTMLCanvasElement} the html canvas element\n */\n getFrontCanvas () { return this.frontLayer.canvas }\n\n /**\n * Attaches the canvases into the specified container.\n *\n * @param {HTMLElement} parent the canvases' container\n * @access private\n */\n attachCanvases (parent) {\n this.backLayer.attach(parent)\n this.tokensLayer.attach(parent)\n this.frontLayer.attach(parent)\n }\n\n /**\n * Changes the size of all the canvas layers at once.\n *\n * @param {number} width the new width for the three canvases\n * @param {number} height the new height for the three canvases\n * @access private\n */\n setCanvasesSize (width, height) {\n this.backLayer.setSize(width, height)\n this.tokensLayer.setSize(width, height)\n this.frontLayer.setSize(width, height)\n }\n\n /**\n * Performs an update of the rendered `Minimap` based on the changes\n * registered in the instance.\n */\n updateCanvas () {\n const firstRow = this.minimap.getFirstVisibleScreenRow()\n const lastRow = this.minimap.getLastVisibleScreenRow()\n\n this.updateTokensLayer(firstRow, lastRow)\n this.updateBackDecorationsLayer(firstRow, lastRow)\n this.updateFrontDecorationsLayer(firstRow, lastRow)\n\n this.pendingChanges = []\n this.pendingBackDecorationChanges = []\n this.pendingFrontDecorationChanges = []\n\n /**\n * The first row in the last render of the offscreen canvas.\n * @type {number}\n * @access private\n */\n this.offscreenFirstRow = firstRow\n /**\n * The last row in the last render of the offscreen canvas.\n * @type {number}\n * @access private\n */\n this.offscreenLastRow = lastRow\n }\n\n /**\n * Performs an update of the tokens layer using the pending changes array.\n *\n * @param {number} firstRow firstRow the first row of the range to update\n * @param {number} lastRow lastRow the last row of the range to update\n * @access private\n */\n updateTokensLayer (firstRow, lastRow) {\n const intactRanges = computeIntactRanges(firstRow, lastRow, this.pendingChanges, this.offscreenFirstRow, this.offscreenLastRow)\n\n this.redrawRangesOnLayer(this.tokensLayer, intactRanges, firstRow, lastRow, this.drawLines)\n }\n\n /**\n * Performs an update of the back decorations layer using the pending back\n * decorations changes arrays.\n *\n * @param {number} firstRow firstRow the first row of the range to update\n * @param {number} lastRow lastRow the last row of the range to update\n * @access private\n */\n updateBackDecorationsLayer (firstRow, lastRow) {\n const intactRanges = computeIntactRanges(firstRow, lastRow, this.pendingBackDecorationChanges, this.offscreenFirstRow, this.offscreenLastRow)\n\n this.redrawRangesOnLayer(this.backLayer, intactRanges, firstRow, lastRow, this.drawBackDecorationsForLines)\n }\n\n /**\n * Performs an update of the front decorations layer using the pending front\n * decorations changes arrays.\n *\n * @param {number} firstRow firstRow the first row of the range to update\n * @param {number} lastRow lastRow the last row of the range to update\n * @access private\n */\n updateFrontDecorationsLayer (firstRow, lastRow) {\n const intactRanges = computeIntactRanges(firstRow, lastRow, this.pendingFrontDecorationChanges, this.offscreenFirstRow, this.offscreenLastRow)\n\n this.redrawRangesOnLayer(this.frontLayer, intactRanges, firstRow, lastRow, this.drawFrontDecorationsForLines)\n }\n\n // ###### ####### ## ####### ######## ######\n // ## ## ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ######## ######\n // ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ## ## ##\n // ###### ####### ######## ####### ## ## ######\n\n /**\n * Returns the opacity value to use when rendering the `Minimap` text.\n *\n * @return {Number} the text opacity value\n */\n getTextOpacity () { return this.textOpacity }\n\n /**\n * Returns the default text color for an editor content.\n *\n * The color value is directly read from the `TextEditorView` computed styles.\n *\n * @return {string} a CSS color\n */\n getDefaultColor () {\n const color = this.DOMStylesReader.retrieveStyleFromDom(['.editor'], 'color', this.minimap.getTextEditorElement(), true)\n return transparentize(color, this.getTextOpacity())\n }\n\n /**\n * Returns the text color for the passed-in `token` object.\n *\n * The color value is read from the DOM by creating a node structure that\n * match the token `scope` property.\n *\n * @param {Object} token a `TextEditor` token\n * @return {string} the CSS color for the provided token\n */\n getTokenColor (token) {\n const scopes = token.scopeDescriptor || token.scopes\n const color = this.DOMStylesReader.retrieveStyleFromDom(scopes, 'color', this.minimap.getTextEditorElement(), true)\n\n return transparentize(color, this.getTextOpacity())\n }\n\n /**\n * Returns the background color for the passed-in `decoration` object.\n *\n * The color value is read from the DOM by creating a node structure that\n * match the decoration `scope` property unless the decoration provides\n * its own `color` property.\n *\n * @param {Decoration} decoration the decoration to get the color for\n * @return {string} the CSS color for the provided decoration\n */\n getDecorationColor (decoration) {\n const properties = decoration.getProperties()\n if (properties.color) { return properties.color }\n\n if (properties.scope) {\n const scopeString = properties.scope.split(/\\s+/)\n return this.DOMStylesReader.retrieveStyleFromDom(scopeString, 'background-color', this.minimap.getTextEditorElement(), true)\n } else {\n return this.getDefaultColor()\n }\n }\n\n // ######## ######## ### ## ##\n // ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ##\n // ## ## ######## ## ## ## ## ##\n // ## ## ## ## ######### ## ## ##\n // ## ## ## ## ## ## ## ## ##\n // ######## ## ## ## ## ### ###\n\n /**\n * Routine used to render changes in specific ranges for one layer.\n *\n * @param {CanvasLayer} layer the layer to redraw\n * @param {Array} intactRanges an array of the ranges to leave intact\n * @param {number} firstRow firstRow the first row of the range to update\n * @param {number} lastRow lastRow the last row of the range to update\n * @param {Function} method the render method to use for the lines drawing\n * @access private\n */\n redrawRangesOnLayer (layer, intactRanges, firstRow, lastRow, method) {\n const devicePixelRatio = this.minimap.getDevicePixelRatio()\n const lineHeight = this.minimap.getLineHeight() * devicePixelRatio\n\n layer.clearCanvas()\n\n if (intactRanges.length === 0) {\n method.call(this, firstRow, lastRow, 0)\n } else {\n for (let j = 0, len = intactRanges.length; j < len; j++) {\n const intact = intactRanges[j]\n\n layer.copyPartFromOffscreen(\n intact.offscreenRow * lineHeight,\n (intact.start - firstRow) * lineHeight,\n (intact.end - intact.start) * lineHeight\n )\n }\n this.drawLinesForRanges(method, intactRanges, firstRow, lastRow)\n }\n\n layer.resetOffscreenSize()\n layer.copyToOffscreen()\n }\n\n /**\n * Renders the lines between the intact ranges when an update has pending\n * changes.\n *\n * @param {Function} method the render method to use for the lines drawing\n * @param {Array} intactRanges the intact ranges in the minimap\n * @param {number} firstRow the first row of the rendered region\n * @param {number} lastRow the last row of the rendered region\n * @access private\n */\n drawLinesForRanges (method, ranges, firstRow, lastRow) {\n let currentRow = firstRow\n for (let i = 0, len = ranges.length; i < len; i++) {\n const range = ranges[i]\n\n method.call(this, currentRow, range.start, currentRow - firstRow)\n\n currentRow = range.end\n }\n if (currentRow <= lastRow) {\n method.call(this, currentRow, lastRow, currentRow - firstRow)\n }\n }\n\n /**\n * Draws back decorations on the corresponding layer.\n *\n * The lines range to draw is specified by the `firstRow` and `lastRow`\n * parameters.\n *\n * @param {number} firstRow the first row to render\n * @param {number} lastRow the last row to render\n * @param {number} offsetRow the relative offset to apply to rows when\n * rendering them\n * @access private\n */\n drawBackDecorationsForLines (firstRow, lastRow, offsetRow) {\n if (firstRow > lastRow) { return }\n\n const devicePixelRatio = this.minimap.getDevicePixelRatio()\n const lineHeight = this.minimap.getLineHeight() * devicePixelRatio\n const charHeight = this.minimap.getCharHeight() * devicePixelRatio\n const charWidth = this.minimap.getCharWidth() * devicePixelRatio\n const decorations = this.minimap.decorationsByTypeThenRows(firstRow, lastRow)\n const { width: canvasWidth, height: canvasHeight } = this.tokensLayer.getSize()\n const renderData = {\n context: this.backLayer.context,\n canvasWidth,\n canvasHeight,\n lineHeight,\n charWidth,\n charHeight,\n orders: Main.getPluginsOrder()\n }\n\n for (let screenRow = firstRow; screenRow <= lastRow; screenRow++) {\n renderData.row = offsetRow + (screenRow - firstRow)\n renderData.yRow = renderData.row * lineHeight\n renderData.screenRow = screenRow\n\n this.drawDecorations(screenRow, decorations, renderData, {\n line: this.drawLineDecoration,\n 'highlight-under': this.drawHighlightDecoration,\n 'background-custom': this.drawCustomDecoration\n })\n }\n\n this.backLayer.context.fill()\n }\n\n /**\n * Draws front decorations on the corresponding layer.\n *\n * The lines range to draw is specified by the `firstRow` and `lastRow`\n * parameters.\n *\n * @param {number} firstRow the first row to render\n * @param {number} lastRow the last row to render\n * @param {number} offsetRow the relative offset to apply to rows when\n * rendering them\n * @access private\n */\n drawFrontDecorationsForLines (firstRow, lastRow, offsetRow) {\n if (firstRow > lastRow) { return }\n\n const devicePixelRatio = this.minimap.getDevicePixelRatio()\n const lineHeight = this.minimap.getLineHeight() * devicePixelRatio\n const charHeight = this.minimap.getCharHeight() * devicePixelRatio\n const charWidth = this.minimap.getCharWidth() * devicePixelRatio\n const decorations = this.minimap.decorationsByTypeThenRows(firstRow, lastRow)\n const { width: canvasWidth, height: canvasHeight } = this.tokensLayer.getSize()\n const renderData = {\n context: this.frontLayer.context,\n canvasWidth,\n canvasHeight,\n lineHeight,\n charWidth,\n charHeight,\n orders: Main.getPluginsOrder()\n }\n\n for (let screenRow = firstRow; screenRow <= lastRow; screenRow++) {\n renderData.row = offsetRow + (screenRow - firstRow)\n renderData.yRow = renderData.row * lineHeight\n renderData.screenRow = screenRow\n\n this.drawDecorations(screenRow, decorations, renderData, {\n gutter: this.drawGutterDecoration,\n 'highlight-over': this.drawHighlightDecoration,\n 'highlight-outline': this.drawHighlightOutlineDecoration,\n 'foreground-custom': this.drawCustomDecoration\n })\n }\n\n renderData.context.fill()\n }\n\n /**\n * Draws lines on the corresponding layer.\n *\n * The lines range to draw is specified by the `firstRow` and `lastRow`\n * parameters.\n *\n * @param {number} firstRow the first row to render\n * @param {number} lastRow the last row to render\n * @param {number} offsetRow the relative offset to apply to rows when\n * rendering them\n * @access private\n */\n drawLines (firstRow, lastRow, offsetRow) {\n if (firstRow > lastRow) { return }\n\n const devicePixelRatio = this.minimap.getDevicePixelRatio()\n const lineHeight = this.minimap.getLineHeight() * devicePixelRatio\n const charHeight = this.minimap.getCharHeight() * devicePixelRatio\n const charWidth = this.minimap.getCharWidth() * devicePixelRatio\n const displayCodeHighlights = this.displayCodeHighlights\n const context = this.tokensLayer.context\n const { width: canvasWidth } = this.tokensLayer.getSize()\n\n let lastLine, x\n let y = (offsetRow * lineHeight) - lineHeight\n eachTokenForScreenRows(firstRow, lastRow, this.minimap.getTextEditor(), this.maxTokensInOneLine, (line, token) => {\n if (lastLine !== line) {\n x = 0\n y += lineHeight\n lastLine = line\n context.clearRect(x, y, canvasWidth, lineHeight)\n }\n if (x > canvasWidth) { return }\n\n if (/^\\s+$/.test(token.text)) {\n x += token.text.length * charWidth\n } else {\n const color = displayCodeHighlights\n ? this.getTokenColor(token)\n : this.getDefaultColor()\n\n x = drawToken(\n context, token.text, color, x, y, charWidth, charHeight, this.ignoreWhitespacesInTokens\n )\n }\n })\n context.fill()\n }\n\n /**\n * Draws the specified decorations for the current `screenRow`.\n *\n * The `decorations` object contains all the decorations grouped by type and\n * then rows.\n *\n * @param {number} screenRow the screen row index for which\n * render decorations\n * @param {Object} decorations the object containing all the decorations\n * @param {Object} renderData the object containing the render data\n * @param {Object} types an object with the type to render as key and the\n * render method as value\n * @access private\n */\n drawDecorations (screenRow, decorations, renderData, types) {\n let decorationsToRender = []\n\n renderData.context.clearRect(\n 0, renderData.yRow,\n renderData.canvasWidth, renderData.lineHeight\n )\n\n for (const i in types) {\n decorationsToRender = decorationsToRender.concat(\n decorations[i] != null ? decorations[i][screenRow] || [] : []\n )\n }\n\n decorationsToRender.sort((a, b) =>\n (renderData.orders[a.properties.plugin] || 0) - (renderData.orders[b.properties.plugin] || 0)\n )\n\n if (decorationsToRender != null ? decorationsToRender.length : undefined) {\n for (let i = 0, len = decorationsToRender.length; i < len; i++) {\n types[decorationsToRender[i].properties.type].call(this, decorationsToRender[i], renderData)\n }\n }\n }\n\n /**\n * Draws a line decoration.\n *\n * @param {Decoration} decoration the decoration to render\n * @param {Object} data the data need to perform the render\n * @access private\n */\n drawLineDecoration (decoration, data) {\n data.context.fillStyle = this.getDecorationColor(decoration)\n data.context.fillRect(0, data.yRow, data.canvasWidth, data.lineHeight)\n }\n\n /**\n * Draws a gutter decoration.\n *\n * @param {Decoration} decoration the decoration to render\n * @param {Object} data the data need to perform the render\n * @access private\n */\n drawGutterDecoration (decoration, data) {\n data.context.fillStyle = this.getDecorationColor(decoration)\n data.context.fillRect(0, data.yRow, 1, data.lineHeight)\n }\n\n /**\n * Draws a highlight decoration.\n *\n * It renders only the part of the highlight corresponding to the specified\n * row.\n *\n * @param {Decoration} decoration the decoration to render\n * @param {Object} data the data need to perform the render\n * @access private\n */\n drawHighlightDecoration (decoration, data) {\n const range = decoration.getMarker().getScreenRange()\n const rowSpan = range.end.row - range.start.row\n\n data.context.fillStyle = this.getDecorationColor(decoration)\n\n if (rowSpan === 0) {\n const colSpan = range.end.column - range.start.column\n data.context.fillRect(range.start.column * data.charWidth, data.yRow, colSpan * data.charWidth, data.lineHeight)\n } else if (data.screenRow === range.start.row) {\n const x = range.start.column * data.charWidth\n data.context.fillRect(x, data.yRow, data.canvasWidth - x, data.lineHeight)\n } else if (data.screenRow === range.end.row) {\n data.context.fillRect(0, data.yRow, range.end.column * data.charWidth, data.lineHeight)\n } else {\n data.context.fillRect(0, data.yRow, data.canvasWidth, data.lineHeight)\n }\n }\n\n /**\n * Draws a highlight outline decoration.\n *\n * It renders only the part of the highlight corresponding to the specified\n * row.\n *\n * @param {Decoration} decoration the decoration to render\n * @param {Object} data the data need to perform the render\n * @access private\n */\n drawHighlightOutlineDecoration (decoration, data) {\n let bottomWidth, colSpan, width, xBottomStart, xEnd, xStart\n const { lineHeight, charWidth, canvasWidth, screenRow } = data\n const range = decoration.getMarker().getScreenRange()\n const rowSpan = range.end.row - range.start.row\n const yStart = data.yRow\n const yEnd = yStart + lineHeight\n\n data.context.fillStyle = this.getDecorationColor(decoration)\n\n if (rowSpan === 0) {\n colSpan = range.end.column - range.start.column\n width = colSpan * charWidth\n xStart = range.start.column * charWidth\n xEnd = xStart + width\n\n data.context.fillRect(xStart, yStart, width, 1)\n data.context.fillRect(xStart, yEnd - 1, width, 1)\n data.context.fillRect(xStart, yStart, 1, lineHeight)\n data.context.fillRect(xEnd, yStart, 1, lineHeight)\n } else if (rowSpan === 1) {\n xStart = range.start.column * data.charWidth\n xEnd = range.end.column * data.charWidth\n\n if (screenRow === range.start.row) {\n width = data.canvasWidth - xStart\n xBottomStart = Math.max(xStart, xEnd)\n bottomWidth = data.canvasWidth - xBottomStart\n\n data.context.fillRect(xStart, yStart, width, 1)\n data.context.fillRect(xBottomStart, yEnd - 1, bottomWidth, 1)\n data.context.fillRect(xStart, yStart, 1, lineHeight)\n data.context.fillRect(canvasWidth - 1, yStart, 1, lineHeight)\n } else {\n width = canvasWidth - xStart\n bottomWidth = canvasWidth - xEnd\n\n data.context.fillRect(0, yStart, xStart, 1)\n data.context.fillRect(0, yEnd - 1, xEnd, 1)\n data.context.fillRect(0, yStart, 1, lineHeight)\n data.context.fillRect(xEnd, yStart, 1, lineHeight)\n }\n } else {\n xStart = range.start.column * charWidth\n xEnd = range.end.column * charWidth\n if (screenRow === range.start.row) {\n width = canvasWidth - xStart\n\n data.context.fillRect(xStart, yStart, width, 1)\n data.context.fillRect(xStart, yStart, 1, lineHeight)\n data.context.fillRect(canvasWidth - 1, yStart, 1, lineHeight)\n } else if (screenRow === range.end.row) {\n width = canvasWidth - xStart\n\n data.context.fillRect(0, yEnd - 1, xEnd, 1)\n data.context.fillRect(0, yStart, 1, lineHeight)\n data.context.fillRect(xEnd, yStart, 1, lineHeight)\n } else {\n data.context.fillRect(0, yStart, 1, lineHeight)\n data.context.fillRect(canvasWidth - 1, yStart, 1, lineHeight)\n if (screenRow === range.start.row + 1) {\n data.context.fillRect(0, yStart, xStart, 1)\n }\n if (screenRow === range.end.row - 1) {\n data.context.fillRect(xEnd, yEnd - 1, canvasWidth - xEnd, 1)\n }\n }\n }\n }\n\n /**\n * Draws a custom decoration.\n *\n * It renders only the part of the highlight corresponding to the specified\n * row.\n *\n * @param {Decoration} decoration the decoration to render\n * @param {Object} data the data need to perform the render\n * @access private\n */\n drawCustomDecoration (decoration, data) {\n const renderRoutine = decoration.getProperties().render\n\n if (renderRoutine) {\n data.color = this.getDecorationColor(decoration)\n renderRoutine(decoration, data)\n }\n }\n}\n\n// ######## ######## ### ## ##\n// ## ## ## ## ## ## ## ## ##\n// ## ## ## ## ## ## ## ## ##\n// ## ## ######## ## ## ## ## ##\n// ## ## ## ## ######### ## ## ##\n// ## ## ## ## ## ## ## ## ##\n// ######## ## ## ## ## ### ###\n\n/**\n * Draws a single token on the given context.\n *\n * @param {CanvasRenderingContext2D} context the target canvas context\n * @param {string} text the token's text content\n * @param {string} color the token's CSS color\n * @param {number} x the x position of the token in the line\n * @param {number} y the y position of the line in the minimap\n * @param {number} charWidth the width of a character in the minimap\n * @param {number} charHeight the height of a character in the minimap\n * @return {number} the x position at the end of the token\n * @return {boolean} the x position at the end of the token\n * @access private\n */\nfunction drawToken (context, text, color, x, y, charWidth, charHeight, ignoreWhitespacesInTokens) {\n context.fillStyle = color\n\n if (ignoreWhitespacesInTokens) {\n const length = text.length * charWidth\n context.fillRect(x, y, length, charHeight)\n\n return x + length\n } else {\n let chars = 0\n for (let j = 0, len = text.length; j < len; j++) {\n const char = text[j]\n if (/\\s/.test(char)) {\n if (chars > 0) {\n context.fillRect(x - (chars * charWidth), y, chars * charWidth, charHeight)\n }\n chars = 0\n } else {\n chars++\n }\n x += charWidth\n }\n if (chars > 0) {\n context.fillRect(x - (chars * charWidth), y, chars * charWidth, charHeight)\n }\n return x\n }\n}\n\n/**\n * Returns an array of tokens by line.\n *\n * @param {number} startRow The start row\n * @param {number} endRow The end row\n * @param {TextEditor} editor\n * @param {number} maxTokensInOneLine the maximum number of tokens to render in one line\n * @return {Array} An array of tokens by line\n * @access private\n */\nfunction eachTokenForScreenRows (startRow, endRow, editor, maxTokensInOneLine, callback) {\n const invisibleRegExp = getInvisibleRegExp(editor)\n endRow = Math.min(endRow, editor.getScreenLineCount())\n\n for (let row = startRow; row < endRow; row++) {\n const editorTokensForScreenRow = editor.tokensForScreenRow(row)\n const numToken = editorTokensForScreenRow.length\n const numTokenToRender = Math.min(numToken, maxTokensInOneLine)\n for (let iToken = 0; iToken < numTokenToRender; iToken++) {\n const token = editorTokensForScreenRow[iToken]\n callback(row, {\n text: token.text.replace(invisibleRegExp, ' '),\n scopes: token.scopes\n })\n }\n }\n}\n\n/**\n * Returns the regexp to replace invisibles substitution characters\n * in editor lines.\n * @param {TextEditor} editor\n * @return {RegExp} the regular expression to match invisible characters\n * @access private\n */\nfunction getInvisibleRegExp (editor) {\n const invisibles = editor.getInvisibles()\n const regexp = []\n if (invisibles.cr != null) { regexp.push(invisibles.cr) }\n if (invisibles.eol != null) { regexp.push(invisibles.eol) }\n if (invisibles.space != null) { regexp.push(invisibles.space) }\n if (invisibles.tab != null) { regexp.push(invisibles.tab) }\n\n if (regexp.length !== 0) {\n return RegExp(regexp.filter((s) => {\n return typeof s === 'string'\n }).map(escapeRegExp).join('|'), 'g')\n } else {\n return null\n }\n}\n\n// ###### ####### ## ####### ######## ######\n// ## ## ## ## ## ## ## ## ## ## ##\n// ## ## ## ## ## ## ## ## ##\n// ## ## ## ## ## ## ######## ######\n// ## ## ## ## ## ## ## ## ##\n// ## ## ## ## ## ## ## ## ## ## ##\n// ###### ####### ######## ####### ## ## ######\n\n/**\n * Converts a `rgb(...)` color into a `rgba(...)` color with the specified\n * opacity.\n *\n * @param {string} color the CSS RGB color to transparentize\n * @param {number} [opacity=1] the opacity amount\n * @return {string} the transparentized CSS color\n * @access private\n */\nfunction transparentize (color, opacity = 1) {\n return color.replace('rgb(', 'rgba(').replace(')', `, ${opacity})`)\n}\n\n// ######## ### ## ## ###### ######## ######\n// ## ## ## ## ### ## ## ## ## ## ##\n// ## ## ## ## #### ## ## ## ##\n// ######## ## ## ## ## ## ## #### ###### ######\n// ## ## ######### ## #### ## ## ## ##\n// ## ## ## ## ## ### ## ## ## ## ##\n// ## ## ## ## ## ## ###### ######## ######\n\n/**\n * Computes the ranges that are not affected by the current pending changes.\n *\n * @param {number} firstRow the first row of the rendered region\n * @param {number} lastRow the last row of the rendered region\n * @param {number | null} offscreenFirstRow CanvasDrawer.offscreenLastRow\n * @param {number | null} offscreenLastRow CanvasDrawer.offscreenLastRow\n * @return {Array} the intact ranges in the rendered region\n * @access private\n */\nfunction computeIntactRanges (firstRow, lastRow, changes, offscreenFirstRow, offscreenLastRow) {\n // TODO when do they get null?\n if ((offscreenFirstRow == null) && (offscreenLastRow == null)) {\n return []\n }\n\n // At first, the whole range is considered intact\n let intactRanges = [\n {\n start: offscreenFirstRow,\n end: offscreenLastRow,\n offscreenRow: 0\n }\n ]\n\n for (let i = 0, len = changes.length; i < len; i++) {\n const change = changes[i]\n const newIntactRanges = []\n\n for (let j = 0, intactLen = intactRanges.length; j < intactLen; j++) {\n const range = intactRanges[j]\n\n if (change.end < range.start && change.screenDelta !== 0) {\n // The change is above of the range and lines are either\n // added or removed\n newIntactRanges.push({\n start: range.start + change.screenDelta,\n end: range.end + change.screenDelta,\n offscreenRow: range.offscreenRow\n })\n } else if (change.end < range.start || change.start > range.end) {\n // The change is outside the range but didn't add\n // or remove lines\n newIntactRanges.push(range)\n } else {\n // The change is within the range, there's one intact range\n // from the range start to the change start\n if (change.start > range.start) {\n newIntactRanges.push({\n start: range.start,\n end: change.start - 1,\n offscreenRow: range.offscreenRow\n })\n }\n if (change.end < range.end) {\n // The change ends within the range\n if (change.bufferDelta !== 0) {\n // Lines are added or removed, the intact range starts in the\n // next line after the change end plus the screen delta\n newIntactRanges.push({\n start: change.end + change.screenDelta + 1,\n end: range.end + change.screenDelta,\n offscreenRow: range.offscreenRow + change.end + 1 - range.start\n })\n } else if (change.screenDelta !== 0) {\n // Lines are added or removed in the display buffer, the intact\n // range starts in the next line after the change end plus the\n // screen delta\n newIntactRanges.push({\n start: change.end + change.screenDelta + 1,\n end: range.end + change.screenDelta,\n offscreenRow: range.offscreenRow + change.end + 1 - range.start\n })\n } else {\n // No lines are added, the intact range starts on the line after\n // the change end\n newIntactRanges.push({\n start: change.end + 1,\n end: range.end,\n offscreenRow: range.offscreenRow + change.end + 1 - range.start\n })\n }\n }\n }\n }\n intactRanges = newIntactRanges\n }\n\n return truncateIntactRanges(intactRanges, firstRow, lastRow)\n}\n\n/**\n * Truncates the intact ranges so that they doesn't expand past the visible\n * area of the minimap.\n *\n * @param {Array} intactRanges the initial array of ranges\n * @param {number} firstRow the first row of the rendered region\n * @param {number} lastRow the last row of the rendered region\n * @return {Array} the array of truncated ranges\n * @access private\n */\nfunction truncateIntactRanges (intactRanges, firstRow, lastRow) {\n let i = 0\n while (i < intactRanges.length) {\n const range = intactRanges[i]\n\n if (range.start < firstRow) {\n range.offscreenRow += firstRow - range.start\n range.start = firstRow\n }\n\n if (range.end > lastRow) { range.end = lastRow }\n\n if (range.start >= range.end) { intactRanges.splice(i--, 1) }\n\n i++\n }\n\n return intactRanges.sort((a, b) => {\n return a.offscreenRow - b.offscreenRow\n })\n}\n","'use strict'\n\n/**\n * Generates a decorator function to includes many `mixto` mixins into a class.\n *\n * @param {...Mixin} mixins the mixins to include in the class\n * @return {function(cls:Function):Function} the decorator function that will\n * include the specified mixins\n * @example\n * @include(SomeMixin)\n * export default class SomeClass {\n * // ...\n * }\n */\nexport default function include (cls, ...mixins) {\n mixins.forEach((mixin) => { includeMixin(cls, mixin) })\n}\n\nfunction includeMixin (target, source) {\n Object.getOwnPropertyNames(source).forEach((k) => {\n if (['length', 'name', 'arguments', 'caller', 'prototype', 'includeInto'].indexOf(k) >= 0) { return }\n\n const descriptor = Object.getOwnPropertyDescriptor(source, k)\n Object.defineProperty(target, k, descriptor)\n })\n\n Object.getOwnPropertyNames(source.prototype).forEach((k) => {\n if (k === 'constructor') { return }\n\n const descriptor = Object.getOwnPropertyDescriptor(source.prototype, k)\n Object.defineProperty(target.prototype, k, descriptor)\n })\n}\n","'use strict'\n\nimport { registerOrUpdateElement } from 'atom-utils-plus'\n\n/**\n * Generates a decorator function to convert a class into a custom element\n * through the `registerOrUpdateElement` method from `atom-utils-plus`.\n *\n * The decorator will take care to return the generated element class so that\n * you can just export it directly as demonstrated below.\n *\n * As supported by the `registerOrUpdateElement` method, static member will\n * be available on the new class.\n *\n * **Note: As there's some limitations when modifying the prototype\n * of a custom element, if you need to inject element callbacks (like\n * `createdCallback`) through a mixin, the mixins should be included before\n * converting the class as a custom element. You'll be able to achieve that by\n * placing the `include` decorator after the `element` one as shown in the\n * second example.**\n *\n * @param {string} elementName the node name of the element to register\n * @return {Function} the element class as returned by\n * `document.registerElement`\n * @example\n * @element('dummy-element-name')\n * export default class SomeClass {\n * // ...\n * }\n *\n * @element('dummy-element-with-mixin')\n * @include(SomeMixin)\n * export default class SomeClass {\n * // ...\n * }\n */\nexport default function element (cls, elementName) {\n return registerOrUpdateElement(elementName, { class: cls })\n}\n","'use strict'\n\nimport { CompositeDisposable, Disposable } from 'atom'\nimport { EventsDelegation, AncestorsMethods } from 'atom-utils-plus'\nimport elementResizeDetectorImport from 'element-resize-detector'\n\nimport * as Main from './main'\nimport CanvasDrawer from './mixins/canvas-drawer'\nimport include from './decorators/include'\nimport element from './decorators/element'\n\nimport MinimapQuickSettingsElement from './minimap-quick-settings-element'\nconst elementResizeDetector = elementResizeDetectorImport({ strategy: 'scroll' })\n\nlet overlayStyle\n\nfunction ensureOverlayStyle () {\n if (!overlayStyle) {\n overlayStyle = document.createElement('style')\n overlayStyle.setAttribute('context', 'atom-text-editor-minimap')\n document.head.appendChild(overlayStyle)\n }\n}\n\nfunction removeOverlayStyle () {\n if (overlayStyle) {\n overlayStyle.parentNode.removeChild(overlayStyle)\n overlayStyle = null\n }\n}\n\nfunction updateOverlayStyle (basis) {\n if (overlayStyle) {\n overlayStyle.textContent = `\n atom-text-editor[with-minimap].editor > div,\n atom-text-editor[with-minimap] > div {\n margin-left: ${basis}px;\n }\n `\n }\n}\n\nconst SPEC_MODE = atom.inSpecMode()\n\n/**\n * Public: The MinimapElement is the view meant to render a {@link Minimap}\n * instance in the DOM.\n *\n * You can retrieve the MinimapElement associated to a Minimap\n * using the `atom.views.getView` method.\n *\n * Note that most interactions with the Minimap package is done through the\n * Minimap model so you should never have to access MinimapElement\n * instances.\n *\n * @example\n * let minimapElement = atom.views.getView(minimap)\n */\nclass MinimapElement {\n static initClass () {\n include(this, CanvasDrawer, EventsDelegation, AncestorsMethods)\n return element(this, 'atom-text-editor-minimap')\n }\n\n // ## ## ####### ####### ## ## ######\n // ## ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ##\n // ######### ## ## ## ## ##### ######\n // ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ## ##\n // ## ## ####### ####### ## ## ######\n\n /**\n * DOM callback invoked when a new MinimapElement is created.\n *\n * @access private\n */\n createdCallback () {\n // Core properties\n\n /**\n * @access private\n */\n this.minimap = undefined\n\n /**\n * @access private\n */\n this.width = undefined\n /**\n * @access private\n */\n this.height = undefined\n\n // Subscriptions\n\n /**\n * @access private\n */\n this.subscriptions = new CompositeDisposable()\n /**\n * @access private\n */\n this.visibleAreaSubscription = undefined\n /**\n * @access private\n */\n this.quickSettingsSubscription = undefined\n /**\n * @access private\n */\n this.dragSubscription = undefined\n /**\n * @access private\n */\n this.openQuickSettingSubscription = undefined\n\n // Configs\n\n /**\n * @access private\n */\n this.displayMinimapOnLeft = false\n /**\n * @access private\n */\n this.minimapScrollIndicator = undefined\n /**\n * @access private\n */\n this.displayMinimapOnLeft = undefined\n /**\n * @access private\n */\n this.displayPluginsControls = undefined\n /**\n * @access private\n */\n this.textOpacity = undefined\n /**\n * @access private\n */\n this.displayCodeHighlights = undefined\n /**\n * @access private\n */\n this.adjustToSoftWrap = undefined\n /**\n * @access private\n */\n this.useHardwareAcceleration = undefined\n /**\n * @access private\n */\n this.absoluteMode = undefined\n\n // Elements\n\n /**\n * @access private\n */\n this.visibleArea = undefined\n /**\n * @access private\n */\n this.controls = undefined\n /**\n * @access private\n */\n this.scrollIndicator = undefined\n /**\n * @access private\n */\n this.openQuickSettings = undefined\n /**\n * @access private\n */\n this.quickSettingsElement = undefined\n\n // States\n\n /**\n * @access private\n */\n this.attached = undefined\n /**\n * @access private\n */\n this.attachedToTextEditor = undefined\n /**\n * @access private\n */\n this.standAlone = undefined\n /**\n * @access private\n */\n this.wasVisible = undefined\n\n // Other\n\n /**\n * @access private\n */\n this.offscreenFirstRow = undefined\n /**\n * @access private\n */\n this.offscreenLastRow = undefined\n /**\n * @access private\n */\n this.frameRequested = undefined\n /**\n * @access private\n */\n this.flexBasis = undefined\n\n this.initializeContent()\n\n this.subscriptions.add(\n atom.config.observe('minimap.displayMinimapOnLeft', (displayMinimapOnLeft) => {\n this.displayMinimapOnLeft = displayMinimapOnLeft\n\n displayMinimapOnLeft\n ? ensureOverlayStyle()\n : removeOverlayStyle()\n this.updateMinimapFlexPosition()\n this.measureHeightAndWidth(true, true)\n }),\n\n atom.config.observe('minimap.minimapScrollIndicator', (minimapScrollIndicator) => {\n this.minimapScrollIndicator = minimapScrollIndicator\n\n if (this.minimapScrollIndicator && !(this.scrollIndicator != null) && !this.standAlone) {\n this.initializeScrollIndicator()\n } else if ((this.scrollIndicator != null)) {\n this.disposeScrollIndicator()\n }\n\n if (this.attached) { this.requestUpdate() }\n }),\n\n atom.config.observe('minimap.displayPluginsControls', (displayPluginsControls) => {\n this.displayPluginsControls = displayPluginsControls\n\n if (this.displayPluginsControls && !(this.openQuickSettings != null) && !this.standAlone) {\n this.initializeOpenQuickSettings()\n } else if ((this.openQuickSettings != null)) {\n this.disposeOpenQuickSettings()\n }\n }),\n\n atom.config.observe('minimap.textOpacity', (textOpacity) => {\n this.textOpacity = textOpacity\n\n if (this.attached) { this.requestForcedUpdate() }\n }),\n\n atom.config.observe('minimap.displayCodeHighlights', (displayCodeHighlights) => {\n this.displayCodeHighlights = displayCodeHighlights\n\n if (this.attached) { this.requestForcedUpdate() }\n }),\n\n atom.config.observe('minimap.smoothScrolling', (smoothScrolling) => {\n this.smoothScrolling = smoothScrolling\n\n if (this.attached) {\n if (!this.smoothScrolling) {\n this.backLayer.canvas.style.cssText = ''\n this.tokensLayer.canvas.style.cssText = ''\n this.frontLayer.canvas.style.cssText = ''\n } else {\n this.requestUpdate()\n }\n }\n }),\n\n atom.config.observe('minimap.adjustMinimapWidthToSoftWrap', (adjustToSoftWrap) => {\n this.adjustToSoftWrap = adjustToSoftWrap\n\n if (this.attached) { this.measureHeightAndWidth() }\n }),\n\n atom.config.observe('minimap.adjustMinimapWidthOnlyIfSmaller', (adjustOnlyIfSmaller) => {\n this.adjustOnlyIfSmaller = adjustOnlyIfSmaller\n\n if (this.attached) { this.measureHeightAndWidth() }\n }),\n\n atom.config.observe('minimap.useHardwareAcceleration', (useHardwareAcceleration) => {\n this.useHardwareAcceleration = useHardwareAcceleration\n\n if (this.attached) { this.requestUpdate() }\n }),\n\n atom.config.observe('minimap.absoluteMode', (absoluteMode) => {\n this.absoluteMode = absoluteMode\n\n this.classList.toggle('absolute', this.absoluteMode)\n }),\n\n atom.config.observe('minimap.adjustAbsoluteModeHeight', (adjustAbsoluteModeHeight) => {\n this.adjustAbsoluteModeHeight = adjustAbsoluteModeHeight\n\n this.classList.toggle('adjust-absolute-height', this.adjustAbsoluteModeHeight)\n\n if (this.attached) { this.measureHeightAndWidth() }\n }),\n\n atom.config.observe('minimap.ignoreWhitespacesInTokens', (ignoreWhitespacesInTokens) => {\n this.ignoreWhitespacesInTokens = ignoreWhitespacesInTokens\n\n if (this.attached) { this.requestForcedUpdate() }\n }),\n\n atom.config.observe('editor.preferredLineLength', () => {\n if (this.attached) { this.measureHeightAndWidth() }\n }),\n\n atom.config.observe('editor.softWrap', () => {\n if (this.attached) { this.requestUpdate() }\n }),\n\n atom.config.observe('editor.showInvisibles', () => {\n if (this.attached) { this.requestUpdate() }\n }),\n\n atom.config.observe('editor.invisibles', () => {\n if (this.attached) { this.requestUpdate() }\n }),\n\n atom.config.observe('editor.softWrapAtPreferredLineLength', () => {\n if (this.attached) { this.requestUpdate() }\n })\n )\n }\n\n /**\n * DOM callback invoked when a new MinimapElement is attached to the DOM.\n *\n * @access private\n */\n attachedCallback () {\n if (typeof atom.views.pollDocument === 'function') {\n this.subscriptions.add(atom.views.pollDocument(() => { this.pollDOM() }))\n } else {\n this.intersectionObserver = new IntersectionObserver((entries) => {\n const { intersectionRect } = entries[entries.length - 1]\n if (intersectionRect.width > 0 || intersectionRect.height > 0) {\n this.measureHeightAndWidth(true, true)\n }\n })\n\n this.intersectionObserver.observe(this)\n if (this.isVisible()) {\n this.measureHeightAndWidth(true, true)\n }\n\n const measureDimensions = () => { this.measureHeightAndWidth(false, false) }\n elementResizeDetector.listenTo(this, measureDimensions)\n window.addEventListener('resize', measureDimensions, { passive: true })\n\n this.subscriptions.add(\n new Disposable(() => { elementResizeDetector.removeListener(this, measureDimensions) }),\n new Disposable(() => { window.removeEventListener('resize', measureDimensions) })\n )\n }\n\n this.measureHeightAndWidth()\n this.updateMinimapFlexPosition()\n this.attached = true\n this.attachedToTextEditor = this.queryParentSelector('atom-text-editor') === this.minimap.getTextEditorElement()\n\n if (this.attachedToTextEditor) {\n this.minimap.getTextEditorElement().setAttribute('with-minimap', '')\n }\n\n this.subscriptions.add(\n\n /*\n We use `atom.styles.onDidAddStyleElement` instead of\n `atom.themes.onDidChangeActiveThemes`.\n Why? Currently, The style element will be removed first, and then re-added\n and the `change` event has not be triggered in the process.\n */\n atom.styles.onDidAddStyleElement(() => {\n this.DOMStylesReader.invalidateDOMStylesCache()\n this.requestForcedUpdate()\n }),\n\n this.subscribeToMediaQuery()\n )\n }\n\n /**\n * DOM callback invoked when a new MinimapElement is detached from the DOM.\n *\n * @access private\n */\n detachedCallback () {\n this.minimap.getTextEditorElement().removeAttribute('with-minimap')\n this.attached = false\n }\n\n // ### ######## ######## ### ###### ## ##\n // ## ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## #########\n // ######### ## ## ######### ## ## ##\n // ## ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ###### ## ##\n\n /**\n * Returns whether the MinimapElement is currently visible on screen or not.\n *\n * The visibility of the minimap is defined by testing the size of the offset\n * width and height of the element.\n *\n * @return {boolean} whether the MinimapElement is currently visible or not\n */\n isVisible () { return this.offsetWidth > 0 || this.offsetHeight > 0 }\n\n /**\n * Attaches the MinimapElement to the DOM.\n *\n * The position at which the element is attached is defined by the\n * `displayMinimapOnLeft` setting.\n *\n * @param {HTMLElement} [parent] the DOM node where attaching the minimap\n * element\n */\n attach (parent) {\n if (this.attached) { return }\n\n const container = parent || this.minimap.getTextEditorElement()\n const minimaps = container.querySelectorAll('atom-text-editor-minimap')\n if (minimaps.length) {\n Array.prototype.forEach.call(minimaps, (el) => { el.destroy() })\n }\n container.appendChild(this)\n }\n\n /**\n * Detaches the MinimapElement from the DOM.\n */\n detach () {\n if (!this.attached || this.parentNode == null) { return }\n this.parentNode.removeChild(this)\n }\n\n /**\n * Toggles the minimap left/right position based on the value of the\n * `displayMinimapOnLeft` setting.\n *\n * @access private\n */\n updateMinimapFlexPosition () {\n this.classList.toggle('left', this.displayMinimapOnLeft)\n }\n\n /**\n * Destroys this MinimapElement\n */\n destroy () {\n this.subscriptions.dispose()\n this.detach()\n this.minimap = null\n }\n\n // ###### ####### ## ## ######## ######## ## ## ########\n // ## ## ## ## ### ## ## ## ### ## ##\n // ## ## ## #### ## ## ## #### ## ##\n // ## ## ## ## ## ## ## ###### ## ## ## ##\n // ## ## ## ## #### ## ## ## #### ##\n // ## ## ## ## ## ### ## ## ## ### ##\n // ###### ####### ## ## ## ######## ## ## ##\n\n /**\n * Creates the content of the MinimapElement and attaches the mouse control\n * event listeners.\n *\n * @access private\n */\n initializeContent () {\n this.initializeCanvas()\n\n this.attachCanvases(this)\n\n this.createVisibleArea()\n this.createControls()\n\n this.subscriptions.add(\n\n this.subscribeTo(\n this,\n {\n mousewheel: (e) => {\n if (!this.standAlone && this.minimap.onMouseWheel) {\n this.minimap.onMouseWheel(e)\n }\n }\n },\n { passive: true }\n ),\n\n this.subscribeTo(\n this.getFrontCanvas(),\n {\n mousedown: (e) => { this.canvasPressed(extractMouseEventData(e)) },\n touchstart: (e) => { this.canvasPressed(extractTouchEventData(e)) }\n },\n { passive: true }\n )\n\n )\n }\n\n /**\n * Initializes the visible area div.\n *\n * @access private\n */\n createVisibleArea () {\n if (this.visibleArea) { return }\n\n this.visibleArea = document.createElement('div')\n this.visibleArea.classList.add('minimap-visible-area')\n this.appendChild(this.visibleArea)\n this.visibleAreaSubscription = this.subscribeTo(this.visibleArea, {\n mousedown: (e) => { this.startDrag(extractMouseEventData(e)) },\n touchstart: (e) => { this.startDrag(extractTouchEventData(e)) }\n }, { passive: true })\n\n this.subscriptions.add(this.visibleAreaSubscription)\n }\n\n /**\n * Removes the visible area div.\n *\n * @access private\n */\n removeVisibleArea () {\n if (!this.visibleArea) { return }\n\n this.subscriptions.remove(this.visibleAreaSubscription)\n this.visibleAreaSubscription.dispose()\n this.removeChild(this.visibleArea)\n delete this.visibleArea\n }\n\n /**\n * Creates the controls container div.\n *\n * @access private\n */\n createControls () {\n if (this.controls || this.standAlone) { return }\n\n this.controls = document.createElement('div')\n this.controls.classList.add('minimap-controls')\n this.appendChild(this.controls)\n }\n\n /**\n * Removes the controls container div.\n *\n * @access private\n */\n removeControls () {\n if (!this.controls) { return }\n\n this.removeChild(this.controls)\n delete this.controls\n }\n\n /**\n * Initializes the scroll indicator div when the `minimapScrollIndicator`\n * settings is enabled.\n *\n * @access private\n */\n initializeScrollIndicator () {\n if (this.scrollIndicator || this.standAlone) { return }\n\n this.scrollIndicator = document.createElement('div')\n this.scrollIndicator.classList.add('minimap-scroll-indicator')\n this.controls.appendChild(this.scrollIndicator)\n }\n\n /**\n * Disposes the scroll indicator div when the `minimapScrollIndicator`\n * settings is disabled.\n *\n * @access private\n */\n disposeScrollIndicator () {\n if (!this.scrollIndicator) { return }\n\n this.controls.removeChild(this.scrollIndicator)\n delete this.scrollIndicator\n }\n\n /**\n * Initializes the quick settings openener div when the\n * `displayPluginsControls` setting is enabled.\n *\n * @access private\n */\n initializeOpenQuickSettings () {\n if (this.openQuickSettings || this.standAlone) { return }\n\n this.openQuickSettings = document.createElement('div')\n this.openQuickSettings.classList.add('open-minimap-quick-settings')\n this.controls.appendChild(this.openQuickSettings)\n\n this.openQuickSettingSubscription = this.subscribeTo(this.openQuickSettings, {\n mousedown: (e) => {\n e.preventDefault()\n e.stopPropagation()\n\n if ((this.quickSettingsElement != null)) {\n this.quickSettingsElement.destroy()\n this.quickSettingsSubscription.dispose()\n } else {\n this.quickSettingsElement = new MinimapQuickSettingsElement()\n this.quickSettingsElement.setModel(this)\n this.quickSettingsSubscription = this.quickSettingsElement.onDidDestroy(() => {\n this.quickSettingsElement = null\n })\n\n const { top, left, right } = this.getFrontCanvas().getBoundingClientRect()\n this.quickSettingsElement.style.top = `${top}px`\n this.quickSettingsElement.attach()\n\n if (this.displayMinimapOnLeft) {\n this.quickSettingsElement.style.left = `${right}px`\n } else {\n this.quickSettingsElement.style.left = `${left - this.quickSettingsElement.clientWidth}px`\n }\n }\n }\n })\n }\n\n /**\n * Disposes the quick settings openener div when the `displayPluginsControls`\n * setting is disabled.\n *\n * @access private\n */\n disposeOpenQuickSettings () {\n if (!this.openQuickSettings) { return }\n\n this.controls.removeChild(this.openQuickSettings)\n this.openQuickSettingSubscription.dispose()\n delete this.openQuickSettings\n }\n\n // ## ## ####### ######## ######## ##\n // ### ### ## ## ## ## ## ##\n // #### #### ## ## ## ## ## ##\n // ## ### ## ## ## ## ## ###### ##\n // ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ##\n // ## ## ####### ######## ######## ########\n\n /**\n * Returns the Minimap for which this MinimapElement was created.\n *\n * @return {Minimap} this element's Minimap\n */\n getModel () { return this.minimap }\n\n /**\n * Defines the Minimap model for this MinimapElement instance.\n *\n * @param {Minimap} minimap the Minimap model for this instance.\n * @return {Minimap} this element's Minimap\n */\n setModel (minimap) {\n this.minimap = minimap\n\n this.subscriptions.add(\n\n this.minimap.onDidChangeScrollTop(() => {\n this.requestUpdate()\n }),\n\n this.minimap.onDidChangeScrollLeft(() => {\n this.requestUpdate()\n }),\n\n this.minimap.onDidDestroy(() => {\n this.destroy()\n }),\n\n this.minimap.onDidChangeConfig(() => {\n if (this.attached) { return this.requestForcedUpdate() }\n }),\n\n this.minimap.onDidChangeStandAlone(() => {\n this.setStandAlone(this.minimap.isStandAlone())\n this.requestUpdate()\n }),\n\n this.minimap.onDidChange((change) => {\n this.pendingChanges.push(change)\n this.requestUpdate()\n }),\n\n this.minimap.onDidChangeDecorationRange((change) => {\n const { type } = change\n if (type === 'line' ||\n type === 'highlight-under' ||\n type === 'background-custom') {\n this.pendingBackDecorationChanges.push(change)\n } else {\n this.pendingFrontDecorationChanges.push(change)\n }\n this.requestUpdate()\n }),\n\n Main.onDidChangePluginOrder(() => {\n this.requestForcedUpdate()\n })\n )\n\n this.setStandAlone(this.minimap.isStandAlone())\n\n if (this.width != null && this.height != null) {\n this.minimap.setScreenHeightAndWidth(this.height, this.width)\n }\n\n return this.minimap\n }\n\n /**\n * Sets the stand-alone mode for this MinimapElement.\n *\n * @param {boolean} standAlone the new mode for this MinimapElement\n */\n setStandAlone (standAlone) {\n this.standAlone = standAlone\n\n if (this.standAlone) {\n this.setAttribute('stand-alone', true)\n this.disposeScrollIndicator()\n this.disposeOpenQuickSettings()\n this.removeControls()\n this.removeVisibleArea()\n } else {\n this.removeAttribute('stand-alone')\n this.createVisibleArea()\n this.createControls()\n if (this.minimapScrollIndicator) { this.initializeScrollIndicator() }\n if (this.displayPluginsControls) { this.initializeOpenQuickSettings() }\n }\n }\n\n // ## ## ######## ######## ### ######## ########\n // ## ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ## ##\n // ## ## ######## ## ## ## ## ## ######\n // ## ## ## ## ## ######### ## ##\n // ## ## ## ## ## ## ## ## ##\n // ####### ## ######## ## ## ## ########\n\n /**\n * Requests an update to be performed on the next frame.\n */\n requestUpdate () {\n if (this.frameRequested) { return }\n\n this.frameRequested = true\n requestAnimationFrame(() => {\n this.update()\n this.frameRequested = false\n })\n }\n\n /**\n * Requests an update to be performed on the next frame that will completely\n * redraw the minimap.\n */\n requestForcedUpdate () {\n this.offscreenFirstRow = null\n this.offscreenLastRow = null\n this.requestUpdate()\n }\n\n /**\n * Performs the actual MinimapElement update.\n *\n * @access private\n */\n update () {\n if (!(this.attached && this.isVisible() && this.minimap)) { return }\n const minimap = this.minimap\n minimap.enableCache()\n const canvas = this.getFrontCanvas()\n\n const devicePixelRatio = this.minimap.getDevicePixelRatio()\n const visibleAreaLeft = minimap.getTextEditorScaledScrollLeft()\n const visibleAreaTop = minimap.getTextEditorScaledScrollTop() - minimap.getScrollTop()\n const width = Math.min(canvas.width / devicePixelRatio, this.width)\n const visibleWidth = width + visibleAreaLeft\n\n if (this.adjustToSoftWrap && this.flexBasis) {\n this.style.flexBasis = `${this.flexBasis}px`\n this.style.width = `${this.flexBasis}px`\n } else {\n this.style.flexBasis = null\n this.style.width = null\n }\n\n if (SPEC_MODE) {\n applyStyles(this.visibleArea, {\n width: `${Math.round(visibleWidth)}px`,\n height: `${Math.round(minimap.getTextEditorScaledHeight())}px`,\n top: `${Math.round(visibleAreaTop)}px`,\n 'border-left-width': `${Math.round(visibleAreaLeft)}px`\n })\n } else {\n applyStyles(this.visibleArea, {\n width: `${Math.round(visibleWidth)}px`,\n height: `${Math.round(minimap.getTextEditorScaledHeight())}px`,\n transform: makeTranslate(0, visibleAreaTop, this.useHardwareAcceleration),\n 'border-left-width': `${Math.round(visibleAreaLeft)}px`\n })\n }\n\n applyStyles(this.controls, { width: `${Math.round(width)}px` })\n\n const canvasTop = minimap.getFirstVisibleScreenRow() * minimap.getLineHeight() - minimap.getScrollTop()\n\n if (this.smoothScrolling) {\n if (SPEC_MODE) {\n applyStyles(this.backLayer.canvas, { top: `${canvasTop}px` })\n applyStyles(this.tokensLayer.canvas, { top: `${canvasTop}px` })\n applyStyles(this.frontLayer.canvas, { top: `${canvasTop}px` })\n } else {\n let canvasTransform = makeTranslate(0, canvasTop, this.useHardwareAcceleration)\n if (devicePixelRatio !== 1) {\n const scale = 1 / devicePixelRatio\n canvasTransform += ` ${makeScale(scale, scale, this.useHardwareAcceleration)}`\n }\n applyStyles(this.backLayer.canvas, { transform: canvasTransform })\n applyStyles(this.tokensLayer.canvas, { transform: canvasTransform })\n applyStyles(this.frontLayer.canvas, { transform: canvasTransform })\n }\n } else {\n const scale = 1 / devicePixelRatio\n const canvasTransform = makeScale(scale, scale, this.useHardwareAcceleration)\n applyStyles(this.backLayer.canvas, { transform: canvasTransform })\n applyStyles(this.tokensLayer.canvas, { transform: canvasTransform })\n applyStyles(this.frontLayer.canvas, { transform: canvasTransform })\n }\n\n if (this.minimapScrollIndicator && !this.scrollIndicator && minimap.canScroll()) {\n this.initializeScrollIndicator()\n }\n\n if (this.scrollIndicator != null) {\n const minimapScreenHeight = minimap.getScreenHeight()\n const indicatorHeight = minimapScreenHeight * (minimapScreenHeight / minimap.getHeight())\n const indicatorScroll = (minimapScreenHeight - indicatorHeight) * minimap.getScrollRatio()\n\n if (SPEC_MODE) {\n applyStyles(this.scrollIndicator, {\n height: `${indicatorHeight}px`,\n top: `${indicatorScroll}px`\n })\n } else {\n applyStyles(this.scrollIndicator, {\n height: `${indicatorHeight}px`,\n transform: makeTranslate(0, indicatorScroll, this.useHardwareAcceleration)\n })\n }\n\n if (!minimap.canScroll()) { this.disposeScrollIndicator() }\n }\n\n if (this.absoluteMode && this.adjustAbsoluteModeHeight) { this.updateCanvasesSize() }\n\n this.updateCanvas()\n minimap.clearCache()\n }\n\n /**\n * Defines whether to render the code highlights or not.\n *\n * @param {Boolean} displayCodeHighlights whether to render the code\n * highlights or not\n */\n setDisplayCodeHighlights (displayCodeHighlights) {\n this.displayCodeHighlights = displayCodeHighlights\n if (this.attached) { this.requestForcedUpdate() }\n }\n\n /**\n * Polling callback used to detect visibility and size changes.\n *\n * @access private\n */\n pollDOM () {\n const visibilityChanged = this.checkForVisibilityChange()\n if (this.isVisible()) {\n if (!this.wasVisible) { this.requestForcedUpdate() }\n\n this.measureHeightAndWidth(visibilityChanged, false)\n }\n }\n\n /**\n * A method that checks for visibility changes in the MinimapElement.\n * The method returns `true` when the visibility changed from visible to\n * hidden or from hidden to visible.\n *\n * @return {boolean} whether the visibility changed or not since the last call\n * @access private\n */\n checkForVisibilityChange () {\n if (this.isVisible()) {\n if (this.wasVisible) {\n return false\n } else {\n this.wasVisible = true\n return this.wasVisible\n }\n } else {\n if (this.wasVisible) {\n this.wasVisible = false\n return true\n } else {\n this.wasVisible = false\n return this.wasVisible\n }\n }\n }\n\n /**\n * A method used to measure the size of the MinimapElement and update internal\n * components based on the new size.\n *\n * @param {boolean} visibilityChanged did the visibility changed since last\n * measurement\n * @param {[type]} [forceUpdate=true] forces the update even when no changes\n * were detected\n * @access private\n */\n measureHeightAndWidth (visibilityChanged, forceUpdate = true) {\n if (!this.minimap) { return }\n\n const safeFlexBasis = this.style.flexBasis\n this.style.flexBasis = ''\n\n const wasResized = this.width !== this.clientWidth || this.height !== this.clientHeight\n\n this.height = this.clientHeight\n this.width = this.clientWidth\n let canvasWidth = this.width\n\n if ((this.minimap != null)) {\n this.minimap.setScreenHeightAndWidth(this.height, this.width)\n }\n\n if (wasResized || visibilityChanged || forceUpdate) {\n this.requestForcedUpdate()\n }\n\n if (!this.isVisible()) { return }\n\n if (wasResized || forceUpdate) {\n if (this.adjustToSoftWrap) {\n const lineLength = atom.config.get('editor.preferredLineLength')\n const softWrap = atom.config.get('editor.softWrap')\n const softWrapAtPreferredLineLength = atom.config.get('editor.softWrapAtPreferredLineLength')\n const width = lineLength * this.minimap.getCharWidth()\n\n if (softWrap && softWrapAtPreferredLineLength && lineLength && (width <= this.width || !this.adjustOnlyIfSmaller)) {\n this.flexBasis = width\n canvasWidth = width\n updateOverlayStyle(width)\n } else {\n updateOverlayStyle(canvasWidth)\n delete this.flexBasis\n }\n } else {\n updateOverlayStyle(canvasWidth)\n delete this.flexBasis\n }\n\n this.updateCanvasesSize(canvasWidth)\n } else {\n this.style.flexBasis = safeFlexBasis\n }\n }\n\n updateCanvasesSize (canvasWidth) {\n const devicePixelRatio = this.minimap.getDevicePixelRatio()\n const maxCanvasHeight = this.height + this.minimap.getLineHeight()\n const newHeight = this.absoluteMode && this.adjustAbsoluteModeHeight ? Math.min(this.minimap.getHeight(), maxCanvasHeight) : maxCanvasHeight\n const canvas = this.getFrontCanvas()\n\n if (canvasWidth == null) {\n canvasWidth = canvas.width / devicePixelRatio\n }\n\n if (canvasWidth !== canvas.width || newHeight !== canvas.height) {\n this.setCanvasesSize(\n canvasWidth * devicePixelRatio,\n newHeight * devicePixelRatio\n )\n if (this.absoluteMode && this.adjustAbsoluteModeHeight) {\n this.offscreenFirstRow = null\n this.offscreenLastRow = null\n }\n }\n }\n\n // ######## ## ## ######## ## ## ######## ######\n // ## ## ## ## ### ## ## ## ##\n // ## ## ## ## #### ## ## ##\n // ###### ## ## ###### ## ## ## ## ######\n // ## ## ## ## ## #### ## ##\n // ## ## ## ## ## ### ## ## ##\n // ######## ### ######## ## ## ## ######\n\n /**\n * Callback triggered when the mouse is pressed on the MinimapElement canvas.\n *\n * @param {number} y the vertical coordinate of the event\n * @param {boolean} isLeftMouse was the left mouse button pressed?\n * @param {boolean} isMiddleMouse was the middle mouse button pressed?\n * @access private\n */\n canvasPressed ({ y, isLeftMouse, isMiddleMouse }) {\n if (this.minimap.isStandAlone()) { return }\n if (isLeftMouse) {\n this.canvasLeftMousePressed(y)\n } else if (isMiddleMouse) {\n this.canvasMiddleMousePressed(y)\n const { top, height } = this.visibleArea.getBoundingClientRect()\n this.startDrag({ y: top + height / 2, isLeftMouse: false, isMiddleMouse: true })\n }\n }\n\n /**\n * Callback triggered when the mouse left button is pressed on the\n * MinimapElement canvas.\n *\n * @param {MouseEvent} e the mouse event object\n * @param {number} e.pageY the mouse y position in page\n * @param {HTMLElement} e.target the source of the event\n * @access private\n */\n canvasLeftMousePressed (y) {\n const deltaY = y - this.getBoundingClientRect().top\n const row = Math.floor(deltaY / this.minimap.getLineHeight()) + this.minimap.getFirstVisibleScreenRow()\n\n const textEditor = this.minimap.getTextEditor()\n const textEditorElement = this.minimap.getTextEditorElement()\n\n const scrollTop = row * textEditor.getLineHeightInPixels() - this.minimap.getTextEditorHeight() / 2\n const textEditorScrollTop = textEditorElement.pixelPositionForScreenPosition([row, 0]).top - this.minimap.getTextEditorHeight() / 2\n\n if (atom.config.get('minimap.moveCursorOnMinimapClick')) {\n textEditor.setCursorScreenPosition([row, 0])\n }\n\n if (atom.config.get('minimap.scrollAnimation')) {\n const duration = atom.config.get('minimap.scrollAnimationDuration')\n const independentScroll = this.minimap.scrollIndependentlyOnMouseWheel()\n\n const from = this.minimap.getTextEditorScrollTop()\n const to = textEditorScrollTop\n let step\n\n if (independentScroll) {\n const minimapFrom = this.minimap.getScrollTop()\n const minimapTo = Math.min(1, scrollTop / (this.minimap.getTextEditorMaxScrollTop() || 1)) * this.minimap.getMaxScrollTop()\n\n step = (now, t) => {\n if (this.minimap === null) return // TODO why this happens in the tests?\n this.minimap.setTextEditorScrollTop(now, true)\n this.minimap.setScrollTop(minimapFrom + (minimapTo - minimapFrom) * t)\n }\n animate({ from, to, duration, step })\n } else {\n step = (now) => {\n if (this.minimap === null) return // TODO why this happens in the tests?\n this.minimap.setTextEditorScrollTop(now)\n }\n animate({ from, to, duration, step })\n }\n } else {\n this.minimap.setTextEditorScrollTop(textEditorScrollTop)\n }\n }\n\n /**\n * Callback triggered when the mouse middle button is pressed on the\n * MinimapElement canvas.\n *\n * @param {MouseEvent} e the mouse event object\n * @param {number} e.pageY the mouse y position in page\n * @access private\n */\n canvasMiddleMousePressed (y) {\n const { top: offsetTop } = this.getBoundingClientRect()\n const deltaY = y - offsetTop - this.minimap.getTextEditorScaledHeight() / 2\n\n const ratio = deltaY / (this.minimap.getVisibleHeight() - this.minimap.getTextEditorScaledHeight())\n\n this.minimap.setTextEditorScrollTop(ratio * this.minimap.getTextEditorMaxScrollTop())\n }\n\n /**\n * Subscribes to a media query for device pixel ratio changes and forces\n * a repaint when it occurs.\n *\n * @return {Disposable} a disposable to remove the media query listener\n * @access private\n */\n subscribeToMediaQuery () {\n const mediaQuery = window.matchMedia('screen and (-webkit-min-device-pixel-ratio: 1.5)')\n const mediaListener = () => { this.requestForcedUpdate() }\n mediaQuery.addEventListener('change', mediaListener)\n\n return new Disposable(() => {\n mediaQuery.removeEventListener('change', mediaListener)\n })\n }\n\n // ######## #### ########\n // ## ## ## ## ## ##\n // ## ## #### ## ##\n // ## ## #### ## ##\n // ## ## ## ## ## ## ##\n // ## ## ## ## ## ##\n // ######## #### ## ########\n\n /**\n * A method triggered when the mouse is pressed over the visible area that\n * starts the dragging gesture.\n *\n * @param {number} y the vertical coordinate of the event\n * @param {boolean} isLeftMouse was the left mouse button pressed?\n * @param {boolean} isMiddleMouse was the middle mouse button pressed?\n * @access private\n */\n startDrag ({ y, isLeftMouse, isMiddleMouse }) {\n if (!this.minimap) { return }\n if (!isLeftMouse && !isMiddleMouse) { return }\n\n const initial = {\n dragOffset: y - this.visibleArea.getBoundingClientRect().top,\n offsetTop: this.getBoundingClientRect().top\n }\n\n // TODO can we avoid adding and removing the listeners every time?\n\n const mousemoveHandler = (e) => this.drag(extractMouseEventData(e), initial)\n const dragendHandler = () => this.endDrag()\n\n const touchmoveHandler = (e) => this.drag(extractTouchEventData(e), initial)\n\n document.body.addEventListener('mousemove', mousemoveHandler, { passive: true })\n document.body.addEventListener('mouseup', dragendHandler, { passive: true })\n document.body.addEventListener('mouseleave', dragendHandler, { passive: true })\n\n document.body.addEventListener('touchmove', touchmoveHandler, { passive: true })\n document.body.addEventListener('touchend', dragendHandler, { passive: true })\n document.body.addEventListener('touchcancel', dragendHandler, { passive: true })\n\n this.dragSubscription = new Disposable(function () {\n document.body.removeEventListener('mousemove', mousemoveHandler)\n document.body.removeEventListener('mouseup', dragendHandler)\n document.body.removeEventListener('mouseleave', dragendHandler)\n\n document.body.removeEventListener('touchmove', touchmoveHandler)\n document.body.removeEventListener('touchend', dragendHandler)\n document.body.removeEventListener('touchcancel', dragendHandler)\n })\n }\n\n /**\n * The method called during the drag gesture.\n *\n * @param {number} y the vertical coordinate of the event\n * @param {boolean} isLeftMouse was the left mouse button pressed?\n * @param {boolean} isMiddleMouse was the middle mouse button pressed?\n * @param {number} initial.dragOffset the mouse offset within the visible\n * area\n * @param {number} initial.offsetTop the MinimapElement offset at the moment\n * of the drag start\n * @access private\n */\n drag ({ y, isLeftMouse, isMiddleMouse }, initial) {\n if (!this.minimap) { return }\n if (!isLeftMouse && !isMiddleMouse) { return }\n const deltaY = y - initial.offsetTop - initial.dragOffset\n\n const ratio = deltaY / (this.minimap.getVisibleHeight() - this.minimap.getTextEditorScaledHeight())\n\n this.minimap.setTextEditorScrollTop(ratio * this.minimap.getTextEditorMaxScrollTop())\n }\n\n /**\n * The method that ends the drag gesture.\n *\n * @access private\n */\n endDrag () {\n if (!this.minimap) { return }\n this.dragSubscription.dispose()\n }\n}\n\nconst minimapElement = MinimapElement.initClass()\nexport default minimapElement\n\n// ######## ## ## ######## ## ## ######## ######\n// ## ## ## ## ### ## ## ## ##\n// ## ## ## ## #### ## ## ##\n// ###### ## ## ###### ## ## ## ## ######\n// ## ## ## ## ## #### ## ##\n// ## ## ## ## ## ### ## ## ##\n// ######## ### ######## ## ## ## ######\n\n/**\n * A method that extracts data from a `MouseEvent` which can then be used to\n * process clicks and drags of the minimap.\n *\n * Used together with `extractTouchEventData` to provide a unified interface\n * for `MouseEvent`s and `TouchEvent`s.\n *\n * @param {MouseEvent} mouseEvent the mouse event object\n * @access private\n */\nfunction extractMouseEventData (mouseEvent) {\n return {\n x: mouseEvent.pageX,\n y: mouseEvent.pageY,\n isLeftMouse: mouseEvent.button === 0,\n isMiddleMouse: mouseEvent.button === 1\n }\n}\n\n/**\n * A method that extracts data from a `TouchEvent` which can then be used to\n * process clicks and drags of the minimap.\n *\n * Used together with `extractMouseEventData` to provide a unified interface\n * for `MouseEvent`s and `TouchEvent`s.\n *\n * @param {TouchEvent} touchEvent the touch event object\n * @access private\n */\nfunction extractTouchEventData (touchEvent) {\n // Use the first touch on the target area. Other touches will be ignored in\n // case of multi-touch.\n const touch = touchEvent.changedTouches[0]\n\n return {\n x: touch.pageX,\n y: touch.pageY,\n isLeftMouse: true, // Touch is treated like a left mouse button click\n isMiddleMouse: false\n }\n}\n\n// ###### ###### ######\n// ## ## ## ## ## ##\n// ## ## ##\n// ## ###### ######\n// ## ## ##\n// ## ## ## ## ## ##\n// ###### ###### ######\n\n/**\n * Applies the passed-in styles properties to the specified element\n *\n * @param {HTMLElement} element the element onto which apply the styles\n * @param {Object} styles the styles to apply\n * @access private\n */\nfunction applyStyles (element, styles) {\n if (!element) { return }\n\n let cssText = ''\n for (const property in styles) {\n cssText += `${property}: ${styles[property]}; `\n }\n\n element.style.cssText = cssText\n}\n\n/**\n * Returns a string with a CSS translation tranform value.\n *\n * @param {number} [x = 0] the x offset of the translation\n * @param {number} [y = 0] the y offset of the translation\n * @param {boolean} [useHardwareAcceleration = false] use hardware acceleration\n * @return {string} the CSS translation string\n * @access private\n */\nfunction makeTranslate (x = 0, y = 0, useHardwareAcceleration = false) {\n if (useHardwareAcceleration) {\n return `translate3d(${x}px, ${y}px, 0)`\n } else {\n return `translate(${x}px, ${y}px)`\n }\n}\n\n/**\n * Returns a string with a CSS scaling tranform value.\n *\n * @param {number} [x = 0] the x scaling factor\n * @param {number} [y = 0] the y scaling factor\n * @param {boolean} [useHardwareAcceleration = false] use hardware acceleration\n * @return {string} the CSS scaling string\n * @access private\n */\nfunction makeScale (x = 0, y = x, useHardwareAcceleration = false) {\n if (useHardwareAcceleration) {\n return `scale3d(${x}, ${y}, 1)`\n } else {\n return `scale(${x}, ${y})`\n }\n}\n\n/**\n * A method that mimic the jQuery `animate` method and used to animate the\n * scroll when clicking on the MinimapElement canvas.\n *\n * @param {Object} param the animation data object\n * @param {[type]} param.from the start value\n * @param {[type]} param.to the end value\n * @param {[type]} param.duration the animation duration\n * @param {[type]} param.step the easing function for the animation\n * @access private\n */\nfunction animate ({ from, to, duration, step }) {\n const start = getTime()\n let progress\n\n const update = () => {\n const passed = getTime() - start\n if (duration === 0) {\n progress = 1\n } else {\n progress = passed / duration\n }\n if (progress > 1) { progress = 1 }\n const delta = swing(progress)\n const value = from + (to - from) * delta\n step(value, delta)\n\n if (progress < 1) { requestAnimationFrame(update) }\n }\n\n update()\n}\n\nfunction swing (progress) {\n return 0.5 - Math.cos(progress * Math.PI) / 2\n}\n\n/**\n * A method that return the current time as a Date.\n *\n * That method exist so that we can mock it in tests.\n *\n * @return {Date} the current time as Date\n * @access private\n */\nfunction getTime () { return new Date() }\n","'use strict'\n\nimport { CompositeDisposable } from 'atom'\nimport { emitter, getConfigSchema } from './main'\n\n/**\n * Provides methods to manage minimap plugins.\n * Minimap plugins are Atom packages that will augment the minimap.\n * They have a secondary activation cycle going on constrained by the minimap\n * package activation. A minimap plugin life cycle will generally look\n * like this:\n *\n * 1. The plugin module is activated by Atom through the `activate` method\n * 2. The plugin then register itself as a minimap plugin using `registerPlugin`\n * 3. The plugin is activated/deactivated according to the minimap settings.\n * 4. On the plugin module deactivation, the plugin must unregisters itself\n * from the minimap using the `unregisterPlugin`.\n *\n * @access public\n */\n\n// Initialize the properties for plugin management.\n\n/**\n * The registered Minimap plugins stored using their name as key.\n *\n * @type {Object}\n * @access private\n */\nexport const plugins = {}\n/**\n * The plugins' subscriptions stored using the plugin names as keys.\n *\n * @type {Object}\n * @access private\n */\nconst pluginsSubscriptions = {}\n\n/**\n * A map that stores the display order for each plugin\n *\n * @type {Object}\n * @access private\n */\nconst pluginsOrderMap = {}\n\n/**\n * Registers a minimap `plugin` with the given `name`.\n *\n * @param {string} name The identifying name of the plugin.\n * It will be used as activation settings name\n * as well as the key to unregister the module.\n * @param {MinimapPlugin} plugin The plugin to register.\n * @emits {did-add-plugin} with the name and a reference to the added plugin.\n * @emits {did-activate-plugin} if the plugin was activated during\n * the registration.\n */\nexport function registerPlugin (name, plugin) {\n plugins[name] = plugin\n pluginsSubscriptions[name] = new CompositeDisposable()\n\n const event = { name, plugin }\n emitter.emit('did-add-plugin', event)\n\n if (atom.config.get('minimap.displayPluginsControls')) {\n registerPluginControls(name, plugin)\n }\n\n updatesPluginActivationState(name)\n}\n\n/**\n * Unregisters a plugin from the minimap.\n *\n * @param {string} name The identifying name of the plugin to unregister.\n * @emits {did-remove-plugin} with the name and a reference\n * to the added plugin.\n */\nexport function unregisterPlugin (name) {\n const plugin = plugins[name]\n\n if (atom.config.get('minimap.displayPluginsControls')) {\n unregisterPluginControls(name)\n }\n\n delete plugins[name]\n\n const event = { name, plugin }\n emitter.emit('did-remove-plugin', event)\n}\n\n/**\n * Toggles the specified plugin activation state.\n *\n * @param {string} name The name of the plugin.\n * @param {boolean} boolean An optional boolean to set the activation\n * state of the plugin. If ommitted the new plugin\n * state will be the the inverse of its current\n * state.\n * @emits {did-activate-plugin} if the plugin was activated by the call.\n * @emits {did-deactivate-plugin} if the plugin was deactivated by the call.\n */\nexport function togglePluginActivation (name, boolean) {\n const settingsKey = `minimap.plugins.${name}`\n\n if (boolean !== undefined && boolean !== null) {\n atom.config.set(settingsKey, boolean)\n } else {\n atom.config.set(settingsKey, !atom.config.get(settingsKey))\n }\n\n updatesPluginActivationState(name)\n}\n\n/**\n * Deactivates all the plugins registered in the minimap package so far.\n *\n * @emits {did-deactivate-plugin} for each plugin deactivated by the call.\n */\nexport function deactivateAllPlugins () {\n for (const [name, plugin] of eachPlugin()) {\n plugin.deactivatePlugin()\n emitter.emit('did-deactivate-plugin', { name, plugin })\n }\n}\n\n/**\n * A generator function to iterate over registered plugins.\n *\n * @return An iterable that yield the name and reference to every plugin\n * as an array in each iteration.\n */\nfunction * eachPlugin () {\n for (const name in plugins) {\n yield [name, plugins[name]]\n }\n}\n\n/**\n * Updates the plugin activation state according to the current config.\n *\n * @param {string} name The identifying name of the plugin to update.\n * @emits {did-activate-plugin} if the plugin was activated by the call.\n * @emits {did-deactivate-plugin} if the plugin was deactivated by the call.\n * @access private\n */\nfunction updatesPluginActivationState (name) {\n const plugin = plugins[name]\n const pluginActive = plugin.isActive()\n const settingActive = atom.config.get(`minimap.plugins.${name}`)\n\n if (atom.config.get('minimap.displayPluginsControls')) {\n if (settingActive && !pluginActive) {\n activatePlugin(name, plugin)\n } else if (pluginActive && !settingActive) {\n deactivatePlugin(name, plugin)\n }\n } else {\n if (!pluginActive) {\n activatePlugin(name, plugin)\n } else if (pluginActive) {\n deactivatePlugin(name, plugin)\n }\n }\n}\n\nexport function activatePlugin (name, plugin) {\n const event = { name, plugin }\n\n plugin.activatePlugin()\n emitter.emit('did-activate-plugin', event)\n}\n\nexport function deactivatePlugin (name, plugin) {\n const event = { name, plugin }\n\n plugin.deactivatePlugin()\n emitter.emit('did-deactivate-plugin', event)\n}\n\n/**\n * When the `minimap.displayPluginsControls` setting is toggled,\n * this function will register the commands and setting to manage the plugin\n * activation from the minimap settings.\n *\n * @param {string} name The identifying name of the plugin.\n * @param {MinimapPlugin} plugin The plugin instance to register\n * controls for.\n * @listens {minimap.plugins.${name}} listen to the setting to update\n * the plugin state accordingly.\n * @listens {minimap:toggle-${name}} listen to the command on `atom-workspace`\n * to toggle the plugin state.\n * @access private\n */\nfunction registerPluginControls (name, plugin) {\n const settingsKey = `minimap.plugins.${name}`\n const orderSettingsKey = `minimap.plugins.${name}DecorationsZIndex`\n\n const config = getConfigSchema()\n\n config.plugins.properties[name] = {\n type: 'boolean',\n title: name,\n description: `Whether the ${name} plugin is activated and displayed in the Minimap.`,\n default: true\n }\n\n config.plugins.properties[`${name}DecorationsZIndex`] = {\n type: 'integer',\n title: `${name} decorations order`,\n description: `The relative order of the ${name} plugin's decorations in the layer into which they are drawn. Note that this order only apply inside a layer, so highlight-over decorations will always be displayed above line decorations as they are rendered in different layers.`,\n default: 0\n }\n\n if (atom.config.get(settingsKey) === undefined) {\n atom.config.set(settingsKey, true)\n }\n\n if (atom.config.get(orderSettingsKey) === undefined) {\n atom.config.set(orderSettingsKey, 0)\n }\n\n pluginsSubscriptions[name].add(atom.config.observe(settingsKey, () => {\n updatesPluginActivationState(name)\n }))\n\n pluginsSubscriptions[name].add(atom.config.observe(orderSettingsKey, (order) => {\n updatePluginsOrderMap(name)\n const event = { name, plugin, order }\n emitter.emit('did-change-plugin-order', event)\n }))\n\n pluginsSubscriptions[name].add(atom.commands.add('atom-workspace', {\n [`minimap:toggle-${name}`]: () => {\n togglePluginActivation(name)\n }\n }))\n\n updatePluginsOrderMap(name)\n}\n\n/**\n * Updates the display order in the map for the passed-in plugin name.\n *\n * @param {string} name the name of the plugin to update\n * @access private\n */\nfunction updatePluginsOrderMap (name) {\n const orderSettingsKey = `minimap.plugins.${name}DecorationsZIndex`\n\n pluginsOrderMap[name] = atom.config.get(orderSettingsKey)\n}\n\n/**\n * Returns the plugins display order mapped by name.\n *\n * @return {Object} The plugins order by name\n */\nexport function getPluginsOrder () { return pluginsOrderMap }\n\n/**\n * When the `minimap.displayPluginsControls` setting is toggled,\n * this function will unregister the commands and setting that\n * was created previously.\n *\n * @param {string} name The identifying name of the plugin.\n * @access private\n */\nfunction unregisterPluginControls (name) {\n pluginsSubscriptions[name].dispose()\n delete pluginsSubscriptions[name]\n delete getConfigSchema().plugins.properties[name]\n}\n","'use strict'\n\nimport { Emitter, CompositeDisposable } from 'atom'\nimport MinimapElement from './minimap-element'\nimport Minimap from './minimap'\nimport config from './config.json'\nimport * as PluginManagement from './plugin-management'\n\nexport * as config from './config.json'\nexport * from './plugin-management'\nexport { default as Minimap } from './minimap'\n\n/**\n * The `Minimap` package provides an eagle-eye view of text buffers.\n *\n * It also provides API for plugin packages that want to interact with the\n * minimap and be available to the user through the minimap settings.\n */\n\n/**\n * The activation state of the package.\n *\n * @type {boolean}\n * @access private\n */\nlet active = false\n/**\n * The toggle state of the package.\n *\n * @type {boolean}\n * @access private\n */\nlet toggled = false\n/**\n * The `Map` where Minimap instances are stored with the text editor they\n * target as key.\n *\n * @type {Map}\n * @access private\n */\nlet editorsMinimaps = null\n/**\n * The composite disposable that stores the package's subscriptions.\n *\n * @type {CompositeDisposable}\n * @access private\n */\nlet subscriptions = null\n/**\n * The disposable that stores the package's commands subscription.\n *\n * @type {Disposable}\n * @access private\n */\nlet subscriptionsOfCommands = null\n\n/**\n * The package's events emitter.\n *\n * @type {Emitter}\n * @access private\n */\nexport const emitter = new Emitter()\n\n/**\n * Activates the minimap package.\n */\nexport function activate () {\n if (active) { return }\n\n subscriptionsOfCommands = atom.commands.add('atom-workspace', {\n 'minimap:toggle': () => {\n toggle()\n },\n 'minimap:generate-coffee-plugin': async () => {\n await generatePlugin('coffee')\n },\n 'minimap:generate-javascript-plugin': async () => {\n await generatePlugin('javascript')\n },\n 'minimap:generate-babel-plugin': async () => {\n await generatePlugin('babel')\n }\n })\n\n editorsMinimaps = new Map()\n subscriptions = new CompositeDisposable()\n active = true\n\n if (atom.config.get('minimap.autoToggle')) { toggle() }\n}\n\n/**\n * Returns a {MinimapElement} for the passed-in model if it's a {Minimap}.\n *\n * @param {*} model the model for which returning a view\n * @return {MinimapElement}\n */\nexport function minimapViewProvider (model) {\n if (model instanceof Minimap) {\n const element = new MinimapElement()\n element.setModel(model)\n return element\n }\n}\n\n/**\n * Deactivates the minimap package.\n */\nexport function deactivate () {\n if (!active) { return }\n\n PluginManagement.deactivateAllPlugins()\n\n if (editorsMinimaps) {\n editorsMinimaps.forEach((value, key) => {\n value.destroy()\n editorsMinimaps.delete(key)\n })\n }\n\n subscriptions.dispose()\n subscriptions = null\n subscriptionsOfCommands.dispose()\n subscriptionsOfCommands = null\n editorsMinimaps = undefined\n toggled = false\n active = false\n}\n\nexport function getConfigSchema () {\n return config || atom.packages.getLoadedPackage('minimap').metadata.configSchema\n}\n\n/**\n * Toggles the minimap display.\n */\nexport function toggle () {\n if (!active) { return }\n\n if (toggled) {\n toggled = false\n\n if (editorsMinimaps) {\n editorsMinimaps.forEach((value, key) => {\n value.destroy()\n editorsMinimaps.delete(key)\n })\n }\n subscriptions.dispose()\n } else {\n toggled = true\n initSubscriptions()\n }\n}\n\n/**\n * Opens the plugin generation view.\n *\n * @param {string} template the name of the template to use\n */\nasync function generatePlugin (template) {\n const { default: MinimapPluginGeneratorElement } = await import('./minimap-plugin-generator-element')\n const view = new MinimapPluginGeneratorElement()\n view.template = template\n view.attach()\n}\n\n/**\n * Registers a callback to listen to the `did-activate` event of the package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidActivate (callback) {\n return emitter.on('did-activate', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-deactivate` event of the\n * package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidDeactivate (callback) {\n return emitter.on('did-deactivate', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-create-minimap` event of the\n * package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidCreateMinimap (callback) {\n return emitter.on('did-create-minimap', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-add-plugin` event of the\n * package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidAddPlugin (callback) {\n return emitter.on('did-add-plugin', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-remove-plugin` event of the\n * package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidRemovePlugin (callback) {\n return emitter.on('did-remove-plugin', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-activate-plugin` event of the\n * package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidActivatePlugin (callback) {\n return emitter.on('did-activate-plugin', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-deactivate-plugin` event of the\n * package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidDeactivatePlugin (callback) {\n return emitter.on('did-deactivate-plugin', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-change-plugin-order` event of\n * the package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidChangePluginOrder (callback) {\n return emitter.on('did-change-plugin-order', callback)\n}\n\n/**\n * Returns the `Minimap` class\n *\n * @return {Function} the `Minimap` class constructor\n */\nexport function minimapClass () {\n return Minimap\n}\n\n/**\n * Returns the `Minimap` object associated to the passed-in\n * `TextEditorElement`.\n *\n * @param {TextEditorElement} editorElement a text editor element\n * @return {Minimap} the associated minimap\n */\nexport function minimapForEditorElement (editorElement) {\n if (!editorElement) { return }\n return minimapForEditor(editorElement.getModel())\n}\n\n/**\n * Returns the `Minimap` object associated to the passed-in\n * `TextEditor`.\n *\n * @param {TextEditor} textEditor a text editor\n * @return {Minimap} the associated minimap\n */\nexport function minimapForEditor (textEditor) {\n if (!textEditor) { return }\n if (!editorsMinimaps) { return }\n\n let minimap = editorsMinimaps.get(textEditor)\n\n if (!minimap) {\n minimap = new Minimap({ textEditor })\n editorsMinimaps.set(textEditor, minimap)\n\n const editorSubscription = textEditor.onDidDestroy(() => {\n const minimaps = editorsMinimaps\n if (minimaps) { minimaps.delete(textEditor) }\n editorSubscription.dispose()\n })\n }\n\n return minimap\n}\n\n/**\n * Returns a new stand-alone {Minimap} for the passed-in `TextEditor`.\n *\n * @param {TextEditor} textEditor a text editor instance to create\n * a minimap for\n * @return {Minimap} a new stand-alone Minimap for the passed-in editor\n */\nexport function standAloneMinimapForEditor (textEditor) {\n if (!textEditor) { return }\n\n return new Minimap({\n textEditor,\n standAlone: true\n })\n}\n\n/**\n * Returns the `Minimap` associated to the active `TextEditor`.\n *\n * @return {Minimap} the active Minimap\n */\nexport function getActiveMinimap () {\n return minimapForEditor(atom.workspace.getActiveTextEditor())\n}\n\n/**\n * Calls a function for each present and future minimaps.\n *\n * @param {function(minimap:Minimap):void} iterator a function to call with\n * the existing and future\n * minimaps\n * @return {Disposable} a disposable to unregister the observer\n */\nexport function observeMinimaps (iterator) {\n if (!iterator) { return }\n\n if (editorsMinimaps) {\n editorsMinimaps.forEach((minimap) => { iterator(minimap) })\n }\n return onDidCreateMinimap((minimap) => { iterator(minimap) })\n}\n\n/**\n * Registers to the `observeTextEditors` method.\n *\n * @access private\n */\nfunction initSubscriptions () {\n subscriptions.add(atom.workspace.observeTextEditors((textEditor) => {\n const minimap = minimapForEditor(textEditor)\n const minimapElement = atom.views.getView(minimap)\n\n emitter.emit('did-create-minimap', minimap)\n minimapElement.attach()\n }))\n}\n\n// The public exports included in the service:\nconst MinimapServiceV1 = {\n minimapViewProvider,\n getConfigSchema,\n onDidActivate,\n onDidDeactivate,\n onDidCreateMinimap,\n onDidAddPlugin,\n onDidRemovePlugin,\n onDidActivatePlugin,\n onDidDeactivatePlugin,\n onDidChangePluginOrder,\n minimapClass,\n minimapForEditorElement,\n minimapForEditor,\n standAloneMinimapForEditor,\n getActiveMinimap,\n observeMinimaps,\n registerPlugin: PluginManagement.registerPlugin,\n unregisterPlugin: PluginManagement.unregisterPlugin,\n togglePluginActivation: PluginManagement.togglePluginActivation,\n deactivateAllPlugins: PluginManagement.deactivateAllPlugins,\n activatePlugin: PluginManagement.activatePlugin,\n deactivatePlugin: PluginManagement.deactivatePlugin,\n getPluginsOrder: PluginManagement.getPluginsOrder\n}\n\n/**\n * Returns the Minimap main module instance.\n *\n * @return {Main} The Minimap main module instance.\n */\nexport function provideMinimapServiceV1 () { return MinimapServiceV1 }\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction _plugin() {\n const data = require(\"@parcel/plugin\");\n\n _plugin = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _utils() {\n const data = require(\"@parcel/utils\");\n\n _utils = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _path() {\n const data = _interopRequireDefault(require(\"path\"));\n\n _path = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _nullthrows() {\n const data = _interopRequireDefault(require(\"nullthrows\"));\n\n _nullthrows = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// List of browsers that support dynamic import natively\n// https://caniuse.com/#feat=es6-module-dynamic-import\nconst DYNAMIC_IMPORT_BROWSERS = {\n edge: '76',\n firefox: '67',\n chrome: '63',\n safari: '11.1',\n opera: '50'\n}; // Used for as=\"\" in preload/prefetch\n\nconst TYPE_TO_RESOURCE_PRIORITY = {\n css: 'style',\n js: 'script'\n};\nconst BROWSER_PRELOAD_LOADER = './loaders/browser/preload-loader';\nconst BROWSER_PREFETCH_LOADER = './loaders/browser/prefetch-loader';\nconst LOADERS = {\n browser: {\n css: './loaders/browser/css-loader',\n html: './loaders/browser/html-loader',\n js: './loaders/browser/js-loader',\n wasm: './loaders/browser/wasm-loader',\n IMPORT_POLYFILL: './loaders/browser/import-polyfill'\n },\n worker: {\n js: './loaders/worker/js-loader',\n wasm: './loaders/worker/wasm-loader',\n IMPORT_POLYFILL: false\n },\n node: {\n css: './loaders/node/css-loader',\n html: './loaders/node/html-loader',\n js: './loaders/node/js-loader',\n wasm: './loaders/node/wasm-loader',\n IMPORT_POLYFILL: null\n }\n};\n\nfunction getLoaders(ctx) {\n if (ctx.isWorker()) return LOADERS.worker;\n if (ctx.isBrowser()) return LOADERS.browser;\n if (ctx.isNode()) return LOADERS.node;\n return null;\n}\n\nvar _default = new (_plugin().Runtime)({\n apply({\n bundle,\n bundleGraph\n }) {\n // Dependency ids in code replaced with referenced bundle names\n // Loader runtime added for bundle groups that don't have a native loader (e.g. HTML/CSS/Worker - isURL?),\n // and which are not loaded by a parent bundle.\n // Loaders also added for modules that were moved to a separate bundle because they are a different type\n // (e.g. WASM, HTML). These should be preloaded prior to the bundle being executed. Replace the entry asset(s)\n // with the preload module.\n if (bundle.type !== 'js') {\n return;\n }\n\n let asyncDependencies = [];\n let otherDependencies = [];\n bundle.traverse(node => {\n if (node.type !== 'dependency') {\n return;\n }\n\n let dependency = node.value;\n\n if (dependency.isAsync && !dependency.isURL) {\n asyncDependencies.push(dependency);\n } else {\n otherDependencies.push(dependency);\n }\n });\n let assets = [];\n\n for (let dependency of asyncDependencies) {\n let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle);\n\n if (resolved == null) {\n continue;\n }\n\n if (resolved.type === 'asset') {\n if (!bundle.env.scopeHoist) {\n // If this bundle already has the asset this dependency references,\n // return a simple runtime of `Promise.resolve(internalRequire(assetId))`.\n // The linker handles this for scope-hoisting.\n assets.push({\n filePath: __filename,\n code: `module.exports = Promise.resolve(module.bundle.root(${JSON.stringify(bundleGraph.getAssetPublicId(resolved.value))}))`,\n dependency\n });\n }\n } else {\n let loaderRuntime = getLoaderRuntime({\n bundle,\n dependency,\n bundleGraph,\n bundleGroup: resolved.value\n });\n\n if (loaderRuntime != null) {\n assets.push(loaderRuntime);\n }\n }\n }\n\n for (let dependency of otherDependencies) {\n // Resolve the dependency to a bundle. If inline, export the dependency id,\n // which will be replaced with the contents of that bundle later.\n let referencedBundle = bundleGraph.getReferencedBundle(dependency, bundle);\n\n if (referencedBundle === null || referencedBundle === void 0 ? void 0 : referencedBundle.isInline) {\n assets.push({\n filePath: _path().default.join(__dirname, `/bundles/${referencedBundle.id}.js`),\n code: `module.exports = ${JSON.stringify(dependency.id)};`,\n dependency\n });\n continue;\n } // Otherwise, try to resolve the dependency to an external bundle group\n // and insert a URL to that bundle.\n\n\n let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle);\n\n if (dependency.isURL && resolved == null) {\n // If a URL dependency was not able to be resolved, add a runtime that\n // exports the original moduleSpecifier.\n assets.push({\n filePath: __filename,\n code: `module.exports = ${JSON.stringify(dependency.moduleSpecifier)}`,\n dependency\n });\n continue;\n }\n\n if (resolved == null || resolved.type !== 'bundle_group') {\n continue;\n }\n\n let bundleGroup = resolved.value;\n let mainBundle = (0, _nullthrows().default)(bundleGraph.getBundlesInBundleGroup(bundleGroup).find(b => {\n let entries = b.getEntryAssets();\n return entries.some(e => bundleGroup.entryAssetId === e.id);\n }));\n\n if (bundle.env.outputFormat === 'commonjs' && mainBundle.type === 'js') {\n assets.push({\n filePath: __filename,\n dependency,\n code: `module.exports = require(\"./\" + ${getRelativePathExpr(bundle, mainBundle)})`\n });\n continue;\n } // URL dependency or not, fall back to including a runtime that exports the url\n\n\n assets.push(getURLRuntime(dependency, bundle, mainBundle));\n }\n\n if (shouldUseRuntimeManifest(bundle) && bundleGraph.getChildBundles(bundle).length > 0 && isNewContext(bundle, bundleGraph)) {\n assets.push({\n filePath: __filename,\n code: getRegisterCode(bundle, bundleGraph),\n isEntry: true\n });\n }\n\n return assets;\n }\n\n});\n\nexports.default = _default;\n\nfunction getLoaderRuntime({\n bundle,\n dependency,\n bundleGroup,\n bundleGraph\n}) {\n let loaders = getLoaders(bundle.env);\n\n if (loaders == null) {\n return;\n }\n\n let externalBundles = bundleGraph.getBundlesInBundleGroup(bundleGroup).filter(bundle => !bundle.isInline);\n let mainBundle = (0, _nullthrows().default)(externalBundles.find(bundle => {\n var _bundle$getMainEntry;\n\n return ((_bundle$getMainEntry = bundle.getMainEntry()) === null || _bundle$getMainEntry === void 0 ? void 0 : _bundle$getMainEntry.id) === bundleGroup.entryAssetId;\n })); // CommonJS is a synchronous module system, so there is no need to load bundles in parallel.\n // Importing of the other bundles will be handled by the bundle group entry.\n // Do the same thing in library mode for ES modules, as we are building for another bundler\n // and the imports for sibling bundles will be in the target bundle.\n\n if (bundle.env.outputFormat === 'commonjs' || bundle.env.isLibrary) {\n externalBundles = [mainBundle];\n } else {\n // Otherwise, load the bundle group entry after the others.\n externalBundles.splice(externalBundles.indexOf(mainBundle), 1);\n externalBundles.reverse().push(mainBundle);\n } // Determine if we need to add a dynamic import() polyfill, or if all target browsers support it natively.\n\n\n let needsDynamicImportPolyfill = false;\n\n if (bundle.env.isBrowser() && bundle.env.outputFormat === 'esmodule') {\n needsDynamicImportPolyfill = !bundle.env.matchesEngines(DYNAMIC_IMPORT_BROWSERS);\n }\n\n let loaderModules = externalBundles.map(to => {\n let loader = loaders[to.type];\n\n if (!loader) {\n return;\n }\n\n let relativePathExpr = getRelativePathExpr(bundle, to); // Use esmodule loader if possible\n\n if (to.type === 'js' && to.env.outputFormat === 'esmodule') {\n if (!needsDynamicImportPolyfill) {\n return `import(\"./\" + ${relativePathExpr})`;\n }\n\n loader = (0, _nullthrows().default)(loaders.IMPORT_POLYFILL, `No import() polyfill available for context '${bundle.env.context}'`);\n } else if (to.type === 'js' && to.env.outputFormat === 'commonjs') {\n return `Promise.resolve(require(\"./\" + ${relativePathExpr}))`;\n }\n\n return `require(${JSON.stringify(loader)})(require('./bundle-url').getBundleURL() + ${relativePathExpr})`;\n }).filter(Boolean);\n\n if (bundle.env.context === 'browser') {\n loaderModules.push(...(0, _utils().flatMap)( // TODO: Allow css to preload resources as well\n externalBundles.filter(to => to.type === 'js'), from => {\n let {\n preload,\n prefetch\n } = getHintedBundleGroups(bundleGraph, from);\n return [...getHintLoaders(bundleGraph, bundle, preload, BROWSER_PRELOAD_LOADER), ...getHintLoaders(bundleGraph, bundle, prefetch, BROWSER_PREFETCH_LOADER)];\n }));\n }\n\n if (loaderModules.length === 0) {\n return;\n }\n\n let loaderCode = loaderModules.join(', ');\n\n if (loaderModules.length > 1 && (bundle.env.outputFormat === 'global' || !externalBundles.every(b => b.type === 'js'))) {\n loaderCode = `Promise.all([${loaderCode}])`;\n\n if (bundle.env.outputFormat !== 'global') {\n loaderCode += `.then(r => r[r.length - 1])`;\n }\n } else {\n loaderCode = `(${loaderCode})`;\n }\n\n if (bundle.env.outputFormat === 'global') {\n loaderCode += `.then(() => module.bundle.root('${bundleGraph.getAssetPublicId(bundleGraph.getAssetById(bundleGroup.entryAssetId))}')${// In global output with scope hoisting, functions return exports are\n // always returned. Otherwise, the exports are returned.\n bundle.env.scopeHoist ? '()' : ''})`;\n }\n\n return {\n filePath: __filename,\n code: `module.exports = ${loaderCode};`,\n dependency\n };\n}\n\nfunction getHintedBundleGroups(bundleGraph, bundle) {\n let preload = [];\n let prefetch = [];\n bundle.traverse(node => {\n var _dependency$meta;\n\n if (node.type !== 'dependency') {\n return;\n }\n\n let dependency = node.value; // $FlowFixMe\n\n let attributes = (_dependency$meta = dependency.meta) === null || _dependency$meta === void 0 ? void 0 : _dependency$meta.importAttributes;\n\n if (dependency.isAsync && !dependency.isURL && typeof attributes === 'object' && attributes != null && ( // $FlowFixMe\n attributes.preload || attributes.prefetch)) {\n let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle);\n\n if ((resolved === null || resolved === void 0 ? void 0 : resolved.type) === 'bundle_group') {\n // === true for flow\n if (attributes.preload === true) {\n preload.push(resolved.value);\n }\n\n if (attributes.prefetch === true) {\n prefetch.push(resolved.value);\n }\n }\n }\n });\n return {\n preload,\n prefetch\n };\n}\n\nfunction getHintLoaders(bundleGraph, from, bundleGroups, loader) {\n let hintLoaders = [];\n\n for (let bundleGroupToPreload of bundleGroups) {\n let bundlesToPreload = bundleGraph.getBundlesInBundleGroup(bundleGroupToPreload);\n\n for (let bundleToPreload of bundlesToPreload) {\n let relativePathExpr = getRelativePathExpr(from, bundleToPreload);\n let priority = TYPE_TO_RESOURCE_PRIORITY[bundleToPreload.type];\n hintLoaders.push(`require(${JSON.stringify(loader)})(require('./bundle-url').getBundleURL() + ${relativePathExpr}, ${priority ? JSON.stringify(priority) : 'null'}, ${JSON.stringify(bundleToPreload.target.env.outputFormat === 'esmodule')})`);\n }\n }\n\n return hintLoaders;\n}\n\nfunction isNewContext(bundle, bundleGraph) {\n let parents = bundleGraph.getParentBundles(bundle);\n return bundle.isEntry || parents.length === 0 || parents.some(parent => parent.env.context !== bundle.env.context || parent.type !== 'js');\n}\n\nfunction getURLRuntime(dependency, from, to) {\n let relativePathExpr = getRelativePathExpr(from, to);\n\n if (dependency.meta.webworker === true) {\n return {\n filePath: __filename,\n code: `module.exports = require('./get-worker-url')(${relativePathExpr});`,\n dependency\n };\n }\n\n return {\n filePath: __filename,\n code: `module.exports = require('./bundle-url').getBundleURL() + ${relativePathExpr}`,\n dependency\n };\n}\n\nfunction getRegisterCode(entryBundle, bundleGraph) {\n let idToName = {};\n bundleGraph.traverseBundles((bundle, _, actions) => {\n if (bundle.isInline) {\n return;\n }\n\n idToName[bundle.publicId] = (0, _nullthrows().default)(bundle.name);\n\n if (bundle !== entryBundle && isNewContext(bundle, bundleGraph)) {\n // New contexts have their own manifests, so there's no need to continue.\n actions.skipChildren();\n }\n }, entryBundle);\n return \"require('./bundle-manifest').register(JSON.parse(\" + JSON.stringify(JSON.stringify(idToName)) + '));';\n}\n\nfunction getRelativePathExpr(from, to) {\n if (shouldUseRuntimeManifest(from)) {\n return `require('./relative-path')(${JSON.stringify(from.publicId)}, ${JSON.stringify(to.publicId)})`;\n }\n\n return JSON.stringify((0, _utils().relativeBundlePath)(from, to, {\n leadingDotSlash: false\n }));\n}\n\nfunction shouldUseRuntimeManifest(bundle) {\n let env = bundle.env;\n return !env.isLibrary && env.outputFormat === 'global' && env.isBrowser();\n}","// Generated by CoffeeScript 2.5.1\n(function() {\n var CompositeDisposable, Disposable, DisposableEvents, EventsDelegation, Mixin, NO_SELECTOR, eachPair;\n\n Mixin = require('mixto');\n\n DisposableEvents = require('./disposable-events');\n\n ({Disposable, CompositeDisposable} = require('atom'));\n\n eachPair = function(object, callback) {\n var k, results, v;\n results = [];\n for (k in object) {\n v = object[k];\n results.push(callback(k, v));\n }\n return results;\n };\n\n NO_SELECTOR = '__NONE__';\n\n module.exports = EventsDelegation = (function() {\n class EventsDelegation extends Mixin {\n subscribeTo(object, selector, events, options) {\n var disposablesForObject, eventsForObject;\n if (!(object instanceof HTMLElement)) {\n [object, selector, events, options] = [this, object, selector, events];\n }\n if (typeof selector === 'object') {\n [events, selector, options] = [selector, NO_SELECTOR, events];\n }\n if (this.eventsMap == null) {\n this.eventsMap = new WeakMap();\n }\n if (this.disposablesMap == null) {\n this.disposablesMap = new WeakMap();\n }\n if (this.eventsMap.get(object) == null) {\n this.eventsMap.set(object, {});\n }\n if (this.disposablesMap.get(object) == null) {\n this.disposablesMap.set(object, {});\n }\n eventsForObject = this.eventsMap.get(object);\n disposablesForObject = this.disposablesMap.get(object);\n eachPair(events, (event, callback) => {\n if (eventsForObject[event] == null) {\n eventsForObject[event] = {};\n disposablesForObject[event] = this.createEventListener(object, event, options);\n }\n return eventsForObject[event][selector] = callback;\n });\n return new Disposable(() => {\n return this.unsubscribeFrom(object, selector, events);\n });\n }\n\n unsubscribeFrom(object, selector, events) {\n var disposablesForObject, event, eventsForObject;\n if (!(object instanceof HTMLElement)) {\n [object, selector, events] = [this, object, selector];\n }\n if (typeof selector === 'object') {\n [events, selector] = [selector, NO_SELECTOR];\n }\n if (!(eventsForObject = this.eventsMap.get(object))) {\n return;\n }\n for (event in events) {\n delete eventsForObject[event][selector];\n if (Object.keys(eventsForObject[event]).length === 0) {\n disposablesForObject = this.disposablesMap.get(object);\n disposablesForObject[event].dispose();\n delete disposablesForObject[event];\n delete eventsForObject[event];\n }\n }\n if (Object.keys(eventsForObject).length === 0) {\n this.eventsMap.delete(object);\n return this.disposablesMap.delete(object);\n }\n }\n\n createEventListener(object, event, options) {\n var listener;\n listener = (e) => {\n var eventsForObject, ref, target;\n if (!(eventsForObject = (ref = this.eventsMap.get(object)) != null ? ref[event] : void 0)) {\n return;\n }\n ({target} = e);\n this.decorateEvent(e);\n this.eachSelectorFromTarget(e, target, eventsForObject);\n if (!e.isPropagationStopped) {\n if (typeof eventsForObject[NO_SELECTOR] === \"function\") {\n eventsForObject[NO_SELECTOR](e);\n }\n }\n return true;\n };\n return this.addDisposableEventListener(object, event, listener, options);\n }\n\n eachSelectorFromTarget(event, target, eventsForObject) {\n return this.nodeAndItsAncestors(target, (node) => {\n if (event.isPropagationStopped) {\n return;\n }\n return this.eachSelector(eventsForObject, (selector, callback) => {\n var matched;\n matched = this.targetMatch(node, selector);\n if (event.isImmediatePropagationStopped || !matched) {\n return;\n }\n return callback(event);\n });\n });\n }\n\n eachSelector(eventsForObject, callback) {\n var i, key, keys, len;\n keys = Object.keys(eventsForObject);\n if (keys.indexOf(NO_SELECTOR) !== -1) {\n keys.splice(keys.indexOf(NO_SELECTOR), 1);\n }\n keys.sort(function(a, b) {\n return b.split(' ').length - a.split(' ').length;\n });\n for (i = 0, len = keys.length; i < len; i++) {\n key = keys[i];\n if (callback(key, eventsForObject[key])) {\n return true;\n }\n }\n return false;\n }\n\n targetMatch(target, selector) {\n var parent;\n if (target.matches(selector)) {\n return true;\n }\n parent = target.parentNode;\n while ((parent != null) && (parent.matches != null)) {\n if (parent.matches(selector)) {\n return true;\n }\n parent = parent.parentNode;\n }\n return false;\n }\n\n nodeAndItsAncestors(node, callback) {\n var parent, results;\n parent = node.parentNode;\n callback(node);\n results = [];\n while ((parent != null) && (parent.matches != null)) {\n callback(parent);\n results.push(parent = parent.parentNode);\n }\n return results;\n }\n\n decorateEvent(e) {\n var overriddenStop, overriddenStopImmediate;\n overriddenStop = Event.prototype.stopPropagation;\n e.stopPropagation = function() {\n this.isPropagationStopped = true;\n return overriddenStop.apply(this, arguments);\n };\n overriddenStopImmediate = Event.prototype.stopImmediatePropagation;\n return e.stopImmediatePropagation = function() {\n this.isImmediatePropagationStopped = true;\n return overriddenStopImmediate.apply(this, arguments);\n };\n }\n\n };\n\n DisposableEvents.includeInto(EventsDelegation);\n\n return EventsDelegation;\n\n }).call(this);\n\n}).call(this);\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWRlbGVnYXRpb24uanMiLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9taXhpbnMvZXZlbnRzLWRlbGVnYXRpb24uY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBLE1BQUEsbUJBQUEsRUFBQSxVQUFBLEVBQUEsZ0JBQUEsRUFBQSxnQkFBQSxFQUFBLEtBQUEsRUFBQSxXQUFBLEVBQUE7O0VBQUEsS0FBQSxHQUFRLE9BQUEsQ0FBUSxPQUFSOztFQUNSLGdCQUFBLEdBQW1CLE9BQUEsQ0FBUSxxQkFBUjs7RUFDbkIsQ0FBQSxDQUFDLFVBQUQsRUFBYSxtQkFBYixDQUFBLEdBQW9DLE9BQUEsQ0FBUSxNQUFSLENBQXBDOztFQUNBLFFBQUEsR0FBVyxRQUFBLENBQUMsTUFBRCxFQUFTLFFBQVQsQ0FBQTtBQUFxQixRQUFBLENBQUEsRUFBQSxPQUFBLEVBQUE7QUFBQztJQUFBLEtBQUEsV0FBQTs7bUJBQUEsUUFBQSxDQUFTLENBQVQsRUFBVyxDQUFYO0lBQUEsQ0FBQTs7RUFBdEI7O0VBRVgsV0FBQSxHQUFjOztFQUVkLE1BQU0sQ0FBQyxPQUFQLEdBQ007SUFBTixNQUFBLGlCQUFBLFFBQStCLE1BQS9CO01BR0UsV0FBYSxDQUFDLE1BQUQsRUFBUyxRQUFULEVBQW1CLE1BQW5CLEVBQTJCLE9BQTNCLENBQUE7QUFDZixZQUFBLG9CQUFBLEVBQUE7UUFBSSxNQUFPLE1BQUEsWUFBa0IsWUFBekI7VUFDRSxDQUFDLE1BQUQsRUFBUyxRQUFULEVBQW1CLE1BQW5CLEVBQTJCLE9BQTNCLENBQUEsR0FBc0MsQ0FBQyxJQUFELEVBQU8sTUFBUCxFQUFlLFFBQWYsRUFBeUIsTUFBekIsRUFEeEM7O1FBR0EsSUFBaUUsT0FBTyxRQUFQLEtBQW1CLFFBQXBGO1VBQUEsQ0FBQyxNQUFELEVBQVMsUUFBVCxFQUFtQixPQUFuQixDQUFBLEdBQThCLENBQUMsUUFBRCxFQUFXLFdBQVgsRUFBd0IsTUFBeEIsRUFBOUI7OztV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QSxTQUFFLENBQUE7ZUFDbEMsQ0FBQyxDQUFDLHdCQUFGLEdBQTZCLFFBQUEsQ0FBQSxDQUFBO1VBQzNCLElBQUMsQ0FBQSw2QkFBRCxHQUFpQztpQkFDakMsdUJBQXVCLENBQUMsS0FBeEIsQ0FBOEIsSUFBOUIsRUFBb0MsU0FBcEM7UUFGMkI7TUFQaEI7O0lBaEdqQjs7SUFDRSxnQkFBZ0IsQ0FBQyxXQUFqQixDQUE2QixnQkFBN0I7Ozs7O0FBVEYiLCJzb3VyY2VzQ29udGVudCI6WyJNaXhpbiA9IHJlcXVpcmUgJ21peHRvJ1xuRGlzcG9zYWJsZUV2ZW50cyA9IHJlcXVpcmUgJy4vZGlzcG9zYWJsZS1ldmVudHMnXG57RGlzcG9zYWJsZSwgQ29tcG9zaXRlRGlzcG9zYWJsZX0gPSByZXF1aXJlICdhdG9tJ1xuZWFjaFBhaXIgPSAob2JqZWN0LCBjYWxsYmFjaykgLT4gY2FsbGJhY2soayx2KSBmb3Igayx2IG9mIG9iamVjdFxuXG5OT19TRUxFQ1RPUiA9ICdfX05PTkVfXydcblxubW9kdWxlLmV4cG9ydHMgPVxuY2xhc3MgRXZlbnRzRGVsZWdhdGlvbiBleHRlbmRzIE1peGluXG4gIERpc3Bvc2FibGVFdmVudHMuaW5jbHVkZUludG8odGhpcylcblxuICBzdWJzY3JpYmVUbzogKG9iamVjdCwgc2VsZWN0b3IsIGV2ZW50cywgb3B0aW9ucykgLT5cbiAgICB1bmxlc3Mgb2JqZWN0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcbiAgICAgIFtvYmplY3QsIHNlbGVjdG9yLCBldmVudHMsIG9wdGlvbnNdID0gW3RoaXMsIG9iamVjdCwgc2VsZWN0b3IsIGV2ZW50c11cblxuICAgIFtldmVudHMsIHNlbGVjdG9yLCBvcHRpb25zXSA9IFtzZWxlY3RvciwgTk9fU0VMRUNUT1IsIGV2ZW50c10gaWYgdHlwZW9mIHNlbGVjdG9yIGlzICdvYmplY3QnXG5cbiAgICBAZXZlbnRzTWFwID89IG5ldyBXZWFrTWFwXG4gICAgQGRpc3Bvc2FibGVzTWFwID89IG5ldyBXZWFrTWFwXG4gICAgQGV2ZW50c01hcC5zZXQob2JqZWN0LCB7fSkgdW5sZXNzIEBldmVudHNNYXAuZ2V0KG9iamVjdCk/XG4gICAgQGRpc3Bvc2FibGVzTWFwLnNldChvYmplY3QsIHt9KSB1bmxlc3MgQGRpc3Bvc2FibGVzTWFwLmdldChvYmplY3QpP1xuXG4gICAgZXZlbnRzRm9yT2JqZWN0ID0gQGV2ZW50c01hcC5nZXQob2JqZWN0KVxuICAgIGRpc3Bvc2FibGVzRm9yT2JqZWN0ID0gQGRpc3Bvc2FibGVzTWFwLmdldChvYmplY3QpXG5cbiAgICBlYWNoUGFpciBldmVudHMsIChldmVudCwgY2FsbGJhY2spID0+XG4gICAgICB1bmxlc3MgZXZlbnRzRm9yT2JqZWN0W2V2ZW50XT9cbiAgICAgICAgZXZlbnRzRm9yT2JqZWN0W2V2ZW50XSA9IHt9XG4gICAgICAgIGRpc3Bvc2FibGVzRm9yT2JqZWN0W2V2ZW50XSA9IEBjcmVhdGVFdmVudExpc3RlbmVyKG9iamVjdCwgZXZlbnQsIG9wdGlvbnMpXG5cbiAgICAgIGV2ZW50c0Zvck9iamVjdFtldmVudF1bc2VsZWN0b3JdID0gY2FsbGJhY2tcblxuICAgIG5ldyBEaXNwb3NhYmxlID0+IEB1bnN1YnNjcmliZUZyb20gb2JqZWN0LCBzZWxlY3RvciwgZXZlbnRzXG5cbiAgdW5zdWJzY3JpYmVGcm9tOiAob2JqZWN0LCBzZWxlY3RvciwgZXZlbnRzKSAtPlxuICAgIHVubGVzcyBvYmplY3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuICAgICAgW29iamVjdCwgc2VsZWN0b3IsIGV2ZW50c10gPSBbdGhpcywgb2JqZWN0LCBzZWxlY3Rvcl1cblxuICAgIFtldmVudHMsIHNlbGVjdG9yXSA9IFtzZWxlY3RvciwgTk9fU0VMRUNUT1JdIGlmIHR5cGVvZiBzZWxlY3RvciBpcyAnb2JqZWN0J1xuXG4gICAgcmV0dXJuIHVubGVzcyBldmVudHNGb3JPYmplY3QgPSBAZXZlbnRzTWFwLmdldChvYmplY3QpXG5cbiAgICBmb3IgZXZlbnQgb2YgZXZlbnRzXG4gICAgICBkZWxldGUgZXZlbnRzRm9yT2JqZWN0W2V2ZW50XVtzZWxlY3Rvcl1cblxuICAgICAgaWYgT2JqZWN0LmtleXMoZXZlbnRzRm9yT2JqZWN0W2V2ZW50XSkubGVuZ3RoIGlzIDBcbiAgICAgICAgZGlzcG9zYWJsZXNGb3JPYmplY3QgPSBAZGlzcG9zYWJsZXNNYXAuZ2V0KG9iamVjdClcbiAgICAgICAgZGlzcG9zYWJsZXNGb3JPYmplY3RbZXZlbnRdLmRpc3Bvc2UoKVxuICAgICAgICBkZWxldGUgZGlzcG9zYWJsZXNGb3JPYmplY3RbZXZlbnRdXG4gICAgICAgIGRlbGV0ZSBldmVudHNGb3JPYmplY3RbZXZlbnRdXG5cbiAgICBpZiBPYmplY3Qua2V5cyhldmVudHNGb3JPYmplY3QpLmxlbmd0aCBpcyAwXG4gICAgICBAZXZlbnRzTWFwLmRlbGV0ZShvYmplY3QpXG4gICAgICBAZGlzcG9zYWJsZXNNYXAuZGVsZXRlKG9iamVjdClcblxuICBjcmVhdGVFdmVudExpc3RlbmVyOiAob2JqZWN0LCBldmVudCwgb3B0aW9ucykgLT5cbiAgICBsaXN0ZW5lciA9IChlKSA9PlxuICAgICAgcmV0dXJuIHVubGVzcyBldmVudHNGb3JPYmplY3QgPSBAZXZlbnRzTWFwLmdldChvYmplY3QpP1tldmVudF1cblxuICAgICAge3RhcmdldH0gPSBlXG4gICAgICBAZGVjb3JhdGVFdmVudChlKVxuXG4gICAgICBAZWFjaFNlbGVjdG9yRnJvbVRhcmdldChlLCB0YXJnZXQsIGV2ZW50c0Zvck9iamVjdClcbiAgICAgIGV2ZW50c0Zvck9iamVjdFtOT19TRUxFQ1RPUl0/KGUpIHVubGVzcyBlLmlzUHJvcGFnYXRpb25TdG9wcGVkXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgQGFkZERpc3Bvc2FibGVFdmVudExpc3RlbmVyIG9iamVjdCwgZXZlbnQsIGxpc3RlbmVyLCBvcHRpb25zXG5cbiAgZWFjaFNlbGVjdG9yRnJvbVRhcmdldDogKGV2ZW50LCB0YXJnZXQsIGV2ZW50c0Zvck9iamVjdCkgLT5cbiAgICBAbm9kZUFuZEl0c0FuY2VzdG9ycyB0YXJnZXQsIChub2RlKSA9PlxuICAgICAgcmV0dXJuIGlmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkXG4gICAgICBAZWFjaFNlbGVjdG9yIGV2ZW50c0Zvck9iamVjdCwgKHNlbGVjdG9yLGNhbGxiYWNrKSA9PlxuICAgICAgICBtYXRjaGVkID0gQHRhcmdldE1hdGNoKG5vZGUsIHNlbGVjdG9yKVxuICAgICAgICByZXR1cm4gaWYgZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgb3Igbm90IG1hdGNoZWRcbiAgICAgICAgY2FsbGJhY2soZXZlbnQpXG5cbiAgZWFjaFNlbGVjdG9yOiAoZXZlbnRzRm9yT2JqZWN0LCBjYWxsYmFjaykgLT5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzRm9yT2JqZWN0KVxuICAgIGlmIGtleXMuaW5kZXhPZihOT19TRUxFQ1RPUikgaXNudCAtIDFcbiAgICAgIGtleXMuc3BsaWNlKGtleXMuaW5kZXhPZihOT19TRUxFQ1RPUiksIDEpXG4gICAga2V5cy5zb3J0IChhLGIpIC0+IGIuc3BsaXQoJyAnKS5sZW5ndGggLSBhLnNwbGl0KCcgJykubGVuZ3RoXG5cbiAgICBmb3Iga2V5IGluIGtleXNcbiAgICAgIHJldHVybiB0cnVlIGlmIGNhbGxiYWNrKGtleSwgZXZlbnRzRm9yT2JqZWN0W2tleV0pXG4gICAgcmV0dXJuIGZhbHNlXG5cbiAgdGFyZ2V0TWF0Y2g6ICh0YXJnZXQsIHNlbGVjdG9yKSAtPlxuICAgIHJldHVybiB0cnVlIGlmIHRhcmdldC5tYXRjaGVzKHNlbGVjdG9yKVxuXG4gICAgcGFyZW50ID0gdGFyZ2V0LnBhcmVudE5vZGVcbiAgICB3aGlsZSBwYXJlbnQ/IGFuZCBwYXJlbnQubWF0Y2hlcz9cbiAgICAgIHJldHVybiB0cnVlIGlmIHBhcmVudC5tYXRjaGVzKHNlbGVjdG9yKVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGVcblxuICAgIGZhbHNlXG5cbiAgbm9kZUFuZEl0c0FuY2VzdG9yczogKG5vZGUsIGNhbGxiYWNrKSAtPlxuICAgIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZVxuXG4gICAgY2FsbGJhY2sobm9kZSlcbiAgICB3aGlsZSBwYXJlbnQ/IGFuZCBwYXJlbnQubWF0Y2hlcz9cbiAgICAgIGNhbGxiYWNrKHBhcmVudClcbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlXG5cbiAgZGVjb3JhdGVFdmVudDogKGUpIC0+XG4gICAgb3ZlcnJpZGRlblN0b3AgPSAgRXZlbnQ6OnN0b3BQcm9wYWdhdGlvblxuICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gLT5cbiAgICAgIEBpc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWVcbiAgICAgIG92ZXJyaWRkZW5TdG9wLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblxuICAgIG92ZXJyaWRkZW5TdG9wSW1tZWRpYXRlID0gIEV2ZW50OjpzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25cbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IC0+XG4gICAgICBAaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlXG4gICAgICBvdmVycmlkZGVuU3RvcEltbWVkaWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4iXX0=\n//# sourceURL=/home/runner/work/atom-utils-plus/atom-utils-plus/lib/mixins/events-delegation.coffee","// Generated by CoffeeScript 2.5.1\n(function() {\n var callbackProperties, decorateElementClass, decorateElementPrototype, deprecate;\n\n ({deprecate} = require('grim'));\n\n if (global.__CUSTOM_HTML_ELEMENTS_CLASSES__ != null) {\n global.__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__ = global.__CUSTOM_HTML_ELEMENTS_CLASSES__;\n delete global.__CUSTOM_HTML_ELEMENTS_CLASSES__;\n } else {\n if (global.__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__ == null) {\n global.__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__ = {};\n }\n }\n\n callbackProperties = ['createdCallback', 'attachedCallback', 'detachedCallback', 'attributeChangedCallback'];\n\n decorateElementPrototype = function(target, source) {\n callbackProperties.forEach(function(k) {\n return Object.defineProperty(target, k, {\n value: function() {\n var ref;\n return (ref = this[`__${k}`]) != null ? ref.apply(this, arguments) : void 0;\n },\n writable: true,\n enumerable: true,\n configurable: true\n });\n });\n return Object.getOwnPropertyNames(source).forEach(function(k) {\n var descriptor;\n if (k === 'constructor') {\n return;\n }\n descriptor = Object.getOwnPropertyDescriptor(source, k);\n if (callbackProperties.indexOf(k) > -1) {\n return Object.defineProperty(target, `__${k}`, descriptor);\n } else {\n return Object.defineProperty(target, k, descriptor);\n }\n });\n };\n\n decorateElementClass = function(target, source) {\n return Object.getOwnPropertyNames(source).forEach(function(k) {\n var descriptor;\n if (k === 'length' || k === 'name' || k === 'arguments' || k === 'caller' || k === 'prototype') {\n return;\n }\n descriptor = Object.getOwnPropertyDescriptor(source, k);\n return Object.defineProperty(target, k, descriptor);\n });\n };\n\n module.exports = function(nodeName, options) {\n var elementClass, elementPrototype, klass, proto, ref;\n ({\n class: klass\n } = options);\n if (klass != null) {\n proto = klass.prototype;\n } else {\n proto = (ref = options.prototype) != null ? ref : options;\n }\n if (proto === options) {\n deprecate('Using the prototype as the second argument is deprecated, use the prototype option instead');\n }\n if (__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__[nodeName]) {\n elementClass = __ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__[nodeName];\n decorateElementPrototype(elementClass.prototype, proto);\n if (klass != null) {\n decorateElementClass(elementClass, klass);\n }\n return elementClass;\n } else {\n elementPrototype = Object.create(HTMLElement.prototype);\n decorateElementPrototype(elementPrototype, proto);\n elementClass = document.registerElement(nodeName, {\n prototype: Object.create(elementPrototype)\n });\n if (klass != null) {\n decorateElementClass(elementClass, klass);\n }\n return __ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__[nodeName] = elementClass;\n }\n };\n\n}).call(this);\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItb3ItdXBkYXRlLWVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiLi4iLCJzb3VyY2VzIjpbImxpYi9yZWdpc3Rlci1vci11cGRhdGUtZWxlbWVudC5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUEsTUFBQSxrQkFBQSxFQUFBLG9CQUFBLEVBQUEsd0JBQUEsRUFBQTs7RUFBQSxDQUFBLENBQUMsU0FBRCxDQUFBLEdBQWMsT0FBQSxDQUFRLE1BQVIsQ0FBZDs7RUFFQSxJQUFHLCtDQUFIO0lBQ0UsTUFBTSxDQUFDLHFDQUFQLEdBQStDLE1BQU0sQ0FBQztJQUN0RCxPQUFPLE1BQU0sQ0FBQyxpQ0FGaEI7R0FBQSxNQUFBOztNQUlFLE1BQU0sQ0FBQyx3Q0FBeUMsQ0FBQTtLQUpsRDs7O0VBTUEsa0JBQUEsR0FBcUIsQ0FDbkIsaUJBRG1CLEVBRW5CLGtCQUZtQixFQUduQixrQkFIbUIsRUFJbkIsMEJBSm1COztFQU9yQix3QkFBQSxHQUEyQixRQUFBLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FBQTtJQUN6QixrQkFBa0IsQ0FBQyxPQUFuQixDQUEyQixRQUFBLENBQUMsQ0FBRCxDQUFBO2FBQ3pCLE1BQU0sQ0FBQyxjQUFQLENBQXNCLE1BQXRCLEVBQThCLENBQTlCLEVBQWlDO1FBQy9CLEtBQUEsRUFBTyxRQUFBLENBQUEsQ0FBQTtBQUFFLGNBQUE7cURBQVksQ0FBRSxLQUFiLENBQW1CLElBQW5CLEVBQXlCLFNBQXpCO1FBQUgsQ0FEd0I7UUFFL0IsUUFBQSxFQUFVLElBRnFCO1FBRy9CLFVBQUEsRUFBWSxJQUhtQjtRQUkvQixZQUFBLEVBQWM7TUFKaUIsQ0FBakM7SUFEeUIsQ0FBM0I7V0FRQSxNQUFNLENBQUMsbUJBQVAsQ0FBMkIsTUFBM0IsQ0FBa0MsQ0FBQyxPQUFuQyxDQUEyQyxRQUFBLENBQUMsQ0FBRCxDQUFBO0FBQzdDLFVBQUE7TUFBSSxJQUFVLE1BQU0sYUFBaEI7QUFBQSxlQUFBOztNQUVBLFVBQUEsR0FBYSxNQUFNLENBQUMsd0JBQVAsQ0FBZ0MsTUFBaEMsRUFBd0MsQ0FBeEM7TUFDYixJQUFHLGtCQUFrQixDQUFDLE9BQW5CLENBQTJCLENBQTNCLENBQUEsR0FBZ0MsQ0FBQyxDQUFwQztlQUNFLE1BQU0sQ0FBQyxjQUFQLENBQXNCLE1BQXRCLEVBQThCLENBQUEsRUFBQSxDQUFBLENBQUssQ0FBTCxDQUFBLENBQTlCLEVBQXdDLFVBQXhDLEVBREY7T0FBQSxNQUFBO2VBR0UsTUFBTSxDQUFDLGNBQVAsQ0FBc0IsTUFBdEIsRUFBOEIsQ0FBOUIsRUFBaUMsVUFBakMsRUFIRjs7SUFKeUMsQ0FBM0M7RUFUeUI7O0VBa0IzQixvQkFBQSxHQUF1QixRQUFBLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FBQTtXQUNyQixNQUFNLENBQUMsbUJBQVAsQ0FBMkIsTUFBM0IsQ0FBa0MsQ0FBQyxPQUFuQyxDQUEyQyxRQUFBLENBQUMsQ0FBRCxDQUFBO0FBQzdDLFVBQUE7TUFBSSxJQUFVLE1BQU0sWUFBTixNQUFnQixVQUFoQixNQUF3QixlQUF4QixNQUFxQyxZQUFyQyxNQUErQyxXQUF6RDtBQUFBLGVBQUE7O01BRUEsVUFBQSxHQUFhLE1BQU0sQ0FBQyx3QkFBUCxDQUFnQyxNQUFoQyxFQUF3QyxDQUF4QzthQUNiLE1BQU0sQ0FBQyxjQUFQLENBQXNCLE1BQXRCLEVBQThCLENBQTlCLEVBQWlDLFVBQWpDO0lBSnlDLENBQTNDO0VBRHFCOztFQU92QixNQUFNLENBQUMsT0FBUCxHQUFpQixRQUFBLENBQUMsUUFBRCxFQUFXLE9BQVgsQ0FBQTtBQUNqQixRQUFBLFlBQUEsRUFBQSxnQkFBQSxFQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUE7SUFBRSxDQUFBO01BQUMsS0FBQSxFQUFPO0lBQVIsQ0FBQSxHQUFpQixPQUFqQjtJQUNBLElBQUcsYUFBSDtNQUNFLEtBQUEsR0FBUSxLQUFLLENBQUMsVUFEaEI7S0FBQSxNQUFBO01BR0UsS0FBQSw2Q0FBNEIsUUFIOUI7O0lBS0EsSUFBRyxLQUFBLEtBQVMsT0FBWjtNQUNFLFNBQUEsQ0FBVSw0RkFBVixFQURGOztJQUlBLElBQUcscUNBQXFDLENBQUMsUUFBRCxDQUF4QztNQUNFLFlBQUEsR0FBZSxxQ0FBcUMsQ0FBQyxRQUFEO01BRXBELHdCQUFBLENBQXlCLFlBQVksQ0FBQyxTQUF0QyxFQUFpRCxLQUFqRDtNQUNBLElBQTZDLGFBQTdDO1FBQUEsb0JBQUEsQ0FBcUIsWUFBckIsRUFBbUMsS0FBbkMsRUFBQTs7YUFFQSxhQU5GO0tBQUEsTUFBQTtNQVFFLGdCQUFBLEdBQW1CLE1BQU0sQ0FBQyxNQUFQLENBQWMsV0FBVyxDQUFDLFNBQTFCO01BQ25CLHdCQUFBLENBQXlCLGdCQUF6QixFQUEyQyxLQUEzQztNQUVBLFlBQUEsR0FBZSxRQUFRLENBQUMsZUFBVCxDQUF5QixRQUF6QixFQUFtQztRQUFBLFNBQUEsRUFBVyxNQUFNLENBQUMsTUFBUCxDQUFjLGdCQUFkO01BQVgsQ0FBbkM7TUFFZixJQUE2QyxhQUE3QztRQUFBLG9CQUFBLENBQXFCLFlBQXJCLEVBQW1DLEtBQW5DLEVBQUE7O2FBRUEscUNBQXFDLENBQUMsUUFBRCxDQUFyQyxHQUFrRCxhQWZwRDs7RUFYZTtBQXhDakIiLCJzb3VyY2VzQ29udGVudCI6WyJ7ZGVwcmVjYXRlfSA9IHJlcXVpcmUgJ2dyaW0nXG5cbmlmIGdsb2JhbC5fX0NVU1RPTV9IVE1MX0VMRU1FTlRTX0NMQVNTRVNfXz9cbiAgZ2xvYmFsLl9fQVRPTV9VVElMU19DVVNUT01fRUxFTUVOVF9DTEFTU0VTX18gPSBnbG9iYWwuX19DVVNUT01fSFRNTF9FTEVNRU5UU19DTEFTU0VTX19cbiAgZGVsZXRlIGdsb2JhbC5fX0NVU1RPTV9IVE1MX0VMRU1FTlRTX0NMQVNTRVNfX1xuZWxzZVxuICBnbG9iYWwuX19BVE9NX1VUSUxTX0NVU1RPTV9FTEVNRU5UX0NMQVNTRVNfXyA/PSB7fVxuXG5jYWxsYmFja1Byb3BlcnRpZXMgPSBbXG4gICdjcmVhdGVkQ2FsbGJhY2snXG4gICdhdHRhY2hlZENhbGxiYWNrJ1xuICAnZGV0YWNoZWRDYWxsYmFjaydcbiAgJ2F0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaydcbl1cblxuZGVjb3JhdGVFbGVtZW50UHJvdG90eXBlID0gKHRhcmdldCwgc291cmNlKSAtPlxuICBjYWxsYmFja1Byb3BlcnRpZXMuZm9yRWFjaCAoaykgLT5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkgdGFyZ2V0LCBrLCB7XG4gICAgICB2YWx1ZTogLT4gQFtcIl9fI3trfVwiXT8uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cblxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UpLmZvckVhY2ggKGspIC0+XG4gICAgcmV0dXJuIGlmIGsgaW4gWydjb25zdHJ1Y3RvciddXG5cbiAgICBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGspXG4gICAgaWYgY2FsbGJhY2tQcm9wZXJ0aWVzLmluZGV4T2YoaykgPiAtMVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgXCJfXyN7a31cIiwgZGVzY3JpcHRvcilcbiAgICBlbHNlXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrLCBkZXNjcmlwdG9yKVxuXG5kZWNvcmF0ZUVsZW1lbnRDbGFzcyA9ICh0YXJnZXQsIHNvdXJjZSkgLT5cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlKS5mb3JFYWNoIChrKSAtPlxuICAgIHJldHVybiBpZiBrIGluIFsnbGVuZ3RoJywgJ25hbWUnLCAnYXJndW1lbnRzJywgJ2NhbGxlcicsICdwcm90b3R5cGUnXVxuXG4gICAgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrKVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGssIGRlc2NyaXB0b3IpXG5cbm1vZHVsZS5leHBvcnRzID0gKG5vZGVOYW1lLCBvcHRpb25zKSAtPlxuICB7Y2xhc3M6IGtsYXNzfSA9IG9wdGlvbnNcbiAgaWYga2xhc3M/XG4gICAgcHJvdG8gPSBrbGFzcy5wcm90b3R5cGVcbiAgZWxzZVxuICAgIHByb3RvID0gb3B0aW9ucy5wcm90b3R5cGUgPyBvcHRpb25zXG5cbiAgaWYgcHJvdG8gaXMgb3B0aW9uc1xuICAgIGRlcHJlY2F0ZSgnVXNpbmcgdGhlIHByb3RvdHlwZSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQsIHVzZSB0aGUgcHJvdG90eXBlIG9wdGlvbiBpbnN0ZWFkJylcblxuXG4gIGlmIF9fQVRPTV9VVElMU19DVVNUT01fRUxFTUVOVF9DTEFTU0VTX19bbm9kZU5hbWVdXG4gICAgZWxlbWVudENsYXNzID0gX19BVE9NX1VUSUxTX0NVU1RPTV9FTEVNRU5UX0NMQVNTRVNfX1tub2RlTmFtZV1cblxuICAgIGRlY29yYXRlRWxlbWVudFByb3RvdHlwZShlbGVtZW50Q2xhc3MucHJvdG90eXBlLCBwcm90bylcbiAgICBkZWNvcmF0ZUVsZW1lbnRDbGFzcyhlbGVtZW50Q2xhc3MsIGtsYXNzKSBpZiBrbGFzcz9cblxuICAgIGVsZW1lbnRDbGFzc1xuICBlbHNlXG4gICAgZWxlbWVudFByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSFRNTEVsZW1lbnQucHJvdG90eXBlKVxuICAgIGRlY29yYXRlRWxlbWVudFByb3RvdHlwZShlbGVtZW50UHJvdG90eXBlLCBwcm90bylcblxuICAgIGVsZW1lbnRDbGFzcyA9IGRvY3VtZW50LnJlZ2lzdGVyRWxlbWVudCBub2RlTmFtZSwgcHJvdG90eXBlOiBPYmplY3QuY3JlYXRlKGVsZW1lbnRQcm90b3R5cGUpXG5cbiAgICBkZWNvcmF0ZUVsZW1lbnRDbGFzcyhlbGVtZW50Q2xhc3MsIGtsYXNzKSBpZiBrbGFzcz9cblxuICAgIF9fQVRPTV9VVElMU19DVVNUT01fRUxFTUVOVF9DTEFTU0VTX19bbm9kZU5hbWVdID0gZWxlbWVudENsYXNzXG4iXX0=\n//# sourceURL=/home/runner/work/atom-utils-plus/atom-utils-plus/lib/register-or-update-element.coffee","// Generated by CoffeeScript 2.5.1\n(function() {\n module.exports = {\n requirePackages: function(...packages) {\n return new Promise(function(resolve, reject) {\n var failures, remains, required, solved;\n required = [];\n failures = [];\n remains = packages.length;\n solved = function() {\n remains--;\n if (remains !== 0) {\n return;\n }\n if (failures.length > 0) {\n return reject(failures);\n }\n return resolve(required);\n };\n return packages.forEach(function(pkg, i) {\n var failHandler, promise;\n failHandler = function(reason) {\n failures[i] = reason;\n return solved();\n };\n promise = atom.packages.activatePackage(pkg).then(function(activatedPackage) {\n required[i] = activatedPackage.mainModule;\n return solved();\n });\n if (promise.fail != null) {\n return promise.fail(failHandler);\n } else if (promise.catch != null) {\n return promise.catch(failHandler);\n }\n });\n });\n },\n registerOrUpdateElement: require('./register-or-update-element'),\n Ancestors: require('./mixins/ancestors'),\n AncestorsMethods: require('./mixins/ancestors'),\n DisposableEvents: require('./mixins/disposable-events'),\n EventsDelegation: require('./mixins/events-delegation'),\n SpacePenDSL: require('./mixins/space-pen-dsl')\n };\n\n}).call(this);\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIuLiIsInNvdXJjZXMiOlsibGliL2F0b20tdXRpbHMuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQTtFQUFBLE1BQU0sQ0FBQyxPQUFQLEdBQ0U7SUFBQSxlQUFBLEVBQWlCLFFBQUEsQ0FBQSxHQUFDLFFBQUQsQ0FBQTthQUNmLElBQUksT0FBSixDQUFZLFFBQUEsQ0FBQyxPQUFELEVBQVUsTUFBVixDQUFBO0FBQ2hCLFlBQUEsUUFBQSxFQUFBLE9BQUEsRUFBQSxRQUFBLEVBQUE7UUFBTSxRQUFBLEdBQVc7UUFDWCxRQUFBLEdBQVc7UUFDWCxPQUFBLEdBQVUsUUFBUSxDQUFDO1FBRW5CLE1BQUEsR0FBUyxRQUFBLENBQUEsQ0FBQTtVQUNQLE9BQUE7VUFDQSxJQUFjLE9BQUEsS0FBVyxDQUF6QjtBQUFBLG1CQUFBOztVQUNBLElBQTJCLFFBQVEsQ0FBQyxNQUFULEdBQWtCLENBQTdDO0FBQUEsbUJBQU8sTUFBQSxDQUFPLFFBQVAsRUFBUDs7aUJBQ0EsT0FBQSxDQUFRLFFBQVI7UUFKTztlQU1ULFFBQVEsQ0FBQyxPQUFULENBQWlCLFFBQUEsQ0FBQyxHQUFELEVBQU0sQ0FBTixDQUFBO0FBQ3ZCLGNBQUEsV0FBQSxFQUFBO1VBQVEsV0FBQSxHQUFjLFFBQUEsQ0FBQyxNQUFELENBQUE7WUFDWixRQUFRLENBQUMsQ0FBRCxDQUFSLEdBQWM7bUJBQ2QsTUFBQSxDQUFBO1VBRlk7VUFJZCxPQUFBLEdBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFkLENBQThCLEdBQTlCLENBQ1YsQ0FBQyxJQURTLENBQ0osUUFBQSxDQUFDLGdCQUFELENBQUE7WUFDSixRQUFRLENBQUMsQ0FBRCxDQUFSLEdBQWMsZ0JBQWdCLENBQUM7bUJBQy9CLE1BQUEsQ0FBQTtVQUZJLENBREk7VUFLVixJQUFHLG9CQUFIO21CQUNFLE9BQU8sQ0FBQyxJQUFSLENBQWEsV0FBYixFQURGO1dBQUEsTUFFSyxJQUFHLHFCQUFIO21CQUNILE9BQU8sQ0FBQyxLQUFSLENBQWMsV0FBZCxFQURHOztRQVpVLENBQWpCO01BWFUsQ0FBWjtJQURlLENBQWpCO0lBMkJBLHVCQUFBLEVBQXlCLE9BQUEsQ0FBUSw4QkFBUixDQTNCekI7SUE0QkEsU0FBQSxFQUFXLE9BQUEsQ0FBUSxvQkFBUixDQTVCWDtJQTZCQSxnQkFBQSxFQUFrQixPQUFBLENBQVEsb0JBQVIsQ0E3QmxCO0lBOEJBLGdCQUFBLEVBQWtCLE9BQUEsQ0FBUSw0QkFBUixDQTlCbEI7SUErQkEsZ0JBQUEsRUFBa0IsT0FBQSxDQUFRLDRCQUFSLENBL0JsQjtJQWdDQSxXQUFBLEVBQWEsT0FBQSxDQUFRLHdCQUFSO0VBaENiO0FBREYiLCJzb3VyY2VzQ29udGVudCI6WyJcbm1vZHVsZS5leHBvcnRzID1cbiAgcmVxdWlyZVBhY2thZ2VzOiAocGFja2FnZXMuLi4pIC0+XG4gICAgbmV3IFByb21pc2UgKHJlc29sdmUsIHJlamVjdCkgLT5cbiAgICAgIHJlcXVpcmVkID0gW11cbiAgICAgIGZhaWx1cmVzID0gW11cbiAgICAgIHJlbWFpbnMgPSBwYWNrYWdlcy5sZW5ndGhcblxuICAgICAgc29sdmVkID0gLT5cbiAgICAgICAgcmVtYWlucy0tXG4gICAgICAgIHJldHVybiB1bmxlc3MgcmVtYWlucyBpcyAwXG4gICAgICAgIHJldHVybiByZWplY3QoZmFpbHVyZXMpIGlmIGZhaWx1cmVzLmxlbmd0aCA+IDBcbiAgICAgICAgcmVzb2x2ZShyZXF1aXJlZClcblxuICAgICAgcGFja2FnZXMuZm9yRWFjaCAocGtnLCBpKSAtPlxuICAgICAgICBmYWlsSGFuZGxlciA9IChyZWFzb24pIC0+XG4gICAgICAgICAgZmFpbHVyZXNbaV0gPSByZWFzb25cbiAgICAgICAgICBzb2x2ZWQoKVxuXG4gICAgICAgIHByb21pc2UgPSBhdG9tLnBhY2thZ2VzLmFjdGl2YXRlUGFja2FnZShwa2cpXG4gICAgICAgIC50aGVuIChhY3RpdmF0ZWRQYWNrYWdlKSAtPlxuICAgICAgICAgIHJlcXVpcmVkW2ldID0gYWN0aXZhdGVkUGFja2FnZS5tYWluTW9kdWxlXG4gICAgICAgICAgc29sdmVkKClcblxuICAgICAgICBpZiBwcm9taXNlLmZhaWw/XG4gICAgICAgICAgcHJvbWlzZS5mYWlsKGZhaWxIYW5kbGVyKVxuICAgICAgICBlbHNlIGlmIHByb21pc2UuY2F0Y2g/XG4gICAgICAgICAgcHJvbWlzZS5jYXRjaChmYWlsSGFuZGxlcilcblxuICByZWdpc3Rlck9yVXBkYXRlRWxlbWVudDogcmVxdWlyZSAnLi9yZWdpc3Rlci1vci11cGRhdGUtZWxlbWVudCdcbiAgQW5jZXN0b3JzOiByZXF1aXJlICcuL21peGlucy9hbmNlc3RvcnMnXG4gIEFuY2VzdG9yc01ldGhvZHM6IHJlcXVpcmUgJy4vbWl4aW5zL2FuY2VzdG9ycydcbiAgRGlzcG9zYWJsZUV2ZW50czogcmVxdWlyZSAnLi9taXhpbnMvZGlzcG9zYWJsZS1ldmVudHMnXG4gIEV2ZW50c0RlbGVnYXRpb246IHJlcXVpcmUgJy4vbWl4aW5zL2V2ZW50cy1kZWxlZ2F0aW9uJ1xuICBTcGFjZVBlbkRTTDogcmVxdWlyZSAnLi9taXhpbnMvc3BhY2UtcGVuLWRzbCdcbiJdfQ==\n//# sourceURL=/home/runner/work/atom-utils-plus/atom-utils-plus/lib/atom-utils.coffee","// Generated by CoffeeScript 2.5.1\n(function() {\n var BabelSpacePenDSL, Builder, Events, Mixin, SelfClosingTags, SpacePenDSL, Tags, Template;\n\n Mixin = require('mixto');\n\n Tags = 'a abbr address article aside audio b bdi bdo blockquote body button canvas caption cite code colgroup datalist dd del details dfn dialog div dl dt em fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 head header html i iframe ins kbd label legend li main map mark menu meter nav noscript object ol optgroup option output p pre progress q rp rt ruby s samp script section select small span strong style sub summary sup table tbody td textarea tfoot th thead time title tr u ul var video area base br col command embed hr img input keygen link meta param source track wbr'.split(/\\s+/);\n\n SelfClosingTags = {};\n\n 'area base br col command embed hr img input keygen link meta param source track wbr'.split(/\\s+/).forEach(function(tag) {\n return SelfClosingTags[tag] = true;\n });\n\n Events = 'blur change click dblclick error focus input keydown keypress keyup load mousedown mousemove mouseout mouseover mouseup resize scroll select submit unload'.split(/\\s+/);\n\n BabelSpacePenDSL = class BabelSpacePenDSL extends Mixin {\n buildContent() {\n if (this.constructor.content != null) {\n return SpacePenDSL.buildContent(this, this.constructor.content);\n }\n }\n\n };\n\n module.exports = SpacePenDSL = (function() {\n class SpacePenDSL extends Mixin {\n static includeInto(klass) {\n super.includeInto(klass);\n Object.defineProperty(klass, 'content', {\n enumerable: false,\n get: function() {\n return this.prototype.__content__;\n },\n set: function(value) {\n return this.prototype.__content__ = value;\n }\n });\n Object.defineProperty(klass.prototype, 'createdCallback', {\n enumerable: true,\n get: function() {\n return this.__create__;\n },\n set: function(value) {\n return this.__createdCallback__ = value;\n }\n });\n Object.defineProperty(klass.prototype, '__create__', {\n enumerable: true,\n value: function() {\n if (this.__content__ != null) {\n SpacePenDSL.buildContent(this, this.__content__);\n }\n if (this.__createdCallback__ != null) {\n return this.__createdCallback__();\n }\n }\n });\n return klass.useShadowRoot = function() {\n return klass.prototype.__useShadowRoot__ = true;\n };\n }\n\n static buildContent(element, content) {\n var html, root, template;\n template = new Template();\n content.call(template);\n [html] = template.buildHtml();\n root = element.__useShadowRoot__ ? root = element.shadowRoot = element.createShadowRoot() : root = element;\n root.innerHTML = html;\n return this.wireOutlets(element, root);\n }\n\n static wireOutlets(view, root) {\n var element, i, len, outlet, ref;\n ref = root.querySelectorAll('[outlet]');\n for (i = 0, len = ref.length; i < len; i++) {\n element = ref[i];\n outlet = element.getAttribute('outlet');\n view[outlet] = element;\n element.removeAttribute('outlet');\n }\n return void 0;\n }\n\n };\n\n SpacePenDSL.Babel = BabelSpacePenDSL;\n\n return SpacePenDSL;\n\n }).call(this);\n\n Template = (function() {\n class Template {\n constructor() {\n this.currentBuilder = new Builder();\n }\n\n subview(name, view) {\n return this.currentBuilder.subview(name, view);\n }\n\n text(string) {\n return this.currentBuilder.text(string);\n }\n\n tag(tagName, ...args) {\n return this.currentBuilder.tag(tagName, ...args);\n }\n\n raw(string) {\n return this.currentBuilder.raw(string);\n }\n\n buildHtml() {\n return this.currentBuilder.buildHtml();\n }\n\n };\n\n Tags.forEach(function(tagName) {\n return Template.prototype[tagName] = function(...args) {\n return this.currentBuilder.tag(tagName, ...args);\n };\n });\n\n return Template;\n\n }).call(this);\n\n Builder = class Builder {\n constructor() {\n this.document = [];\n this.postProcessingSteps = [];\n }\n\n buildHtml() {\n return [this.document.join(''), this.postProcessingSteps];\n }\n\n tag(name, ...args) {\n var options;\n options = this.extractOptions(args);\n this.openTag(name, options.attributes);\n if (SelfClosingTags.hasOwnProperty(name)) {\n if ((options.text != null) || (options.content != null)) {\n throw new Error(`Self-closing tag ${name} cannot have text or content`);\n }\n } else {\n if (typeof options.content === \"function\") {\n options.content();\n }\n if (options.text) {\n this.text(options.text);\n }\n return this.closeTag(name);\n }\n }\n\n openTag(name, attributes) {\n var attributeName, attributePairs, attributesString, value;\n if (this.document.length === 0) {\n if (attributes == null) {\n attributes = {};\n }\n }\n attributePairs = (function() {\n var results;\n results = [];\n for (attributeName in attributes) {\n value = attributes[attributeName];\n results.push(`${attributeName}=\\\"${value}\\\"`);\n }\n return results;\n })();\n attributesString = attributePairs.length ? \" \" + attributePairs.join(\" \") : \"\";\n return this.document.push(`<${name}${attributesString}>`);\n }\n\n closeTag(name) {\n return this.document.push(``);\n }\n\n text(string) {\n var escapedString;\n escapedString = string.replace(/&/g, '&').replace(/\"/g, '"').replace(/'/g, ''').replace(//g, '>');\n return this.document.push(escapedString);\n }\n\n raw(string) {\n return this.document.push(string);\n }\n\n subview(outletName, subview) {\n var subviewId;\n subviewId = `subview-${++idCounter}`;\n this.tag('div', {\n id: subviewId\n });\n return this.postProcessingSteps.push(function(view) {\n view[outletName] = subview;\n subview.parentView = view;\n return view.find(`div#${subviewId}`).replaceWith(subview);\n });\n }\n\n extractOptions(args) {\n var arg, i, len, options;\n options = {};\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n switch (typeof arg) {\n case 'function':\n options.content = arg;\n break;\n case 'string':\n case 'number':\n options.text = arg.toString();\n break;\n default:\n options.attributes = arg;\n }\n }\n return options;\n }\n\n };\n\n}).call(this);\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2UtcGVuLWRzbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL21peGlucy9zcGFjZS1wZW4tZHNsLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQSxNQUFBLGdCQUFBLEVBQUEsT0FBQSxFQUFBLE1BQUEsRUFBQSxLQUFBLEVBQUEsZUFBQSxFQUFBLFdBQUEsRUFBQSxJQUFBLEVBQUE7O0VBQUEsS0FBQSxHQUFRLE9BQUEsQ0FBUSxPQUFSOztFQUVSLElBQUEsR0FDRSxra0JBTytDLENBQUMsS0FQaEQsQ0FPc0QsS0FQdEQ7O0VBU0YsZUFBQSxHQUFrQixDQUFBOztFQUNsQixxRkFDa0IsQ0FBQyxLQURuQixDQUN5QixLQUR6QixDQUMrQixDQUFDLE9BRGhDLENBQ3dDLFFBQUEsQ0FBQyxHQUFELENBQUE7V0FBUyxlQUFlLENBQUMsR0FBRCxDQUFmLEdBQXVCO0VBQWhDLENBRHhDOztFQUdBLE1BQUEsR0FDRSw0SkFFNEMsQ0FBQyxLQUY3QyxDQUVtRCxLQUZuRDs7RUFJSSxtQkFBTixNQUFBLGlCQUFBLFFBQStCLE1BQS9CO0lBQ0UsWUFBYyxDQUFBLENBQUE7TUFDWixJQUF3RCxnQ0FBeEQ7ZUFBQSxXQUFXLENBQUMsWUFBWixDQUF5QixJQUF6QixFQUErQixJQUFDLENBQUEsV0FBVyxDQUFDLE9BQTVDLEVBQUE7O0lBRFk7O0VBRGhCOztFQUlBLE1BQU0sQ0FBQyxPQUFQLEdBQ007SUFBTixNQUFBLFlBQUEsUUFBMEIsTUFBMUI7TUFHZ0IsT0FBYixXQUFhLENBQUMsS0FBRCxDQUFBO2FBQWIsQ0FBQSxXQUNDLENBQU0sS0FBTjtRQUVBLE1BQU0sQ0FBQyxjQUFQLENBQXNCLEtBQXRCLEVBQTZCLFNBQTdCLEVBQ0U7VUFBQSxVQUFBLEVBQVksS0FBWjtVQUNBLEdBQUEsRUFBSyxRQUFBLENBQUEsQ0FBQTttQkFBRyxJQUFDLENBQUEsU0FBUyxDQUFDO1VBQWQsQ0FETDtVQUVBLEdBQUEsRUFBSyxR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S0FBTCxFQUFZO1FBQUEsRUFBQSxFQUFJO01BQUosQ0FBWjthQUNBLElBQUMsQ0FBQSxtQkFBbUIsQ0FBQyxJQUFyQixDQUEwQixRQUFBLENBQUMsSUFBRCxDQUFBO1FBQ3hCLElBQUksQ0FBQyxVQUFELENBQUosR0FBbUI7UUFDbkIsT0FBTyxDQUFDLFVBQVIsR0FBcUI7ZUFDckIsSUFBSSxDQUFDLElBQUwsQ0FBVSxDQUFBLElBQUEsQ0FBQSxDQUFPLFNBQVAsQ0FBQSxDQUFWLENBQTZCLENBQUMsV0FBOUIsQ0FBMEMsT0FBMUM7TUFId0IsQ0FBMUI7SUFITzs7SUFRVCxjQUFnQixDQUFDLElBQUQsQ0FBQTtBQUNsQixVQUFBLEdBQUEsRUFBQSxDQUFBLEVBQUEsR0FBQSxFQUFBO01BQUksT0FBQSxHQUFVLENBQUE7TUFDVixLQUFBLHNDQUFBOztBQUNFLGdCQUFPLE9BQU8sR0FBZDtBQUFBLGVBQ08sVUFEUDtZQUVJLE9BQU8sQ0FBQyxPQUFSLEdBQWtCO0FBRGY7QUFEUCxlQUdPLFFBSFA7QUFBQSxlQUdpQixRQUhqQjtZQUlJLE9BQU8sQ0FBQyxJQUFSLEdBQWUsR0FBRyxDQUFDLFFBQUosQ0FBQTtBQURGO0FBSGpCO1lBTUksT0FBTyxDQUFDLFVBQVIsR0FBcUI7QUFOekI7TUFERjthQVFBO0lBVmM7O0VBN0RsQjtBQTNGQSIsInNvdXJjZXNDb250ZW50IjpbIk1peGluID0gcmVxdWlyZSAnbWl4dG8nXG5cblRhZ3MgPVxuICAnYSBhYmJyIGFkZHJlc3MgYXJ0aWNsZSBhc2lkZSBhdWRpbyBiIGJkaSBiZG8gYmxvY2txdW90ZSBib2R5IGJ1dHRvbiBjYW52YXNcbiAgIGNhcHRpb24gY2l0ZSBjb2RlIGNvbGdyb3VwIGRhdGFsaXN0IGRkIGRlbCBkZXRhaWxzIGRmbiBkaWFsb2cgZGl2IGRsIGR0IGVtXG4gICBmaWVsZHNldCBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgZm9ybSBoMSBoMiBoMyBoNCBoNSBoNiBoZWFkIGhlYWRlciBodG1sIGlcbiAgIGlmcmFtZSBpbnMga2JkIGxhYmVsIGxlZ2VuZCBsaSBtYWluIG1hcCBtYXJrIG1lbnUgbWV0ZXIgbmF2IG5vc2NyaXB0IG9iamVjdFxuICAgb2wgb3B0Z3JvdXAgb3B0aW9uIG91dHB1dCBwIHByZSBwcm9ncmVzcyBxIHJwIHJ0IHJ1YnkgcyBzYW1wIHNjcmlwdCBzZWN0aW9uXG4gICBzZWxlY3Qgc21hbGwgc3BhbiBzdHJvbmcgc3R5bGUgc3ViIHN1bW1hcnkgc3VwIHRhYmxlIHRib2R5IHRkIHRleHRhcmVhIHRmb290XG4gICB0aCB0aGVhZCB0aW1lIHRpdGxlIHRyIHUgdWwgdmFyIHZpZGVvIGFyZWEgYmFzZSBiciBjb2wgY29tbWFuZCBlbWJlZCBociBpbWdcbiAgIGlucHV0IGtleWdlbiBsaW5rIG1ldGEgcGFyYW0gc291cmNlIHRyYWNrIHdicicuc3BsaXQgL1xccysvXG5cblNlbGZDbG9zaW5nVGFncyA9IHt9XG4nYXJlYSBiYXNlIGJyIGNvbCBjb21tYW5kIGVtYmVkIGhyIGltZyBpbnB1dCBrZXlnZW4gbGluayBtZXRhIHBhcmFtXG4gc291cmNlIHRyYWNrIHdicicuc3BsaXQoL1xccysvKS5mb3JFYWNoICh0YWcpIC0+IFNlbGZDbG9zaW5nVGFnc1t0YWddID0gdHJ1ZVxuXG5FdmVudHMgPVxuICAnYmx1ciBjaGFuZ2UgY2xpY2sgZGJsY2xpY2sgZXJyb3IgZm9jdXMgaW5wdXQga2V5ZG93blxuICAga2V5cHJlc3Mga2V5dXAgbG9hZCBtb3VzZWRvd24gbW91c2Vtb3ZlIG1vdXNlb3V0IG1vdXNlb3ZlclxuICAgbW91c2V1cCByZXNpemUgc2Nyb2xsIHNlbGVjdCBzdWJtaXQgdW5sb2FkJy5zcGxpdCAvXFxzKy9cblxuY2xhc3MgQmFiZWxTcGFjZVBlbkRTTCBleHRlbmRzIE1peGluXG4gIGJ1aWxkQ29udGVudDogLT5cbiAgICBTcGFjZVBlbkRTTC5idWlsZENvbnRlbnQodGhpcywgQGNvbnN0cnVjdG9yLmNvbnRlbnQpIGlmIEBjb25zdHJ1Y3Rvci5jb250ZW50P1xuXG5tb2R1bGUuZXhwb3J0cyA9XG5jbGFzcyBTcGFjZVBlbkRTTCBleHRlbmRzIE1peGluXG4gIEBCYWJlbDogQmFiZWxTcGFjZVBlbkRTTFxuXG4gIEBpbmNsdWRlSW50bzogKGtsYXNzKSAtPlxuICAgIHN1cGVyKGtsYXNzKVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5IGtsYXNzLCAnY29udGVudCcsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgZ2V0OiAtPiBAcHJvdG90eXBlLl9fY29udGVudF9fXG4gICAgICBzZXQ6ICh2YWx1ZSkgLT4gQHByb3RvdHlwZS5fX2NvbnRlbnRfXyA9IHZhbHVlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkga2xhc3M6OiwgJ2NyZWF0ZWRDYWxsYmFjaycsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICBnZXQ6IC0+IEBfX2NyZWF0ZV9fXG4gICAgICBzZXQ6ICh2YWx1ZSkgLT4gQF9fY3JlYXRlZENhbGxiYWNrX18gPSB2YWx1ZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5IGtsYXNzOjosICdfX2NyZWF0ZV9fJyxcbiAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIHZhbHVlOiAtPlxuICAgICAgICBTcGFjZVBlbkRTTC5idWlsZENvbnRlbnQodGhpcywgQF9fY29udGVudF9fKSBpZiBAX19jb250ZW50X18/XG5cbiAgICAgICAgZG8gQF9fY3JlYXRlZENhbGxiYWNrX18gaWYgQF9fY3JlYXRlZENhbGxiYWNrX18/XG5cbiAgICBrbGFzcy51c2VTaGFkb3dSb290ID0gLT5cbiAgICAgIGtsYXNzOjpfX3VzZVNoYWRvd1Jvb3RfXyA9IHRydWVcblxuICBAYnVpbGRDb250ZW50OiAoZWxlbWVudCwgY29udGVudCkgLT5cbiAgICB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZVxuXG4gICAgY29udGVudC5jYWxsKHRlbXBsYXRlKVxuXG4gICAgW2h0bWxdID0gdGVtcGxhdGUuYnVpbGRIdG1sKClcbiAgICByb290ID1cbiAgICBpZiBlbGVtZW50Ll9fdXNlU2hhZG93Um9vdF9fXG4gICAgICByb290ID0gZWxlbWVudC5zaGFkb3dSb290ID0gZWxlbWVudC5jcmVhdGVTaGFkb3dSb290KClcbiAgICBlbHNlXG4gICAgICByb290ID0gZWxlbWVudFxuICAgIHJvb3QuaW5uZXJIVE1MID0gaHRtbFxuXG4gICAgQHdpcmVPdXRsZXRzKGVsZW1lbnQsIHJvb3QpXG5cbiAgQHdpcmVPdXRsZXRzOiAodmlldywgcm9vdCkgLT5cbiAgICBmb3IgZWxlbWVudCBpbiByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tvdXRsZXRdJylcbiAgICAgIG91dGxldCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdvdXRsZXQnKVxuICAgICAgdmlld1tvdXRsZXRdID0gZWxlbWVudFxuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ291dGxldCcpXG5cbiAgICB1bmRlZmluZWRcblxuY2xhc3MgVGVtcGxhdGVcbiAgY29uc3RydWN0b3I6IC0+IEBjdXJyZW50QnVpbGRlciA9IG5ldyBCdWlsZGVyXG5cbiAgVGFncy5mb3JFYWNoICh0YWdOYW1lKSAtPlxuICAgIFRlbXBsYXRlOjpbdGFnTmFtZV0gPSAoYXJncy4uLikgLT4gQGN1cnJlbnRCdWlsZGVyLnRhZyh0YWdOYW1lLCBhcmdzLi4uKVxuXG4gIHN1YnZpZXc6IChuYW1lLCB2aWV3KSAtPiBAY3VycmVudEJ1aWxkZXIuc3VidmlldyhuYW1lLCB2aWV3KVxuXG4gIHRleHQ6IChzdHJpbmcpIC0+IEBjdXJyZW50QnVpbGRlci50ZXh0KHN0cmluZylcblxuICB0YWc6ICh0YWdOYW1lLCBhcmdzLi4uKSAtPiBAY3VycmVudEJ1aWxkZXIudGFnKHRhZ05hbWUsIGFyZ3MuLi4pXG5cbiAgcmF3OiAoc3RyaW5nKSAtPiBAY3VycmVudEJ1aWxkZXIucmF3KHN0cmluZylcblxuICBidWlsZEh0bWw6IC0+IEBjdXJyZW50QnVpbGRlci5idWlsZEh0bWwoKVxuXG5jbGFzcyBCdWlsZGVyXG4gIGNvbnN0cnVjdG9yOiAtPlxuICAgIEBkb2N1bWVudCA9IFtdXG4gICAgQHBvc3RQcm9jZXNzaW5nU3RlcHMgPSBbXVxuXG4gIGJ1aWxkSHRtbDogLT5cbiAgICBbQGRvY3VtZW50LmpvaW4oJycpLCBAcG9zdFByb2Nlc3NpbmdTdGVwc11cblxuICB0YWc6IChuYW1lLCBhcmdzLi4uKSAtPlxuICAgIG9wdGlvbnMgPSBAZXh0cmFjdE9wdGlvbnMoYXJncylcblxuICAgIEBvcGVuVGFnKG5hbWUsIG9wdGlvbnMuYXR0cmlidXRlcylcblxuICAgIGlmIFNlbGZDbG9zaW5nVGFncy5oYXNPd25Qcm9wZXJ0eShuYW1lKVxuICAgICAgaWYgb3B0aW9ucy50ZXh0PyBvciBvcHRpb25zLmNvbnRlbnQ/XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGYtY2xvc2luZyB0YWcgI3tuYW1lfSBjYW5ub3QgaGF2ZSB0ZXh0IG9yIGNvbnRlbnRcIilcbiAgICBlbHNlXG4gICAgICBvcHRpb25zLmNvbnRlbnQ/KClcbiAgICAgIEB0ZXh0KG9wdGlvbnMudGV4dCkgaWYgb3B0aW9ucy50ZXh0XG4gICAgICBAY2xvc2VUYWcobmFtZSlcblxuICBvcGVuVGFnOiAobmFtZSwgYXR0cmlidXRlcykgLT5cbiAgICBpZiBAZG9jdW1lbnQubGVuZ3RoIGlzIDBcbiAgICAgIGF0dHJpYnV0ZXMgPz0ge31cblxuICAgIGF0dHJpYnV0ZVBhaXJzID1cbiAgICAgIGZvciBhdHRyaWJ1dGVOYW1lLCB2YWx1ZSBvZiBhdHRyaWJ1dGVzXG4gICAgICAgIFwiI3thdHRyaWJ1dGVOYW1lfT1cXFwiI3t2YWx1ZX1cXFwiXCJcblxuICAgIGF0dHJpYnV0ZXNTdHJpbmcgPVxuICAgICAgaWYgYXR0cmlidXRlUGFpcnMubGVuZ3RoXG4gICAgICAgIFwiIFwiICsgYXR0cmlidXRlUGFpcnMuam9pbihcIiBcIilcbiAgICAgIGVsc2VcbiAgICAgICAgXCJcIlxuXG4gICAgQGRvY3VtZW50LnB1c2ggXCI8I3tuYW1lfSN7YXR0cmlidXRlc1N0cmluZ30+XCJcblxuICBjbG9zZVRhZzogKG5hbWUpIC0+XG4gICAgQGRvY3VtZW50LnB1c2ggXCI8LyN7bmFtZX0+XCJcblxuICB0ZXh0OiAoc3RyaW5nKSAtPlxuICAgIGVzY2FwZWRTdHJpbmcgPSBzdHJpbmdcbiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpXG4gICAgICAucmVwbGFjZSgvJy9nLCAnJiMzOTsnKVxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuXG4gICAgQGRvY3VtZW50LnB1c2ggZXNjYXBlZFN0cmluZ1xuXG4gIHJhdzogKHN0cmluZykgLT5cbiAgICBAZG9jdW1lbnQucHVzaCBzdHJpbmdcblxuICBzdWJ2aWV3OiAob3V0bGV0TmFtZSwgc3VidmlldykgLT5cbiAgICBzdWJ2aWV3SWQgPSBcInN1YnZpZXctI3srK2lkQ291bnRlcn1cIlxuICAgIEB0YWcgJ2RpdicsIGlkOiBzdWJ2aWV3SWRcbiAgICBAcG9zdFByb2Nlc3NpbmdTdGVwcy5wdXNoICh2aWV3KSAtPlxuICAgICAgdmlld1tvdXRsZXROYW1lXSA9IHN1YnZpZXdcbiAgICAgIHN1YnZpZXcucGFyZW50VmlldyA9IHZpZXdcbiAgICAgIHZpZXcuZmluZChcImRpdiMje3N1YnZpZXdJZH1cIikucmVwbGFjZVdpdGgoc3VidmlldylcblxuICBleHRyYWN0T3B0aW9uczogKGFyZ3MpIC0+XG4gICAgb3B0aW9ucyA9IHt9XG4gICAgZm9yIGFyZyBpbiBhcmdzXG4gICAgICBzd2l0Y2ggdHlwZW9mKGFyZylcbiAgICAgICAgd2hlbiAnZnVuY3Rpb24nXG4gICAgICAgICAgb3B0aW9ucy5jb250ZW50ID0gYXJnXG4gICAgICAgIHdoZW4gJ3N0cmluZycsICdudW1iZXInXG4gICAgICAgICAgb3B0aW9ucy50ZXh0ID0gYXJnLnRvU3RyaW5nKClcbiAgICAgICAgZWxzZVxuICAgICAgICAgIG9wdGlvbnMuYXR0cmlidXRlcyA9IGFyZ1xuICAgIG9wdGlvbnNcbiJdfQ==\n//# sourceURL=/home/runner/work/atom-utils-plus/atom-utils-plus/lib/mixins/space-pen-dsl.coffee","\"use strict\";\n\nvar utils = module.exports = {};\n\n/**\n * Loops through the collection and calls the callback for each element. if the callback returns truthy, the loop is broken and returns the same value.\n * @public\n * @param {*} collection The collection to loop through. Needs to have a length property set and have indices set from 0 to length - 1.\n * @param {function} callback The callback to be called for each element. The element will be given as a parameter to the callback. If this callback returns truthy, the loop is broken and the same value is returned.\n * @returns {*} The value that a callback has returned (if truthy). Otherwise nothing.\n */\nutils.forEach = function(collection, callback) {\n for(var i = 0; i < collection.length; i++) {\n var result = callback(collection[i]);\n if(result) {\n return result;\n }\n }\n};\n","\"use strict\";\n\nmodule.exports = function(options) {\n var getState = options.stateHandler.getState;\n\n /**\n * Tells if the element has been made detectable and ready to be listened for resize events.\n * @public\n * @param {element} The element to check.\n * @returns {boolean} True or false depending on if the element is detectable or not.\n */\n function isDetectable(element) {\n var state = getState(element);\n return state && !!state.isDetectable;\n }\n\n /**\n * Marks the element that it has been made detectable and ready to be listened for resize events.\n * @public\n * @param {element} The element to mark.\n */\n function markAsDetectable(element) {\n getState(element).isDetectable = true;\n }\n\n /**\n * Tells if the element is busy or not.\n * @public\n * @param {element} The element to check.\n * @returns {boolean} True or false depending on if the element is busy or not.\n */\n function isBusy(element) {\n return !!getState(element).busy;\n }\n\n /**\n * Marks the object is busy and should not be made detectable.\n * @public\n * @param {element} element The element to mark.\n * @param {boolean} busy If the element is busy or not.\n */\n function markBusy(element, busy) {\n getState(element).busy = !!busy;\n }\n\n return {\n isDetectable: isDetectable,\n markAsDetectable: markAsDetectable,\n isBusy: isBusy,\n markBusy: markBusy\n };\n};\n","\"use strict\";\n\nmodule.exports = function(idHandler) {\n var eventListeners = {};\n\n /**\n * Gets all listeners for the given element.\n * @public\n * @param {element} element The element to get all listeners for.\n * @returns All listeners for the given element.\n */\n function getListeners(element) {\n var id = idHandler.get(element);\n\n if (id === undefined) {\n return [];\n }\n\n return eventListeners[id] || [];\n }\n\n /**\n * Stores the given listener for the given element. Will not actually add the listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The callback that the element has added.\n */\n function addListener(element, listener) {\n var id = idHandler.get(element);\n\n if(!eventListeners[id]) {\n eventListeners[id] = [];\n }\n\n eventListeners[id].push(listener);\n }\n\n function removeListener(element, listener) {\n var listeners = getListeners(element);\n for (var i = 0, len = listeners.length; i < len; ++i) {\n if (listeners[i] === listener) {\n listeners.splice(i, 1);\n break;\n }\n }\n }\n\n function removeAllListeners(element) {\n var listeners = getListeners(element);\n if (!listeners) { return; }\n listeners.length = 0;\n }\n\n return {\n get: getListeners,\n add: addListener,\n removeListener: removeListener,\n removeAllListeners: removeAllListeners\n };\n};\n","\"use strict\";\n\nmodule.exports = function() {\n var idCount = 1;\n\n /**\n * Generates a new unique id in the context.\n * @public\n * @returns {number} A unique id in the context.\n */\n function generate() {\n return idCount++;\n }\n\n return {\n generate: generate\n };\n};\n","\"use strict\";\n\nmodule.exports = function(options) {\n var idGenerator = options.idGenerator;\n var getState = options.stateHandler.getState;\n\n /**\n * Gets the resize detector id of the element.\n * @public\n * @param {element} element The target element to get the id of.\n * @returns {string|number|null} The id of the element. Null if it has no id.\n */\n function getId(element) {\n var state = getState(element);\n\n if (state && state.id !== undefined) {\n return state.id;\n }\n\n return null;\n }\n\n /**\n * Sets the resize detector id of the element. Requires the element to have a resize detector state initialized.\n * @public\n * @param {element} element The target element to set the id of.\n * @returns {string|number|null} The id of the element.\n */\n function setId(element) {\n var state = getState(element);\n\n if (!state) {\n throw new Error(\"setId required the element to have a resize detection state.\");\n }\n\n var id = idGenerator.generate();\n\n state.id = id;\n\n return id;\n }\n\n return {\n get: getId,\n set: setId\n };\n};\n","\"use strict\";\n\n/* global console: false */\n\n/**\n * Reporter that handles the reporting of logs, warnings and errors.\n * @public\n * @param {boolean} quiet Tells if the reporter should be quiet or not.\n */\nmodule.exports = function(quiet) {\n function noop() {\n //Does nothing.\n }\n\n var reporter = {\n log: noop,\n warn: noop,\n error: noop\n };\n\n if(!quiet && window.console) {\n var attachFunction = function(reporter, name) {\n //The proxy is needed to be able to call the method with the console context,\n //since we cannot use bind.\n reporter[name] = function reporterProxy() {\n var f = console[name];\n if (f.apply) { //IE9 does not support console.log.apply :)\n f.apply(console, arguments);\n } else {\n for (var i = 0; i < arguments.length; i++) {\n f(arguments[i]);\n }\n }\n };\n };\n\n attachFunction(reporter, \"log\");\n attachFunction(reporter, \"warn\");\n attachFunction(reporter, \"error\");\n }\n\n return reporter;\n};","\"use strict\";\n\nvar detector = module.exports = {};\n\ndetector.isIE = function(version) {\n function isAnyIeVersion() {\n var agent = navigator.userAgent.toLowerCase();\n return agent.indexOf(\"msie\") !== -1 || agent.indexOf(\"trident\") !== -1 || agent.indexOf(\" edge/\") !== -1;\n }\n\n if(!isAnyIeVersion()) {\n return false;\n }\n\n if(!version) {\n return true;\n }\n\n //Shamelessly stolen from https://gist.github.com/padolsey/527683\n var ieVersion = (function(){\n var undef,\n v = 3,\n div = document.createElement(\"div\"),\n all = div.getElementsByTagName(\"i\");\n\n do {\n div.innerHTML = \"\";\n }\n while (all[0]);\n\n return v > 4 ? v : undef;\n }());\n\n return version === ieVersion;\n};\n\ndetector.isLegacyOpera = function() {\n return !!window.opera;\n};\n","\"use strict\";\n\nvar utils = module.exports = {};\n\nutils.getOption = getOption;\n\nfunction getOption(options, name, defaultValue) {\n var value = options[name];\n\n if((value === undefined || value === null) && defaultValue !== undefined) {\n return defaultValue;\n }\n\n return value;\n}\n","/**\n * Resize detection strategy that injects objects to elements in order to detect resize events.\n * Heavily inspired by: http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/\n */\n\n\"use strict\";\n\nvar browserDetector = require(\"../browser-detector\");\n\nmodule.exports = function(options) {\n options = options || {};\n var reporter = options.reporter;\n var batchProcessor = options.batchProcessor;\n var getState = options.stateHandler.getState;\n\n if(!reporter) {\n throw new Error(\"Missing required dependency: reporter.\");\n }\n\n /**\n * Adds a resize event listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.\n */\n function addListener(element, listener) {\n function listenerProxy() {\n listener(element);\n }\n\n if(browserDetector.isIE(8)) {\n //IE 8 does not support object, but supports the resize event directly on elements.\n getState(element).object = {\n proxy: listenerProxy\n };\n element.attachEvent(\"onresize\", listenerProxy);\n } else {\n var object = getObject(element);\n\n if(!object) {\n throw new Error(\"Element is not detectable by this strategy.\");\n }\n\n object.contentDocument.defaultView.addEventListener(\"resize\", listenerProxy);\n }\n }\n\n function buildCssTextString(rules) {\n var seperator = options.important ? \" !important; \" : \"; \";\n\n return (rules.join(seperator) + seperator).trim();\n }\n\n /**\n * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.\n * @private\n * @param {object} options Optional options object.\n * @param {element} element The element to make detectable\n * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.\n */\n function makeDetectable(options, element, callback) {\n if (!callback) {\n callback = element;\n element = options;\n options = null;\n }\n\n options = options || {};\n var debug = options.debug;\n\n function injectObject(element, callback) {\n var OBJECT_STYLE = buildCssTextString([\"display: block\", \"position: absolute\", \"top: 0\", \"left: 0\", \"width: 100%\", \"height: 100%\", \"border: none\", \"padding: 0\", \"margin: 0\", \"opacity: 0\", \"z-index: -1000\", \"pointer-events: none\"]);\n\n //The target element needs to be positioned (everything except static) so the absolute positioned object will be positioned relative to the target element.\n\n // Position altering may be performed directly or on object load, depending on if style resolution is possible directly or not.\n var positionCheckPerformed = false;\n\n // The element may not yet be attached to the DOM, and therefore the style object may be empty in some browsers.\n // Since the style object is a reference, it will be updated as soon as the element is attached to the DOM.\n var style = window.getComputedStyle(element);\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n getState(element).startSize = {\n width: width,\n height: height\n };\n\n function mutateDom() {\n function alterPositionStyles() {\n if(style.position === \"static\") {\n element.style.setProperty(\"position\", \"relative\", options.important ? \"important\" : \"\");\n\n var removeRelativeStyles = function(reporter, element, style, property) {\n function getNumericalValue(value) {\n return value.replace(/[^-\\d\\.]/g, \"\");\n }\n\n var value = style[property];\n\n if(value !== \"auto\" && getNumericalValue(value) !== \"0\") {\n reporter.warn(\"An element that is positioned static has style.\" + property + \"=\" + value + \" which is ignored due to the static positioning. The element will need to be positioned relative, so the style.\" + property + \" will be set to 0. Element: \", element);\n element.style.setProperty(property, \"0\", options.important ? \"important\" : \"\");\n }\n };\n\n //Check so that there are no accidental styles that will make the element styled differently now that is is relative.\n //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).\n removeRelativeStyles(reporter, element, style, \"top\");\n removeRelativeStyles(reporter, element, style, \"right\");\n removeRelativeStyles(reporter, element, style, \"bottom\");\n removeRelativeStyles(reporter, element, style, \"left\");\n }\n }\n\n function onObjectLoad() {\n // The object has been loaded, which means that the element now is guaranteed to be attached to the DOM.\n if (!positionCheckPerformed) {\n alterPositionStyles();\n }\n\n /*jshint validthis: true */\n\n function getDocument(element, callback) {\n //Opera 12 seem to call the object.onload before the actual document has been created.\n //So if it is not present, poll it with an timeout until it is present.\n //TODO: Could maybe be handled better with object.onreadystatechange or similar.\n if(!element.contentDocument) {\n var state = getState(element);\n if (state.checkForObjectDocumentTimeoutId) {\n window.clearTimeout(state.checkForObjectDocumentTimeoutId);\n }\n state.checkForObjectDocumentTimeoutId = setTimeout(function checkForObjectDocument() {\n state.checkForObjectDocumentTimeoutId = 0;\n getDocument(element, callback);\n }, 100);\n\n return;\n }\n\n callback(element.contentDocument);\n }\n\n //Mutating the object element here seems to fire another load event.\n //Mutating the inner document of the object element is fine though.\n var objectElement = this;\n\n //Create the style element to be added to the object.\n getDocument(objectElement, function onObjectDocumentReady(objectDocument) {\n //Notify that the element is ready to be listened to.\n callback(element);\n });\n }\n\n // The element may be detached from the DOM, and some browsers does not support style resolving of detached elements.\n // The alterPositionStyles needs to be delayed until we know the element has been attached to the DOM (which we are sure of when the onObjectLoad has been fired), if style resolution is not possible.\n if (style.position !== \"\") {\n alterPositionStyles(style);\n positionCheckPerformed = true;\n }\n\n //Add an object element as a child to the target element that will be listened to for resize events.\n var object = document.createElement(\"object\");\n object.style.cssText = OBJECT_STYLE;\n object.tabIndex = -1;\n object.type = \"text/html\";\n object.setAttribute(\"aria-hidden\", \"true\");\n object.onload = onObjectLoad;\n\n //Safari: This must occur before adding the object to the DOM.\n //IE: Does not like that this happens before, even if it is also added after.\n if(!browserDetector.isIE()) {\n object.data = \"about:blank\";\n }\n\n if (!getState(element)) {\n // The element has been uninstalled before the actual loading happened.\n return;\n }\n\n element.appendChild(object);\n getState(element).object = object;\n\n //IE: This must occur after adding the object to the DOM.\n if(browserDetector.isIE()) {\n object.data = \"about:blank\";\n }\n }\n\n if(batchProcessor) {\n batchProcessor.add(mutateDom);\n } else {\n mutateDom();\n }\n }\n\n if(browserDetector.isIE(8)) {\n //IE 8 does not support objects properly. Luckily they do support the resize event.\n //So do not inject the object and notify that the element is already ready to be listened to.\n //The event handler for the resize event is attached in the utils.addListener instead.\n callback(element);\n } else {\n injectObject(element, callback);\n }\n }\n\n /**\n * Returns the child object of the target element.\n * @private\n * @param {element} element The target element.\n * @returns The object element of the target.\n */\n function getObject(element) {\n return getState(element).object;\n }\n\n function uninstall(element) {\n if (!getState(element)) {\n return;\n }\n\n var object = getObject(element);\n\n if (!object) {\n return;\n }\n\n if (browserDetector.isIE(8)) {\n element.detachEvent(\"onresize\", object.proxy);\n } else {\n element.removeChild(object);\n }\n\n if (getState(element).checkForObjectDocumentTimeoutId) {\n window.clearTimeout(getState(element).checkForObjectDocumentTimeoutId);\n }\n\n delete getState(element).object;\n }\n\n return {\n makeDetectable: makeDetectable,\n addListener: addListener,\n uninstall: uninstall\n };\n};\n","/**\n * Resize detection strategy that injects divs to elements in order to detect resize events on scroll events.\n * Heavily inspired by: https://github.com/marcj/css-element-queries/blob/master/src/ResizeSensor.js\n */\n\n\"use strict\";\n\nvar forEach = require(\"../collection-utils\").forEach;\n\nmodule.exports = function(options) {\n options = options || {};\n var reporter = options.reporter;\n var batchProcessor = options.batchProcessor;\n var getState = options.stateHandler.getState;\n var hasState = options.stateHandler.hasState;\n var idHandler = options.idHandler;\n\n if (!batchProcessor) {\n throw new Error(\"Missing required dependency: batchProcessor\");\n }\n\n if (!reporter) {\n throw new Error(\"Missing required dependency: reporter.\");\n }\n\n //TODO: Could this perhaps be done at installation time?\n var scrollbarSizes = getScrollbarSizes();\n\n var styleId = \"erd_scroll_detection_scrollbar_style\";\n var detectionContainerClass = \"erd_scroll_detection_container\";\n\n function initDocument(targetDocument) {\n // Inject the scrollbar styling that prevents them from appearing sometimes in Chrome.\n // The injected container needs to have a class, so that it may be styled with CSS (pseudo elements).\n injectScrollStyle(targetDocument, styleId, detectionContainerClass);\n }\n\n initDocument(window.document);\n\n function buildCssTextString(rules) {\n var seperator = options.important ? \" !important; \" : \"; \";\n\n return (rules.join(seperator) + seperator).trim();\n }\n\n function getScrollbarSizes() {\n var width = 500;\n var height = 500;\n\n var child = document.createElement(\"div\");\n child.style.cssText = buildCssTextString([\"position: absolute\", \"width: \" + width*2 + \"px\", \"height: \" + height*2 + \"px\", \"visibility: hidden\", \"margin: 0\", \"padding: 0\"]);\n\n var container = document.createElement(\"div\");\n container.style.cssText = buildCssTextString([\"position: absolute\", \"width: \" + width + \"px\", \"height: \" + height + \"px\", \"overflow: scroll\", \"visibility: none\", \"top: \" + -width*3 + \"px\", \"left: \" + -height*3 + \"px\", \"visibility: hidden\", \"margin: 0\", \"padding: 0\"]);\n\n container.appendChild(child);\n\n document.body.insertBefore(container, document.body.firstChild);\n\n var widthSize = width - container.clientWidth;\n var heightSize = height - container.clientHeight;\n\n document.body.removeChild(container);\n\n return {\n width: widthSize,\n height: heightSize\n };\n }\n\n function injectScrollStyle(targetDocument, styleId, containerClass) {\n function injectStyle(style, method) {\n method = method || function (element) {\n targetDocument.head.appendChild(element);\n };\n\n var styleElement = targetDocument.createElement(\"style\");\n styleElement.innerHTML = style;\n styleElement.id = styleId;\n method(styleElement);\n return styleElement;\n }\n\n if (!targetDocument.getElementById(styleId)) {\n var containerAnimationClass = containerClass + \"_animation\";\n var containerAnimationActiveClass = containerClass + \"_animation_active\";\n var style = \"/* Created by the element-resize-detector library. */\\n\";\n style += \".\" + containerClass + \" > div::-webkit-scrollbar { \" + buildCssTextString([\"display: none\"]) + \" }\\n\\n\";\n style += \".\" + containerAnimationActiveClass + \" { \" + buildCssTextString([\"-webkit-animation-duration: 0.1s\", \"animation-duration: 0.1s\", \"-webkit-animation-name: \" + containerAnimationClass, \"animation-name: \" + containerAnimationClass]) + \" }\\n\";\n style += \"@-webkit-keyframes \" + containerAnimationClass + \" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\\n\";\n style += \"@keyframes \" + containerAnimationClass + \" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\";\n injectStyle(style);\n }\n }\n\n function addAnimationClass(element) {\n element.className += \" \" + detectionContainerClass + \"_animation_active\";\n }\n\n function addEvent(el, name, cb) {\n if (el.addEventListener) {\n el.addEventListener(name, cb);\n } else if(el.attachEvent) {\n el.attachEvent(\"on\" + name, cb);\n } else {\n return reporter.error(\"[scroll] Don't know how to add event listeners.\");\n }\n }\n\n function removeEvent(el, name, cb) {\n if (el.removeEventListener) {\n el.removeEventListener(name, cb);\n } else if(el.detachEvent) {\n el.detachEvent(\"on\" + name, cb);\n } else {\n return reporter.error(\"[scroll] Don't know how to remove event listeners.\");\n }\n }\n\n function getExpandElement(element) {\n return getState(element).container.childNodes[0].childNodes[0].childNodes[0];\n }\n\n function getShrinkElement(element) {\n return getState(element).container.childNodes[0].childNodes[0].childNodes[1];\n }\n\n /**\n * Adds a resize event listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.\n */\n function addListener(element, listener) {\n var listeners = getState(element).listeners;\n\n if (!listeners.push) {\n throw new Error(\"Cannot add listener to an element that is not detectable.\");\n }\n\n getState(element).listeners.push(listener);\n }\n\n /**\n * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.\n * @private\n * @param {object} options Optional options object.\n * @param {element} element The element to make detectable\n * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.\n */\n function makeDetectable(options, element, callback) {\n if (!callback) {\n callback = element;\n element = options;\n options = null;\n }\n\n options = options || {};\n\n function debug() {\n if (options.debug) {\n var args = Array.prototype.slice.call(arguments);\n args.unshift(idHandler.get(element), \"Scroll: \");\n if (reporter.log.apply) {\n reporter.log.apply(null, args);\n } else {\n for (var i = 0; i < args.length; i++) {\n reporter.log(args[i]);\n }\n }\n }\n }\n\n function isDetached(element) {\n function isInDocument(element) {\n return element === element.ownerDocument.body || element.ownerDocument.body.contains(element);\n }\n\n if (!isInDocument(element)) {\n return true;\n }\n\n // FireFox returns null style in hidden iframes. See https://github.com/wnr/element-resize-detector/issues/68 and https://bugzilla.mozilla.org/show_bug.cgi?id=795520\n if (window.getComputedStyle(element) === null) {\n return true;\n }\n\n return false;\n }\n\n function isUnrendered(element) {\n // Check the absolute positioned container since the top level container is display: inline.\n var container = getState(element).container.childNodes[0];\n var style = window.getComputedStyle(container);\n return !style.width || style.width.indexOf(\"px\") === -1; //Can only compute pixel value when rendered.\n }\n\n function getStyle() {\n // Some browsers only force layouts when actually reading the style properties of the style object, so make sure that they are all read here,\n // so that the user of the function can be sure that it will perform the layout here, instead of later (important for batching).\n var elementStyle = window.getComputedStyle(element);\n var style = {};\n style.position = elementStyle.position;\n style.width = element.offsetWidth;\n style.height = element.offsetHeight;\n style.top = elementStyle.top;\n style.right = elementStyle.right;\n style.bottom = elementStyle.bottom;\n style.left = elementStyle.left;\n style.widthCSS = elementStyle.width;\n style.heightCSS = elementStyle.height;\n return style;\n }\n\n function storeStartSize() {\n var style = getStyle();\n getState(element).startSize = {\n width: style.width,\n height: style.height\n };\n debug(\"Element start size\", getState(element).startSize);\n }\n\n function initListeners() {\n getState(element).listeners = [];\n }\n\n function storeStyle() {\n debug(\"storeStyle invoked.\");\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n var style = getStyle();\n getState(element).style = style;\n }\n\n function storeCurrentSize(element, width, height) {\n getState(element).lastWidth = width;\n getState(element).lastHeight = height;\n }\n\n function getExpandChildElement(element) {\n return getExpandElement(element).childNodes[0];\n }\n\n function getWidthOffset() {\n return 2 * scrollbarSizes.width + 1;\n }\n\n function getHeightOffset() {\n return 2 * scrollbarSizes.height + 1;\n }\n\n function getExpandWidth(width) {\n return width + 10 + getWidthOffset();\n }\n\n function getExpandHeight(height) {\n return height + 10 + getHeightOffset();\n }\n\n function getShrinkWidth(width) {\n return width * 2 + getWidthOffset();\n }\n\n function getShrinkHeight(height) {\n return height * 2 + getHeightOffset();\n }\n\n function positionScrollbars(element, width, height) {\n var expand = getExpandElement(element);\n var shrink = getShrinkElement(element);\n var expandWidth = getExpandWidth(width);\n var expandHeight = getExpandHeight(height);\n var shrinkWidth = getShrinkWidth(width);\n var shrinkHeight = getShrinkHeight(height);\n expand.scrollLeft = expandWidth;\n expand.scrollTop = expandHeight;\n shrink.scrollLeft = shrinkWidth;\n shrink.scrollTop = shrinkHeight;\n }\n\n function injectContainerElement() {\n var container = getState(element).container;\n\n if (!container) {\n container = document.createElement(\"div\");\n container.className = detectionContainerClass;\n container.style.cssText = buildCssTextString([\"visibility: hidden\", \"display: inline\", \"width: 0px\", \"height: 0px\", \"z-index: -1\", \"overflow: hidden\", \"margin: 0\", \"padding: 0\"]);\n getState(element).container = container;\n addAnimationClass(container);\n element.appendChild(container);\n\n var onAnimationStart = function () {\n getState(element).onRendered && getState(element).onRendered();\n };\n\n addEvent(container, \"animationstart\", onAnimationStart);\n\n // Store the event handler here so that they may be removed when uninstall is called.\n // See uninstall function for an explanation why it is needed.\n getState(element).onAnimationStart = onAnimationStart;\n }\n\n return container;\n }\n\n function injectScrollElements() {\n function alterPositionStyles() {\n var style = getState(element).style;\n\n if(style.position === \"static\") {\n element.style.setProperty(\"position\", \"relative\",options.important ? \"important\" : \"\");\n\n var removeRelativeStyles = function(reporter, element, style, property) {\n function getNumericalValue(value) {\n return value.replace(/[^-\\d\\.]/g, \"\");\n }\n\n var value = style[property];\n\n if(value !== \"auto\" && getNumericalValue(value) !== \"0\") {\n reporter.warn(\"An element that is positioned static has style.\" + property + \"=\" + value + \" which is ignored due to the static positioning. The element will need to be positioned relative, so the style.\" + property + \" will be set to 0. Element: \", element);\n element.style[property] = 0;\n }\n };\n\n //Check so that there are no accidental styles that will make the element styled differently now that is is relative.\n //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).\n removeRelativeStyles(reporter, element, style, \"top\");\n removeRelativeStyles(reporter, element, style, \"right\");\n removeRelativeStyles(reporter, element, style, \"bottom\");\n removeRelativeStyles(reporter, element, style, \"left\");\n }\n }\n\n function getLeftTopBottomRightCssText(left, top, bottom, right) {\n left = (!left ? \"0\" : (left + \"px\"));\n top = (!top ? \"0\" : (top + \"px\"));\n bottom = (!bottom ? \"0\" : (bottom + \"px\"));\n right = (!right ? \"0\" : (right + \"px\"));\n\n return [\"left: \" + left, \"top: \" + top, \"right: \" + right, \"bottom: \" + bottom];\n }\n\n debug(\"Injecting elements\");\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n alterPositionStyles();\n\n var rootContainer = getState(element).container;\n\n if (!rootContainer) {\n rootContainer = injectContainerElement();\n }\n\n // Due to this WebKit bug https://bugs.webkit.org/show_bug.cgi?id=80808 (currently fixed in Blink, but still present in WebKit browsers such as Safari),\n // we need to inject two containers, one that is width/height 100% and another that is left/top -1px so that the final container always is 1x1 pixels bigger than\n // the targeted element.\n // When the bug is resolved, \"containerContainer\" may be removed.\n\n // The outer container can occasionally be less wide than the targeted when inside inline elements element in WebKit (see https://bugs.webkit.org/show_bug.cgi?id=152980).\n // This should be no problem since the inner container either way makes sure the injected scroll elements are at least 1x1 px.\n\n var scrollbarWidth = scrollbarSizes.width;\n var scrollbarHeight = scrollbarSizes.height;\n var containerContainerStyle = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: hidden\", \"z-index: -1\", \"visibility: hidden\", \"width: 100%\", \"height: 100%\", \"left: 0px\", \"top: 0px\"]);\n var containerStyle = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: hidden\", \"z-index: -1\", \"visibility: hidden\"].concat(getLeftTopBottomRightCssText(-(1 + scrollbarWidth), -(1 + scrollbarHeight), -scrollbarHeight, -scrollbarWidth)));\n var expandStyle = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: scroll\", \"z-index: -1\", \"visibility: hidden\", \"width: 100%\", \"height: 100%\"]);\n var shrinkStyle = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: scroll\", \"z-index: -1\", \"visibility: hidden\", \"width: 100%\", \"height: 100%\"]);\n var expandChildStyle = buildCssTextString([\"position: absolute\", \"left: 0\", \"top: 0\"]);\n var shrinkChildStyle = buildCssTextString([\"position: absolute\", \"width: 200%\", \"height: 200%\"]);\n\n var containerContainer = document.createElement(\"div\");\n var container = document.createElement(\"div\");\n var expand = document.createElement(\"div\");\n var expandChild = document.createElement(\"div\");\n var shrink = document.createElement(\"div\");\n var shrinkChild = document.createElement(\"div\");\n\n // Some browsers choke on the resize system being rtl, so force it to ltr. https://github.com/wnr/element-resize-detector/issues/56\n // However, dir should not be set on the top level container as it alters the dimensions of the target element in some browsers.\n containerContainer.dir = \"ltr\";\n\n containerContainer.style.cssText = containerContainerStyle;\n containerContainer.className = detectionContainerClass;\n container.className = detectionContainerClass;\n container.style.cssText = containerStyle;\n expand.style.cssText = expandStyle;\n expandChild.style.cssText = expandChildStyle;\n shrink.style.cssText = shrinkStyle;\n shrinkChild.style.cssText = shrinkChildStyle;\n\n expand.appendChild(expandChild);\n shrink.appendChild(shrinkChild);\n container.appendChild(expand);\n container.appendChild(shrink);\n containerContainer.appendChild(container);\n rootContainer.appendChild(containerContainer);\n\n function onExpandScroll() {\n getState(element).onExpand && getState(element).onExpand();\n }\n\n function onShrinkScroll() {\n getState(element).onShrink && getState(element).onShrink();\n }\n\n addEvent(expand, \"scroll\", onExpandScroll);\n addEvent(shrink, \"scroll\", onShrinkScroll);\n\n // Store the event handlers here so that they may be removed when uninstall is called.\n // See uninstall function for an explanation why it is needed.\n getState(element).onExpandScroll = onExpandScroll;\n getState(element).onShrinkScroll = onShrinkScroll;\n }\n\n function registerListenersAndPositionElements() {\n function updateChildSizes(element, width, height) {\n var expandChild = getExpandChildElement(element);\n var expandWidth = getExpandWidth(width);\n var expandHeight = getExpandHeight(height);\n expandChild.style.setProperty(\"width\", expandWidth + \"px\", options.important ? \"important\" : \"\");\n expandChild.style.setProperty(\"height\", expandHeight + \"px\", options.important ? \"important\" : \"\");\n }\n\n function updateDetectorElements(done) {\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n // Check whether the size has actually changed since last time the algorithm ran. If not, some steps may be skipped.\n var sizeChanged = width !== getState(element).lastWidth || height !== getState(element).lastHeight;\n\n debug(\"Storing current size\", width, height);\n\n // Store the size of the element sync here, so that multiple scroll events may be ignored in the event listeners.\n // Otherwise the if-check in handleScroll is useless.\n storeCurrentSize(element, width, height);\n\n // Since we delay the processing of the batch, there is a risk that uninstall has been called before the batch gets to execute.\n // Since there is no way to cancel the fn executions, we need to add an uninstall guard to all fns of the batch.\n\n batchProcessor.add(0, function performUpdateChildSizes() {\n if (!sizeChanged) {\n return;\n }\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n if (!areElementsInjected()) {\n debug(\"Aborting because element container has not been initialized\");\n return;\n }\n\n if (options.debug) {\n var w = element.offsetWidth;\n var h = element.offsetHeight;\n\n if (w !== width || h !== height) {\n reporter.warn(idHandler.get(element), \"Scroll: Size changed before updating detector elements.\");\n }\n }\n\n updateChildSizes(element, width, height);\n });\n\n batchProcessor.add(1, function updateScrollbars() {\n // This function needs to be invoked event though the size is unchanged. The element could have been resized very quickly and then\n // been restored to the original size, which will have changed the scrollbar positions.\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n if (!areElementsInjected()) {\n debug(\"Aborting because element container has not been initialized\");\n return;\n }\n\n positionScrollbars(element, width, height);\n });\n\n if (sizeChanged && done) {\n batchProcessor.add(2, function () {\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n if (!areElementsInjected()) {\n debug(\"Aborting because element container has not been initialized\");\n return;\n }\n\n done();\n });\n }\n }\n\n function areElementsInjected() {\n return !!getState(element).container;\n }\n\n function notifyListenersIfNeeded() {\n function isFirstNotify() {\n return getState(element).lastNotifiedWidth === undefined;\n }\n\n debug(\"notifyListenersIfNeeded invoked\");\n\n var state = getState(element);\n\n // Don't notify if the current size is the start size, and this is the first notification.\n if (isFirstNotify() && state.lastWidth === state.startSize.width && state.lastHeight === state.startSize.height) {\n return debug(\"Not notifying: Size is the same as the start size, and there has been no notification yet.\");\n }\n\n // Don't notify if the size already has been notified.\n if (state.lastWidth === state.lastNotifiedWidth && state.lastHeight === state.lastNotifiedHeight) {\n return debug(\"Not notifying: Size already notified\");\n }\n\n\n debug(\"Current size not notified, notifying...\");\n state.lastNotifiedWidth = state.lastWidth;\n state.lastNotifiedHeight = state.lastHeight;\n forEach(getState(element).listeners, function (listener) {\n listener(element);\n });\n }\n\n function handleRender() {\n debug(\"startanimation triggered.\");\n\n if (isUnrendered(element)) {\n debug(\"Ignoring since element is still unrendered...\");\n return;\n }\n\n debug(\"Element rendered.\");\n var expand = getExpandElement(element);\n var shrink = getShrinkElement(element);\n if (expand.scrollLeft === 0 || expand.scrollTop === 0 || shrink.scrollLeft === 0 || shrink.scrollTop === 0) {\n debug(\"Scrollbars out of sync. Updating detector elements...\");\n updateDetectorElements(notifyListenersIfNeeded);\n }\n }\n\n function handleScroll() {\n debug(\"Scroll detected.\");\n\n if (isUnrendered(element)) {\n // Element is still unrendered. Skip this scroll event.\n debug(\"Scroll event fired while unrendered. Ignoring...\");\n return;\n }\n\n updateDetectorElements(notifyListenersIfNeeded);\n }\n\n debug(\"registerListenersAndPositionElements invoked.\");\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n getState(element).onRendered = handleRender;\n getState(element).onExpand = handleScroll;\n getState(element).onShrink = handleScroll;\n\n var style = getState(element).style;\n updateChildSizes(element, style.width, style.height);\n }\n\n function finalizeDomMutation() {\n debug(\"finalizeDomMutation invoked.\");\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n var style = getState(element).style;\n storeCurrentSize(element, style.width, style.height);\n positionScrollbars(element, style.width, style.height);\n }\n\n function ready() {\n callback(element);\n }\n\n function install() {\n debug(\"Installing...\");\n initListeners();\n storeStartSize();\n\n batchProcessor.add(0, storeStyle);\n batchProcessor.add(1, injectScrollElements);\n batchProcessor.add(2, registerListenersAndPositionElements);\n batchProcessor.add(3, finalizeDomMutation);\n batchProcessor.add(4, ready);\n }\n\n debug(\"Making detectable...\");\n\n if (isDetached(element)) {\n debug(\"Element is detached\");\n\n injectContainerElement();\n\n debug(\"Waiting until element is attached...\");\n\n getState(element).onRendered = function () {\n debug(\"Element is now attached\");\n install();\n };\n } else {\n install();\n }\n }\n\n function uninstall(element) {\n var state = getState(element);\n\n if (!state) {\n // Uninstall has been called on a non-erd element.\n return;\n }\n\n // Uninstall may have been called in the following scenarios:\n // (1) Right between the sync code and async batch (here state.busy = true, but nothing have been registered or injected).\n // (2) In the ready callback of the last level of the batch by another element (here, state.busy = true, but all the stuff has been injected).\n // (3) After the installation process (here, state.busy = false and all the stuff has been injected).\n // So to be on the safe side, let's check for each thing before removing.\n\n // We need to remove the event listeners, because otherwise the event might fire on an uninstall element which results in an error when trying to get the state of the element.\n state.onExpandScroll && removeEvent(getExpandElement(element), \"scroll\", state.onExpandScroll);\n state.onShrinkScroll && removeEvent(getShrinkElement(element), \"scroll\", state.onShrinkScroll);\n state.onAnimationStart && removeEvent(state.container, \"animationstart\", state.onAnimationStart);\n\n state.container && element.removeChild(state.container);\n }\n\n return {\n makeDetectable: makeDetectable,\n addListener: addListener,\n uninstall: uninstall,\n initDocument: initDocument\n };\n};\n","// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\n","(function() {\n var isEqual, isPlainObject, macModifierKeyMap, nonMacModifierKeyMap, plus, shiftKeyMap, splitKeyPath, _,\n __slice = [].slice;\n\n _ = require('underscore');\n\n macModifierKeyMap = {\n cmd: '\\u2318',\n ctrl: '\\u2303',\n alt: '\\u2325',\n option: '\\u2325',\n shift: '\\u21e7',\n enter: '\\u23ce',\n left: '\\u2190',\n right: '\\u2192',\n up: '\\u2191',\n down: '\\u2193'\n };\n\n nonMacModifierKeyMap = {\n cmd: 'Cmd',\n ctrl: 'Ctrl',\n alt: 'Alt',\n option: 'Alt',\n shift: 'Shift',\n enter: 'Enter',\n left: 'Left',\n right: 'Right',\n up: 'Up',\n down: 'Down'\n };\n\n shiftKeyMap = {\n '~': '`',\n '_': '-',\n '+': '=',\n '|': '\\\\',\n '{': '[',\n '}': ']',\n ':': ';',\n '\"': '\\'',\n '<': ',',\n '>': '.',\n '?': '/'\n };\n\n splitKeyPath = function(keyPath) {\n var char, i, keyPathArray, startIndex, _i, _len;\n startIndex = 0;\n keyPathArray = [];\n if (keyPath == null) {\n return keyPathArray;\n }\n for (i = _i = 0, _len = keyPath.length; _i < _len; i = ++_i) {\n char = keyPath[i];\n if (char === '.' && (i === 0 || keyPath[i - 1] !== '\\\\')) {\n keyPathArray.push(keyPath.substring(startIndex, i));\n startIndex = i + 1;\n }\n }\n keyPathArray.push(keyPath.substr(startIndex, keyPath.length));\n return keyPathArray;\n };\n\n isPlainObject = function(value) {\n return _.isObject(value) && !_.isArray(value);\n };\n\n plus = {\n adviseBefore: function(object, methodName, advice) {\n var original;\n original = object[methodName];\n return object[methodName] = function() {\n var args;\n args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n if (advice.apply(this, args) !== false) {\n return original.apply(this, args);\n }\n };\n },\n camelize: function(string) {\n if (string) {\n return string.replace(/[_-]+(\\w)/g, function(m) {\n return m[1].toUpperCase();\n });\n } else {\n return '';\n }\n },\n capitalize: function(word) {\n if (!word) {\n return '';\n }\n if (word.toLowerCase() === 'github') {\n return 'GitHub';\n } else {\n return word[0].toUpperCase() + word.slice(1);\n }\n },\n compactObject: function(object) {\n var key, newObject, value;\n newObject = {};\n for (key in object) {\n value = object[key];\n if (value != null) {\n newObject[key] = value;\n }\n }\n return newObject;\n },\n dasherize: function(string) {\n if (!string) {\n return '';\n }\n string = string[0].toLowerCase() + string.slice(1);\n return string.replace(/([A-Z])|(_)/g, function(m, letter) {\n if (letter) {\n return \"-\" + letter.toLowerCase();\n } else {\n return \"-\";\n }\n });\n },\n deepClone: function(object) {\n if (_.isArray(object)) {\n return object.map(function(value) {\n return plus.deepClone(value);\n });\n } else if (_.isObject(object) && !_.isFunction(object)) {\n return plus.mapObject(object, (function(_this) {\n return function(key, value) {\n return [key, plus.deepClone(value)];\n };\n })(this));\n } else {\n return object;\n }\n },\n deepExtend: function(target) {\n var i, key, object, result, _i, _len, _ref;\n result = target;\n i = 0;\n while (++i < arguments.length) {\n object = arguments[i];\n if (isPlainObject(result) && isPlainObject(object)) {\n _ref = Object.keys(object);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n key = _ref[_i];\n result[key] = plus.deepExtend(result[key], object[key]);\n }\n } else {\n result = plus.deepClone(object);\n }\n }\n return result;\n },\n deepContains: function(array, target) {\n var object, _i, _len;\n if (array == null) {\n return false;\n }\n for (_i = 0, _len = array.length; _i < _len; _i++) {\n object = array[_i];\n if (_.isEqual(object, target)) {\n return true;\n }\n }\n return false;\n },\n endsWith: function(string, suffix) {\n if (suffix == null) {\n suffix = '';\n }\n if (string) {\n return string.indexOf(suffix, string.length - suffix.length) !== -1;\n } else {\n return false;\n }\n },\n escapeAttribute: function(string) {\n if (string) {\n return string.replace(/\"/g, '"').replace(/\\n/g, '').replace(/\\\\/g, '-');\n } else {\n return '';\n }\n },\n escapeRegExp: function(string) {\n if (string) {\n return string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n } else {\n return '';\n }\n },\n humanizeEventName: function(eventName, eventDoc) {\n var event, namespace, namespaceDoc, _ref;\n _ref = eventName.split(':'), namespace = _ref[0], event = _ref[1];\n if (event == null) {\n return plus.undasherize(namespace);\n }\n namespaceDoc = plus.undasherize(namespace);\n if (eventDoc == null) {\n eventDoc = plus.undasherize(event);\n }\n return \"\" + namespaceDoc + \": \" + eventDoc;\n },\n humanizeKey: function(key, platform) {\n var modifierKeyMap;\n if (platform == null) {\n platform = process.platform;\n }\n if (!key) {\n return key;\n }\n modifierKeyMap = platform === 'darwin' ? macModifierKeyMap : nonMacModifierKeyMap;\n if (modifierKeyMap[key]) {\n return modifierKeyMap[key];\n } else if (key.length === 1 && (shiftKeyMap[key] != null)) {\n return [modifierKeyMap.shift, shiftKeyMap[key]];\n } else if (key.length === 1 && key === key.toUpperCase() && key.toUpperCase() !== key.toLowerCase()) {\n return [modifierKeyMap.shift, key.toUpperCase()];\n } else if (key.length === 1 || /f[0-9]{1,2}/.test(key)) {\n return key.toUpperCase();\n } else {\n if (platform === 'darwin') {\n return key;\n } else {\n return plus.capitalize(key);\n }\n }\n },\n humanizeKeystroke: function(keystroke, platform) {\n var humanizedKeystrokes, index, key, keys, keystrokes, splitKeystroke, _i, _j, _len, _len1;\n if (platform == null) {\n platform = process.platform;\n }\n if (!keystroke) {\n return keystroke;\n }\n keystrokes = keystroke.split(' ');\n humanizedKeystrokes = [];\n for (_i = 0, _len = keystrokes.length; _i < _len; _i++) {\n keystroke = keystrokes[_i];\n keys = [];\n splitKeystroke = keystroke.split('-');\n for (index = _j = 0, _len1 = splitKeystroke.length; _j < _len1; index = ++_j) {\n key = splitKeystroke[index];\n if (key === '' && splitKeystroke[index - 1] === '') {\n key = '-';\n }\n if (key) {\n keys.push(plus.humanizeKey(key, platform));\n }\n }\n keys = _.uniq(_.flatten(keys));\n if (platform === 'darwin') {\n keys = keys.join('');\n } else {\n keys = keys.join('+');\n }\n humanizedKeystrokes.push(keys);\n }\n return humanizedKeystrokes.join(' ');\n },\n isSubset: function(potentialSubset, potentialSuperset) {\n return _.every(potentialSubset, function(element) {\n return _.include(potentialSuperset, element);\n });\n },\n losslessInvert: function(hash) {\n var inverted, key, value;\n inverted = {};\n for (key in hash) {\n value = hash[key];\n if (inverted[value] == null) {\n inverted[value] = [];\n }\n inverted[value].push(key);\n }\n return inverted;\n },\n mapObject: function(object, iterator) {\n var key, newObject, value, _i, _len, _ref, _ref1;\n newObject = {};\n _ref = Object.keys(object);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n key = _ref[_i];\n _ref1 = iterator(key, object[key]), key = _ref1[0], value = _ref1[1];\n newObject[key] = value;\n }\n return newObject;\n },\n multiplyString: function(string, n) {\n var finalString, i;\n finalString = \"\";\n i = 0;\n while (i < n) {\n finalString += string;\n i++;\n }\n return finalString;\n },\n pluralize: function(count, singular, plural) {\n if (count == null) {\n count = 0;\n }\n if (plural == null) {\n plural = singular + 's';\n }\n if (count === 1) {\n return \"\" + count + \" \" + singular;\n } else {\n return \"\" + count + \" \" + plural;\n }\n },\n remove: function(array, element) {\n var index;\n index = array.indexOf(element);\n if (index >= 0) {\n array.splice(index, 1);\n }\n return array;\n },\n setValueForKeyPath: function(object, keyPath, value) {\n var key, keys;\n keys = splitKeyPath(keyPath);\n while (keys.length > 1) {\n key = keys.shift();\n if (object[key] == null) {\n object[key] = {};\n }\n object = object[key];\n }\n if (value != null) {\n return object[keys.shift()] = value;\n } else {\n return delete object[keys.shift()];\n }\n },\n hasKeyPath: function(object, keyPath) {\n var key, keys, _i, _len;\n keys = splitKeyPath(keyPath);\n for (_i = 0, _len = keys.length; _i < _len; _i++) {\n key = keys[_i];\n if (!object.hasOwnProperty(key)) {\n return false;\n }\n object = object[key];\n }\n return true;\n },\n spliceWithArray: function(originalArray, start, length, insertedArray, chunkSize) {\n var chunkStart, _i, _ref, _results;\n if (chunkSize == null) {\n chunkSize = 100000;\n }\n if (insertedArray.length < chunkSize) {\n return originalArray.splice.apply(originalArray, [start, length].concat(__slice.call(insertedArray)));\n } else {\n originalArray.splice(start, length);\n _results = [];\n for (chunkStart = _i = 0, _ref = insertedArray.length; chunkSize > 0 ? _i <= _ref : _i >= _ref; chunkStart = _i += chunkSize) {\n _results.push(originalArray.splice.apply(originalArray, [start + chunkStart, 0].concat(__slice.call(insertedArray.slice(chunkStart, chunkStart + chunkSize)))));\n }\n return _results;\n }\n },\n sum: function(array) {\n var elt, sum, _i, _len;\n sum = 0;\n for (_i = 0, _len = array.length; _i < _len; _i++) {\n elt = array[_i];\n sum += elt;\n }\n return sum;\n },\n uncamelcase: function(string) {\n var result;\n if (!string) {\n return '';\n }\n result = string.replace(/([A-Z])|_+/g, function(match, letter) {\n if (letter == null) {\n letter = '';\n }\n return \" \" + letter;\n });\n return plus.capitalize(result.trim());\n },\n undasherize: function(string) {\n if (string) {\n return string.split('-').map(plus.capitalize).join(' ');\n } else {\n return '';\n }\n },\n underscore: function(string) {\n if (!string) {\n return '';\n }\n string = string[0].toLowerCase() + string.slice(1);\n return string.replace(/([A-Z])|-+/g, function(match, letter) {\n if (letter == null) {\n letter = '';\n }\n return \"_\" + (letter.toLowerCase());\n });\n },\n valueForKeyPath: function(object, keyPath) {\n var key, keys, _i, _len;\n keys = splitKeyPath(keyPath);\n for (_i = 0, _len = keys.length; _i < _len; _i++) {\n key = keys[_i];\n object = object[key];\n if (object == null) {\n return;\n }\n }\n return object;\n },\n isEqual: function(a, b, aStack, bStack) {\n if (_.isArray(aStack) && _.isArray(bStack)) {\n return isEqual(a, b, aStack, bStack);\n } else {\n return isEqual(a, b);\n }\n },\n isEqualForProperties: function() {\n var a, b, properties, property, _i, _len;\n a = arguments[0], b = arguments[1], properties = 3 <= arguments.length ? __slice.call(arguments, 2) : [];\n for (_i = 0, _len = properties.length; _i < _len; _i++) {\n property = properties[_i];\n if (!_.isEqual(a[property], b[property])) {\n return false;\n }\n }\n return true;\n }\n };\n\n isEqual = function(a, b, aStack, bStack) {\n var aCtor, aCtorValid, aElement, aKeyCount, aValue, bCtor, bCtorValid, bKeyCount, bValue, equal, i, key, stackIndex, _i, _len;\n if (aStack == null) {\n aStack = [];\n }\n if (bStack == null) {\n bStack = [];\n }\n if (a === b) {\n return _.isEqual(a, b);\n }\n if (_.isFunction(a) || _.isFunction(b)) {\n return _.isEqual(a, b);\n }\n stackIndex = aStack.length;\n while (stackIndex--) {\n if (aStack[stackIndex] === a) {\n return bStack[stackIndex] === b;\n }\n }\n aStack.push(a);\n bStack.push(b);\n equal = false;\n if (_.isFunction(a != null ? a.isEqual : void 0)) {\n equal = a.isEqual(b, aStack, bStack);\n } else if (_.isFunction(b != null ? b.isEqual : void 0)) {\n equal = b.isEqual(a, bStack, aStack);\n } else if (_.isArray(a) && _.isArray(b) && a.length === b.length) {\n equal = true;\n for (i = _i = 0, _len = a.length; _i < _len; i = ++_i) {\n aElement = a[i];\n if (!isEqual(aElement, b[i], aStack, bStack)) {\n equal = false;\n break;\n }\n }\n } else if (_.isRegExp(a) && _.isRegExp(b)) {\n equal = _.isEqual(a, b);\n } else if (_.isElement(a) && _.isElement(b)) {\n equal = a === b;\n } else if (_.isObject(a) && _.isObject(b)) {\n aCtor = a.constructor;\n bCtor = b.constructor;\n aCtorValid = _.isFunction(aCtor) && aCtor instanceof aCtor;\n bCtorValid = _.isFunction(bCtor) && bCtor instanceof bCtor;\n if (aCtor !== bCtor && !(aCtorValid && bCtorValid)) {\n equal = false;\n } else {\n aKeyCount = 0;\n equal = true;\n for (key in a) {\n aValue = a[key];\n if (!_.has(a, key)) {\n continue;\n }\n aKeyCount++;\n if (!(_.has(b, key) && isEqual(aValue, b[key], aStack, bStack))) {\n equal = false;\n break;\n }\n }\n if (equal) {\n bKeyCount = 0;\n for (key in b) {\n bValue = b[key];\n if (_.has(b, key)) {\n bKeyCount++;\n }\n }\n equal = aKeyCount === bKeyCount;\n }\n }\n } else {\n equal = _.isEqual(a, b);\n }\n aStack.pop();\n bStack.pop();\n return equal;\n };\n\n module.exports = _.extend({}, _, plus);\n\n}).call(this);\n","'use babel'\n'use strict'\n\n/**\n * @access private\n */\nexport default class CanvasLayer {\n constructor () {\n /**\n * The onscreen canvas.\n * @type {HTMLCanvasElement}\n */\n this.canvas = document.createElement('canvas')\n\n const desynchronized = process.platform !== 'linux'\n\n /**\n * The onscreen canvas context.\n * @type {CanvasRenderingContext2D}\n */\n this.context = this.canvas.getContext('2d', { desynchronized })\n this.canvas.webkitImageSmoothingEnabled = false\n this.context.imageSmoothingEnabled = false\n\n /**\n * The offscreen canvas.\n * @type {HTMLCanvasElement}\n * @access private\n */\n this.offscreenCanvas = document.createElement('canvas')\n /**\n * The offscreen canvas context.\n * @type {CanvasRenderingContext2D}\n * @access private\n */\n this.offscreenContext = this.offscreenCanvas.getContext('2d', { desynchronized })\n this.offscreenCanvas.webkitImageSmoothingEnabled = false\n this.offscreenContext.imageSmoothingEnabled = false\n }\n\n attach (parent) {\n if (this.canvas.parentNode) { return }\n\n parent.appendChild(this.canvas)\n }\n\n setSize (width = 0, height = 0) {\n this.canvas.width = width\n this.canvas.height = height\n this.context.imageSmoothingEnabled = false\n this.resetOffscreenSize()\n }\n\n getSize () {\n return {\n width: this.canvas.width,\n height: this.canvas.height\n }\n }\n\n resetOffscreenSize () {\n this.offscreenCanvas.width = this.canvas.width\n this.offscreenCanvas.height = this.canvas.height\n this.offscreenContext.imageSmoothingEnabled = false\n }\n\n copyToOffscreen () {\n if (this.canvas.width > 0 && this.canvas.height > 0) {\n this.offscreenContext.drawImage(this.canvas, 0, 0)\n }\n }\n\n copyFromOffscreen () {\n if (this.offscreenCanvas.width > 0 && this.offscreenCanvas.height > 0) {\n this.context.drawImage(this.offscreenCanvas, 0, 0)\n }\n }\n\n copyPartFromOffscreen (srcY, destY, height) {\n if (this.offscreenCanvas.width > 0 && this.offscreenCanvas.height > 0) {\n this.context.drawImage(\n this.offscreenCanvas,\n 0, srcY, this.offscreenCanvas.width, height,\n 0, destY, this.offscreenCanvas.width, height\n )\n }\n }\n\n clearCanvas () {\n this.context.clearRect(0, 0, this.canvas.width, this.canvas.height)\n }\n}\n","'use strict'\n\n/**\n * This class is used by the `CanvasDrawer` in `MinimapElement` to\n * read the styles informations from the DOM to use when rendering\n * the `Minimap`.\n */\nexport default class DOMStylesReader {\n constructor () {\n /**\n * The cache object\n * @access private\n */\n this.domStylesCache = new Map()\n\n /**\n * Set to true once tokenized\n * @access private\n * unused\n */\n // this.hasTokenizedOnce = false\n }\n\n /**\n * Returns the computed values for the given property and scope in the DOM.\n *\n * This function insert a dummy element in the DOM to compute\n * its style, return the specified property, and clear the content of the\n * dummy element.\n *\n * @param {Array} scopes a list of classes reprensenting the scope\n * to build\n * @param {string} property the name of the style property to compute\n * @param {Node} targetNode\n * @param {boolean} [cache=true] whether to cache the computed value or not\n * @return {string} the computed property's value\n * used in CanvasDrawer\n */\n retrieveStyleFromDom (scopes, property, targetNode, cache = true) {\n const key = scopes.join(' ')\n let cachedData = this.domStylesCache.get(key)\n\n if (cache && cachedData !== undefined) {\n const value = cachedData[property]\n if (value != null) {\n return value\n }\n }\n\n this.ensureDummyNodeExistence(targetNode)\n\n if (cachedData === undefined) {\n cachedData = {}\n this.domStylesCache.set(key, cachedData)\n }\n\n let parent = this.dummyNode\n for (let i = 0, len = scopes.length; i < len; i++) {\n const scope = scopes[i]\n const node = document.createElement('span')\n node.className = scope.replace(/\\.+/g, ' ')\n\n if (parent != null) { parent.appendChild(node) }\n\n parent = node\n }\n\n const style = window.getComputedStyle(parent)\n const filter = style.getPropertyValue('-webkit-filter')\n let value = style.getPropertyValue(property)\n\n if (filter.indexOf('hue-rotate') > -1) {\n value = rotateHue(value, filter)\n }\n\n if (value !== '') {\n cachedData[property] = value\n this.domStylesCache.set(key, cachedData)\n }\n\n this.dummyNode.innerHTML = ''\n return value\n }\n\n /**\n * Creates a DOM node container for all the operations that need to read\n * styles properties from DOM.\n * @param {Node} targetNode\n *\n * @access private\n */\n ensureDummyNodeExistence (targetNode) {\n if (this.dummyNode == null) {\n /**\n * @access private\n */\n this.dummyNode = document.createElement('span')\n this.dummyNode.style.visibility = 'hidden'\n }\n\n targetNode.appendChild(this.dummyNode)\n }\n\n /**\n * Invalidates the cache by emptying the cache object.\n * used in MinimapElement\n */\n invalidateDOMStylesCache () {\n this.domStylesCache.clear()\n }\n\n /**\n * Invalidates the cache only for the first tokenization event.\n *\n * @access private\n * unused\n */\n /*\n invalidateIfFirstTokenization () {\n if (this.hasTokenizedOnce) { return }\n this.invalidateDOMStylesCache()\n this.hasTokenizedOnce = true\n }\n */\n}\n\n// ## ## ######## ## ######## ######## ######## ######\n// ## ## ## ## ## ## ## ## ## ## ##\n// ## ## ## ## ## ## ## ## ## ##\n// ######### ###### ## ######## ###### ######## ######\n// ## ## ## ## ## ## ## ## ##\n// ## ## ## ## ## ## ## ## ## ##\n// ## ## ######## ######## ## ######## ## ## ######\n\n/**\n * Computes the output color of `value` with a rotated hue defined\n * in `filter`.\n *\n * @param {string} value the CSS color to apply the rotation on\n * @param {string} filter the CSS hue rotate filter declaration\n * @return {string} the rotated CSS color\n * @access private\n */\nfunction rotateHue (value, filter) {\n const match = value.match(/rgb(a?)\\((\\d+), (\\d+), (\\d+)(, (\\d+(\\.\\d+)?))?\\)/)\n let [, , r, g, b, , a] = match\n\n let [, hue] = filter.match(/hue-rotate\\((\\d+)deg\\)/)\n\n ;[r, g, b, a, hue] = [r, g, b, a, hue].map(Number)\n ;[r, g, b] = rotate(r, g, b, hue)\n\n if (isNaN(a)) {\n return `rgb(${r}, ${g}, ${b})`\n } else {\n return `rgba(${r}, ${g}, ${b}, ${a})`\n }\n}\n\n/**\n * Computes the hue rotation on the provided `r`, `g` and `b` channels\n * by the amount of `angle`.\n *\n * @param {number} r the red channel of the color to rotate\n * @param {number} g the green channel of the color to rotate\n * @param {number} b the blue channel of the color to rotate\n * @param {number} angle the angle to rotate the hue with\n * @return {Array} the rotated color channels\n * @access private\n */\nfunction rotate (r, g, b, angle) {\n const matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]\n const lumR = 0.2126\n const lumG = 0.7152\n const lumB = 0.0722\n const hueRotateR = 0.143\n const hueRotateG = 0.140\n const hueRotateB = 0.283\n const cos = Math.cos(angle * Math.PI / 180)\n const sin = Math.sin(angle * Math.PI / 180)\n\n matrix[0] = lumR + (1 - lumR) * cos - (lumR * sin)\n matrix[1] = lumG - (lumG * cos) - (lumG * sin)\n matrix[2] = lumB - (lumB * cos) + (1 - lumB) * sin\n matrix[3] = lumR - (lumR * cos) + hueRotateR * sin\n matrix[4] = lumG + (1 - lumG) * cos + hueRotateG * sin\n matrix[5] = lumB - (lumB * cos) - (hueRotateB * sin)\n matrix[6] = lumR - (lumR * cos) - ((1 - lumR) * sin)\n matrix[7] = lumG - (lumG * cos) + lumG * sin\n matrix[8] = lumB + (1 - lumB) * cos + lumB * sin\n\n return [\n clamp(matrix[0] * r + matrix[1] * g + matrix[2] * b),\n clamp(matrix[3] * r + matrix[4] * g + matrix[5] * b),\n clamp(matrix[6] * r + matrix[7] * g + matrix[8] * b)\n ]\n\n function clamp (num) {\n return Math.ceil(Math.max(0, Math.min(255, num)))\n }\n}\n","'use strict'\n\nimport { CompositeDisposable, Emitter } from 'atom'\nimport { EventsDelegation, SpacePenDSL } from 'atom-utils-plus'\n\nimport * as Main from './main'\nimport element from './decorators/element'\nimport include from './decorators/include'\n\n/**\n * @access private\n */\nclass MinimapQuickSettingsElement {\n static initClass () {\n include(this, EventsDelegation, SpacePenDSL.Babel)\n return element(this, 'minimap-quick-settings')\n }\n\n static content () {\n this.div({ class: 'select-list popover-list minimap-quick-settings' }, () => {\n this.input({ type: 'text', class: 'hidden-input', outlet: 'hiddenInput' })\n this.ol({ class: 'list-group mark-active', outlet: 'list' }, () => {\n this.li({ class: 'separator', outlet: 'separator' })\n this.li({ class: 'code-highlights', outlet: 'codeHighlights' }, 'code-highlights')\n this.li({ class: 'absolute-mode', outlet: 'absoluteMode' }, 'absolute-mode')\n this.li({ class: 'adjust-absolute-mode-height', outlet: 'adjustAbsoluteModeHeight' }, 'adjust-absolute-mode-height')\n })\n this.div({ class: 'btn-group' }, () => {\n this.button({ class: 'btn btn-default', outlet: 'onLeftButton' }, 'On Left')\n this.button({ class: 'btn btn-default', outlet: 'onRightButton' }, 'On Right')\n })\n })\n }\n\n createdCallback () {\n this.buildContent()\n }\n\n setModel (minimap) {\n this.selectedItem = null\n this.minimap = minimap\n this.emitter = new Emitter()\n this.subscriptions = new CompositeDisposable()\n this.plugins = {}\n this.itemsActions = new WeakMap()\n\n const subs = this.subscriptions\n\n subs.add(Main.onDidAddPlugin(({ name, plugin }) => {\n return this.addItemFor(name, plugin)\n }))\n subs.add(Main.onDidRemovePlugin(({ name, plugin }) => {\n return this.removeItemFor(name, plugin)\n }))\n subs.add(Main.onDidActivatePlugin(({ name, plugin }) => {\n return this.activateItem(name, plugin)\n }))\n subs.add(Main.onDidDeactivatePlugin(({ name, plugin }) => {\n return this.deactivateItem(name, plugin)\n }))\n\n subs.add(atom.commands.add('minimap-quick-settings', {\n 'core:move-up': () => {\n this.selectPreviousItem()\n },\n 'core:move-down': () => {\n this.selectNextItem()\n },\n 'core:move-left': () => {\n atom.config.set('minimap.displayMinimapOnLeft', true)\n },\n 'core:move-right': () => {\n atom.config.set('minimap.displayMinimapOnLeft', false)\n },\n 'core:cancel': () => {\n this.destroy()\n },\n 'core:confirm': () => {\n this.toggleSelectedItem()\n }\n }))\n\n this.codeHighlights.classList.toggle('active', this.minimap.displayCodeHighlights)\n\n subs.add(this.subscribeTo(this.codeHighlights, {\n mousedown: (e) => {\n e.preventDefault()\n atom.config.set('minimap.displayCodeHighlights', !this.minimap.displayCodeHighlights)\n }\n }))\n\n this.itemsActions.set(this.codeHighlights, () => {\n atom.config.set('minimap.displayCodeHighlights', !this.minimap.displayCodeHighlights)\n })\n\n subs.add(this.subscribeTo(this.absoluteMode, {\n mousedown: (e) => {\n e.preventDefault()\n atom.config.set('minimap.absoluteMode', !atom.config.get('minimap.absoluteMode'))\n }\n }))\n\n this.itemsActions.set(this.absoluteMode, () => {\n atom.config.set('minimap.absoluteMode', !atom.config.get('minimap.absoluteMode'))\n })\n\n subs.add(this.subscribeTo(this.adjustAbsoluteModeHeight, {\n mousedown: (e) => {\n e.preventDefault()\n atom.config.set('minimap.adjustAbsoluteModeHeight', !atom.config.get('minimap.adjustAbsoluteModeHeight'))\n }\n }))\n\n this.itemsActions.set(this.adjustAbsoluteModeHeight, () => {\n atom.config.set('minimap.adjustAbsoluteModeHeight', !atom.config.get('minimap.adjustAbsoluteModeHeight'))\n })\n\n subs.add(this.subscribeTo(this.hiddenInput, {\n focusout: (e) => { this.destroy() }\n }, { passive: true }))\n\n subs.add(this.subscribeTo(this.onLeftButton, {\n mousedown: (e) => {\n e.preventDefault()\n atom.config.set('minimap.displayMinimapOnLeft', true)\n }\n }))\n\n subs.add(this.subscribeTo(this.onRightButton, {\n mousedown: (e) => {\n e.preventDefault()\n atom.config.set('minimap.displayMinimapOnLeft', false)\n }\n }))\n\n subs.add(atom.config.observe('minimap.displayCodeHighlights', (bool) => {\n this.codeHighlights.classList.toggle('active', bool)\n }))\n\n subs.add(atom.config.observe('minimap.absoluteMode', (bool) => {\n this.absoluteMode.classList.toggle('active', bool)\n }))\n\n subs.add(atom.config.observe('minimap.adjustAbsoluteModeHeight', (bool) => {\n this.adjustAbsoluteModeHeight.classList.toggle('active', bool)\n }))\n\n subs.add(atom.config.observe('minimap.displayMinimapOnLeft', (bool) => {\n this.onLeftButton.classList.toggle('selected', bool)\n this.onRightButton.classList.toggle('selected', !bool)\n }))\n\n this.initList()\n }\n\n onDidDestroy (callback) {\n return this.emitter.on('did-destroy', callback)\n }\n\n attach () {\n const workspaceElement = atom.views.getView(atom.workspace)\n workspaceElement.appendChild(this)\n this.hiddenInput.focus()\n }\n\n destroy () {\n this.emitter.emit('did-destroy')\n this.subscriptions.dispose()\n this.parentNode.removeChild(this)\n }\n\n initList () {\n this.itemsDisposables = new WeakMap()\n for (const name in Main.plugins) {\n this.addItemFor(name, Main.plugins[name])\n }\n }\n\n toggleSelectedItem () {\n const fn = this.itemsActions.get(this.selectedItem)\n if (typeof fn === 'function') { fn() }\n }\n\n selectNextItem () {\n this.selectedItem.classList.remove('selected')\n if ((this.selectedItem.nextSibling != null)) {\n this.selectedItem = this.selectedItem.nextSibling\n if (this.selectedItem.matches('.separator')) {\n this.selectedItem = this.selectedItem.nextSibling\n }\n } else {\n this.selectedItem = this.list.firstChild\n }\n this.selectedItem.classList.add('selected')\n }\n\n selectPreviousItem () {\n this.selectedItem.classList.remove('selected')\n if ((this.selectedItem.previousSibling != null)) {\n this.selectedItem = this.selectedItem.previousSibling\n if (this.selectedItem.matches('.separator')) {\n this.selectedItem = this.selectedItem.previousSibling\n }\n } else {\n this.selectedItem = this.list.lastChild\n }\n this.selectedItem.classList.add('selected')\n }\n\n addItemFor (name, plugin) {\n const item = document.createElement('li')\n const action = () => { Main.togglePluginActivation(name) }\n\n if (plugin.isActive()) { item.classList.add('active') }\n\n item.textContent = name\n\n this.itemsActions.set(item, action)\n this.itemsDisposables.set(item, this.addDisposableEventListener(item, 'mousedown', (e) => {\n e.preventDefault()\n action()\n }))\n\n this.plugins[name] = item\n this.list.insertBefore(item, this.separator)\n\n if (!(this.selectedItem != null)) {\n this.selectedItem = item\n this.selectedItem.classList.add('selected')\n }\n }\n\n removeItemFor (name, plugin) {\n try {\n this.list.removeChild(this.plugins[name])\n } catch (error) {}\n\n delete this.plugins[name]\n }\n\n activateItem (name, plugin) {\n this.plugins[name].classList.add('active')\n }\n\n deactivateItem (name, plugin) {\n this.plugins[name].classList.remove('active')\n }\n}\n\nconst minimapQuickSettingsElement = MinimapQuickSettingsElement.initClass()\nexport default minimapQuickSettingsElement\n","'use strict'\n\n/**\n * @access private\n */\nexport default class LegacyAdapter {\n constructor (textEditor) { this.textEditor = textEditor }\n\n enableCache () { this.useCache = true }\n\n clearCache () {\n this.useCache = false\n delete this.heightCache\n delete this.scrollTopCache\n delete this.scrollLeftCache\n delete this.maxScrollTopCache\n }\n\n onDidChangeScrollTop (callback) {\n return this.textEditor.onDidChangeScrollTop(callback)\n }\n\n onDidChangeScrollLeft (callback) {\n return this.textEditor.onDidChangeScrollLeft(callback)\n }\n\n getHeight () {\n if (this.useCache) {\n if (!this.heightCache) {\n this.heightCache = this.textEditor.getHeight()\n }\n return this.heightCache\n }\n return this.textEditor.getHeight()\n }\n\n getScrollTop () {\n if (this.useCache) {\n if (!this.scrollTopCache) {\n this.scrollTopCache = this.textEditor.getScrollTop()\n }\n return this.scrollTopCache\n }\n return this.textEditor.getScrollTop()\n }\n\n setScrollTop (scrollTop) {\n return this.textEditor.setScrollTop(scrollTop)\n }\n\n getScrollLeft () {\n if (this.useCache) {\n if (!this.scrollLeftCache) {\n this.scrollLeftCache = this.textEditor.getScrollLeft()\n }\n return this.scrollLeftCache\n }\n\n return this.textEditor.getScrollLeft()\n }\n\n getMaxScrollTop () {\n if (this.maxScrollTopCache != null && this.useCache) {\n return this.maxScrollTopCache\n }\n let maxScrollTop = this.textEditor.displayBuffer.getMaxScrollTop()\n const lineHeight = this.textEditor.getLineHeightInPixels()\n\n if (this.scrollPastEnd) {\n maxScrollTop -= this.getHeight() - 3 * lineHeight\n }\n if (this.useCache) { this.maxScrollTopCache = maxScrollTop }\n return maxScrollTop\n }\n\n editorDestroyed () {\n return !this.textEditor || this.textEditor.isDestroyed()\n }\n}\n","'use strict'\n\nimport { Emitter } from 'atom'\n\nlet idCounter = 0\nconst nextId = function () { return idCounter++ }\n\n/**\n * The `Decoration` class represents a decoration in the Minimap.\n *\n * It has the same API than the `Decoration` class of a text editor.\n */\nexport default class Decoration {\n /**\n * Returns `true` if the passed-in decoration properties matches the\n * specified type.\n *\n * @param {Object} decorationProperties the decoration properties to match\n * @param {string} type the decoration type to match\n * @return {boolean} whether the decoration properties match the type\n */\n static isType (decorationProperties, type) {\n if (Array.isArray(decorationProperties.type)) {\n if (decorationProperties.type.indexOf(type) >= 0) { return true }\n return false\n } else {\n return type === decorationProperties.type\n }\n }\n\n /**\n * Creates a new decoration.\n *\n * @param {Marker} marker the target marker for the decoration\n * @param {Minimap} minimap the Minimap where the decoration will\n * be displayed\n * @param {Object} properties the decoration's properties\n */\n constructor (marker, minimap, properties) {\n /**\n * @access private\n */\n this.marker = marker\n /**\n * @access private\n */\n this.minimap = minimap\n /**\n * @access private\n */\n this.emitter = new Emitter()\n /**\n * @access private\n */\n this.id = nextId()\n /**\n * @access private\n */\n this.properties = null\n this.setProperties(properties)\n this.properties.id = this.id\n /**\n * @access private\n */\n this.destroyed = false\n /**\n * @access private\n */\n this.markerDestroyDisposable = this.marker.onDidDestroy(() => {\n this.destroy()\n })\n\n this.screenRange = marker.getScreenRange()\n }\n\n /**\n * Destroy this marker.\n *\n * If you own the marker, you should use `Marker#destroy` which will destroy\n * this decoration.\n */\n destroy () {\n if (this.destroyed) { return }\n\n this.markerDestroyDisposable.dispose()\n this.markerDestroyDisposable = null\n this.destroyed = true\n this.emitter.emit('did-destroy')\n this.emitter.dispose()\n }\n\n /**\n * Returns whether this decoration is destroyed or not.\n *\n * @return {boolean} whether this decoration is destroyed or not\n */\n isDestroyed () { return this.destroyed }\n\n /**\n * Registers an event listener to the `did-change-properties` event.\n *\n * This event is triggered when the decoration update method is called.\n *\n * @param {function(change:Object):void} callback a function to call\n * when the event is triggered\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeProperties (callback) {\n return this.emitter.on('did-change-properties', callback)\n }\n\n /**\n * Registers an event listener to the `did-destroy` event.\n *\n * @param {function():void} callback a function to call when the event\n * is triggered\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidDestroy (callback) {\n return this.emitter.on('did-destroy', callback)\n }\n\n /**\n * An id unique across all Decoration objects.\n *\n * @return {number} the decoration id\n */\n getId () { return this.id }\n\n /**\n * Returns the marker associated with this Decoration.\n *\n * @return {Marker} the decoration's marker\n */\n getMarker () { return this.marker }\n\n /**\n * Check if this decoration is of type `type`.\n *\n * @param {string|Array} type a type like `'line-number'`, `'line'`, etc.\n * `type` can also be an Array of Strings, where\n * it will return true if the decoration's type\n * matches any in the array.\n * @return {boolean} whether this decoration match the passed-in type\n */\n isType (type) {\n return Decoration.isType(this.properties, type)\n }\n\n /**\n * Returns the Decoration's properties.\n *\n * @return {Object} the decoration's properties\n */\n getProperties () {\n return this.properties\n }\n\n /**\n * Update the marker with new properties. Allows you to change the\n * decoration's class.\n *\n * @param {Object} newProperties the new properties for the decoration\n */\n setProperties (newProperties) {\n if (this.destroyed) { return }\n\n const oldProperties = this.properties\n this.properties = newProperties\n this.properties.id = this.id\n\n this.emitter.emit('did-change-properties', { oldProperties, newProperties })\n }\n}\n","'use strict'\n\nimport { Emitter } from 'atom'\nimport { escapeRegExp } from 'underscore-plus'\nimport path from 'path'\nimport Decoration from './decoration'\n\n/**\n * The mixin that provides the decorations API to the minimap editor\n * view.\n *\n * This mixin is injected into the `Minimap` prototype, so every methods defined\n * in this file will be available on any `Minimap` instance.\n */\nexport default class DecorationManagement {\n /**\n * Initializes the decorations related properties.\n */\n initializeDecorations () {\n if (this.emitter == null) {\n /**\n * The minimap emitter, lazily created if not created yet.\n * @type {Emitter}\n * @access private\n */\n this.emitter = new Emitter()\n }\n\n /**\n * A map with the decoration id as key and the decoration as value.\n * @type {Object}\n * @access private\n */\n this.decorationsById = new Map()\n /**\n * The decorations stored in an array indexed with their marker id.\n * @type {Object}\n * @access private\n */\n this.decorationsByMarkerId = new Map()\n /**\n * The subscriptions to the markers `did-change` event indexed using the\n * marker id.\n * @type {Object}\n * @access private\n */\n this.decorationMarkerChangedSubscriptions = new Map()\n /**\n * The subscriptions to the markers `did-destroy` event indexed using the\n * marker id.\n * @type {Object}\n * @access private\n */\n this.decorationMarkerDestroyedSubscriptions = new Map()\n /**\n * The subscriptions to the decorations `did-change-properties` event\n * indexed using the decoration id.\n * @type {Object}\n * @access private\n */\n this.decorationUpdatedSubscriptions = new Map()\n /**\n * The subscriptions to the decorations `did-destroy` event indexed using\n * the decoration id.\n * @type {Object}\n * @access private\n */\n this.decorationDestroyedSubscriptions = new Map()\n }\n\n /**\n * Returns all the decorations registered in the current `Minimap`.\n *\n * @return {Array} all the decorations in this `Minimap`\n */\n getDecorations () {\n return this.decorationsById.values()\n }\n\n /**\n * Registers an event listener to the `did-add-decoration` event.\n *\n * @param {function(event:Object):void} callback a function to call when the\n * event is triggered.\n * the callback will be called\n * with an event object with\n * the following properties:\n * - marker: the marker object that was decorated\n * - decoration: the decoration object that was created\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidAddDecoration (callback) {\n return this.emitter.on('did-add-decoration', callback)\n }\n\n /**\n * Registers an event listener to the `did-remove-decoration` event.\n *\n * @param {function(event:Object):void} callback a function to call when the\n * event is triggered.\n * the callback will be called\n * with an event object with\n * the following properties:\n * - marker: the marker object that was decorated\n * - decoration: the decoration object that was created\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidRemoveDecoration (callback) {\n return this.emitter.on('did-remove-decoration', callback)\n }\n\n /**\n * Registers an event listener to the `did-change-decoration` event.\n *\n * This event is triggered when the marker targeted by the decoration\n * was changed.\n *\n * @param {function(event:Object):void} callback a function to call when the\n * event is triggered.\n * the callback will be called\n * with an event object with\n * the following properties:\n * - marker: the marker object that was decorated\n * - decoration: the decoration object that was created\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeDecoration (callback) {\n return this.emitter.on('did-change-decoration', callback)\n }\n\n /**\n * Registers an event listener to the `did-change-decoration-range` event.\n *\n * This event is triggered when the marker range targeted by the decoration\n * was changed.\n *\n * @param {function(event:Object):void} callback a function to call when the\n * event is triggered.\n * the callback will be called\n * with an event object with\n * the following properties:\n * - marker: the marker object that was decorated\n * - decoration: the decoration object that was created\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeDecorationRange (callback) {\n return this.emitter.on('did-change-decoration-range', callback)\n }\n\n /**\n * Registers an event listener to the `did-update-decoration` event.\n *\n * This event is triggered when the decoration itself is modified.\n *\n * @param {function(decoration:Decoration):void} callback a function to call\n * when the event is\n * triggered\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidUpdateDecoration (callback) {\n return this.emitter.on('did-update-decoration', callback)\n }\n\n /**\n * Returns the decoration with the passed-in id.\n *\n * @param {number} id the decoration id\n * @return {Decoration} the decoration with the given id\n */\n decorationForId (id) {\n return this.decorationsById.get(id)\n }\n\n /**\n * Returns all the decorations that intersect the passed-in row range.\n *\n * @param {number} startScreenRow the first row of the range\n * @param {number} endScreenRow the last row of the range\n * @return {Array} the decorations that intersect the passed-in\n * range\n */\n decorationsForScreenRowRange (startScreenRow, endScreenRow) {\n const decorationsByMarkerId = {}\n const markers = this.findMarkers({\n intersectsScreenRowRange: [startScreenRow, endScreenRow]\n })\n\n for (let i = 0, len = markers.length; i < len; i++) {\n const marker = markers[i]\n const decorations = this.decorationsByMarkerId.get(marker.id)\n\n if (decorations !== undefined) {\n decorationsByMarkerId[marker.id] = decorations\n }\n }\n\n return decorationsByMarkerId\n }\n\n /**\n * Returns the decorations that intersects the passed-in row range\n * in a structured way.\n *\n * At the first level, the keys are the available decoration types.\n * At the second level, the keys are the row index for which there\n * are decorations available. The value is an array containing the\n * decorations that intersects with the corresponding row.\n *\n * @return {Object} the decorations grouped by type and then rows\n * @property {Object} line all the line decorations by row\n * @property {Array} line[row] all the line decorations\n * at a given row\n * @property {Object} highlight-under all the highlight-under decorations\n * by row\n * @property {Array} highlight-under[row] all the highlight-under\n * decorations at a given row\n * @property {Object} highlight-over all the highlight-over decorations\n * by row\n * @property {Array} highlight-over[row] all the highlight-over\n * decorations at a given row\n * @property {Object} highlight-outine all the highlight-outine decorations\n * by row\n * @property {Array} highlight-outine[row] all the\n * highlight-outine decorations at a given\n * row\n */\n decorationsByTypeThenRows () {\n if (this.decorationsByTypeThenRowsCache != null) {\n return this.decorationsByTypeThenRowsCache\n }\n\n const cache = {}\n\n const decorations = this.decorationsById.values()\n for (const decoration of decorations) {\n const range = decoration.marker.getScreenRange()\n const type = decoration.getProperties().type\n\n if (cache[type] == null) { cache[type] = {} }\n\n for (let row = range.start.row, len = range.end.row; row <= len; row++) {\n if (cache[type][row] == null) { cache[type][row] = [] }\n\n cache[type][row].push(decoration)\n }\n }\n\n /**\n * The grouped decorations cache.\n * @type {Object}\n * @access private\n */\n this.decorationsByTypeThenRowsCache = cache\n return cache\n }\n\n /**\n * Invalidates the decoration by screen rows cache.\n */\n invalidateDecorationForScreenRowsCache () {\n this.decorationsByTypeThenRowsCache = null\n }\n\n /**\n * Adds a decoration that tracks a `Marker`. When the marker moves,\n * is invalidated, or is destroyed, the decoration will be updated to reflect\n * the marker's state.\n *\n * @param {Marker} marker the marker you want this decoration to follow\n * @param {Object} decorationParams the decoration properties\n * @param {string} decorationParams.type the decoration type in the following\n * list:\n * - __line__: Fills the line background with the decoration color.\n * - __highlight__: Renders a colored rectangle on the minimap. The highlight\n * is rendered above the line's text.\n * - __highlight-over__: Same as __highlight__.\n * - __highlight-under__: Renders a colored rectangle on the minimap. The\n * highlight is rendered below the line's text.\n * - __highlight-outline__: Renders a colored outline on the minimap. The\n * highlight box is rendered above the line's text.\n * - __foreground-custom__: A decoration type for which you have the control\n * over the render routine. Note that your routine should implement a render\n * on a per-line basis to avoid any side-effect with the offset bitmap cache\n * mechanism. These decorations are rendred on the foreground decorations\n * layer.\n * - __background-custom__: A decoration type for which you have the control\n * over the render routine. Note that your routine should implement a render\n * on a per-line basis to avoid any side-effect with the offset bitmap cache\n * mechanism. These decorations are rendred on the background decorations\n * layer.\n * @param {string} [decorationParams.class] the CSS class to use to retrieve\n * the background color of the\n * decoration by building a scop\n * corresponding to\n * `.minimap .editor `\n * @param {string} [decorationParams.scope] the scope to use to retrieve the\n * decoration background. Note that if\n * the `scope` property is set, the\n * `class` won't be used.\n * @param {string} [decorationParams.color] the CSS color to use to render\n * the decoration. When set, neither\n * `scope` nor `class` are used.\n * @param {string} [decorationParams.plugin] the name of the plugin that\n * created this decoration. It'll\n * be used to order the decorations\n * on the same layer and that are\n * overlapping. If the parameter is\n * omitted the Minimap will attempt\n * to infer the plugin origin from\n * the path of the caller function.\n * @param {function} [decorationParams.render] the render routine for custom\n * decorations. The function\n * receives the decoration and\n * the render data for the\n * current render pass.\n * @return {Decoration} the created decoration\n * @emits {did-add-decoration} when the decoration is created successfully\n * @emits {did-change} when the decoration is created successfully\n */\n decorateMarker (marker, decorationParams) {\n if (this.destroyed || marker == null) { return }\n\n const { id } = marker\n\n if (decorationParams.type === 'highlight') {\n decorationParams.type = 'highlight-over'\n }\n\n const { type, plugin } = decorationParams\n\n if (plugin == null) {\n decorationParams.plugin = getOriginatorPackageName()\n }\n\n if (decorationParams.scope == null && decorationParams.class != null) {\n const cls = decorationParams.class.split(' ').join('.')\n decorationParams.scope = `.minimap .${cls}`\n }\n\n if (!this.decorationMarkerDestroyedSubscriptions.has(id)) {\n this.decorationMarkerDestroyedSubscriptions.set(id,\n marker.onDidDestroy(() => {\n this.removeAllDecorationsForMarker(marker)\n }))\n }\n\n if (!this.decorationMarkerChangedSubscriptions.has(id)) {\n this.decorationMarkerChangedSubscriptions.set(id,\n marker.onDidChange((event) => {\n const decorations = this.decorationsByMarkerId.get(id)\n const screenRange = marker.getScreenRange()\n\n this.invalidateDecorationForScreenRowsCache()\n\n if (decorations !== undefined) {\n for (let i = 0, len = decorations.length; i < len; i++) {\n const decoration = decorations[i]\n this.emitter.emit('did-change-decoration', {\n marker,\n decoration,\n event\n })\n this.emitDecorationChanges(decoration.type, decoration)\n\n decoration.screenRange = screenRange\n }\n }\n let oldStart = event.oldTailScreenPosition\n let oldEnd = event.oldHeadScreenPosition\n let newStart = event.newTailScreenPosition\n let newEnd = event.newHeadScreenPosition\n\n if (oldStart.row > oldEnd.row) {\n [oldStart, oldEnd] = [oldEnd, oldStart]\n }\n if (newStart.row > newEnd.row) {\n [newStart, newEnd] = [newEnd, newStart]\n }\n\n const rangesDiffs = computeRangesDiffs(\n oldStart, oldEnd,\n newStart, newEnd\n )\n\n for (let i = 0, len = rangesDiffs.length; i < len; i++) {\n const [start, end] = rangesDiffs[i]\n this.emitRangeChanges(type, {\n start,\n end\n }, 0)\n }\n }))\n }\n\n const decoration = new Decoration(marker, this, decorationParams)\n\n if (!this.decorationsByMarkerId.has(id)) {\n this.decorationsByMarkerId.set(id, [])\n }\n\n this.decorationsByMarkerId.get(id).push(decoration)\n this.decorationsById.set(decoration.id, decoration)\n\n if (!this.decorationUpdatedSubscriptions.has(decoration.id)) {\n this.decorationUpdatedSubscriptions.set(decoration.id,\n decoration.onDidChangeProperties((event) => {\n this.emitDecorationChanges(type, decoration)\n }))\n }\n\n this.decorationDestroyedSubscriptions.set(decoration.id,\n decoration.onDidDestroy(() => {\n this.removeDecoration(decoration)\n }))\n\n this.emitDecorationChanges(type, decoration)\n this.emitter.emit('did-add-decoration', {\n marker,\n decoration\n })\n\n return decoration\n }\n\n /**\n * Emits a change in the `Minimap` corresponding to the\n * passed-in decoration.\n *\n * @param {string} type the type of decoration that changed\n * @param {Decoration} decoration the decoration for which emitting an event\n * @access private\n */\n emitDecorationChanges (type, decoration) {\n if (this.editorDestroyed()) { return }\n\n this.invalidateDecorationForScreenRowsCache()\n\n const range = decoration.screenRange\n if (!range.start || !range.end) { return }\n\n this.emitRangeChanges(type, range, 0)\n }\n\n /**\n * Emits a change for the specified range.\n *\n * @param {string} type the type of decoration that changed\n * @param {Object} range the range where changes occured\n * @param {number} [screenDelta] an optional screen delta for the\n * change object\n * @access private\n */\n emitRangeChanges (type, range, screenDelta) {\n const startScreenRow = range.start.row\n const endScreenRow = range.end.row\n const lastRenderedScreenRow = this.getLastVisibleScreenRow()\n const firstRenderedScreenRow = this.getFirstVisibleScreenRow()\n\n if (screenDelta == null) {\n screenDelta = (lastRenderedScreenRow - firstRenderedScreenRow) -\n (endScreenRow - startScreenRow)\n }\n\n const changeEvent = {\n start: startScreenRow,\n end: endScreenRow,\n screenDelta,\n type\n }\n\n this.emitter.emit('did-change-decoration-range', changeEvent)\n }\n\n /**\n * Removes a `Decoration` from this minimap.\n *\n * @param {Decoration} decoration the decoration to remove\n * @emits {did-change} when the decoration is removed\n * @emits {did-remove-decoration} when the decoration is removed\n */\n removeDecoration (decoration) {\n if (decoration == null) { return }\n\n const marker = decoration.marker\n let subscription\n\n this.decorationsById.delete(decoration.id)\n\n subscription = this.decorationUpdatedSubscriptions.get(decoration.id)\n if (subscription !== undefined) { subscription.dispose() }\n\n subscription = this.decorationDestroyedSubscriptions.get(decoration.id)\n if (subscription !== undefined) { subscription.dispose() }\n\n this.decorationUpdatedSubscriptions.delete(decoration.id)\n this.decorationDestroyedSubscriptions.delete(decoration.id)\n\n const decorations = this.decorationsByMarkerId.get(marker.id)\n if (decorations === undefined) { return }\n\n this.emitDecorationChanges(decoration.getProperties().type, decoration)\n\n const index = decorations.indexOf(decoration)\n if (index > -1) {\n decorations.splice(index, 1)\n\n this.emitter.emit('did-remove-decoration', {\n marker,\n decoration\n })\n\n if (decorations.length === 0) {\n this.removedAllMarkerDecorations(marker)\n }\n }\n }\n\n /**\n * Removes all the decorations registered for the passed-in marker.\n *\n * @param {Marker} marker the marker for which removing its decorations\n * @emits {did-change} when a decoration have been removed\n * @emits {did-remove-decoration} when a decoration have been removed\n */\n removeAllDecorationsForMarker (marker) {\n if (marker == null) { return }\n\n const decorations = this.decorationsByMarkerId.get(marker.id)\n if (decorations === undefined) { return }\n\n for (let i = 0, len = decorations.length; i < len; i++) {\n const decoration = decorations[i]\n\n if (!this.adapter.editorDestroyed()) {\n this.emitDecorationChanges(decoration.getProperties().type, decoration)\n }\n this.emitter.emit('did-remove-decoration', {\n marker,\n decoration\n })\n }\n\n this.removedAllMarkerDecorations(marker)\n }\n\n /**\n * Performs the removal of a decoration for a given marker.\n *\n * @param {Marker} marker the marker for which removing decorations\n * @access private\n */\n removedAllMarkerDecorations (marker) {\n if (marker == null) { return }\n\n this.decorationMarkerChangedSubscriptions.get(marker.id).dispose()\n this.decorationMarkerDestroyedSubscriptions.get(marker.id).dispose()\n\n this.decorationsByMarkerId.delete(marker.id)\n this.decorationMarkerChangedSubscriptions.delete(marker.id)\n this.decorationMarkerDestroyedSubscriptions.delete(marker.id)\n }\n\n /**\n * Removes all the decorations that was created in the current `Minimap`.\n */\n removeAllDecorations () {\n const decorationMarkerChangedSubscriptionsValues = this.decorationMarkerChangedSubscriptions.values()\n for (const decoration of decorationMarkerChangedSubscriptionsValues) {\n decoration.dispose()\n }\n\n const decorationMarkerDestroyedSubscriptionsValues = this.decorationMarkerDestroyedSubscriptions.values()\n for (const decoration of decorationMarkerDestroyedSubscriptionsValues) {\n decoration.dispose()\n }\n\n const decorationUpdatedSubscriptionsValues = this.decorationUpdatedSubscriptions.values()\n for (const decoration of decorationUpdatedSubscriptionsValues) {\n decoration.dispose()\n }\n\n const decorationDestroyedSubscriptionsValues = this.decorationDestroyedSubscriptions.values()\n for (const decoration of decorationDestroyedSubscriptionsValues) {\n decoration.dispose()\n }\n\n const decorationsByIdValues = this.decorationsById.values()\n for (const decoration of decorationsByIdValues) {\n decoration.destroy()\n }\n\n this.decorationsById.clear()\n this.decorationsByMarkerId.clear()\n this.decorationMarkerChangedSubscriptions.clear()\n this.decorationMarkerDestroyedSubscriptions.clear()\n this.decorationUpdatedSubscriptions.clear()\n this.decorationDestroyedSubscriptions.clear()\n }\n}\n\nfunction getOriginatorPackageName () {\n const line = new Error().stack.split('\\n')[3]\n const filePath = line.split('(')[1].replace(')', '')\n const re = new RegExp(\n atom.packages.getPackageDirPaths().join('|') + escapeRegExp(path.sep)\n )\n const plugin = filePath.replace(re, '').split(path.sep)[0].replace(/minimap-|-minimap/, '')\n return plugin.indexOf(path.sep) < 0 ? plugin : undefined\n}\n\n/**\n * Given two ranges, it returns an array of ranges representing the\n * differences between them.\n *\n * @param {number} oldStart the row index of the first range start\n * @param {number} oldEnd the row index of the first range end\n * @param {number} newStart the row index of the second range start\n * @param {number} newEnd the row index of the second range end\n * @return {Array} the array of diff ranges\n * @access private\n */\nfunction computeRangesDiffs (oldStart, oldEnd, newStart, newEnd) {\n const diffs = []\n\n if (oldStart.isLessThan(newStart)) {\n diffs.push([oldStart, newStart])\n } else if (newStart.isLessThan(oldStart)) {\n diffs.push([newStart, oldStart])\n }\n\n if (oldEnd.isLessThan(newEnd)) {\n diffs.push([oldEnd, newEnd])\n } else if (newEnd.isLessThan(oldEnd)) {\n diffs.push([newEnd, oldEnd])\n }\n\n return diffs\n}\n","'use strict'\n\n/**\n * @access private\n */\nexport default class StableAdapter {\n constructor (textEditor) {\n this.textEditor = textEditor\n this.textEditorElement = atom.views.getView(this.textEditor)\n }\n\n enableCache () { this.useCache = true }\n\n clearCache () {\n this.useCache = false\n delete this.heightCache\n delete this.scrollTopCache\n delete this.scrollLeftCache\n delete this.maxScrollTopCache\n }\n\n onDidChangeScrollTop (callback) {\n return this.textEditorElement.onDidChangeScrollTop(callback)\n }\n\n onDidChangeScrollLeft (callback) {\n return this.textEditorElement.onDidChangeScrollLeft(callback)\n }\n\n getHeight () {\n if (this.editorDestroyed()) { return 0 }\n\n if (this.useCache) {\n if (!this.heightCache) {\n this.heightCache = this.textEditorElement.getHeight()\n }\n return this.heightCache\n }\n return this.textEditorElement.getHeight()\n }\n\n getScrollTop () {\n if (this.editorDestroyed()) { return 0 }\n\n if (this.useCache) {\n if (!this.scrollTopCache) {\n this.scrollTopCache = this.computeScrollTop()\n }\n return this.scrollTopCache\n }\n return this.computeScrollTop()\n }\n\n computeScrollTop () {\n if (this.editorDestroyed()) { return 0 }\n\n const scrollTop = this.textEditorElement.getScrollTop()\n const lineHeight = this.textEditor.getLineHeightInPixels()\n let firstRow = this.textEditorElement.getFirstVisibleScreenRow()\n\n if (Number.isNaN(firstRow)) {\n // Guard against their being no visible screen row\n return 0\n }\n\n let lineTop = this.textEditorElement.pixelPositionForScreenPosition([firstRow, 0]).top\n\n if (lineTop > scrollTop) {\n firstRow -= 1\n lineTop = this.textEditorElement.pixelPositionForScreenPosition([firstRow, 0]).top\n }\n\n const lineY = firstRow * lineHeight\n const offset = Math.min(scrollTop - lineTop, lineHeight)\n return lineY + offset\n }\n\n setScrollTop (scrollTop) {\n if (this.editorDestroyed()) { return }\n\n this.textEditorElement.setScrollTop(scrollTop)\n }\n\n getScrollLeft () {\n if (this.editorDestroyed()) { return 0 }\n\n if (this.useCache) {\n if (!this.scrollLeftCache) {\n this.scrollLeftCache = this.textEditorElement.getScrollLeft()\n }\n return this.scrollLeftCache\n }\n return this.textEditorElement.getScrollLeft()\n }\n\n getMaxScrollTop () {\n if (this.editorDestroyed()) { return 0 }\n\n if (this.maxScrollTopCache != null && this.useCache) {\n return this.maxScrollTopCache\n }\n\n let maxScrollTop\n if (this.textEditorElement.getMaxScrollTop) {\n maxScrollTop = this.textEditorElement.getMaxScrollTop()\n\n if (parseFloat(atom.getVersion()) >= 1.13) {\n if (this.scrollPastEnd) {\n const lineHeight = this.textEditor.getLineHeightInPixels()\n maxScrollTop -= this.getHeight() - 3 * lineHeight\n }\n }\n } else {\n maxScrollTop = this.textEditorElement.getScrollHeight() - this.getHeight()\n\n if (this.scrollPastEnd) {\n const lineHeight = this.textEditor.getLineHeightInPixels()\n maxScrollTop -= this.getHeight() - 3 * lineHeight\n }\n }\n\n if (this.useCache) {\n this.maxScrollTopCache = maxScrollTop\n }\n\n return maxScrollTop\n }\n\n editorDestroyed () {\n return !this.textEditor ||\n this.textEditor.isDestroyed() ||\n !this.textEditorElement.component ||\n !this.textEditorElement.getModel() ||\n !this.textEditorElement.parentNode\n }\n}\n","'use strict'\n\nimport include from './decorators/include'\nimport DecorationManagement from './decoration-management'\n\nimport { Emitter, CompositeDisposable } from 'atom'\nimport StableAdapter from './adapters/stable-adapter'\n\nlet nextModelId = 1\n\n/**\n * The Minimap class is the underlying model of a .\n * Most manipulations of the minimap is done through the model.\n *\n * Any Minimap instance is tied to a `TextEditor`.\n * Their lifecycle follow the one of their target `TextEditor`, so they are\n * destroyed whenever their `TextEditor` is destroyed.\n */\nexport default class Minimap {\n static initClass () {\n include(this, DecorationManagement)\n return this\n }\n\n /**\n * Creates a new Minimap instance for the given `TextEditor`.\n *\n * @param {Object} options an object with the new Minimap properties\n * @param {TextEditor} options.textEditor the target text editor for\n * the minimap\n * @param {boolean} [options.standAlone] whether this minimap is in\n * stand-alone mode or not\n * @param {number} [options.width] the minimap width in pixels\n * @param {number} [options.height] the minimap height in pixels\n * @throws {Error} Cannot create a minimap without an editor\n */\n constructor (options = {}) {\n if (!options.textEditor) {\n throw new Error('Cannot create a minimap without an editor')\n }\n\n /**\n * The Minimap's text editor.\n *\n * @type {TextEditor}\n * @access private\n */\n this.textEditor = options.textEditor\n\n /**\n * The Minimap's text editor element.\n * @access private\n */\n this.editorElement = undefined\n\n /**\n * The stand-alone state of the current Minimap.\n *\n * @type {boolean}\n * @access private\n */\n this.standAlone = options.standAlone\n /**\n * The width of the current Minimap.\n *\n * @type {number}\n * @access private\n */\n this.width = options.width\n /**\n * The height of the current Minimap.\n *\n * @type {number}\n * @access private\n */\n this.height = options.height\n /**\n * The id of the current Minimap.\n *\n * @type {Number}\n * @access private\n */\n this.id = nextModelId++\n /**\n * The events emitter of the current Minimap.\n *\n * @type {Emitter}\n * @access private\n */\n this.emitter = new Emitter()\n /**\n * The Minimap's subscriptions.\n *\n * @type {CompositeDisposable}\n * @access private\n */\n this.subscriptions = new CompositeDisposable()\n /**\n * The adapter object leverage the access to several properties from\n * the `TextEditor`/`TextEditorElement` to support the different APIs\n * between different version of Atom.\n *\n * @type {Object}\n * @access private\n */\n this.adapter = null\n /**\n * The char height of the current Minimap, will be `undefined` unless\n * `setCharWidth` is called.\n *\n * @type {number}\n * @access private\n */\n this.charHeight = null\n /**\n * The char height from the package's configuration. Will be overriden\n * by the instance value.\n *\n * @type {number}\n * @access private\n */\n this.configCharHeight = null\n /**\n * The char width of the current Minimap, will be `undefined` unless\n * `setCharWidth` is called.\n *\n * @type {number}\n * @access private\n */\n this.charWidth = null\n /**\n * The char width from the package's configuration. Will be overriden\n * by the instance value.\n *\n * @type {number}\n * @access private\n */\n this.configCharWidth = null\n /**\n * The interline of the current Minimap, will be `undefined` unless\n * `setCharWidth` is called.\n *\n * @type {number}\n * @access private\n */\n this.interline = null\n /**\n * The interline from the package's configuration. Will be overriden\n * by the instance value.\n *\n * @type {number}\n * @access private\n */\n this.configInterline = null\n /**\n * The devicePixelRatioRounding of the current Minimap, will be\n * `undefined` unless `setDevicePixelRatioRounding` is called.\n *\n * @type {boolean}\n * @access private\n */\n this.devicePixelRatioRounding = null\n /**\n * The devicePixelRatioRounding from the package's configuration.\n * Will be overriden by the instance value.\n *\n * @type {boolean}\n * @access private\n */\n this.configDevicePixelRatioRounding = null\n /**\n * A number of milliseconds which determines how often the minimap should redraw itself after\n * detecting changes in the text editor. A value of 0 will cause the minimap to redraw\n * immediately.\n *\n * @type {number}\n * @access private\n */\n this.redrawDelay = 0\n /**\n * A boolean value to store whether this Minimap have been destroyed or not.\n *\n * @type {boolean}\n * @access private\n */\n this.destroyed = false\n /**\n * A boolean value to store whether the `scrollPastEnd` setting is enabled\n * or not.\n *\n * @type {boolean}\n * @access private\n */\n this.scrollPastEnd = false\n\n /**\n * An array of changes registered with textEditor.onDidChange() which have not yet been handled\n *\n * @type {Array}\n * @access private\n */\n this.pendingChangeEvents = []\n\n /**\n * Timer reference which, once fired, will flush all the pending changes stored in\n * this.pendingChangeEvents array.\n *\n * @type {Timer?}\n * @access private\n */\n this.flushChangesTimer = null\n\n this.initializeDecorations()\n\n if (atom.views.getView(this.textEditor).getScrollTop != null) {\n this.adapter = new StableAdapter(this.textEditor)\n } else {\n // TODO remove LegacyAdapter in the next major version\n atom.notifications.addWarning('LegacyAdapter of Minimap is deprecated and will be removed in the next major version. Please upgrade Atom to the latest version.')\n const LegacyAdapter = require('./adapters/legacy-adapter')\n this.adapter = new LegacyAdapter(this.textEditor)\n }\n\n /**\n * When in stand-alone or independent scrolling mode, this value can be used\n * instead of the computed scroll.\n *\n * @type {number}\n * @access private\n */\n this.scrollTop = 0\n\n const subs = this.subscriptions\n let configSubscription = this.subscribeToConfig()\n\n subs.add(configSubscription)\n\n subs.add(this.textEditor.onDidChangeGrammar(() => {\n subs.remove(configSubscription)\n configSubscription.dispose()\n\n configSubscription = this.subscribeToConfig()\n subs.add(configSubscription)\n }))\n\n subs.add(this.adapter.onDidChangeScrollTop(() => {\n if (!this.standAlone && !this.ignoreTextEditorScroll && !this.inChangeScrollTop) {\n this.inChangeScrollTop = true\n this.updateScrollTop()\n this.emitter.emit('did-change-scroll-top', this)\n this.inChangeScrollTop = false\n }\n\n if (this.ignoreTextEditorScroll) {\n this.ignoreTextEditorScroll = false\n }\n }))\n subs.add(this.adapter.onDidChangeScrollLeft(() => {\n if (!this.standAlone) {\n this.emitter.emit('did-change-scroll-left', this)\n }\n }))\n\n subs.add(this.textEditor.onDidChange((changes) => {\n this.scheduleChanges(changes)\n }))\n subs.add(this.textEditor.onDidDestroy(() => { this.destroy() }))\n\n /*\n FIXME Some changes occuring during the tokenization produces\n ranges that deceive the canvas rendering by making some\n lines at the end of the buffer intact while they are in fact not,\n resulting in extra lines appearing at the end of the minimap.\n Forcing a whole repaint to fix that bug is suboptimal but works.\n */\n subs.add(this.textEditor.onDidTokenize(() => {\n this.emitter.emit('did-change-config')\n }))\n }\n\n /**\n * Destroys the model.\n */\n destroy () {\n if (this.destroyed) { return }\n\n clearTimeout(this.flushChangesTimer)\n this.flushChangesTimer = null\n this.pendingChangeEvents = []\n this.removeAllDecorations()\n this.subscriptions.dispose()\n this.subscriptions = null\n this.textEditor = null\n this.emitter.emit('did-destroy')\n this.emitter.dispose()\n this.destroyed = true\n }\n\n /**\n * Returns `true` when this `Minimap` has benn destroyed.\n *\n * @return {boolean} whether this Minimap has been destroyed or not\n */\n isDestroyed () { return this.destroyed }\n\n /**\n * Schedule changes from textEditor.onDidChange() to be handled at a later time\n *\n * @param {Array} changes The changes to be scheduled\n * @return void\n * @access private\n */\n scheduleChanges (changes) {\n this.pendingChangeEvents = this.pendingChangeEvents.concat(changes)\n\n // Optimisation: If the redraw delay is set to 0, do not even schedule a timer\n if (!this.redrawDelay) {\n this.requestFlushChanges()\n }\n\n if (!this.flushChangesTimer) {\n // If any changes happened within the timeout's delay, a timeout will already have been\n // scheduled -> no need to schedule again\n this.flushChangesTimer = setTimeout(() => { this.requestFlushChanges() }, this.redrawDelay)\n }\n }\n\n /**\n * Flush all changes which have been scheduled for later processing by this.scheduleChanges()\n *\n * @return void\n * @access private\n */\n flushChanges () {\n clearTimeout(this.flushChangesTimer)\n this.flushChangesTimer = null\n this.emitChanges(this.pendingChangeEvents)\n this.pendingChangeEvents = []\n }\n\n /**\n * Requests flush changes if not already requested\n *\n * @return void\n * @access private\n */\n requestFlushChanges () {\n if (!this.requestedFlushChanges) {\n this.requestedFlushChanges = requestAnimationFrame(() => {\n this.flushChanges()\n if (this.requestedFlushChanges) {\n cancelAnimationFrame(this.requestedFlushChanges)\n this.requestedFlushChanges = null\n }\n })\n }\n }\n\n /**\n * Registers an event listener to the `did-change` event.\n *\n * @param {function(event:Object):void} callback a function to call when the\n * event is triggered.\n * the callback will be called\n * with an event object with\n * the following properties:\n * - start: The change's start row number\n * - end: The change's end row number\n * - screenDelta: the delta in buffer rows between the versions before and\n * after the change\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChange (callback) {\n return this.emitter.on('did-change', callback)\n }\n\n /**\n * Registers an event listener to the `did-change-config` event.\n *\n * @param {function():void} callback a function to call when the event\n * is triggered.\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeConfig (callback) {\n return this.emitter.on('did-change-config', callback)\n }\n\n /**\n * Registers an event listener to the `did-change-scroll-top` event.\n *\n * The event is dispatched when the text editor `scrollTop` value have been\n * changed or when the minimap scroll top have been changed in stand-alone\n * mode.\n *\n * @param {function(minimap:Minimap):void} callback a function to call when\n * the event is triggered.\n * The current Minimap is\n * passed as argument to\n * the callback.\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeScrollTop (callback) {\n return this.emitter.on('did-change-scroll-top', callback)\n }\n\n /**\n * Registers an event listener to the `did-change-scroll-left` event.\n *\n * @param {function(minimap:Minimap):void} callback a function to call when\n * the event is triggered.\n * The current Minimap is\n * passed as argument to\n * the callback.\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeScrollLeft (callback) {\n return this.emitter.on('did-change-scroll-left', callback)\n }\n\n /**\n * Registers an event listener to the `did-change-stand-alone` event.\n *\n * This event is dispatched when the stand-alone of the current Minimap\n * is either enabled or disabled.\n *\n * @param {function(minimap:Minimap):void} callback a function to call when\n * the event is triggered.\n * The current Minimap is\n * passed as argument to\n * the callback.\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeStandAlone (callback) {\n return this.emitter.on('did-change-stand-alone', callback)\n }\n\n /**\n * Registers an event listener to the `did-destroy` event.\n *\n * This event is dispatched when this Minimap have been destroyed. It can\n * occurs either because the {@link destroy} method have been called on the\n * Minimap or because the target text editor have been destroyed.\n *\n * @param {function():void} callback a function to call when the event\n * is triggered.\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidDestroy (callback) {\n return this.emitter.on('did-destroy', callback)\n }\n\n /**\n * Registers to the config changes for the current editor scope.\n *\n * @return {Disposable} the disposable to dispose all the registered events\n * @access private\n */\n subscribeToConfig () {\n const subs = new CompositeDisposable()\n const opts = { scope: this.textEditor.getRootScopeDescriptor() }\n\n subs.add(atom.config.observe('editor.scrollPastEnd', opts, (scrollPastEnd) => {\n this.scrollPastEnd = scrollPastEnd\n this.adapter.scrollPastEnd = this.scrollPastEnd\n this.emitter.emit('did-change-config')\n }))\n subs.add(atom.config.observe('minimap.charHeight', opts, (configCharHeight) => {\n this.configCharHeight = configCharHeight\n this.updateScrollTop()\n this.emitter.emit('did-change-config')\n }))\n subs.add(atom.config.observe('minimap.charWidth', opts, (configCharWidth) => {\n this.configCharWidth = configCharWidth\n this.updateScrollTop()\n this.emitter.emit('did-change-config')\n }))\n subs.add(atom.config.observe('minimap.interline', opts, (configInterline) => {\n this.configInterline = configInterline\n this.updateScrollTop()\n this.emitter.emit('did-change-config')\n }))\n subs.add(atom.config.observe('minimap.independentMinimapScroll', opts, (independentMinimapScroll) => {\n this.independentMinimapScroll = independentMinimapScroll\n this.updateScrollTop()\n }))\n subs.add(atom.config.observe('minimap.scrollSensitivity', opts, (scrollSensitivity) => {\n this.scrollSensitivity = scrollSensitivity\n }))\n subs.add(atom.config.observe('minimap.redrawDelay', opts, (redrawDelay) => {\n this.redrawDelay = redrawDelay\n }))\n // cdprr is shorthand for configDevicePixelRatioRounding\n subs.add(atom.config.observe(\n 'minimap.devicePixelRatioRounding',\n opts,\n (cdprr) => {\n this.configDevicePixelRatioRounding = cdprr\n this.updateScrollTop()\n this.emitter.emit('did-change-config')\n }\n ))\n\n return subs\n }\n\n /**\n * Returns `true` when the current Minimap is a stand-alone minimap.\n *\n * @return {boolean} whether this Minimap is in stand-alone mode or not.\n */\n isStandAlone () { return this.standAlone }\n\n /**\n * Sets the stand-alone mode for this minimap.\n *\n * @param {boolean} standAlone the new state of the stand-alone mode for this\n * Minimap\n * @emits {did-change-stand-alone} if the stand-alone mode have been toggled\n * on or off by the call\n */\n setStandAlone (standAlone) {\n if (standAlone !== this.standAlone) {\n this.standAlone = standAlone\n this.emitter.emit('did-change-stand-alone', this)\n }\n }\n\n /**\n * Returns the `TextEditor` that this minimap represents.\n *\n * @return {TextEditor} this Minimap's text editor\n */\n getTextEditor () { return this.textEditor }\n\n /**\n * Returns the `TextEditorElement` for the Minimap's `TextEditor`.\n *\n * @return {TextEditorElement} the minimap's text editor element\n */\n getTextEditorElement () {\n if (this.editorElement) { return this.editorElement }\n\n this.editorElement = atom.views.getView(this.getTextEditor())\n return this.editorElement\n }\n\n /**\n * Returns the height of the `TextEditor` at the Minimap scale.\n *\n * @return {number} the scaled height of the text editor\n */\n getTextEditorScaledHeight () {\n return this.adapter.getHeight() * this.getVerticalScaleFactor()\n }\n\n /**\n * Returns the `TextEditor` scroll top value at the Minimap scale.\n *\n * @return {number} the scaled scroll top of the text editor\n */\n getTextEditorScaledScrollTop () {\n return this.adapter.getScrollTop() * this.getVerticalScaleFactor()\n }\n\n /**\n * Returns the `TextEditor` scroll left value at the Minimap scale.\n *\n * @return {number} the scaled scroll left of the text editor\n */\n getTextEditorScaledScrollLeft () {\n return this.adapter.getScrollLeft() * this.getHorizontalScaleFactor()\n }\n\n /**\n * Returns the `TextEditor` maximum scroll top value.\n *\n * When the `scrollPastEnd` setting is enabled, the method compensate the\n * extra scroll by removing the same height as added by the editor from the\n * final value.\n *\n * @return {number} the maximum scroll top of the text editor\n */\n getTextEditorMaxScrollTop () { return this.adapter.getMaxScrollTop() }\n\n /**\n * Returns the `TextEditor` scroll top value.\n *\n * @return {number} the scroll top of the text editor\n */\n getTextEditorScrollTop () { return this.adapter.getScrollTop() }\n\n /**\n * Sets the scroll top of the `TextEditor`.\n *\n * @param {number} scrollTop the new scroll top value\n */\n setTextEditorScrollTop (scrollTop, ignoreTextEditorScroll = false) {\n this.ignoreTextEditorScroll = ignoreTextEditorScroll\n this.adapter.setScrollTop(scrollTop)\n }\n\n /**\n * Returns the `TextEditor` scroll left value.\n *\n * @return {number} the scroll left of the text editor\n */\n getTextEditorScrollLeft () { return this.adapter.getScrollLeft() }\n\n /**\n * Returns the height of the `TextEditor`.\n *\n * @return {number} the height of the text editor\n */\n getTextEditorHeight () { return this.adapter.getHeight() }\n\n /**\n * Returns the `TextEditor` scroll as a value normalized between `0` and `1`.\n *\n * When the `scrollPastEnd` setting is enabled the value may exceed `1` as the\n * maximum scroll value used to compute this ratio compensate for the extra\n * height in the editor. **Use {@link getCapedTextEditorScrollRatio} when\n * you need a value that is strictly between `0` and `1`.**\n *\n * @return {number} the scroll ratio of the text editor\n */\n getTextEditorScrollRatio () {\n return this.adapter.getScrollTop() / (this.getTextEditorMaxScrollTop() || 1)\n }\n\n /**\n * Returns the `TextEditor` scroll as a value normalized between `0` and `1`.\n *\n * The returned value will always be strictly between `0` and `1`.\n *\n * @return {number} the scroll ratio of the text editor strictly between\n * 0 and 1\n */\n getCapedTextEditorScrollRatio () {\n return Math.min(1, this.getTextEditorScrollRatio())\n }\n\n /**\n * Returns the height of the whole minimap in pixels based on the `minimap`\n * settings.\n *\n * @return {number} the height of the minimap\n */\n getHeight () {\n return this.textEditor.getScreenLineCount() * this.getLineHeight()\n }\n\n /**\n * Returns the width of the whole minimap in pixels based on the `minimap`\n * settings.\n *\n * @return {number} the width of the minimap\n */\n getWidth () {\n return this.textEditor.getMaxScreenLineLength() * this.getCharWidth()\n }\n\n /**\n * Returns the height the Minimap content will take on screen.\n *\n * When the Minimap height is greater than the `TextEditor` height, the\n * `TextEditor` height is returned instead.\n *\n * @return {number} the visible height of the Minimap\n */\n getVisibleHeight () {\n return Math.min(this.getScreenHeight(), this.getHeight())\n }\n\n /**\n * Returns the height the minimap should take once displayed, it's either\n * the height of the `TextEditor` or the provided `height` when in stand-alone\n * mode.\n *\n * @return {number} the total height of the Minimap\n */\n getScreenHeight () {\n if (this.isStandAlone()) {\n if (this.height != null) {\n return this.height\n } else {\n return this.getHeight()\n }\n } else {\n return this.adapter.getHeight()\n }\n }\n\n /**\n * Returns the width the whole Minimap will take on screen.\n *\n * @return {number} the width of the Minimap when displayed\n */\n getVisibleWidth () {\n return Math.min(this.getScreenWidth(), this.getWidth())\n }\n\n /**\n * Returns the width the Minimap should take once displayed, it's either the\n * width of the Minimap content or the provided `width` when in standAlone\n * mode.\n *\n * @return {number} the Minimap screen width\n */\n getScreenWidth () {\n if (this.isStandAlone() && this.width != null) {\n return this.width\n } else {\n return this.getWidth()\n }\n }\n\n /**\n * Sets the preferred height and width when in stand-alone mode.\n *\n * This method is called by the for this Minimap so that\n * the model is kept in sync with the view.\n *\n * @param {number} height the new height of the Minimap\n * @param {number} width the new width of the Minimap\n */\n setScreenHeightAndWidth (height, width) {\n if (this.width !== width || this.height !== height) {\n this.height = height\n this.width = width\n this.updateScrollTop()\n }\n }\n\n /**\n * Returns the vertical scaling factor when converting coordinates from the\n * `TextEditor` to the Minimap.\n *\n * @return {number} the Minimap vertical scaling factor\n */\n getVerticalScaleFactor () {\n return this.getLineHeight() / this.textEditor.getLineHeightInPixels()\n }\n\n /**\n * Returns the horizontal scaling factor when converting coordinates from the\n * `TextEditor` to the Minimap.\n *\n * @return {number} the Minimap horizontal scaling factor\n */\n getHorizontalScaleFactor () {\n return this.getCharWidth() / this.textEditor.getDefaultCharWidth()\n }\n\n /**\n * Returns the height of a line in the Minimap in pixels.\n *\n * @return {number} a line's height in the Minimap\n */\n getLineHeight () { return this.getCharHeight() + this.getInterline() }\n\n /**\n * Returns the width of a character in the Minimap in pixels.\n *\n * @return {number} a character's width in the Minimap\n */\n getCharWidth () {\n if (this.charWidth != null) {\n return this.charWidth\n } else {\n return this.configCharWidth\n }\n }\n\n /**\n * Sets the char width for this Minimap. This value will override the\n * value from the config for this instance only. A `did-change-config`\n * event is dispatched.\n *\n * @param {number} charWidth the new width of a char in the Minimap\n * @emits {did-change-config} when the value is changed\n */\n setCharWidth (charWidth) {\n this.charWidth = Math.floor(charWidth)\n this.emitter.emit('did-change-config')\n }\n\n /**\n * Returns the height of a character in the Minimap in pixels.\n *\n * @return {number} a character's height in the Minimap\n */\n getCharHeight () {\n if (this.charHeight != null) {\n return this.charHeight\n } else {\n return this.configCharHeight\n }\n }\n\n /**\n * Sets the char height for this Minimap. This value will override the\n * value from the config for this instance only. A `did-change-config`\n * event is dispatched.\n *\n * @param {number} charHeight the new height of a char in the Minimap\n * @emits {did-change-config} when the value is changed\n */\n setCharHeight (charHeight) {\n this.charHeight = Math.floor(charHeight)\n this.emitter.emit('did-change-config')\n }\n\n /**\n * Returns the height of an interline in the Minimap in pixels.\n *\n * @return {number} the interline's height in the Minimap\n */\n getInterline () {\n if (this.interline != null) {\n return this.interline\n } else {\n return this.configInterline\n }\n }\n\n /**\n * Sets the interline height for this Minimap. This value will override the\n * value from the config for this instance only. A `did-change-config`\n * event is dispatched.\n *\n * @param {number} interline the new height of an interline in the Minimap\n * @emits {did-change-config} when the value is changed\n */\n setInterline (interline) {\n this.interline = Math.floor(interline)\n this.emitter.emit('did-change-config')\n }\n\n /**\n * Returns the status of devicePixelRatioRounding in the Minimap.\n *\n * @return {boolean} the devicePixelRatioRounding status in the Minimap\n */\n getDevicePixelRatioRounding () {\n if (this.devicePixelRatioRounding != null) {\n return this.devicePixelRatioRounding\n } else {\n return this.configDevicePixelRatioRounding\n }\n }\n\n /**\n * Sets the devicePixelRatioRounding status for this Minimap.\n * This value will override the value from the config for this instance only.\n * A `did-change-config` event is dispatched.\n *\n * @param {boolean} devicePixelRatioRounding the new status of\n * devicePixelRatioRounding\n * in the Minimap\n * @emits {did-change-config} when the value is changed\n */\n setDevicePixelRatioRounding (devicePixelRatioRounding) {\n this.devicePixelRatioRounding = devicePixelRatioRounding\n this.emitter.emit('did-change-config')\n }\n\n /**\n * Returns the devicePixelRatio in the Minimap in pixels.\n *\n * @return {number} the devicePixelRatio in the Minimap\n */\n getDevicePixelRatio () {\n return this.getDevicePixelRatioRounding()\n ? Math.floor(devicePixelRatio)\n : devicePixelRatio\n }\n\n /**\n * Returns the index of the first visible row in the Minimap.\n *\n * @return {number} the index of the first visible row\n */\n getFirstVisibleScreenRow () {\n return Math.floor(this.getScrollTop() / this.getLineHeight())\n }\n\n /**\n * Returns the index of the last visible row in the Minimap.\n *\n * @return {number} the index of the last visible row\n */\n getLastVisibleScreenRow () {\n return Math.ceil(\n (this.getScrollTop() + this.getScreenHeight()) / this.getLineHeight()\n )\n }\n\n /**\n * Returns true when the `independentMinimapScroll` setting have been enabled.\n *\n * @return {boolean} whether the minimap can scroll independently\n */\n scrollIndependentlyOnMouseWheel () { return this.independentMinimapScroll }\n\n /**\n * Returns the current scroll of the Minimap.\n *\n * The Minimap can scroll only when its height is greater that the height\n * of its `TextEditor`.\n *\n * @return {number} the scroll top of the Minimap\n */\n getScrollTop () {\n return this.standAlone || this.independentMinimapScroll\n ? this.scrollTop\n : this.getScrollTopFromEditor()\n }\n\n /**\n * Sets the minimap scroll top value when in stand-alone mode.\n *\n * @param {number} scrollTop the new scroll top for the Minimap\n * @emits {did-change-scroll-top} if the Minimap's stand-alone mode is enabled\n */\n setScrollTop (scrollTop) {\n this.scrollTop = Math.max(0, Math.min(this.getMaxScrollTop(), scrollTop))\n\n if (this.standAlone || this.independentMinimapScroll) {\n this.emitter.emit('did-change-scroll-top', this)\n }\n }\n\n /**\n * Returns the minimap scroll as a ration between 0 and 1.\n *\n * @return {number} the minimap scroll ratio\n */\n getScrollRatio () {\n return this.getScrollTop() / this.getMaxScrollTop()\n }\n\n /**\n * Updates the scroll top value with the one computed from the text editor\n * when the minimap is in the independent scrolling mode.\n *\n * @access private\n */\n updateScrollTop () {\n if (this.independentMinimapScroll) {\n try {\n this.setScrollTop(this.getScrollTopFromEditor())\n } catch (err) {\n\n }\n this.emitter.emit('did-change-scroll-top', this)\n }\n }\n\n /**\n * Returns the scroll top as computed from the text editor scroll top.\n *\n * @return {number} the computed scroll top value\n */\n getScrollTopFromEditor () {\n return Math.abs(\n this.getCapedTextEditorScrollRatio() * this.getMaxScrollTop()\n )\n }\n\n /**\n * Returns the maximum scroll value of the Minimap.\n *\n * @return {number} the maximum scroll top for the Minimap\n */\n getMaxScrollTop () {\n return Math.max(0, this.getHeight() - this.getScreenHeight())\n }\n\n /**\n * Returns `true` when the Minimap can scroll.\n *\n * @return {boolean} whether this Minimap can scroll or not\n */\n canScroll () { return this.getMaxScrollTop() > 0 }\n\n /**\n * Updates the minimap scroll top value using a mouse event when the\n * independent scrolling mode is enabled\n *\n * @param {MouseEvent} event the mouse wheel event\n * @access private\n */\n onMouseWheel (event) {\n if (this.scrollIndependentlyOnMouseWheel()) {\n event.stopPropagation()\n\n if (!this.canScroll()) { return }\n\n const { wheelDeltaY } = event\n const previousScrollTop = this.getScrollTop()\n const updatedScrollTop = previousScrollTop - Math.round(wheelDeltaY * this.scrollSensitivity)\n\n event.preventDefault()\n this.setScrollTop(updatedScrollTop)\n }\n }\n\n /**\n * Delegates to `TextEditor#getMarker`.\n *\n * @access private\n */\n getMarker (id) { return this.textEditor.getMarker(id) }\n\n /**\n * Delegates to `TextEditor#findMarkers`.\n *\n * @access private\n */\n findMarkers (o) {\n try {\n return this.textEditor.findMarkers(o)\n } catch (error) {\n return []\n }\n }\n\n /**\n * Delegates to `TextEditor#markBufferRange`.\n *\n * @access private\n */\n markBufferRange (range) { return this.textEditor.markBufferRange(range) }\n\n /**\n * Emits a change events with the passed-in changes as data.\n *\n * @param {Object} changes a change to dispatch\n * @access private\n */\n emitChanges (changes) { this.emitter.emit('did-change', changes) }\n\n /**\n * Enables the cache at the adapter level to avoid consecutive access to the\n * text editor API during a render phase.\n *\n * @access private\n */\n enableCache () { this.adapter.enableCache() }\n\n /**\n * Disable the adapter cache.\n *\n * @access private\n */\n clearCache () { this.adapter.clearCache() }\n\n editorDestroyed () { this.adapter.editorDestroyed() }\n}\n\nMinimap.initClass()\n","{\n \"plugins\": {\n \"type\": \"object\",\n \"properties\": {}\n },\n \"autoToggle\": {\n \"title\": \"Show Minimap On Atom Start\",\n \"type\": \"boolean\",\n \"default\": true,\n \"order\": 1\n },\n \"displayMinimapOnLeft\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"order\": 2\n },\n \"displayCodeHighlights\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"Toggles the render of the buffer tokens in the minimap.\",\n \"order\": 3\n },\n \"displayPluginsControls\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"You need to restart Atom for this setting to be effective.\",\n \"order\": 4\n },\n \"minimapScrollIndicator\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"Toggles the display of a side line showing which part of the buffer is currently displayed by the minimap. This side line will only appear if the minimap is taller than the editor view height.\",\n \"order\": 5\n },\n \"adjustMinimapWidthToSoftWrap\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"If this option is enabled and Soft Wrap is checked then the Minimap max width is set to the Preferred Line Length value.\",\n \"order\": 6\n },\n \"adjustMinimapWidthOnlyIfSmaller\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"If this option and `adjustMinimapWidthToSoftWrap` are enabled the minimap width will never go past the limit sets by CSS. On the other hand, when disabled the minimap will expand to honor the preferred line width.\",\n \"order\": 7\n },\n \"ignoreWhitespacesInTokens\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"When enabled, text editor tokens are rendered as plain blocks, with no regards to the whitespaces they contains.\",\n \"order\": 8\n },\n \"charWidth\": {\n \"type\": \"number\",\n \"default\": 1,\n \"minimum\": 0.5,\n \"order\": 9\n },\n \"charHeight\": {\n \"type\": \"number\",\n \"default\": 2,\n \"minimum\": 0.5,\n \"order\": 10\n },\n \"interline\": {\n \"type\": \"number\",\n \"default\": 1,\n \"minimum\": 0,\n \"description\": \"The space between lines in the minimap in pixels.\",\n \"order\": 11\n },\n \"textOpacity\": {\n \"type\": \"number\",\n \"default\": 0.6,\n \"minimum\": 0,\n \"maximum\": 1,\n \"description\": \"The opacity used to render the line's text in the minimap.\",\n \"order\": 12\n },\n \"moveCursorOnMinimapClick\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Moves the cursor to the beginning of the target line when clicking on the minimap\",\n \"order\": 13\n },\n \"independentMinimapScroll\": {\n \"type\": \"boolean\",\n \"title\": \"Independent Minimap Scroll On Mouse Wheel Events\",\n \"default\": false,\n \"description\": \"When enabled, using the mouse wheel over the Minimap will make it scroll independently of the text editor. The Minimap will still sync with the editor whenever the editor is scrolled, but it will no longer relay the mouse wheel events to the editor.\",\n \"order\": 14\n },\n \"scrollSensitivity\": {\n \"type\": \"number\",\n \"default\": 0.5,\n \"description\": \"The scrolling speed when the `Independent Minimap Scroll On Mouse Wheel Events` setting is enabled.\",\n \"order\": 15\n },\n \"smoothScrolling\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Whether to offset the minimap canvas when scrolling to keep the scroll smooth. When `true` the minimap canvas will be offseted, resulting in a smoother scroll, but with the side-effect of a blurry minimap when the canvas is placed between pixels. When `false` the canvas will always stay at the same position, and will never look blurry, but the scroll will appear more jagged.\",\n \"order\": 16\n },\n \"createPluginInDevMode\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"order\": 17\n },\n \"absoluteMode\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"When enabled the text editor content will be able to flow below the minimap.\",\n \"order\": 18\n },\n \"adjustAbsoluteModeHeight\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"When enabled and `Absolute Mode` is also enabled, the minimap height will be adjusted to only take the space required by the text editor content, leaving the space below triggering mouse events on the text editor. **Be aware this can have some impact on performances as the minimap canvases will be resized every time a change in the editor make its height change.**\",\n \"order\": 19\n },\n \"redrawDelay\": {\n \"type\": \"number\",\n \"default\": 400,\n \"minimum\": 0,\n \"maximum\": 2000,\n \"description\": \"Controls how often (in ms) the minimap should redraw itself after changing the text editor's contents. Setting this to 100ms or higher could dramatically improve editor responsiveness when working with large files. A value of 0 will cause the minimap to redraw itself immediately on each change.\",\n \"order\": 20\n },\n \"devicePixelRatioRounding\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"Toggles the rounding of the devicePixelRatio in the minimap.\",\n \"order\": 21\n },\n \"useHardwareAcceleration\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"order\": 22\n },\n \"scrollAnimation\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Enables animations when scrolling by clicking on the minimap.\",\n \"order\": 23\n },\n \"scrollAnimationDuration\": {\n \"type\": \"integer\",\n \"default\": 300,\n \"description\": \"The duration of scrolling animations when clicking on the minimap.\",\n \"order\": 24\n },\n \"maxTokensInOneLine\": {\n \"type\": \"integer\",\n \"default\": 160,\n \"description\": \"The maximum number of tokens that are rendered for each line.\",\n \"order\": 25\n }\n}\n"],"names":["$parcel$interopDefault","a","__esModule","default","$parcel$defineInteropFlag","Object","defineProperty","value","$parcel$export","e","n","v","get","enumerable","$parcel$exportWildcard","dest","source","keys","forEach","key","_defineProperties","target","props","i","length","descriptor","configurable","writable","_createClass","Constructor","protoProps","staticProps","prototype","$b3508082ccc94ac5632836bea625b504$exports","Disposable","disposalAction","instance","this","TypeError","_classCallCheck","disposed","object","dispose","undefined","assertDisposable","disposable","$b3508082ccc94ac5632836bea625b504$init","isDisposable","$af49f9500b071793f41183c3fc968f0a$exports","CompositeDisposable","disposables","Set","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","arguments","Symbol","iterator","next","done","add","err","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","delete","remove","clear","Emitter","exceptionHandler","_this","exceptionHandlers","dispatch","exceptionHandlingDispatch","push","splice","indexOf","simpleDispatch","handler","exception","map","subscriptions","handlersByEventName","eventName","unshift","_this2","Error","cleanup","off","on","handlerToRemove","handlers","handlerIndex","handlersCopy","slice","constructor","_this3","promises","Promise","all","then","resolve","result","_arr","_i","$fd6b7bc94644b0899385e1f27c8552ee$exports","$9dce6407d6c20f090b719e685f463558$exports","$9dce6407d6c20f090b719e685f463558$export$Disposable","$9dce6407d6c20f090b719e685f463558$export$CompositeDisposable","Deprecation","getRawStack","grim","$55ca347d8fd6b60a0596d30a3398bf05$exports","message","fileName","lineNumber","callCount","stackCount","stacks","stackCallCounts","getFunctionNameFromCallsite","callsite","deserialize","_arg","deprecation","stack","_len","addStack","metadata","_ref","_ref1","_ref2","functionName","isToplevel","getFunctionName","isConstructor","getMethodName","getTypeName","getLocationFromCallsite","location","isNative","isEval","getEvalOrigin","getFileName","getLineNumber","getColumnNumber","getFileNameFromCallSite","getOriginName","originName","getMessage","getStacks","parsedStack","parsedStacks","parseStack","getStackCount","getCallCount","callerLocation","_base","_base1","serialize","$parcel$global","__grim__","deprecations","emitter","includeDeprecatedAPIs","getDeprecations","deprecationsByLineNumber","deprecationsByPackage","packageName","getDeprecationsLength","clearDeprecations","logDeprecations","sort","b","console","warn","deprecate","deprecationSite","error","originalStackTraceLimit","_base2","stackTraceLimit","emit","addSerializedDeprecation","serializedDeprecation","callback","originalPrepareStackTrace","prepareStackTrace","captureStackTrace","$80d5aeff13b5e95dd4619c4d698db1a2$exports","ExcludedClassProperties","ExcludedPrototypeProperties","Mixin","name","$84a20617969a4e0be8ad9de594d71d32$exports","extended","includeInto","extend","hasOwnProperty","included","call","getOwnPropertyNames","$84a20617969a4e0be8ad9de594d71d32$init","$19edd3126c29b080bf570893ee7faab0$exports","Ancestors","[object Object]","node","selector","parents","eachParent","parent","matches","block","results","parentNode","queryParentSelectorAll","queryParentSelector","_atom","$5b96436dbc0d4206c11cec76d6a355c8$exports","addDisposableEventListener","event","listener","options","addEventListener","removeEventListener","Batch","batch","size","topLevel","bottomLevel","level","fn","process","fns","getState","element","isCollection","obj","Array","isArray","toArray","collection","array","isElement","nodeType","getOption","defaultValue","VERSION","root","self","global","Function","ArrayProto","ObjProto","SymbolProto","toString","supportsArrayBuffer","ArrayBuffer","nativeIsArray","nativeKeys","nativeCreate","create","nativeIsView","isView","_isNaN","isNaN","_isFinite","isFinite","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","MAX_ARRAY_INDEX","Math","restArguments","func","startIndex","max","rest","index","args","apply","isObject","type","isNull","isUndefined","isBoolean","$9fc98e209433ac2812e546610c2637dd$export$toString","tagTester","$a9b65e2b2c5b6b34003888032e2e223d$export$default","$9fc98e209433ac2812e546610c2637dd$export$nativeIsArray","isFunction","nodelist","$9fc98e209433ac2812e546610c2637dd$export$root","document","childNodes","Int8Array","has","$9fc98e209433ac2812e546610c2637dd$export$hasOwnProperty","isArguments","$7d72039ada400a78e9dd98e7ac775ceb$export$default","$35f8dcbb5c4506cdc1fef81f7b2390bd$export$default","$9fc98e209433ac2812e546610c2637dd$export$_isFinite","parseFloat","$cde99bd150d2a95eccef5cecb685e45e$export$default","$9fc98e209433ac2812e546610c2637dd$export$_isNaN","constant","createSizePropertyCheck","getSizeProperty","sizeProperty","$9fc98e209433ac2812e546610c2637dd$export$MAX_ARRAY_INDEX","shallowProperty","$3d79eecad9df89c6f214bb90b1b82f89$export$default","isTypedArray","$9fc98e209433ac2812e546610c2637dd$export$nativeIsView","$3cbb4544a0dfa2431bf51c0b6984e0d0$export$default","$24499c1fc94640d17833c1e369853250$export$default","typedArrayPattern","test","$3997a5e056cdb72f6fc7001aafc07dde$export$default","$4d88334fdfecaba5dc0c5ea08e3d6760$export$default","$9fc98e209433ac2812e546610c2637dd$export$supportsArrayBuffer","$901465c5f1947022cb944fbfeb0f665f$export$default","$b12b67ed6dc3e9bfa803ece8df2d3494$export$default","collectNonEnumProps","hash","l","contains","emulatedSet","nonEnumIdx","$9fc98e209433ac2812e546610c2637dd$export$nonEnumerableProps","proto","$e0b8c83e6ebbaf38f398e63e4ce55b3f$export$default","$9fc98e209433ac2812e546610c2637dd$export$ObjProto","prop","$4dbd58b737f57cecb18af24d3c9e3afa$export$default","$9fc98e209433ac2812e546610c2637dd$export$nativeKeys","$9fc98e209433ac2812e546610c2637dd$export$hasEnumBug","$cd583eeb44c61d449275b672fed8486a$export$default","isEmpty","$f016e8c987a9967d114688f575fc5e00$export$default","$f23e86db99050b1fca1fc8a752c4c246$export$default","$348dcb7d8d919c5683cf9c95fc453392$export$default","$63fadb644861edde6c3e936292bd6f93$export$default","$d6246ecc671fbc8d098d9823982714c6$export$default","isMatch","attrs","_keys","_","_wrapped","$9fc98e209433ac2812e546610c2637dd$export$VERSION","valueOf","toJSON","String","eq","aStack","bStack","deepEq","$b5117a6221a90ca615d83480bbc71e9d$export$default","className","$9fc98e209433ac2812e546610c2637dd$export$SymbolProto","DataView","byteLength","getUint8","$76689a96aeb2f2579b0857a7addc9bfc$export$default","buffer","areArrays","aCtor","bCtor","pop","isEqual","allKeys","values","pairs","invert","functions","names","createAssigner","keysFunc","defaults","$c391466339f791f97e34b450f508b291$export$default","$2a956c71211716d00e01778c558d081d$export$default","baseCreate","$9fc98e209433ac2812e546610c2637dd$export$nativeCreate","Ctor","$f3701e598e19692de43c22dd818f7415$export$default","$d9aae3a9c4b607e8b5d2f5e848da8777$export$default","clone","$6058d122b8eb41f4b2b6bf9795377d03$export$default","tap","interceptor","path","identity","matcher","$60d387edab5f035c465b8119cecd3838$export$default","deepGet","property","$5e70335596febcfeb7dc08e2d074ee45$export$default","optimizeCb","context","argCount","accumulator","baseIteratee","$d5277c8b5b8e82374b856fbda4af981a$export$default","$d2f3a4dec8e7c1c52a4d5725693cd19c$export$default","$ea6a2239e270f179c8d131ea406f64d2$export$default","$0e7da0cef898e7c6c0abbf452915347e$export$default","iteratee","$7bbec27c266626fdcbe4957d09a4ddb9$export$default","Infinity","cb","$884aee35d983d6adb169a7bdff9cbe52$export$default","mapObject","$b8dee4d6b9e1e61e4a7c78289aab2000$export$default","currentKey","noop","propertyOf","times","accum","random","min","floor","Date","now","getTime","createEscaper","escaper","match","join","testRegexp","RegExp","replaceRegexp","string","replace","&","<",">","\"","'","`","$06d9cd557178713dd87901a702694ad0$export$default","$310686b726f6dd6b9b4285977a9df538$export$default","$7ef3c71d7dc1a481487f017d0ffe7524$export$default","$15c57a793abc38c513c316178b79195d$export$default","templateSettings","evaluate","interpolate","escape","escapeChar","escapes","template","text","settings","oldSettings","$48e81fb22db6154713208cc30ac21c80$export$default","render","noMatch","offset","escapeRegExp","variable","data","fallback","uniqueId","prefix","id","idCounter","chain","_chain","executeBound","sourceFunc","boundFunc","callingContext","partial","$06a82467e0276d0eded815440f4757b1$export$default","boundArgs","placeholder","bound","position","$15939a41c115ea4f9b34f448b15ae537$export$default","callArgs","concat","flatten","input","depth","strict","output","idx","j","len","memoize","hasher","cache","address","wait","setTimeout","throttle","timeout","previous","later","leading","$b9e53753eacb13cd16e3daf35939feaa$export$default","throttled","_now","remaining","clearTimeout","trailing","cancel","debounce","immediate","debounced","callNow","$04d5cb308d5821a347575e7ccb079653$export$default","wrap","wrapper","$41e7b6e16e1e6df82f2616f4ce7635dc$export$default","negate","predicate","compose","start","after","before","memo","findKey","createPredicateIndexFinder","dir","$a717b990a6ee23385a268f4d3f57e14e$export$default","sortedIndex","low","high","mid","createIndexFinder","predicateFind","item","$9fc98e209433ac2812e546610c2637dd$export$slice","$034228496b8dc4926896543968de8b48$export$default","$7514a4a437ed42434cfaf54b25eb2ecb$export$default","$7556cf2b34044db2c55aa71d56593459$export$default","$8f2b0129aecd034f76ba2d49148160f4$export$default","find","$c52359a26f4e12c1c48c6b879819f6d7$export$default","findWhere","$ae38f25daf226194e7a4a008733f2b8c$export$default","each","createReduce","reducer","initial","filter","$bfe7f67b8f961db77765524ddd2d4226$export$default","list","reject","$3a6e55738d64fa413d41f55e32e79597$export$default","$55fa3203dcd545c4d681d8d429487b8d$export$default","every","some","fromIndex","guard","$918d6e04a7bb702035c5912b458e6622$export$default","$342a3fd593c95fd60c3ef0814c836638$export$default","pluck","$032212caa19fe89bb40de27c017a981e$export$default","where","computed","lastComputed","sample","$18d04281a7d83c460dcc3e2acd838fc3$export$default","$6f8789b4d804a609a4ef1d1864b8df15$export$default","last","rand","temp","shuffle","$5279219fa1a0e605e7340ced372e48bc$export$default","sortBy","$a30d54f47683c2aa2c3889f2811d1d48$export$default","criteria","left","right","group","behavior","partition","reStrSymbol","keyInObj","$5a8a2e2cecaaa01a1479ad72a7d63e21$export$default","$5bbf92ff484a3d884ba025f5dbbc31a6$export$default","first","$7e1e866980a1da4ff32cb9561925742e$export$default","$26a0033a6d0ce8604476c74dbcba3b0c$export$default","compact","Boolean","$60b90ec160a9c2ca9491dd4b76a4aa0a$export$default","uniq","isSorted","$f6ca052f51400e0ca199107db0c75c53$export$default","seen","intersection","argsLength","unzip","$f9153aced76ea534fa99f8a079317110$export$default","range","stop","step","ceil","chunk","count","chainResult","mixin","$52a52e066fb094fcfbaae0dc0692e70d$export$default","$9fc98e209433ac2812e546610c2637dd$export$push","$e76fd469f887abbd8ccc42b7c842b761$export$default","\\","\r","\n","
","
","$155aa8985af2db9d508a5e644d8f0d92$export$default","$14aded0641889420e1f289287da59ac5$export$default","$2ab19f985cb2087dfd2cffa114d99b38$export$default","$c9c715fed72676cfe4933c7819db366a$export$default","contextPath","method","$b5c701d764c65c06a97a0e6bd4284c64$export$default","pass","$9606dc9e72bcb851708023ec5af74bcc$export$default","otherArrays","$13764b773ce1dc831e67388200627ec7$export$default","arrays","$469f153267836b6467a4db37c1c57000$export$default","$9c37e334972a0861a9add3a6b0c00f9e$export$default","$9fc98e209433ac2812e546610c2637dd$export$ArrayProto","transparentize","color","opacity","computeIntactRanges","firstRow","lastRow","changes","offscreenFirstRow","offscreenLastRow","intactRanges","end","offscreenRow","change","newIntactRanges","intactLen","screenDelta","bufferDelta","truncateIntactRanges","include","cls","mixins","k","getOwnPropertyDescriptor","elementName","$34748a7cbc634b40e145cdae3623d7e8$exports","registerOrUpdateElement","class","updateOverlayStyle","basis","overlayStyle","textContent","extractMouseEventData","mouseEvent","x","pageX","y","pageY","isLeftMouse","button","isMiddleMouse","extractTouchEventData","touchEvent","touch","changedTouches","applyStyles","styles","cssText","style","makeTranslate","useHardwareAcceleration","makeScale","animate","from","to","duration","progress","update","passed","delta","cos","PI","swing","requestAnimationFrame","registerPlugin","plugin","plugins","pluginsSubscriptions","atom","config","settingsKey","orderSettingsKey","getConfigSchema","properties","title","description","set","observe","updatesPluginActivationState","order","updatePluginsOrderMap","commands","togglePluginActivation","registerPluginControls","unregisterPlugin","unregisterPluginControls","boolean","deactivateAllPlugins","eachPlugin","deactivatePlugin","pluginActive","isActive","settingActive","activatePlugin","pluginsOrderMap","getPluginsOrder","minimapViewProvider","model","Minimap","$debb34270446c1206b399aa33765d50d$export$default","setModel","$6353a4c6004c406435aadc8bd855d8b2$$interop$default","packages","getLoadedPackage","configSchema","toggle","active","toggled","editorsMinimaps","destroy","workspace","observeTextEditors","textEditor","minimap","minimapForEditor","minimapElement","views","getView","attach","async","generatePlugin","MinimapPluginGeneratorElement","$e72530f962e68d8c81126e9fd210cd32$exports","require","view","onDidActivate","onDidDeactivate","onDidCreateMinimap","onDidAddPlugin","onDidRemovePlugin","onDidActivatePlugin","onDidDeactivatePlugin","onDidChangePluginOrder","minimapClass","minimapForEditorElement","editorElement","getModel","editorSubscription","onDidDestroy","standAloneMinimapForEditor","standAlone","getActiveMinimap","getActiveTextEditor","observeMinimaps","DisposableEvents","NO_SELECTOR","eachPair","callbackProperties","decorateElementClass","decorateElementPrototype","globalThis","window","requirePackages","failures","remains","required","solved","pkg","failHandler","promise","reason","activatePackage","activatedPackage","mainModule","fail","catch","__CUSTOM_HTML_ELEMENTS_CLASSES__","__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__","ref","$b9dde26a6a947d47d80f4f84ebbe0c09$exports","nodeName","elementClass","elementPrototype","klass","HTMLElement","registerElement","$19edd3126c29b080bf570893ee7faab0$init","AncestorsMethods","$5b96436dbc0d4206c11cec76d6a355c8$init","EventsDelegation","$8986ead82370460f6f70f1bdf5a78483$exports","subscribeTo","events","disposablesForObject","eventsForObject","eventsMap","WeakMap","disposablesMap","createEventListener","unsubscribeFrom","decorateEvent","eachSelectorFromTarget","isPropagationStopped","nodeAndItsAncestors","eachSelector","matched","targetMatch","isImmediatePropagationStopped","split","overriddenStop","overriddenStopImmediate","Event","stopPropagation","stopImmediatePropagation","SpacePenDSL","BabelSpacePenDSL","Builder","SelfClosingTags","Tags","Template","tag","buildContent","content","$3ed32c12f72f0425c25152175eaf1ca9$exports","super","__content__","__create__","__createdCallback__","useShadowRoot","__useShadowRoot__","html","buildHtml","shadowRoot","createShadowRoot","innerHTML","wireOutlets","querySelectorAll","getAttribute","removeAttribute","Babel","currentBuilder","subview","tagName","raw","postProcessingSteps","extractOptions","openTag","attributes","closeTag","attributeName","attributePairs","attributesString","escapedString","outletName","subviewId","parentView","replaceWith","arg","$3ed32c12f72f0425c25152175eaf1ca9$init","$c139e7eff7ad63b8ef719478a7110893$exports","$944a832fe4bdae8ba9b729d6dd38def3$exports","stateHandler","isDetectable","state","markAsDetectable","isBusy","busy","markBusy","$2fd64cde67a354959885ca4cb5a55258$exports","idHandler","getListeners","eventListeners","removeListener","listeners","removeAllListeners","$0610affe2bd8d58567b675db9dd430a0$exports","idCount","generate","$d2c1e4b1fcb9ae37531751edaa87dee2$exports","idGenerator","$4a43573f59591a3d302987555bbffb6f$exports","quiet","reporter","log","attachFunction","f","detector","$44345ad28f1f44bce8808c63fff1df78$exports","isIE","version","agent","navigator","userAgent","toLowerCase","div","createElement","getElementsByTagName","undef","isLegacyOpera","opera","$d41b1795243785d2b4fb83045d8a9dde$exports","$57abeb119e956f5fa61c43d2d825c6c3$exports","processBatch","isProcessing","processingBatch","processBatchAsync","asyncFrameHandler","asyncProcess","autoProcess","force","localAsyncProcess","$31b74d61d0ec6a144b09a75c2bbc872c$exports","initState","cleanState","$bab776c2a10b8603241800727ab15d84$exports","buildCssTextString","rules","seperator","important","trim","getObject","batchProcessor","makeDetectable","mutateDom","alterPositionStyles","setProperty","removeRelativeStyles","getNumericalValue","positionCheckPerformed","OBJECT_STYLE","tabIndex","setAttribute","onload","getDocument","contentDocument","checkForObjectDocumentTimeoutId","objectDocument","appendChild","getComputedStyle","width","offsetWidth","height","offsetHeight","startSize","injectObject","addListener","listenerProxy","proxy","attachEvent","defaultView","uninstall","detachEvent","removeChild","$dd97c8cc568463fe64416c9556814fbf$exports","initDocument","targetDocument","styleId","containerClass","getElementById","containerAnimationClass","containerAnimationActiveClass","head","styleElement","injectStyle","injectScrollStyle","detectionContainerClass","addEvent","el","removeEvent","getExpandElement","container","getShrinkElement","scrollbarSizes","child","body","insertBefore","firstChild","widthSize","clientWidth","heightSize","clientHeight","getScrollbarSizes","debug","isUnrendered","getStyle","elementStyle","top","bottom","widthCSS","heightCSS","storeStyle","storeCurrentSize","lastWidth","lastHeight","getWidthOffset","getHeightOffset","getExpandWidth","getExpandHeight","positionScrollbars","expand","shrink","expandWidth","expandHeight","shrinkWidth","getShrinkWidth","shrinkHeight","getShrinkHeight","scrollLeft","scrollTop","injectContainerElement","addAnimationClass","onAnimationStart","onRendered","injectScrollElements","onExpandScroll","onExpand","onShrinkScroll","onShrink","rootContainer","scrollbarWidth","scrollbarHeight","containerContainerStyle","containerStyle","expandStyle","shrinkStyle","expandChildStyle","shrinkChildStyle","containerContainer","expandChild","shrinkChild","registerListenersAndPositionElements","updateChildSizes","getExpandChildElement","updateDetectorElements","sizeChanged","areElementsInjected","notifyListenersIfNeeded","lastNotifiedWidth","lastNotifiedHeight","handleScroll","finalizeDomMutation","ready","install","ownerDocument","isInDocument","isDetached","$f587f14a8facf4cc8ef1f41ca9a1ded5$exports","defaultIdHandler","globalOptions","callOnAdd","detectionStrategy","eventListenerHandler","elementUtils","desiredStrategy","importantCssRules","strategyOptions","onReadyCallbacks","listenTo","elements","onResizeCallback","elementsReady","onReadyCallback","isPlainObject","macModifierKeyMap","nonMacModifierKeyMap","plus","shiftKeyMap","splitKeyPath","__slice","$895375a7c29b7c56860aa3038611cf34$export$default","$33a2a2ed40f62219293b5fc15f2cac90$exports","cmd","ctrl","alt","option","shift","enter","up","down","~","+","|","{","}",":","?","keyPath","keyPathArray","substring","substr","adviseBefore","methodName","advice","original","camelize","m","toUpperCase","capitalize","word","compactObject","newObject","dasherize","letter","deepClone","deepExtend","deepContains","endsWith","suffix","escapeAttribute","humanizeEventName","eventDoc","namespace","namespaceDoc","undasherize","humanizeKey","platform","modifierKeyMap","humanizeKeystroke","keystroke","humanizedKeystrokes","keystrokes","splitKeystroke","_j","_len1","isSubset","potentialSubset","potentialSuperset","losslessInvert","inverted","multiplyString","finalString","pluralize","singular","plural","setValueForKeyPath","hasKeyPath","spliceWithArray","originalArray","insertedArray","chunkSize","chunkStart","_results","sum","uncamelcase","underscore","valueForKeyPath","isEqualForProperties","aCtorValid","aKeyCount","aValue","bCtorValid","bKeyCount","equal","stackIndex","isRegExp","$a7d4afabad3ac01364c7629a89eaa9d8$exports","CanvasLayer","canvas","desynchronized","getContext","webkitImageSmoothingEnabled","imageSmoothingEnabled","offscreenCanvas","offscreenContext","setSize","resetOffscreenSize","getSize","copyToOffscreen","drawImage","copyFromOffscreen","copyPartFromOffscreen","srcY","destY","clearCanvas","clearRect","DOMStylesReader","domStylesCache","Map","retrieveStyleFromDom","scopes","targetNode","cachedData","ensureDummyNodeExistence","dummyNode","scope","getPropertyValue","r","g","hue","Number","angle","clamp","num","matrix","lumR","lumG","lumB","sin","rotate","rotateHue","visibility","invalidateDOMStylesCache","CanvasDrawer","$84a20617969a4e0be8ad9de594d71d32$$interop$default","initializeCanvas","tokensLayer","$2a5b6563d747c2be4acb1e82885bc6f7$export$default","backLayer","frontLayer","pendingChanges","pendingBackDecorationChanges","pendingFrontDecorationChanges","maxTokensInOneLine","$3c592bd390ebd248ded065c23d62e662$export$default","getFrontCanvas","attachCanvases","setCanvasesSize","updateCanvas","getFirstVisibleScreenRow","getLastVisibleScreenRow","updateTokensLayer","updateBackDecorationsLayer","updateFrontDecorationsLayer","redrawRangesOnLayer","drawLines","drawBackDecorationsForLines","drawFrontDecorationsForLines","getTextOpacity","textOpacity","getDefaultColor","getTextEditorElement","getTokenColor","token","scopeDescriptor","getDecorationColor","decoration","getProperties","scopeString","layer","devicePixelRatio","getDevicePixelRatio","lineHeight","getLineHeight","intact","drawLinesForRanges","ranges","currentRow","offsetRow","charHeight","getCharHeight","charWidth","getCharWidth","decorations","decorationsByTypeThenRows","canvasWidth","canvasHeight","renderData","orders","screenRow","row","yRow","drawDecorations","line","drawLineDecoration","highlight-under","drawHighlightDecoration","background-custom","drawCustomDecoration","fill","gutter","drawGutterDecoration","highlight-over","highlight-outline","drawHighlightOutlineDecoration","foreground-custom","displayCodeHighlights","lastLine","startRow","endRow","editor","invisibleRegExp","invisibles","getInvisibles","regexp","cr","eol","space","tab","s","getInvisibleRegExp","getScreenLineCount","editorTokensForScreenRow","tokensForScreenRow","numTokenToRender","iToken","eachTokenForScreenRows","getTextEditor","ignoreWhitespacesInTokens","fillStyle","fillRect","chars","drawToken","types","decorationsToRender","getMarker","getScreenRange","rowSpan","column","bottomWidth","colSpan","xBottomStart","xEnd","xStart","yStart","yEnd","renderRoutine","minimapQuickSettingsElement","$346eedfd2280b61094ff36834414960f$export$default","$4a2375bcc1817d0a9f962e73140919e0$export$default","outlet","ol","li","createdCallback","selectedItem","itemsActions","subs","addItemFor","removeItemFor","activateItem","deactivateItem","core:move-up","selectPreviousItem","core:move-down","selectNextItem","core:cancel","core:confirm","toggleSelectedItem","codeHighlights","classList","mousedown","preventDefault","absoluteMode","adjustAbsoluteModeHeight","hiddenInput","focusout","passive","onLeftButton","onRightButton","bool","initList","focus","itemsDisposables","nextSibling","previousSibling","lastChild","action","separator","initClass","elementResizeDetector","$f587f14a8facf4cc8ef1f41ca9a1ded5$$interop$default","strategy","$34efbe603bf9c69c564095b34c55c63e$export$default","visibleAreaSubscription","quickSettingsSubscription","dragSubscription","openQuickSettingSubscription","displayMinimapOnLeft","minimapScrollIndicator","displayPluginsControls","adjustToSoftWrap","visibleArea","controls","scrollIndicator","openQuickSettings","quickSettingsElement","attached","attachedToTextEditor","wasVisible","frameRequested","flexBasis","initializeContent","updateMinimapFlexPosition","measureHeightAndWidth","initializeScrollIndicator","disposeScrollIndicator","requestUpdate","initializeOpenQuickSettings","disposeOpenQuickSettings","requestForcedUpdate","smoothScrolling","adjustOnlyIfSmaller","attachedCallback","pollDocument","pollDOM","intersectionObserver","IntersectionObserver","entries","intersectionRect","isVisible","measureDimensions","onDidAddStyleElement","subscribeToMediaQuery","detachedCallback","minimaps","detach","createVisibleArea","createControls","mousewheel","onMouseWheel","canvasPressed","touchstart","startDrag","removeVisibleArea","removeControls","$a29ceb2f6322deaf5d073c96eab152d9$export$default","getBoundingClientRect","onDidChangeScrollTop","onDidChangeScrollLeft","onDidChangeConfig","onDidChangeStandAlone","setStandAlone","isStandAlone","onDidChange","onDidChangeDecorationRange","setScreenHeightAndWidth","enableCache","visibleAreaLeft","getTextEditorScaledScrollLeft","visibleAreaTop","getTextEditorScaledScrollTop","getScrollTop","visibleWidth","round","getTextEditorScaledHeight","transform","border-left-width","canvasTop","canvasTransform","scale","canScroll","minimapScreenHeight","getScreenHeight","indicatorHeight","getHeight","indicatorScroll","getScrollRatio","updateCanvasesSize","clearCache","setDisplayCodeHighlights","visibilityChanged","checkForVisibilityChange","forceUpdate","safeFlexBasis","wasResized","lineLength","softWrap","softWrapAtPreferredLineLength","maxCanvasHeight","newHeight","canvasLeftMousePressed","canvasMiddleMousePressed","deltaY","textEditorElement","getLineHeightInPixels","getTextEditorHeight","textEditorScrollTop","pixelPositionForScreenPosition","setCursorScreenPosition","independentScroll","scrollIndependentlyOnMouseWheel","getTextEditorScrollTop","minimapFrom","minimapTo","getTextEditorMaxScrollTop","getMaxScrollTop","t","setTextEditorScrollTop","setScrollTop","offsetTop","ratio","getVisibleHeight","mediaQuery","matchMedia","mediaListener","dragOffset","mousemoveHandler","drag","dragendHandler","endDrag","touchmoveHandler","LegacyAdapter","Decoration","decorationProperties","marker","setProperties","destroyed","markerDestroyDisposable","screenRange","isDestroyed","onDidChangeProperties","getId","isType","newProperties","oldProperties","DecorationManagement","initializeDecorations","decorationsById","decorationsByMarkerId","decorationMarkerChangedSubscriptions","decorationMarkerDestroyedSubscriptions","decorationUpdatedSubscriptions","decorationDestroyedSubscriptions","getDecorations","onDidAddDecoration","onDidRemoveDecoration","onDidChangeDecoration","onDidUpdateDecoration","decorationForId","decorationsForScreenRowRange","startScreenRow","endScreenRow","markers","findMarkers","intersectsScreenRowRange","decorationsByTypeThenRowsCache","invalidateDecorationForScreenRowsCache","decorateMarker","decorationParams","filePath","re","getPackageDirPaths","sep","getOriginatorPackageName","removeAllDecorationsForMarker","emitDecorationChanges","oldStart","oldTailScreenPosition","oldEnd","oldHeadScreenPosition","newStart","newTailScreenPosition","newEnd","newHeadScreenPosition","rangesDiffs","diffs","isLessThan","computeRangesDiffs","emitRangeChanges","$99f4a57658bcf5b25fdd3cd827e7e8f8$export$default","removeDecoration","editorDestroyed","lastRenderedScreenRow","firstRenderedScreenRow","subscription","removedAllMarkerDecorations","adapter","removeAllDecorations","decorationMarkerChangedSubscriptionsValues","decorationMarkerDestroyedSubscriptionsValues","decorationUpdatedSubscriptionsValues","decorationDestroyedSubscriptionsValues","decorationsByIdValues","StableAdapter","useCache","heightCache","scrollTopCache","scrollLeftCache","maxScrollTopCache","computeScrollTop","lineTop","getScrollLeft","maxScrollTop","getVersion","scrollPastEnd","getScrollHeight","component","nextModelId","$ebaeaefd5eb0577755be85f4130ef5b5$export$default","configCharHeight","configCharWidth","interline","configInterline","devicePixelRatioRounding","configDevicePixelRatioRounding","redrawDelay","pendingChangeEvents","flushChangesTimer","$7b609095f03a15b7dc9e072c6962cc6b$export$default","notifications","addWarning","displayBuffer","configSubscription","subscribeToConfig","onDidChangeGrammar","ignoreTextEditorScroll","inChangeScrollTop","updateScrollTop","scheduleChanges","onDidTokenize","requestFlushChanges","flushChanges","emitChanges","requestedFlushChanges","cancelAnimationFrame","opts","getRootScopeDescriptor","independentMinimapScroll","scrollSensitivity","cdprr","getVerticalScaleFactor","getHorizontalScaleFactor","getTextEditorScrollLeft","getTextEditorScrollRatio","getCapedTextEditorScrollRatio","getWidth","getMaxScreenLineLength","getVisibleWidth","getScreenWidth","getDefaultCharWidth","getInterline","setCharWidth","setCharHeight","setInterline","getDevicePixelRatioRounding","setDevicePixelRatioRounding","getScrollTopFromEditor","abs","wheelDeltaY","updatedScrollTop","o","markBufferRange","JSON","parse","subscriptionsOfCommands","MinimapServiceV1"],"version":3,"file":"main.js.map"} \ No newline at end of file +{"mappings":"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","sources":["./node_modules/@parcel/scope-hoisting/lib/helpers.js","./node_modules/event-kit/dist/disposable.js","./node_modules/event-kit/dist/composite-disposable.js","./node_modules/event-kit/dist/emitter.js","./node_modules/event-kit/dist/event-kit.js","./node_modules/grim/lib/grim.js","./node_modules/grim/lib/deprecation.js","./node_modules/mixto/lib/mixin.js","./node_modules/atom-utils-plus/lib/mixins/ancestors.js","./node_modules/atom-utils-plus/lib/mixins/disposable-events.js","./node_modules/batch-processor/src/batch-processor.js","./node_modules/element-resize-detector/src/state-handler.js","./node_modules/element-resize-detector/src/element-resize-detector.js","./node_modules/underscore/modules/_setup.js","./node_modules/underscore/modules/restArguments.js","./node_modules/underscore/modules/isObject.js","./node_modules/underscore/modules/isNull.js","./node_modules/underscore/modules/isUndefined.js","./node_modules/underscore/modules/isBoolean.js","./node_modules/underscore/modules/isElement.js","./node_modules/underscore/modules/_tagTester.js","./node_modules/underscore/modules/isString.js","./node_modules/underscore/modules/isNumber.js","./node_modules/underscore/modules/isSymbol.js","./node_modules/underscore/modules/isDataView.js","./node_modules/underscore/modules/isArray.js","./node_modules/underscore/modules/isFunction.js","./node_modules/underscore/modules/_has.js","./node_modules/underscore/modules/isArguments.js","./node_modules/underscore/modules/isFinite.js","./node_modules/underscore/modules/isNaN.js","./node_modules/underscore/modules/constant.js","./node_modules/underscore/modules/_createSizePropertyCheck.js","./node_modules/underscore/modules/_shallowProperty.js","./node_modules/underscore/modules/_getByteLength.js","./node_modules/underscore/modules/isTypedArray.js","./node_modules/underscore/modules/_isBufferLike.js","./node_modules/underscore/modules/_getLength.js","./node_modules/underscore/modules/_isArrayLike.js","./node_modules/underscore/modules/_collectNonEnumProps.js","./node_modules/underscore/modules/keys.js","./node_modules/underscore/modules/isEmpty.js","./node_modules/underscore/modules/isMatch.js","./node_modules/underscore/modules/underscore.js","./node_modules/underscore/modules/isEqual.js","./node_modules/underscore/modules/allKeys.js","./node_modules/underscore/modules/values.js","./node_modules/underscore/modules/pairs.js","./node_modules/underscore/modules/invert.js","./node_modules/underscore/modules/functions.js","./node_modules/underscore/modules/_createAssigner.js","./node_modules/underscore/modules/extend.js","./node_modules/underscore/modules/extendOwn.js","./node_modules/underscore/modules/defaults.js","./node_modules/underscore/modules/_baseCreate.js","./node_modules/underscore/modules/create.js","./node_modules/underscore/modules/clone.js","./node_modules/underscore/modules/tap.js","./node_modules/underscore/modules/has.js","./node_modules/underscore/modules/identity.js","./node_modules/underscore/modules/matcher.js","./node_modules/underscore/modules/_deepGet.js","./node_modules/underscore/modules/property.js","./node_modules/underscore/modules/_optimizeCb.js","./node_modules/underscore/modules/_baseIteratee.js","./node_modules/underscore/modules/iteratee.js","./node_modules/underscore/modules/_cb.js","./node_modules/underscore/modules/mapObject.js","./node_modules/underscore/modules/noop.js","./node_modules/underscore/modules/propertyOf.js","./node_modules/underscore/modules/times.js","./node_modules/underscore/modules/random.js","./node_modules/underscore/modules/now.js","./node_modules/underscore/modules/_createEscaper.js","./node_modules/underscore/modules/_escapeMap.js","./node_modules/underscore/modules/_unescapeMap.js","./node_modules/underscore/modules/unescape.js","./node_modules/underscore/modules/templateSettings.js","./node_modules/underscore/modules/template.js","./node_modules/underscore/modules/result.js","./node_modules/underscore/modules/uniqueId.js","./node_modules/underscore/modules/chain.js","./node_modules/underscore/modules/_executeBound.js","./node_modules/underscore/modules/partial.js","./node_modules/underscore/modules/bind.js","./node_modules/underscore/modules/_flatten.js","./node_modules/underscore/modules/memoize.js","./node_modules/underscore/modules/delay.js","./node_modules/underscore/modules/throttle.js","./node_modules/underscore/modules/debounce.js","./node_modules/underscore/modules/wrap.js","./node_modules/underscore/modules/negate.js","./node_modules/underscore/modules/compose.js","./node_modules/underscore/modules/after.js","./node_modules/underscore/modules/before.js","./node_modules/underscore/modules/findKey.js","./node_modules/underscore/modules/_createPredicateIndexFinder.js","./node_modules/underscore/modules/findIndex.js","./node_modules/underscore/modules/findLastIndex.js","./node_modules/underscore/modules/sortedIndex.js","./node_modules/underscore/modules/_createIndexFinder.js","./node_modules/underscore/modules/indexOf.js","./node_modules/underscore/modules/find.js","./node_modules/underscore/modules/findWhere.js","./node_modules/underscore/modules/each.js","./node_modules/underscore/modules/map.js","./node_modules/underscore/modules/_createReduce.js","./node_modules/underscore/modules/filter.js","./node_modules/underscore/modules/reject.js","./node_modules/underscore/modules/every.js","./node_modules/underscore/modules/some.js","./node_modules/underscore/modules/contains.js","./node_modules/underscore/modules/pluck.js","./node_modules/underscore/modules/where.js","./node_modules/underscore/modules/max.js","./node_modules/underscore/modules/min.js","./node_modules/underscore/modules/sample.js","./node_modules/underscore/modules/shuffle.js","./node_modules/underscore/modules/sortBy.js","./node_modules/underscore/modules/_group.js","./node_modules/underscore/modules/toArray.js","./node_modules/underscore/modules/size.js","./node_modules/underscore/modules/_keyInObj.js","./node_modules/underscore/modules/pick.js","./node_modules/underscore/modules/initial.js","./node_modules/underscore/modules/first.js","./node_modules/underscore/modules/rest.js","./node_modules/underscore/modules/last.js","./node_modules/underscore/modules/compact.js","./node_modules/underscore/modules/flatten.js","./node_modules/underscore/modules/difference.js","./node_modules/underscore/modules/uniq.js","./node_modules/underscore/modules/intersection.js","./node_modules/underscore/modules/unzip.js","./node_modules/underscore/modules/object.js","./node_modules/underscore/modules/range.js","./node_modules/underscore/modules/chunk.js","./node_modules/underscore/modules/_chainResult.js","./node_modules/underscore/modules/mixin.js","./node_modules/underscore/modules/isDate.js","./node_modules/underscore/modules/isRegExp.js","./node_modules/underscore/modules/isError.js","./node_modules/underscore/modules/isMap.js","./node_modules/underscore/modules/isWeakMap.js","./node_modules/underscore/modules/isSet.js","./node_modules/underscore/modules/isWeakSet.js","./node_modules/underscore/modules/isArrayBuffer.js","./node_modules/underscore/modules/escape.js","./node_modules/underscore/modules/bindAll.js","./node_modules/underscore/modules/defer.js","./node_modules/underscore/modules/once.js","./node_modules/underscore/modules/lastIndexOf.js","./node_modules/underscore/modules/reduce.js","./node_modules/underscore/modules/reduceRight.js","./node_modules/underscore/modules/invoke.js","./node_modules/underscore/modules/groupBy.js","./node_modules/underscore/modules/indexBy.js","./node_modules/underscore/modules/countBy.js","./node_modules/underscore/modules/partition.js","./node_modules/underscore/modules/omit.js","./node_modules/underscore/modules/without.js","./node_modules/underscore/modules/union.js","./node_modules/underscore/modules/zip.js","./node_modules/underscore/modules/underscore-array-methods.js","./lib/mixins/canvas-drawer.js","./lib/decorators/include.js","./lib/decorators/element.js","./lib/minimap-element.js","./lib/plugin-management.js","./lib/main.js","./node_modules/@parcel/runtime-js/lib/JSRuntime.js","./node_modules/atom-utils-plus/lib/mixins/events-delegation.js","./node_modules/atom-utils-plus/lib/register-or-update-element.js","./node_modules/atom-utils-plus/lib/atom-utils.js","./node_modules/atom-utils-plus/lib/mixins/space-pen-dsl.js","./node_modules/element-resize-detector/src/collection-utils.js","./node_modules/element-resize-detector/src/element-utils.js","./node_modules/element-resize-detector/src/listener-handler.js","./node_modules/element-resize-detector/src/id-generator.js","./node_modules/element-resize-detector/src/id-handler.js","./node_modules/element-resize-detector/src/reporter.js","./node_modules/element-resize-detector/src/browser-detector.js","./node_modules/batch-processor/src/utils.js","./node_modules/element-resize-detector/src/detection-strategy/object.js","./node_modules/element-resize-detector/src/detection-strategy/scroll.js","./node_modules/underscore/modules/index-default.js","./node_modules/underscore-plus/lib/underscore-plus.js","./lib/canvas-layer.js","./lib/dom-styles-reader.js","./lib/minimap-quick-settings-element.js","./lib/adapters/legacy-adapter.js","./lib/decoration.js","./lib/decoration-management.js","./lib/adapters/stable-adapter.js","./lib/minimap.js","./lib/config.json"],"sourcesContent":["function $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true});\n}\n\nfunction $parcel$export(e, n, v) {\n Object.defineProperty(e, n, {get: v, enumerable: true});\n}\n\nfunction $parcel$exportWildcard(dest, source) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule') {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function get() {\n return source[key];\n },\n });\n });\n\n return dest;\n}\n\nfunction $parcel$missingModule(name) {\n var err = new Error(\"Cannot find module '\" + name + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n}\n\nvar $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// Essential: A handle to a resource that can be disposed. For example,\n// {Emitter::on} returns disposables representing subscriptions.\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n _createClass(Disposable, null, [{\n key: \"isDisposable\",\n // Public: Ensure that `object` correctly implements the `Disposable`\n // contract.\n //\n // * `object` An {Object} you want to perform the check against.\n //\n // Returns a {Boolean} indicating whether `object` is a valid `Disposable`.\n value: function isDisposable(object) {\n return typeof (object != null ? object.dispose : undefined) === \"function\";\n }\n /*\n Section: Construction and Destruction\n */\n // Public: Construct a Disposable\n //\n // * `disposalAction` A {Function} to call when {::dispose} is called for the\n // first time.\n\n }]);\n\n function Disposable(disposalAction) {\n _classCallCheck(this, Disposable);\n\n this.disposed = false;\n this.disposalAction = disposalAction;\n } // Public: Perform the disposal action, indicating that the resource associated\n // with this disposable is no longer needed.\n //\n // You can call this method more than once, but the disposal action will only\n // be performed the first time.\n\n\n _createClass(Disposable, [{\n key: \"dispose\",\n value: function dispose() {\n if (!this.disposed) {\n this.disposed = true;\n\n if (typeof this.disposalAction === \"function\") {\n this.disposalAction();\n }\n\n this.disposalAction = null;\n }\n }\n }]);\n\n return Disposable;\n}();","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar CompositeDisposable;\nvar Disposable; // Essential: An object that aggregates multiple {Disposable} instances together\n// into a single disposable, so they can all be disposed as a group.\n//\n// These are very useful when subscribing to multiple events.\n//\n// ## Examples\n//\n// ```js\n// const {CompositeDisposable} = require('atom')\n//\n// class Something {\n// constructor() {\n// this.disposables = new CompositeDisposable()\n// const editor = atom.workspace.getActiveTextEditor()\n// this.disposables.add(editor.onDidChange(() => {})\n// this.disposables.add(editor.onDidChangePath(() => {})\n// }\n//\n// destroy() {\n// this.disposables.dispose();\n// }\n// }\n// ```\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n /*\n Section: Construction and Destruction\n */\n // Public: Construct an instance, optionally with one or more disposables\n function CompositeDisposable() {\n _classCallCheck(this, CompositeDisposable);\n\n this.disposed = false;\n this.disposables = new Set();\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = arguments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var disposable = _step.value;\n this.add(disposable);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } // Public: Dispose all disposables added to this composite disposable.\n //\n // If this object has already been disposed, this method has no effect.\n\n\n _createClass(CompositeDisposable, [{\n key: \"dispose\",\n value: function dispose() {\n if (!this.disposed) {\n this.disposed = true;\n this.disposables.forEach(function (disposable) {\n return disposable.dispose();\n });\n this.disposables = null;\n }\n }\n /*\n Section: Managing Disposables\n */\n // Public: Add disposables to be disposed when the composite is disposed.\n //\n // If this object has already been disposed, this method has no effect.\n //\n // * `...disposables` {Disposable} instances or any objects with `.dispose()`\n // methods.\n\n }, {\n key: \"add\",\n value: function add() {\n if (!this.disposed) {\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = arguments[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var disposable = _step2.value;\n assertDisposable(disposable);\n this.disposables.add(disposable);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n }\n } // Public: Remove a previously added disposable.\n //\n // * `disposable` {Disposable} instance or any object with a `.dispose()`\n // method.\n\n }, {\n key: \"remove\",\n value: function remove(disposable) {\n if (!this.disposed) {\n this.disposables.delete(disposable);\n }\n } // Public: Alias to {CompositeDisposable::remove}\n\n }, {\n key: \"delete\",\n value: function _delete(disposable) {\n this.remove(disposable);\n } // Public: Clear all disposables. They will not be disposed by the next call\n // to dispose.\n\n }, {\n key: \"clear\",\n value: function clear() {\n if (!this.disposed) {\n this.disposables.clear();\n }\n }\n }]);\n\n return CompositeDisposable;\n}();\n\nfunction assertDisposable(disposable) {\n if (Disposable == null) {\n Disposable = require(\"./disposable\");\n }\n\n if (!Disposable.isDisposable(disposable)) {\n throw new TypeError(\"Arguments to CompositeDisposable.add must have a .dispose() method\");\n }\n}","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar Disposable = require(\"./disposable\");\n\nvar CompositeDisposable = require(\"./composite-disposable\"); // Essential: Utility class to be used when implementing event-based APIs that\n// allows for handlers registered via `::on` to be invoked with calls to\n// `::emit`. Instances of this class are intended to be used internally by\n// classes that expose an event-based API.\n//\n// For example:\n//\n// ```js\n// class User {\n// constructor() {\n// this.emitter = new Emitter()\n// }\n//\n// onDidChangeName(callback) {\n// this.emitter.on('did-change-name', callback)\n// }\n//\n// setName(name) {\n// if (name !== this.name) {\n// this.name = name\n// this.emitter.emit('did-change-name', name)\n// }\n//\n// return this.name\n// }\n// }\n// ```\n\n\nvar Emitter =\n/*#__PURE__*/\nfunction () {\n _createClass(Emitter, null, [{\n key: \"onEventHandlerException\",\n value: function onEventHandlerException(exceptionHandler) {\n var _this = this;\n\n if (this.exceptionHandlers.length === 0) {\n this.dispatch = this.exceptionHandlingDispatch;\n }\n\n this.exceptionHandlers.push(exceptionHandler);\n return new Disposable(function () {\n _this.exceptionHandlers.splice(_this.exceptionHandlers.indexOf(exceptionHandler), 1);\n\n if (_this.exceptionHandlers.length === 0) {\n return _this.dispatch = _this.simpleDispatch;\n }\n });\n }\n }, {\n key: \"simpleDispatch\",\n value: function simpleDispatch(handler, value) {\n return handler(value);\n }\n }, {\n key: \"exceptionHandlingDispatch\",\n value: function exceptionHandlingDispatch(handler, value) {\n try {\n return handler(value);\n } catch (exception) {\n return this.exceptionHandlers.map(function (exceptionHandler) {\n return exceptionHandler(exception);\n });\n }\n }\n /*\n Section: Construction and Destruction\n */\n // Public: Construct an emitter.\n //\n // ```js\n // this.emitter = new Emitter()\n // ```\n\n }]);\n\n function Emitter() {\n _classCallCheck(this, Emitter);\n\n this.disposed = false;\n this.clear();\n } // Public: Clear out any existing subscribers.\n\n\n _createClass(Emitter, [{\n key: \"clear\",\n value: function clear() {\n if (this.subscriptions != null) {\n this.subscriptions.dispose();\n }\n\n this.subscriptions = new CompositeDisposable();\n this.handlersByEventName = {};\n } // Public: Unsubscribe all handlers.\n\n }, {\n key: \"dispose\",\n value: function dispose() {\n this.subscriptions.dispose();\n this.handlersByEventName = null;\n this.disposed = true;\n }\n /*\n Section: Event Subscription\n */\n // Public: Register the given handler function to be invoked whenever events by\n // the given name are emitted via {::emit}.\n //\n // * `eventName` {String} naming the event that you want to invoke the handler\n // when emitted.\n // * `handler` {Function} to invoke when {::emit} is called with the given\n // event name.\n //\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\n\n }, {\n key: \"on\",\n value: function on(eventName, handler, unshift) {\n var _this2 = this;\n\n if (unshift == null) {\n unshift = false;\n }\n\n if (this.disposed) {\n throw new Error(\"Emitter has been disposed\");\n }\n\n if (typeof handler !== \"function\") {\n throw new Error(\"Handler must be a function\");\n }\n\n var currentHandlers = this.handlersByEventName[eventName];\n\n if (currentHandlers) {\n if (unshift) {\n this.handlersByEventName[eventName].unshift(handler);\n } else {\n this.handlersByEventName[eventName].push(handler);\n }\n } else {\n this.handlersByEventName[eventName] = [handler];\n } // When the emitter is disposed, we want to dispose of all subscriptions.\n // However, we also need to stop tracking disposables when they're disposed\n // from outside, otherwise this class will hold references to all the\n // disposables it created (instead of just the active ones).\n\n\n var cleanup = new Disposable(function () {\n _this2.subscriptions.remove(cleanup);\n\n return _this2.off(eventName, handler);\n });\n this.subscriptions.add(cleanup);\n return cleanup;\n } // Public: Register the given handler function to be invoked the next time an\n // events with the given name is emitted via {::emit}.\n //\n // * `eventName` {String} naming the event that you want to invoke the handler\n // when emitted.\n // * `handler` {Function} to invoke when {::emit} is called with the given\n // event name.\n //\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\n\n }, {\n key: \"once\",\n value: function once(eventName, handler, unshift) {\n if (unshift == null) {\n unshift = false;\n }\n\n var wrapped = function wrapped(value) {\n disposable.dispose();\n return handler(value);\n };\n\n var disposable = this.on(eventName, wrapped, unshift);\n return disposable;\n } // Public: Register the given handler function to be invoked *before* all\n // other handlers existing at the time of subscription whenever events by the\n // given name are emitted via {::emit}.\n //\n // Use this method when you need to be the first to handle a given event. This\n // could be required when a data structure in a parent object needs to be\n // updated before third-party event handlers registered on a child object via a\n // public API are invoked. Your handler could itself be preempted via\n // subsequent calls to this method, but this can be controlled by keeping\n // methods based on `::preempt` private.\n //\n // * `eventName` {String} naming the event that you want to invoke the handler\n // when emitted.\n // * `handler` {Function} to invoke when {::emit} is called with the given\n // event name.\n //\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\n\n }, {\n key: \"preempt\",\n value: function preempt(eventName, handler) {\n return this.on(eventName, handler, true);\n } // Private: Used by the disposable.\n\n }, {\n key: \"off\",\n value: function off(eventName, handlerToRemove) {\n if (this.disposed) {\n return;\n }\n\n var handlers = this.handlersByEventName[eventName];\n\n if (handlers) {\n var handlerIndex = handlers.indexOf(handlerToRemove);\n\n if (handlerIndex >= 0) {\n handlers.splice(handlerIndex, 1);\n }\n\n if (handlers.length === 0) {\n delete this.handlersByEventName[eventName];\n }\n }\n }\n /*\n Section: Event Emission\n */\n // Public: Invoke handlers registered via {::on} for the given event name.\n //\n // * `eventName` The name of the event to emit. Handlers registered with {::on}\n // for the same name will be invoked.\n // * `value` Callbacks will be invoked with this value as an argument.\n\n }, {\n key: \"emit\",\n value: function emit(eventName, value) {\n var handlers = this.handlersByEventName && this.handlersByEventName[eventName];\n\n if (handlers) {\n // create a copy of `handlers` so that if any handler mutates `handlers`\n // (e.g. by calling `on` on this same emitter), this does not result in\n // changing the handlers being called during this same `emit`.\n var handlersCopy = handlers.slice();\n\n for (var i = 0; i < handlersCopy.length; i++) {\n this.constructor.dispatch(handlersCopy[i], value);\n }\n }\n }\n }, {\n key: \"emitAsync\",\n value: function emitAsync(eventName, value) {\n var _this3 = this;\n\n var handlers = this.handlersByEventName && this.handlersByEventName[eventName];\n\n if (handlers) {\n var promises = handlers.map(function (handler) {\n return _this3.constructor.dispatch(handler, value);\n });\n return Promise.all(promises).then(function () {});\n }\n\n return Promise.resolve();\n }\n }, {\n key: \"getEventNames\",\n value: function getEventNames() {\n return Object.keys(this.handlersByEventName);\n }\n }, {\n key: \"listenerCountForEventName\",\n value: function listenerCountForEventName(eventName) {\n var handlers = this.handlersByEventName[eventName];\n return handlers == null ? 0 : handlers.length;\n }\n }, {\n key: \"getTotalListenerCount\",\n value: function getTotalListenerCount() {\n var result = 0;\n\n var _arr = Object.keys(this.handlersByEventName);\n\n for (var _i = 0; _i < _arr.length; _i++) {\n var eventName = _arr[_i];\n result += this.handlersByEventName[eventName].length;\n }\n\n return result;\n }\n }]);\n\n return Emitter;\n}();\n\nEmitter.dispatch = Emitter.simpleDispatch;\nEmitter.exceptionHandlers = [];\nmodule.exports = Emitter;","\"use strict\";\n\nexports.Emitter = require(\"./emitter\");\nexports.Disposable = require(\"./disposable\");\nexports.CompositeDisposable = require(\"./composite-disposable\");","(function() {\n var Deprecation, Emitter, getRawStack, grim;\n\n Deprecation = require('./deprecation');\n\n if (global.__grim__ == null) {\n Emitter = require('event-kit').Emitter;\n grim = global.__grim__ = {\n deprecations: {},\n emitter: new Emitter,\n includeDeprecatedAPIs: true,\n getDeprecations: function() {\n var deprecation, deprecations, deprecationsByLineNumber, deprecationsByPackage, fileName, lineNumber, packageName, _ref;\n deprecations = [];\n _ref = grim.deprecations;\n for (fileName in _ref) {\n deprecationsByLineNumber = _ref[fileName];\n for (lineNumber in deprecationsByLineNumber) {\n deprecationsByPackage = deprecationsByLineNumber[lineNumber];\n for (packageName in deprecationsByPackage) {\n deprecation = deprecationsByPackage[packageName];\n deprecations.push(deprecation);\n }\n }\n }\n return deprecations;\n },\n getDeprecationsLength: function() {\n return this.getDeprecations().length;\n },\n clearDeprecations: function() {\n grim.deprecations = {};\n },\n logDeprecations: function() {\n var deprecation, deprecations, _i, _len;\n deprecations = this.getDeprecations();\n deprecations.sort(function(a, b) {\n return b.getCallCount() - a.getCallCount();\n });\n console.warn(\"\\nCalls to deprecated functions\\n-----------------------------\");\n for (_i = 0, _len = deprecations.length; _i < _len; _i++) {\n deprecation = deprecations[_i];\n console.warn(\"(\" + (deprecation.getCallCount()) + \") \" + (deprecation.getOriginName()) + \" : \" + (deprecation.getMessage()), deprecation);\n }\n },\n deprecate: function(message, metadata) {\n var deprecation, deprecationSite, error, fileName, lineNumber, originalStackTraceLimit, packageName, stack, _base, _base1, _base2, _ref, _ref1;\n originalStackTraceLimit = Error.stackTraceLimit;\n try {\n Error.stackTraceLimit = 7;\n error = new Error;\n stack = (_ref = typeof error.getRawStack === \"function\" ? error.getRawStack() : void 0) != null ? _ref : getRawStack(error);\n stack = stack.slice(1);\n } finally {\n Error.stackTraceLimit = originalStackTraceLimit;\n }\n deprecationSite = stack[0];\n fileName = deprecationSite.getFileName();\n lineNumber = deprecationSite.getLineNumber();\n packageName = (_ref1 = metadata != null ? metadata.packageName : void 0) != null ? _ref1 : \"\";\n if ((_base = grim.deprecations)[fileName] == null) {\n _base[fileName] = {};\n }\n if ((_base1 = grim.deprecations[fileName])[lineNumber] == null) {\n _base1[lineNumber] = {};\n }\n if ((_base2 = grim.deprecations[fileName][lineNumber])[packageName] == null) {\n _base2[packageName] = new Deprecation(message);\n }\n deprecation = grim.deprecations[fileName][lineNumber][packageName];\n deprecation.addStack(stack, metadata);\n grim.emitter.emit(\"updated\", deprecation);\n },\n addSerializedDeprecation: function(serializedDeprecation) {\n var deprecation, fileName, lineNumber, message, packageName, stack, stacks, _base, _base1, _base2, _i, _len, _ref, _ref1, _ref2;\n deprecation = Deprecation.deserialize(serializedDeprecation);\n message = deprecation.getMessage();\n fileName = deprecation.fileName, lineNumber = deprecation.lineNumber;\n stacks = deprecation.getStacks();\n packageName = (_ref = (_ref1 = stacks[0]) != null ? (_ref2 = _ref1.metadata) != null ? _ref2.packageName : void 0 : void 0) != null ? _ref : \"\";\n if ((_base = grim.deprecations)[fileName] == null) {\n _base[fileName] = {};\n }\n if ((_base1 = grim.deprecations[fileName])[lineNumber] == null) {\n _base1[lineNumber] = {};\n }\n if ((_base2 = grim.deprecations[fileName][lineNumber])[packageName] == null) {\n _base2[packageName] = new Deprecation(message, fileName, lineNumber);\n }\n deprecation = grim.deprecations[fileName][lineNumber][packageName];\n for (_i = 0, _len = stacks.length; _i < _len; _i++) {\n stack = stacks[_i];\n deprecation.addStack(stack, stack.metadata);\n }\n grim.emitter.emit(\"updated\", deprecation);\n },\n on: function(eventName, callback) {\n return grim.emitter.on(eventName, callback);\n }\n };\n }\n\n getRawStack = function(error) {\n var originalPrepareStackTrace, result;\n originalPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = function(error, stack) {\n return stack;\n };\n Error.captureStackTrace(error, getRawStack);\n result = error.stack;\n Error.prepareStackTrace = originalPrepareStackTrace;\n return result;\n };\n\n module.exports = global.__grim__;\n\n}).call(this);\n","(function() {\n var Deprecation, SourceMapCache;\n\n SourceMapCache = {};\n\n module.exports = Deprecation = (function() {\n Deprecation.getFunctionNameFromCallsite = function(callsite) {};\n\n Deprecation.deserialize = function(_arg) {\n var deprecation, fileName, lineNumber, message, stack, stacks, _i, _len;\n message = _arg.message, fileName = _arg.fileName, lineNumber = _arg.lineNumber, stacks = _arg.stacks;\n deprecation = new Deprecation(message, fileName, lineNumber);\n for (_i = 0, _len = stacks.length; _i < _len; _i++) {\n stack = stacks[_i];\n deprecation.addStack(stack, stack.metadata);\n }\n return deprecation;\n };\n\n function Deprecation(message, fileName, lineNumber) {\n this.message = message;\n this.fileName = fileName;\n this.lineNumber = lineNumber;\n this.callCount = 0;\n this.stackCount = 0;\n this.stacks = {};\n this.stackCallCounts = {};\n }\n\n Deprecation.prototype.getFunctionNameFromCallsite = function(callsite) {\n var _ref, _ref1, _ref2;\n if (callsite.functionName != null) {\n return callsite.functionName;\n }\n if (callsite.isToplevel()) {\n return (_ref = callsite.getFunctionName()) != null ? _ref : '';\n } else {\n if (callsite.isConstructor()) {\n return \"new \" + (callsite.getFunctionName());\n } else if (callsite.getMethodName() && !callsite.getFunctionName()) {\n return callsite.getMethodName();\n } else {\n return \"\" + (callsite.getTypeName()) + \".\" + ((_ref1 = (_ref2 = callsite.getMethodName()) != null ? _ref2 : callsite.getFunctionName()) != null ? _ref1 : '');\n }\n }\n };\n\n Deprecation.prototype.getLocationFromCallsite = function(callsite) {\n var column, fileName, line;\n if (callsite == null) {\n return \"unknown\";\n }\n if (callsite.location != null) {\n return callsite.location;\n }\n if (callsite.isNative()) {\n return \"native\";\n } else if (callsite.isEval()) {\n return \"eval at \" + (this.getLocationFromCallsite(callsite.getEvalOrigin()));\n } else {\n fileName = callsite.getFileName();\n line = callsite.getLineNumber();\n column = callsite.getColumnNumber();\n return \"\" + fileName + \":\" + line + \":\" + column;\n }\n };\n\n Deprecation.prototype.getFileNameFromCallSite = function(callsite) {\n var _ref;\n return (_ref = callsite.fileName) != null ? _ref : callsite.getFileName();\n };\n\n Deprecation.prototype.getOriginName = function() {\n return this.originName;\n };\n\n Deprecation.prototype.getMessage = function() {\n return this.message;\n };\n\n Deprecation.prototype.getStacks = function() {\n var location, parsedStack, parsedStacks, stack, _ref;\n parsedStacks = [];\n _ref = this.stacks;\n for (location in _ref) {\n stack = _ref[location];\n parsedStack = this.parseStack(stack);\n parsedStack.callCount = this.stackCallCounts[location];\n parsedStack.metadata = stack.metadata;\n parsedStacks.push(parsedStack);\n }\n return parsedStacks;\n };\n\n Deprecation.prototype.getStackCount = function() {\n return this.stackCount;\n };\n\n Deprecation.prototype.getCallCount = function() {\n return this.callCount;\n };\n\n Deprecation.prototype.addStack = function(stack, metadata) {\n var callerLocation, _base, _base1;\n if (this.originName == null) {\n this.originName = this.getFunctionNameFromCallsite(stack[0]);\n }\n if (this.fileName == null) {\n this.fileName = this.getFileNameFromCallSite(stack[0]);\n }\n if (this.lineNumber == null) {\n this.lineNumber = typeof (_base = stack[0]).getLineNumber === \"function\" ? _base.getLineNumber() : void 0;\n }\n this.callCount++;\n stack.metadata = metadata;\n callerLocation = this.getLocationFromCallsite(stack[1]);\n if (this.stacks[callerLocation] == null) {\n this.stacks[callerLocation] = stack;\n this.stackCount++;\n }\n if ((_base1 = this.stackCallCounts)[callerLocation] == null) {\n _base1[callerLocation] = 0;\n }\n return this.stackCallCounts[callerLocation]++;\n };\n\n Deprecation.prototype.parseStack = function(stack) {\n return stack.map((function(_this) {\n return function(callsite) {\n return {\n functionName: _this.getFunctionNameFromCallsite(callsite),\n location: _this.getLocationFromCallsite(callsite),\n fileName: _this.getFileNameFromCallSite(callsite)\n };\n };\n })(this));\n };\n\n Deprecation.prototype.serialize = function() {\n return {\n message: this.getMessage(),\n lineNumber: this.lineNumber,\n fileName: this.fileName,\n stacks: this.getStacks()\n };\n };\n\n return Deprecation;\n\n })();\n\n}).call(this);\n","(function() {\n var ExcludedClassProperties, ExcludedPrototypeProperties, Mixin, name;\n\n module.exports = Mixin = (function() {\n Mixin.includeInto = function(constructor) {\n var name, value, _ref;\n this.extend(constructor.prototype);\n for (name in this) {\n value = this[name];\n if (ExcludedClassProperties.indexOf(name) === -1) {\n if (!constructor.hasOwnProperty(name)) {\n constructor[name] = value;\n }\n }\n }\n return (_ref = this.included) != null ? _ref.call(constructor) : void 0;\n };\n\n Mixin.extend = function(object) {\n var name, _i, _len, _ref, _ref1;\n _ref = Object.getOwnPropertyNames(this.prototype);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n name = _ref[_i];\n if (ExcludedPrototypeProperties.indexOf(name) === -1) {\n if (!object.hasOwnProperty(name)) {\n object[name] = this.prototype[name];\n }\n }\n }\n return (_ref1 = this.prototype.extended) != null ? _ref1.call(object) : void 0;\n };\n\n function Mixin() {\n if (typeof this.extended === \"function\") {\n this.extended();\n }\n }\n\n return Mixin;\n\n })();\n\n ExcludedClassProperties = ['__super__'];\n\n for (name in Mixin) {\n ExcludedClassProperties.push(name);\n }\n\n ExcludedPrototypeProperties = ['constructor', 'extended'];\n\n}).call(this);\n","// Generated by CoffeeScript 2.5.1\n(function() {\n var Ancestors, Mixin;\n\n Mixin = require('mixto');\n\n // Public\n module.exports = Ancestors = class Ancestors extends Mixin {\n /* Public */\n static parents(node, selector = '*') {\n var parents;\n parents = [];\n this.eachParent(node, function(parent) {\n if (typeof parent.matches === \"function\" ? parent.matches(selector) : void 0) {\n return parents.push(parent);\n }\n });\n return parents;\n }\n\n static eachParent(node, block) {\n var parent, results;\n parent = node.parentNode;\n if (parent != null) {\n block(parent);\n }\n results = [];\n while (parent = parent.parentNode) {\n if (parent != null) {\n results.push(block(parent));\n } else {\n results.push(void 0);\n }\n }\n return results;\n }\n\n parents(selector = '*') {\n return Ancestors.parents(this, selector);\n }\n\n queryParentSelectorAll(selector) {\n if (selector == null) {\n throw new Error('::queryParentSelectorAll requires a valid selector as argument');\n }\n return this.parents(selector);\n }\n\n queryParentSelector(selector) {\n if (selector == null) {\n throw new Error('::queryParentSelector requires a valid selector as argument');\n }\n return this.queryParentSelectorAll(selector)[0];\n }\n\n eachParent(block) {\n return Ancestors.eachParent(this, block);\n }\n\n };\n\n}).call(this);\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jZXN0b3JzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvbWl4aW5zL2FuY2VzdG9ycy5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUEsTUFBQSxTQUFBLEVBQUE7O0VBQUEsS0FBQSxHQUFRLE9BQUEsQ0FBUSxPQUFSLEVBQVI7OztFQUdBLE1BQU0sQ0FBQyxPQUFQLEdBQ00sWUFBTixNQUFBLFVBQUEsUUFBd0IsTUFBeEIsQ0FBQTs7SUFJWSxPQUFULE9BQVMsQ0FBQyxJQUFELEVBQU8sV0FBUyxHQUFoQixDQUFBO0FBQ1osVUFBQTtNQUFJLE9BQUEsR0FBVTtNQUNWLElBQUMsQ0FBQSxVQUFELENBQVksSUFBWixFQUFrQixRQUFBLENBQUMsTUFBRCxDQUFBO1FBQVksMkNBQXdCLE1BQU0sQ0FBQyxRQUFTLGtCQUF4QztpQkFBQSxPQUFPLENBQUMsSUFBUixDQUFhLE1BQWIsRUFBQTs7TUFBWixDQUFsQjthQUNBO0lBSFE7O0lBS0csT0FBWixVQUFZLENBQUMsSUFBRCxFQUFPLEtBQVAsQ0FBQTtBQUNmLFVBQUEsTUFBQSxFQUFBO01BQUksTUFBQSxHQUFTLElBQUksQ0FBQztNQUVkLElBQWlCLGNBQWpCO1FBQUEsS0FBQSxDQUFNLE1BQU4sRUFBQTs7QUFDQTthQUFNLE1BQUEsR0FBUyxNQUFNLENBQUMsVUFBdEI7UUFDRSxJQUFpQixjQUFqQjt1QkFBQSxLQUFBLENBQU0sTUFBTixHQUFBO1NBQUEsTUFBQTsrQkFBQTs7TUFERixDQUFBOztJQUpXOztJQU9iLE9BQVMsQ0FBQyxXQUFTLEdBQVYsQ0FBQTthQUFrQixTQUFTLENBQUMsT0FBVixDQUFrQixJQUFsQixFQUF3QixRQUF4QjtJQUFsQjs7SUFFVCxzQkFBd0IsQ0FBQyxRQUFELENBQUE7TUFDdEIsSUFBTyxnQkFBUDtRQUNFLE1BQU0sSUFBSSxLQUFKLENBQVUsZ0VBQVYsRUFEUjs7YUFFQSxJQUFDLENBQUEsT0FBRCxDQUFTLFFBQVQ7SUFIc0I7O0lBS3hCLG1CQUFxQixDQUFDLFFBQUQsQ0FBQTtNQUNuQixJQUFPLGdCQUFQO1FBQ0UsTUFBTSxJQUFJLEtBQUosQ0FBVSw2REFBVixFQURSOzthQUVBLElBQUMsQ0FBQSxzQkFBRCxDQUF3QixRQUF4QixDQUFpQyxDQUFDLENBQUQ7SUFIZDs7SUFLckIsVUFBWSxDQUFDLEtBQUQsQ0FBQTthQUFXLFNBQVMsQ0FBQyxVQUFWLENBQXFCLElBQXJCLEVBQTJCLEtBQTNCO0lBQVg7O0VBNUJkO0FBSkEiLCJzb3VyY2VzQ29udGVudCI6WyJNaXhpbiA9IHJlcXVpcmUgJ21peHRvJ1xuXG4jIFB1YmxpY1xubW9kdWxlLmV4cG9ydHMgPVxuY2xhc3MgQW5jZXN0b3JzIGV4dGVuZHMgTWl4aW5cblxuICAjIyMgUHVibGljICMjI1xuXG4gIEBwYXJlbnRzOiAobm9kZSwgc2VsZWN0b3I9JyonKSAtPlxuICAgIHBhcmVudHMgPSBbXVxuICAgIEBlYWNoUGFyZW50IG5vZGUsIChwYXJlbnQpIC0+IHBhcmVudHMucHVzaChwYXJlbnQpIGlmIHBhcmVudC5tYXRjaGVzPyhzZWxlY3RvcilcbiAgICBwYXJlbnRzXG5cbiAgQGVhY2hQYXJlbnQ6IChub2RlLCBibG9jaykgLT5cbiAgICBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGVcblxuICAgIGJsb2NrKHBhcmVudCkgaWYgcGFyZW50P1xuICAgIHdoaWxlIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlXG4gICAgICBibG9jayhwYXJlbnQpIGlmIHBhcmVudD9cblxuICBwYXJlbnRzOiAoc2VsZWN0b3I9JyonKSAtPiBBbmNlc3RvcnMucGFyZW50cyh0aGlzLCBzZWxlY3RvcilcblxuICBxdWVyeVBhcmVudFNlbGVjdG9yQWxsOiAoc2VsZWN0b3IpIC0+XG4gICAgdW5sZXNzIHNlbGVjdG9yP1xuICAgICAgdGhyb3cgbmV3IEVycm9yICc6OnF1ZXJ5UGFyZW50U2VsZWN0b3JBbGwgcmVxdWlyZXMgYSB2YWxpZCBzZWxlY3RvciBhcyBhcmd1bWVudCdcbiAgICBAcGFyZW50cyhzZWxlY3RvcilcblxuICBxdWVyeVBhcmVudFNlbGVjdG9yOiAoc2VsZWN0b3IpIC0+XG4gICAgdW5sZXNzIHNlbGVjdG9yP1xuICAgICAgdGhyb3cgbmV3IEVycm9yICc6OnF1ZXJ5UGFyZW50U2VsZWN0b3IgcmVxdWlyZXMgYSB2YWxpZCBzZWxlY3RvciBhcyBhcmd1bWVudCdcbiAgICBAcXVlcnlQYXJlbnRTZWxlY3RvckFsbChzZWxlY3RvcilbMF1cblxuICBlYWNoUGFyZW50OiAoYmxvY2spIC0+IEFuY2VzdG9ycy5lYWNoUGFyZW50KHRoaXMsIGJsb2NrKVxuIl19\n//# sourceURL=/home/runner/work/atom-utils-plus/atom-utils-plus/lib/mixins/ancestors.coffee","// Generated by CoffeeScript 2.5.1\n(function() {\n var Disposable, DisposableEvents, Mixin;\n\n Mixin = require('mixto');\n\n ({Disposable} = require('atom'));\n\n module.exports = DisposableEvents = class DisposableEvents extends Mixin {\n addDisposableEventListener(object, event, listener, options) {\n object.addEventListener(event, listener, options);\n return new Disposable(function() {\n return object.removeEventListener(event, listener);\n });\n }\n\n };\n\n}).call(this);\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcG9zYWJsZS1ldmVudHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9taXhpbnMvZGlzcG9zYWJsZS1ldmVudHMuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBLE1BQUEsVUFBQSxFQUFBLGdCQUFBLEVBQUE7O0VBQUEsS0FBQSxHQUFRLE9BQUEsQ0FBUSxPQUFSOztFQUNSLENBQUEsQ0FBQyxVQUFELENBQUEsR0FBZSxPQUFBLENBQVEsTUFBUixDQUFmOztFQUVBLE1BQU0sQ0FBQyxPQUFQLEdBQ00sbUJBQU4sTUFBQSxpQkFBQSxRQUErQixNQUEvQjtJQUNFLDBCQUE0QixDQUFDLE1BQUQsRUFBUyxLQUFULEVBQWdCLFFBQWhCLEVBQTBCLE9BQTFCLENBQUE7TUFDMUIsTUFBTSxDQUFDLGdCQUFQLENBQXdCLEtBQXhCLEVBQStCLFFBQS9CLEVBQXlDLE9BQXpDO2FBQ0EsSUFBSSxVQUFKLENBQWUsUUFBQSxDQUFBLENBQUE7ZUFBRyxNQUFNLENBQUMsbUJBQVAsQ0FBMkIsS0FBM0IsRUFBa0MsUUFBbEM7TUFBSCxDQUFmO0lBRjBCOztFQUQ5QjtBQUpBIiwic291cmNlc0NvbnRlbnQiOlsiTWl4aW4gPSByZXF1aXJlICdtaXh0bydcbntEaXNwb3NhYmxlfSA9IHJlcXVpcmUgJ2F0b20nXG5cbm1vZHVsZS5leHBvcnRzID1cbmNsYXNzIERpc3Bvc2FibGVFdmVudHMgZXh0ZW5kcyBNaXhpblxuICBhZGREaXNwb3NhYmxlRXZlbnRMaXN0ZW5lcjogKG9iamVjdCwgZXZlbnQsIGxpc3RlbmVyLCBvcHRpb25zKSAtPlxuICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyIGV2ZW50LCBsaXN0ZW5lciwgb3B0aW9uc1xuICAgIG5ldyBEaXNwb3NhYmxlIC0+IG9iamVjdC5yZW1vdmVFdmVudExpc3RlbmVyIGV2ZW50LCBsaXN0ZW5lclxuIl19\n//# sourceURL=/home/runner/work/atom-utils-plus/atom-utils-plus/lib/mixins/disposable-events.coffee","\"use strict\";\n\nvar utils = require(\"./utils\");\n\nmodule.exports = function batchProcessorMaker(options) {\n options = options || {};\n var reporter = options.reporter;\n var asyncProcess = utils.getOption(options, \"async\", true);\n var autoProcess = utils.getOption(options, \"auto\", true);\n\n if(autoProcess && !asyncProcess) {\n reporter && reporter.warn(\"Invalid options combination. auto=true and async=false is invalid. Setting async=true.\");\n asyncProcess = true;\n }\n\n var batch = Batch();\n var asyncFrameHandler;\n var isProcessing = false;\n\n function addFunction(level, fn) {\n if(!isProcessing && autoProcess && asyncProcess && batch.size() === 0) {\n // Since this is async, it is guaranteed to be executed after that the fn is added to the batch.\n // This needs to be done before, since we're checking the size of the batch to be 0.\n processBatchAsync();\n }\n\n batch.add(level, fn);\n }\n\n function processBatch() {\n // Save the current batch, and create a new batch so that incoming functions are not added into the currently processing batch.\n // Continue processing until the top-level batch is empty (functions may be added to the new batch while processing, and so on).\n isProcessing = true;\n while (batch.size()) {\n var processingBatch = batch;\n batch = Batch();\n processingBatch.process();\n }\n isProcessing = false;\n }\n\n function forceProcessBatch(localAsyncProcess) {\n if (isProcessing) {\n return;\n }\n\n if(localAsyncProcess === undefined) {\n localAsyncProcess = asyncProcess;\n }\n\n if(asyncFrameHandler) {\n cancelFrame(asyncFrameHandler);\n asyncFrameHandler = null;\n }\n\n if(localAsyncProcess) {\n processBatchAsync();\n } else {\n processBatch();\n }\n }\n\n function processBatchAsync() {\n asyncFrameHandler = requestFrame(processBatch);\n }\n\n function clearBatch() {\n batch = {};\n batchSize = 0;\n topLevel = 0;\n bottomLevel = 0;\n }\n\n function cancelFrame(listener) {\n // var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout;\n var cancel = clearTimeout;\n return cancel(listener);\n }\n\n function requestFrame(callback) {\n // var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function(fn) { return window.setTimeout(fn, 20); };\n var raf = function(fn) { return setTimeout(fn, 0); };\n return raf(callback);\n }\n\n return {\n add: addFunction,\n force: forceProcessBatch\n };\n};\n\nfunction Batch() {\n var batch = {};\n var size = 0;\n var topLevel = 0;\n var bottomLevel = 0;\n\n function add(level, fn) {\n if(!fn) {\n fn = level;\n level = 0;\n }\n\n if(level > topLevel) {\n topLevel = level;\n } else if(level < bottomLevel) {\n bottomLevel = level;\n }\n\n if(!batch[level]) {\n batch[level] = [];\n }\n\n batch[level].push(fn);\n size++;\n }\n\n function process() {\n for(var level = bottomLevel; level <= topLevel; level++) {\n var fns = batch[level];\n\n for(var i = 0; i < fns.length; i++) {\n var fn = fns[i];\n fn();\n }\n }\n }\n\n function getSize() {\n return size;\n }\n\n return {\n add: add,\n process: process,\n size: getSize\n };\n}\n","\"use strict\";\n\nvar prop = \"_erd\";\n\nfunction initState(element) {\n element[prop] = {};\n return getState(element);\n}\n\nfunction getState(element) {\n return element[prop];\n}\n\nfunction cleanState(element) {\n delete element[prop];\n}\n\nmodule.exports = {\n initState: initState,\n getState: getState,\n cleanState: cleanState\n};\n","\"use strict\";\n\nvar forEach = require(\"./collection-utils\").forEach;\nvar elementUtilsMaker = require(\"./element-utils\");\nvar listenerHandlerMaker = require(\"./listener-handler\");\nvar idGeneratorMaker = require(\"./id-generator\");\nvar idHandlerMaker = require(\"./id-handler\");\nvar reporterMaker = require(\"./reporter\");\nvar browserDetector = require(\"./browser-detector\");\nvar batchProcessorMaker = require(\"batch-processor\");\nvar stateHandler = require(\"./state-handler\");\n\n//Detection strategies.\nvar objectStrategyMaker = require(\"./detection-strategy/object.js\");\nvar scrollStrategyMaker = require(\"./detection-strategy/scroll.js\");\n\nfunction isCollection(obj) {\n return Array.isArray(obj) || obj.length !== undefined;\n}\n\nfunction toArray(collection) {\n if (!Array.isArray(collection)) {\n var array = [];\n forEach(collection, function (obj) {\n array.push(obj);\n });\n return array;\n } else {\n return collection;\n }\n}\n\nfunction isElement(obj) {\n return obj && obj.nodeType === 1;\n}\n\n/**\n * @typedef idHandler\n * @type {object}\n * @property {function} get Gets the resize detector id of the element.\n * @property {function} set Generate and sets the resize detector id of the element.\n */\n\n/**\n * @typedef Options\n * @type {object}\n * @property {boolean} callOnAdd Determines if listeners should be called when they are getting added.\n Default is true. If true, the listener is guaranteed to be called when it has been added.\n If false, the listener will not be guarenteed to be called when it has been added (does not prevent it from being called).\n * @property {idHandler} idHandler A custom id handler that is responsible for generating, setting and retrieving id's for elements.\n If not provided, a default id handler will be used.\n * @property {reporter} reporter A custom reporter that handles reporting logs, warnings and errors.\n If not provided, a default id handler will be used.\n If set to false, then nothing will be reported.\n * @property {boolean} debug If set to true, the the system will report debug messages as default for the listenTo method.\n */\n\n/**\n * Creates an element resize detector instance.\n * @public\n * @param {Options?} options Optional global options object that will decide how this instance will work.\n */\nmodule.exports = function(options) {\n options = options || {};\n\n //idHandler is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var idHandler;\n\n if (options.idHandler) {\n // To maintain compatability with idHandler.get(element, readonly), make sure to wrap the given idHandler\n // so that readonly flag always is true when it's used here. This may be removed next major version bump.\n idHandler = {\n get: function (element) { return options.idHandler.get(element, true); },\n set: options.idHandler.set\n };\n } else {\n var idGenerator = idGeneratorMaker();\n var defaultIdHandler = idHandlerMaker({\n idGenerator: idGenerator,\n stateHandler: stateHandler\n });\n idHandler = defaultIdHandler;\n }\n\n //reporter is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var reporter = options.reporter;\n\n if(!reporter) {\n //If options.reporter is false, then the reporter should be quiet.\n var quiet = reporter === false;\n reporter = reporterMaker(quiet);\n }\n\n //batchProcessor is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var batchProcessor = getOption(options, \"batchProcessor\", batchProcessorMaker({ reporter: reporter }));\n\n //Options to be used as default for the listenTo function.\n var globalOptions = {};\n globalOptions.callOnAdd = !!getOption(options, \"callOnAdd\", true);\n globalOptions.debug = !!getOption(options, \"debug\", false);\n\n var eventListenerHandler = listenerHandlerMaker(idHandler);\n var elementUtils = elementUtilsMaker({\n stateHandler: stateHandler\n });\n\n //The detection strategy to be used.\n var detectionStrategy;\n var desiredStrategy = getOption(options, \"strategy\", \"object\");\n var importantCssRules = getOption(options, \"important\", false);\n var strategyOptions = {\n reporter: reporter,\n batchProcessor: batchProcessor,\n stateHandler: stateHandler,\n idHandler: idHandler,\n important: importantCssRules\n };\n\n if(desiredStrategy === \"scroll\") {\n if (browserDetector.isLegacyOpera()) {\n reporter.warn(\"Scroll strategy is not supported on legacy Opera. Changing to object strategy.\");\n desiredStrategy = \"object\";\n } else if (browserDetector.isIE(9)) {\n reporter.warn(\"Scroll strategy is not supported on IE9. Changing to object strategy.\");\n desiredStrategy = \"object\";\n }\n }\n\n if(desiredStrategy === \"scroll\") {\n detectionStrategy = scrollStrategyMaker(strategyOptions);\n } else if(desiredStrategy === \"object\") {\n detectionStrategy = objectStrategyMaker(strategyOptions);\n } else {\n throw new Error(\"Invalid strategy name: \" + desiredStrategy);\n }\n\n //Calls can be made to listenTo with elements that are still being installed.\n //Also, same elements can occur in the elements list in the listenTo function.\n //With this map, the ready callbacks can be synchronized between the calls\n //so that the ready callback can always be called when an element is ready - even if\n //it wasn't installed from the function itself.\n var onReadyCallbacks = {};\n\n /**\n * Makes the given elements resize-detectable and starts listening to resize events on the elements. Calls the event callback for each event for each element.\n * @public\n * @param {Options?} options Optional options object. These options will override the global options. Some options may not be overriden, such as idHandler.\n * @param {element[]|element} elements The given array of elements to detect resize events of. Single element is also valid.\n * @param {function} listener The callback to be executed for each resize event for each element.\n */\n function listenTo(options, elements, listener) {\n function onResizeCallback(element) {\n var listeners = eventListenerHandler.get(element);\n forEach(listeners, function callListenerProxy(listener) {\n listener(element);\n });\n }\n\n function addListener(callOnAdd, element, listener) {\n eventListenerHandler.add(element, listener);\n\n if(callOnAdd) {\n listener(element);\n }\n }\n\n //Options object may be omitted.\n if(!listener) {\n listener = elements;\n elements = options;\n options = {};\n }\n\n if(!elements) {\n throw new Error(\"At least one element required.\");\n }\n\n if(!listener) {\n throw new Error(\"Listener required.\");\n }\n\n if (isElement(elements)) {\n // A single element has been passed in.\n elements = [elements];\n } else if (isCollection(elements)) {\n // Convert collection to array for plugins.\n // TODO: May want to check so that all the elements in the collection are valid elements.\n elements = toArray(elements);\n } else {\n return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n }\n\n var elementsReady = 0;\n\n var callOnAdd = getOption(options, \"callOnAdd\", globalOptions.callOnAdd);\n var onReadyCallback = getOption(options, \"onReady\", function noop() {});\n var debug = getOption(options, \"debug\", globalOptions.debug);\n\n forEach(elements, function attachListenerToElement(element) {\n if (!stateHandler.getState(element)) {\n stateHandler.initState(element);\n idHandler.set(element);\n }\n\n var id = idHandler.get(element);\n\n debug && reporter.log(\"Attaching listener to element\", id, element);\n\n if(!elementUtils.isDetectable(element)) {\n debug && reporter.log(id, \"Not detectable.\");\n if(elementUtils.isBusy(element)) {\n debug && reporter.log(id, \"System busy making it detectable\");\n\n //The element is being prepared to be detectable. Do not make it detectable.\n //Just add the listener, because the element will soon be detectable.\n addListener(callOnAdd, element, listener);\n onReadyCallbacks[id] = onReadyCallbacks[id] || [];\n onReadyCallbacks[id].push(function onReady() {\n elementsReady++;\n\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n });\n return;\n }\n\n debug && reporter.log(id, \"Making detectable...\");\n //The element is not prepared to be detectable, so do prepare it and add a listener to it.\n elementUtils.markBusy(element, true);\n return detectionStrategy.makeDetectable({ debug: debug, important: importantCssRules }, element, function onElementDetectable(element) {\n debug && reporter.log(id, \"onElementDetectable\");\n\n if (stateHandler.getState(element)) {\n elementUtils.markAsDetectable(element);\n elementUtils.markBusy(element, false);\n detectionStrategy.addListener(element, onResizeCallback);\n addListener(callOnAdd, element, listener);\n\n // Since the element size might have changed since the call to \"listenTo\", we need to check for this change,\n // so that a resize event may be emitted.\n // Having the startSize object is optional (since it does not make sense in some cases such as unrendered elements), so check for its existance before.\n // Also, check the state existance before since the element may have been uninstalled in the installation process.\n var state = stateHandler.getState(element);\n if (state && state.startSize) {\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n if (state.startSize.width !== width || state.startSize.height !== height) {\n onResizeCallback(element);\n }\n }\n\n if(onReadyCallbacks[id]) {\n forEach(onReadyCallbacks[id], function(callback) {\n callback();\n });\n }\n } else {\n // The element has been unisntalled before being detectable.\n debug && reporter.log(id, \"Element uninstalled before being detectable.\");\n }\n\n delete onReadyCallbacks[id];\n\n elementsReady++;\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n });\n }\n\n debug && reporter.log(id, \"Already detecable, adding listener.\");\n\n //The element has been prepared to be detectable and is ready to be listened to.\n addListener(callOnAdd, element, listener);\n elementsReady++;\n });\n\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n }\n\n function uninstall(elements) {\n if(!elements) {\n return reporter.error(\"At least one element is required.\");\n }\n\n if (isElement(elements)) {\n // A single element has been passed in.\n elements = [elements];\n } else if (isCollection(elements)) {\n // Convert collection to array for plugins.\n // TODO: May want to check so that all the elements in the collection are valid elements.\n elements = toArray(elements);\n } else {\n return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n }\n\n forEach(elements, function (element) {\n eventListenerHandler.removeAllListeners(element);\n detectionStrategy.uninstall(element);\n stateHandler.cleanState(element);\n });\n }\n\n function initDocument(targetDocument) {\n detectionStrategy.initDocument && detectionStrategy.initDocument(targetDocument);\n }\n\n return {\n listenTo: listenTo,\n removeListener: eventListenerHandler.removeListener,\n removeAllListeners: eventListenerHandler.removeAllListeners,\n uninstall: uninstall,\n initDocument: initDocument\n };\n};\n\nfunction getOption(options, name, defaultValue) {\n var value = options[name];\n\n if((value === undefined || value === null) && defaultValue !== undefined) {\n return defaultValue;\n }\n\n return value;\n}\n","// Current version.\nexport var VERSION = '1.11.0';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n Function('return this')() ||\n {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n","// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n}\n","// Is a given variable an object?\nexport default function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n}\n","// Is a given value equal to null?\nexport default function isNull(obj) {\n return obj === null;\n}\n","// Is a given variable undefined?\nexport default function isUndefined(obj) {\n return obj === void 0;\n}\n","import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n","// Is a given value a DOM element?\nexport default function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n}\n","import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n return function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('DataView');\n","import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n","import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n}\n\nexport default isFunction;\n","import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n}\n","import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n}());\n\nexport default isArguments;\n","import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n","import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n return isNumber(obj) && _isNaN(obj);\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n return function() {\n return value;\n };\n}\n","import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n}\n","// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n}\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n","import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n","import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key]; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = isFunction(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n}\n","import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n if (isArrayLike(obj) && (isArray(obj) || isString(obj) || isArguments(obj))) return obj.length === 0;\n return keys(obj).length === 0;\n}\n","import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n}\n","import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n return String(this._wrapped);\n};\n","import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport keys from './keys.js';\nimport has from './_has.js';\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n // Coerce to `DataView` so we can fall through to the next case.\n return deepEq(new DataView(a), new DataView(b), aStack, bStack);\n case '[object DataView]':\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) {\n return false;\n }\n while (byteLength--) {\n if (a.getUint8(byteLength) !== b.getUint8(byteLength)) {\n return false;\n }\n }\n return true;\n }\n\n if (isTypedArray(a)) {\n // Coerce typed arrays to `DataView`.\n return deepEq(new DataView(a.buffer), new DataView(b.buffer), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n}\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n return eq(a, b);\n}\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n}\n","import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n}\n","import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n}\n","import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n}\n","// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n","import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n}\n","import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n}\n","import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n","// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n}\n","import isArray from './isArray.js';\nimport _has from './_has.js';\nimport { hasOwnProperty } from './_setup.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n if (!isArray(path)) {\n return _has(obj, path);\n }\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (obj == null || !hasOwnProperty.call(obj, key)) {\n return false;\n }\n obj = obj[key];\n }\n return !!length;\n}\n","// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n return value;\n}\n","import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n}\n","// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n}\n","import isArray from './isArray.js';\nimport shallowProperty from './_shallowProperty.js';\nimport deepGet from './_deepGet.js';\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n if (!isArray(path)) {\n return shallowProperty(path);\n }\n return function(obj) {\n return deepGet(obj, path);\n };\n}\n","// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n}\n","import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n}\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n if (_.iteratee !== iteratee) return _.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n","import isArray from './isArray.js';\nimport deepGet from './_deepGet.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n if (obj == null) {\n return function(){};\n }\n return function(path) {\n return !isArray(path) ? obj[path] : deepGet(obj, path);\n };\n}\n","import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n}\n","// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n}\n","// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n return new Date().getTime();\n};\n","import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n}\n","// Internal list of HTML entities for escaping.\nexport default {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n","import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n","import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n};\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n return '\\\\' + escapes[match];\n}\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n}\n","import isArray from './isArray.js';\nimport isFunction from './isFunction.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n if (!isArray(path)) path = [path];\n var length = path.length;\n if (!length) {\n return isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n}\n","// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n","import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n}\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n}\n","import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n});\n","import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n}\n","import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n}\n","import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n});\n","import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n","import restArguments from './restArguments.js';\nimport delay from './delay.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n var timeout, result;\n\n var later = function(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function(args) {\n if (timeout) clearTimeout(timeout);\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n}\n","import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n return partial(wrapper, func);\n}\n","// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n}\n","// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n}\n","// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n}\n","// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n}\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n}\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n}\n","import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n}\n","import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n","import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n}\n","import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n}\n","import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n}\n","import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n}\n","import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n return map(obj, property(key));\n}\n","import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport clone from './clone.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? clone(obj) : values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n}\n","import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n return sample(obj, Infinity);\n}\n","import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n}\n","import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n","// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n return key in obj;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n});\n","import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n","import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n}\n","import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n}\n","import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n}\n","import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n return filter(array, Boolean);\n}\n","import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n return _flatten(array, depth, false);\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n});\n","import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n}\n","import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n}\n","import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n var length = array && max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n}\n","import getLength from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n}\n","// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n}\n","import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n}\n","import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Map');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakMap');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Set');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n","import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n});\n","import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n","import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n","import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n","import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n","import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport isArray from './isArray.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction(path)) {\n func = path;\n } else if (isArray(path)) {\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n","import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n result[key] = value;\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n});\n","import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n}, true);\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n});\n","import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n});\n","import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n return uniq(flatten(arrays, true, true));\n});\n","import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n","import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n});\n\nexport default _;\n","'use strict'\n\nimport { escapeRegExp } from 'underscore-plus'\nimport Mixin from 'mixto'\n\nimport * as Main from '../main'\nimport CanvasLayer from '../canvas-layer'\nimport DOMStylesReader from '../dom-styles-reader'\n\nconst SPEC_MODE = atom.inSpecMode()\n\n/**\n * The `CanvasDrawer` mixin is responsible for the rendering of a `Minimap`\n * in a `canvas` element.\n *\n * This mixin is injected in the `MinimapElement` prototype, so all these\n * methods are available on any `MinimapElement` instance.\n */\nexport default class CanvasDrawer extends Mixin {\n /**\n * Initializes the canvas elements needed to perform the `Minimap` rendering.\n */\n initializeCanvas () {\n if (SPEC_MODE) {\n // class methods only used for spying the calls\n this.drawLineDecoration = drawLineDecoration\n this.drawGutterDecoration = drawGutterDecoration\n this.drawHighlightDecoration = drawHighlightDecoration\n this.drawHighlightOutlineDecoration = drawHighlightOutlineDecoration\n this.drawCustomDecoration = drawCustomDecoration\n }\n\n /**\n * The main canvas layer where lines are rendered.\n * @type {CanvasLayer}\n */\n this.tokensLayer = new CanvasLayer()\n /**\n * The canvas layer for decorations below the text.\n * @type {CanvasLayer}\n */\n this.backLayer = new CanvasLayer()\n /**\n * The canvas layer for decorations above the text.\n * @type {CanvasLayer}\n */\n this.frontLayer = new CanvasLayer()\n\n if (!this.pendingChanges) {\n /**\n * Stores the changes from the text editor.\n * @type {Array}\n * @access private\n */\n this.pendingChanges = []\n }\n\n if (!this.pendingBackDecorationChanges) {\n /**\n * Stores the changes from the minimap back decorations.\n * @type {Array}\n * @access private\n */\n this.pendingBackDecorationChanges = []\n }\n\n if (!this.pendingFrontDecorationChanges) {\n /**\n * Stores the changes from the minimap front decorations.\n * @type {Array}\n * @access private\n */\n this.pendingFrontDecorationChanges = []\n }\n\n // the maximum number of tokens to render in one line\n this.maxTokensInOneLine = atom.config.get('minimap.maxTokensInOneLine')\n\n /**\n * This MinimapElement's DOMStylesReader\n */\n this.DOMStylesReader = new DOMStylesReader()\n }\n\n /**\n * Returns the uppermost canvas in the MinimapElement.\n *\n * @return {HTMLCanvasElement} the html canvas element\n */\n getFrontCanvas () { return this.frontLayer.canvas }\n\n /**\n * Attaches the canvases into the specified container.\n *\n * @param {HTMLElement} parent the canvases' container\n * @access private\n */\n attachCanvases (parent) {\n this.backLayer.attach(parent)\n this.tokensLayer.attach(parent)\n this.frontLayer.attach(parent)\n }\n\n /**\n * Changes the size of all the canvas layers at once.\n *\n * @param {number} width the new width for the three canvases\n * @param {number} height the new height for the three canvases\n * @access private\n */\n setCanvasesSize (width, height) {\n this.backLayer.setSize(width, height)\n this.tokensLayer.setSize(width, height)\n this.frontLayer.setSize(width, height)\n }\n\n /**\n * Performs an update of the rendered `Minimap` based on the changes\n * registered in the instance.\n */\n updateCanvas () {\n const firstRow = this.minimap.getFirstVisibleScreenRow()\n const lastRow = this.minimap.getLastVisibleScreenRow()\n\n this.updateTokensLayer(firstRow, lastRow)\n this.updateBackDecorationsLayer(firstRow, lastRow)\n this.updateFrontDecorationsLayer(firstRow, lastRow)\n\n this.pendingChanges = []\n this.pendingBackDecorationChanges = []\n this.pendingFrontDecorationChanges = []\n\n /**\n * The first row in the last render of the offscreen canvas.\n * @type {number}\n * @access private\n */\n this.offscreenFirstRow = firstRow\n /**\n * The last row in the last render of the offscreen canvas.\n * @type {number}\n * @access private\n */\n this.offscreenLastRow = lastRow\n }\n\n /**\n * Performs an update of the tokens layer using the pending changes array.\n *\n * @param {number} firstRow firstRow the first row of the range to update\n * @param {number} lastRow lastRow the last row of the range to update\n * @access private\n */\n updateTokensLayer (firstRow, lastRow) {\n const intactRanges = computeIntactRanges(firstRow, lastRow, this.pendingChanges, this.offscreenFirstRow, this.offscreenLastRow)\n\n this.redrawRangesOnLayer(this.tokensLayer, intactRanges, firstRow, lastRow, this.drawLines)\n }\n\n /**\n * Performs an update of the back decorations layer using the pending back\n * decorations changes arrays.\n *\n * @param {number} firstRow firstRow the first row of the range to update\n * @param {number} lastRow lastRow the last row of the range to update\n * @access private\n */\n updateBackDecorationsLayer (firstRow, lastRow) {\n const intactRanges = computeIntactRanges(firstRow, lastRow, this.pendingBackDecorationChanges, this.offscreenFirstRow, this.offscreenLastRow)\n\n this.redrawRangesOnLayer(this.backLayer, intactRanges, firstRow, lastRow, this.drawBackDecorationsForLines)\n }\n\n /**\n * Performs an update of the front decorations layer using the pending front\n * decorations changes arrays.\n *\n * @param {number} firstRow firstRow the first row of the range to update\n * @param {number} lastRow lastRow the last row of the range to update\n * @access private\n */\n updateFrontDecorationsLayer (firstRow, lastRow) {\n const intactRanges = computeIntactRanges(firstRow, lastRow, this.pendingFrontDecorationChanges, this.offscreenFirstRow, this.offscreenLastRow)\n\n this.redrawRangesOnLayer(this.frontLayer, intactRanges, firstRow, lastRow, this.drawFrontDecorationsForLines)\n }\n\n // ###### ####### ## ####### ######## ######\n // ## ## ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ######## ######\n // ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ## ## ##\n // ###### ####### ######## ####### ## ## ######\n\n /**\n * Returns the opacity value to use when rendering the `Minimap` text.\n *\n * @return {Number} the text opacity value\n */\n getTextOpacity () { return this.textOpacity }\n\n /**\n * Returns the default text color for an editor content.\n *\n * The color value is directly read from the `TextEditorView` computed styles.\n * @param {TextEditorElement} editorElement\n * @return {string} a CSS color\n */\n getDefaultColor (editorElement) {\n const color = this.DOMStylesReader.retrieveStyleFromDom(['.editor'], 'color', editorElement, true)\n return transparentize(color, this.getTextOpacity())\n }\n\n /**\n * Returns the text color for the passed-in `token` object.\n *\n * The color value is read from the DOM by creating a node structure that\n * match the token `scope` property.\n *\n * @param {Object} token a `TextEditor` token\n * @param {TextEditorElement} editorElement\n * @return {string} the CSS color for the provided token\n */\n getTokenColor (token, editorElement) {\n const scopes = token.scopeDescriptor || token.scopes\n const color = this.DOMStylesReader.retrieveStyleFromDom(scopes, 'color', editorElement, true)\n\n return transparentize(color, this.getTextOpacity())\n }\n\n /**\n * Returns the background color for the passed-in `decoration` object.\n *\n * The color value is read from the DOM by creating a node structure that\n * match the decoration `scope` property unless the decoration provides\n * its own `color` property.\n *\n * @param {Decoration} decoration the decoration to get the color for\n * @param {TextEditorElement} editorElement\n * @return {string} the CSS color for the provided decoration\n */\n getDecorationColor (decoration, editorElement) {\n const properties = decoration.getProperties()\n if (properties.color) { return properties.color }\n\n if (properties.scope) {\n const scopeString = properties.scope.split(/\\s+/)\n return this.DOMStylesReader.retrieveStyleFromDom(scopeString, 'background-color', editorElement, true)\n } else {\n return this.getDefaultColor(editorElement)\n }\n }\n\n // ######## ######## ### ## ##\n // ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ##\n // ## ## ######## ## ## ## ## ##\n // ## ## ## ## ######### ## ## ##\n // ## ## ## ## ## ## ## ## ##\n // ######## ## ## ## ## ### ###\n\n /**\n * Routine used to render changes in specific ranges for one layer.\n *\n * @param {CanvasLayer} layer the layer to redraw\n * @param {Array} intactRanges an array of the ranges to leave intact\n * @param {number} firstRow firstRow the first row of the range to update\n * @param {number} lastRow lastRow the last row of the range to update\n * @param {Function} method the render method to use for the lines drawing\n * @access private\n */\n redrawRangesOnLayer (layer, intactRanges, firstRow, lastRow, method) {\n const devicePixelRatio = this.minimap.getDevicePixelRatio()\n const lineHeight = this.minimap.getLineHeight() * devicePixelRatio\n\n layer.clearCanvas()\n\n if (intactRanges.length === 0) {\n method.call(this, firstRow, lastRow, 0)\n } else {\n for (let j = 0, len = intactRanges.length; j < len; j++) {\n const intact = intactRanges[j]\n\n layer.copyPartFromOffscreen(\n intact.offscreenRow * lineHeight,\n (intact.start - firstRow) * lineHeight,\n (intact.end - intact.start) * lineHeight\n )\n }\n this.drawLinesForRanges(method, intactRanges, firstRow, lastRow)\n }\n\n layer.resetOffscreenSize()\n layer.copyToOffscreen()\n }\n\n /**\n * Renders the lines between the intact ranges when an update has pending\n * changes.\n *\n * @param {Function} method the render method to use for the lines drawing\n * @param {Array} intactRanges the intact ranges in the minimap\n * @param {number} firstRow the first row of the rendered region\n * @param {number} lastRow the last row of the rendered region\n * @access private\n */\n drawLinesForRanges (method, ranges, firstRow, lastRow) {\n let currentRow = firstRow\n for (let i = 0, len = ranges.length; i < len; i++) {\n const range = ranges[i]\n\n method.call(this, currentRow, range.start, currentRow - firstRow)\n\n currentRow = range.end\n }\n if (currentRow <= lastRow) {\n method.call(this, currentRow, lastRow, currentRow - firstRow)\n }\n }\n\n /**\n * Draws back decorations on the corresponding layer.\n *\n * The lines range to draw is specified by the `firstRow` and `lastRow`\n * parameters.\n *\n * @param {number} firstRow the first row to render\n * @param {number} lastRow the last row to render\n * @param {number} offsetRow the relative offset to apply to rows when\n * rendering them\n * @access private\n */\n drawBackDecorationsForLines (firstRow, lastRow, offsetRow) {\n if (firstRow > lastRow) { return }\n\n const devicePixelRatio = this.minimap.getDevicePixelRatio()\n const lineHeight = this.minimap.getLineHeight() * devicePixelRatio\n const charHeight = this.minimap.getCharHeight() * devicePixelRatio\n const charWidth = this.minimap.getCharWidth() * devicePixelRatio\n const decorations = this.minimap.decorationsByTypeThenRows(firstRow, lastRow)\n const { width: canvasWidth, height: canvasHeight } = this.tokensLayer.getSize()\n const renderData = {\n context: this.backLayer.context,\n canvasWidth,\n canvasHeight,\n lineHeight,\n charWidth,\n charHeight,\n orders: Main.getPluginsOrder()\n }\n const editorElement = this.minimap.getTextEditorElement()\n\n const drawCustomDecorationLambda = (decoration, data, decorationColor) => drawCustomDecoration(decoration, data, decorationColor, editorElement)\n backgroundDecorationDispatcher['background-custom'] = drawCustomDecorationLambda\n\n for (let screenRow = firstRow; screenRow <= lastRow; screenRow++) {\n renderData.row = offsetRow + (screenRow - firstRow)\n renderData.yRow = renderData.row * lineHeight\n renderData.screenRow = screenRow\n\n this.drawDecorations(screenRow, decorations, renderData, backgroundDecorationDispatcher, editorElement)\n }\n\n this.backLayer.context.fill()\n }\n\n /**\n * Draws front decorations on the corresponding layer.\n *\n * The lines range to draw is specified by the `firstRow` and `lastRow`\n * parameters.\n *\n * @param {number} firstRow the first row to render\n * @param {number} lastRow the last row to render\n * @param {number} offsetRow the relative offset to apply to rows when\n * rendering them\n * @access private\n */\n drawFrontDecorationsForLines (firstRow, lastRow, offsetRow) {\n if (firstRow > lastRow) { return }\n\n const devicePixelRatio = this.minimap.getDevicePixelRatio()\n const lineHeight = this.minimap.getLineHeight() * devicePixelRatio\n const charHeight = this.minimap.getCharHeight() * devicePixelRatio\n const charWidth = this.minimap.getCharWidth() * devicePixelRatio\n const decorations = this.minimap.decorationsByTypeThenRows(firstRow, lastRow)\n const { width: canvasWidth, height: canvasHeight } = this.tokensLayer.getSize()\n const renderData = {\n context: this.frontLayer.context,\n canvasWidth,\n canvasHeight,\n lineHeight,\n charWidth,\n charHeight,\n orders: Main.getPluginsOrder()\n }\n\n const editorElement = this.minimap.getTextEditorElement()\n\n const drawCustomDecorationLambda = (decoration, data, decorationColor) => drawCustomDecoration(decoration, data, decorationColor, editorElement)\n frontDecorationDispatcher['foreground-custom'] = drawCustomDecorationLambda\n\n for (let screenRow = firstRow; screenRow <= lastRow; screenRow++) {\n renderData.row = offsetRow + (screenRow - firstRow)\n renderData.yRow = renderData.row * lineHeight\n renderData.screenRow = screenRow\n\n this.drawDecorations(screenRow, decorations, renderData, frontDecorationDispatcher, editorElement)\n }\n\n renderData.context.fill()\n }\n\n /**\n * Draws lines on the corresponding layer.\n *\n * The lines range to draw is specified by the `firstRow` and `lastRow`\n * parameters.\n *\n * @param {number} firstRow the first row to render\n * @param {number} lastRow the last row to render\n * @param {number} offsetRow the relative offset to apply to rows when\n * rendering them\n * @access private\n */\n drawLines (firstRow, lastRow, offsetRow) {\n if (firstRow > lastRow) { return }\n\n const devicePixelRatio = this.minimap.getDevicePixelRatio()\n const lineHeight = this.minimap.getLineHeight() * devicePixelRatio\n const charHeight = this.minimap.getCharHeight() * devicePixelRatio\n const charWidth = this.minimap.getCharWidth() * devicePixelRatio\n const displayCodeHighlights = this.displayCodeHighlights\n const context = this.tokensLayer.context\n const { width: canvasWidth } = this.tokensLayer.getSize()\n\n const editor = this.minimap.getTextEditor()\n const editorElement = this.minimap.getTextEditorElement()\n\n let lastLine, x\n let y = (offsetRow * lineHeight) - lineHeight\n eachTokenForScreenRows(firstRow, lastRow, editor, this.maxTokensInOneLine, (line, token) => {\n if (lastLine !== line) {\n x = 0\n y += lineHeight\n lastLine = line\n context.clearRect(x, y, canvasWidth, lineHeight)\n }\n if (x > canvasWidth) { return }\n\n if (/^\\s+$/.test(token.text)) {\n x += token.text.length * charWidth\n } else {\n const color = displayCodeHighlights\n ? this.getTokenColor(token, editorElement)\n : this.getDefaultColor(editorElement)\n\n x = drawToken(\n context, token.text, color, x, y, charWidth, charHeight, this.ignoreWhitespacesInTokens\n )\n }\n })\n context.fill()\n }\n\n /**\n * Draws the specified decorations for the current `screenRow`.\n *\n * The `decorations` object contains all the decorations grouped by type and\n * then rows.\n *\n * @param {number} screenRow the screen row index for which\n * render decorations\n * @param {Object} decorations the object containing all the decorations\n * @param {Object} renderData the object containing the render data\n * @param {Object} types an object with the type to render as key and the\n * render method as value\n * @param {TextEditorElement} editorElement\n * @access private\n */\n drawDecorations (screenRow, decorations, renderData, types, editorElement) {\n let decorationsToRender = []\n\n renderData.context.clearRect(\n 0, renderData.yRow,\n renderData.canvasWidth, renderData.lineHeight\n )\n\n for (const i in types) {\n decorationsToRender = decorationsToRender.concat(\n decorations[i] != null ? decorations[i][screenRow] || [] : []\n )\n }\n\n decorationsToRender.sort((a, b) =>\n (renderData.orders[a.properties.plugin] || 0) - (renderData.orders[b.properties.plugin] || 0)\n )\n\n if (decorationsToRender != null ? decorationsToRender.length : undefined) {\n for (let i = 0, len = decorationsToRender.length; i < len; i++) {\n const decoration = decorationsToRender[i]\n const decorationDrawer = types[decoration.properties.type]\n if (!SPEC_MODE) {\n decorationDrawer(\n decoration,\n renderData,\n /* decorationColor */ this.getDecorationColor(decoration, editorElement)\n )\n } else {\n // get the real function name from the mangeld Parcel names\n const functionName = decorationDrawer.name.split('$').pop().replace('Lambda', '')\n // call the spy:\n this[functionName](\n decoration,\n renderData,\n /* decorationColor */ this.getDecorationColor(decoration, editorElement)\n )\n }\n }\n }\n }\n}\n\n// ######## ######## ### ## ##\n// ## ## ## ## ## ## ## ## ##\n// ## ## ## ## ## ## ## ## ##\n// ## ## ######## ## ## ## ## ##\n// ## ## ## ## ######### ## ## ##\n// ## ## ## ## ## ## ## ## ##\n// ######## ## ## ## ## ### ###\n\n/**\n * Draws a single token on the given context.\n *\n * @param {CanvasRenderingContext2D} context the target canvas context\n * @param {string} text the token's text content\n * @param {string} color the token's CSS color\n * @param {number} x the x position of the token in the line\n * @param {number} y the y position of the line in the minimap\n * @param {number} charWidth the width of a character in the minimap\n * @param {number} charHeight the height of a character in the minimap\n * @return {number} the x position at the end of the token\n * @return {boolean} the x position at the end of the token\n * @access private\n */\nfunction drawToken (context, text, color, x, y, charWidth, charHeight, ignoreWhitespacesInTokens) {\n context.fillStyle = color\n\n if (ignoreWhitespacesInTokens) {\n const length = text.length * charWidth\n context.fillRect(x, y, length, charHeight)\n\n return x + length\n } else {\n let chars = 0\n for (let j = 0, len = text.length; j < len; j++) {\n const char = text[j]\n if (/\\s/.test(char)) {\n if (chars > 0) {\n context.fillRect(x - (chars * charWidth), y, chars * charWidth, charHeight)\n }\n chars = 0\n } else {\n chars++\n }\n x += charWidth\n }\n if (chars > 0) {\n context.fillRect(x - (chars * charWidth), y, chars * charWidth, charHeight)\n }\n return x\n }\n}\n\n/**\n * Returns an array of tokens by line.\n *\n * @param {number} startRow The start row\n * @param {number} endRow The end row\n * @param {TextEditor} editor\n * @param {number} maxTokensInOneLine the maximum number of tokens to render in one line\n * @return {Array} An array of tokens by line\n * @access private\n */\nfunction eachTokenForScreenRows (startRow, endRow, editor, maxTokensInOneLine, callback) {\n const invisibleRegExp = getInvisibleRegExp(editor)\n endRow = Math.min(endRow, editor.getScreenLineCount())\n\n for (let row = startRow; row < endRow; row++) {\n const editorTokensForScreenRow = editor.tokensForScreenRow(row)\n const numToken = editorTokensForScreenRow.length\n const numTokenToRender = Math.min(numToken, maxTokensInOneLine)\n for (let iToken = 0; iToken < numTokenToRender; iToken++) {\n const token = editorTokensForScreenRow[iToken]\n callback(row, {\n text: token.text.replace(invisibleRegExp, ' '),\n scopes: token.scopes\n })\n }\n }\n}\n\n/**\n * Returns the regexp to replace invisibles substitution characters\n * in editor lines.\n * @param {TextEditor} editor\n * @return {RegExp} the regular expression to match invisible characters\n * @access private\n */\nfunction getInvisibleRegExp (editor) {\n const invisibles = editor.getInvisibles()\n const regexp = []\n if (invisibles.cr != null) { regexp.push(invisibles.cr) }\n if (invisibles.eol != null) { regexp.push(invisibles.eol) }\n if (invisibles.space != null) { regexp.push(invisibles.space) }\n if (invisibles.tab != null) { regexp.push(invisibles.tab) }\n\n if (regexp.length !== 0) {\n return RegExp(regexp.filter((s) => {\n return typeof s === 'string'\n }).map(escapeRegExp).join('|'), 'g')\n } else {\n return null\n }\n}\n\n// dispatchers for decoration drawing (custom decoration drawer added dynamically)\n\nconst backgroundDecorationDispatcher = {\n line: drawLineDecoration,\n 'highlight-under': drawHighlightDecoration\n}\n\nconst frontDecorationDispatcher = {\n gutter: drawGutterDecoration,\n 'highlight-over': drawHighlightDecoration,\n 'highlight-outline': drawHighlightOutlineDecoration\n}\n\n/**\n * Draws a line decoration.\n *\n * @param {Decoration} decoration the decoration to render\n * @param {Object} data the data need to perform the render\n * @param {string} decorationColor decoration color\n * @access private\n */\nfunction drawLineDecoration (decoration, data, decorationColor) {\n data.context.fillStyle = decorationColor\n data.context.fillRect(0, data.yRow, data.canvasWidth, data.lineHeight)\n}\n\n/**\n * Draws a gutter decoration.\n *\n * @param {Decoration} decoration the decoration to render\n * @param {Object} data the data need to perform the render\n * @param {string} decorationColor decoration color\n * @access private\n */\nfunction drawGutterDecoration (decoration, data, decorationColor) {\n data.context.fillStyle = decorationColor\n data.context.fillRect(0, data.yRow, 1, data.lineHeight)\n}\n\n/**\n * Draws a highlight decoration.\n *\n * It renders only the part of the highlight corresponding to the specified\n * row.\n *\n * @param {Decoration} decoration the decoration to render\n * @param {Object} data the data need to perform the render\n * @param {string} decorationColor decoration color\n * @access private\n */\nfunction drawHighlightDecoration (decoration, data, decorationColor) {\n const range = decoration.getMarker().getScreenRange()\n const rowSpan = range.end.row - range.start.row\n\n data.context.fillStyle = decorationColor\n\n if (rowSpan === 0) {\n const colSpan = range.end.column - range.start.column\n data.context.fillRect(range.start.column * data.charWidth, data.yRow, colSpan * data.charWidth, data.lineHeight)\n } else if (data.screenRow === range.start.row) {\n const x = range.start.column * data.charWidth\n data.context.fillRect(x, data.yRow, data.canvasWidth - x, data.lineHeight)\n } else if (data.screenRow === range.end.row) {\n data.context.fillRect(0, data.yRow, range.end.column * data.charWidth, data.lineHeight)\n } else {\n data.context.fillRect(0, data.yRow, data.canvasWidth, data.lineHeight)\n }\n}\n\n/**\n * Draws a highlight outline decoration.\n *\n * It renders only the part of the highlight corresponding to the specified\n * row.\n *\n * @param {Decoration} decoration the decoration to render\n * @param {Object} data the data need to perform the render\n * @param {string} decorationColor decoration color\n * @access private\n */\nfunction drawHighlightOutlineDecoration (decoration, data, decorationColor) {\n let bottomWidth, colSpan, width, xBottomStart, xEnd, xStart\n const { lineHeight, charWidth, canvasWidth, screenRow } = data\n const range = decoration.getMarker().getScreenRange()\n const rowSpan = range.end.row - range.start.row\n const yStart = data.yRow\n const yEnd = yStart + lineHeight\n\n data.context.fillStyle = decorationColor\n\n if (rowSpan === 0) {\n colSpan = range.end.column - range.start.column\n width = colSpan * charWidth\n xStart = range.start.column * charWidth\n xEnd = xStart + width\n\n data.context.fillRect(xStart, yStart, width, 1)\n data.context.fillRect(xStart, yEnd - 1, width, 1)\n data.context.fillRect(xStart, yStart, 1, lineHeight)\n data.context.fillRect(xEnd, yStart, 1, lineHeight)\n } else if (rowSpan === 1) {\n xStart = range.start.column * data.charWidth\n xEnd = range.end.column * data.charWidth\n\n if (screenRow === range.start.row) {\n width = data.canvasWidth - xStart\n xBottomStart = Math.max(xStart, xEnd)\n bottomWidth = data.canvasWidth - xBottomStart\n\n data.context.fillRect(xStart, yStart, width, 1)\n data.context.fillRect(xBottomStart, yEnd - 1, bottomWidth, 1)\n data.context.fillRect(xStart, yStart, 1, lineHeight)\n data.context.fillRect(canvasWidth - 1, yStart, 1, lineHeight)\n } else {\n width = canvasWidth - xStart\n bottomWidth = canvasWidth - xEnd\n\n data.context.fillRect(0, yStart, xStart, 1)\n data.context.fillRect(0, yEnd - 1, xEnd, 1)\n data.context.fillRect(0, yStart, 1, lineHeight)\n data.context.fillRect(xEnd, yStart, 1, lineHeight)\n }\n } else {\n xStart = range.start.column * charWidth\n xEnd = range.end.column * charWidth\n if (screenRow === range.start.row) {\n width = canvasWidth - xStart\n\n data.context.fillRect(xStart, yStart, width, 1)\n data.context.fillRect(xStart, yStart, 1, lineHeight)\n data.context.fillRect(canvasWidth - 1, yStart, 1, lineHeight)\n } else if (screenRow === range.end.row) {\n width = canvasWidth - xStart\n\n data.context.fillRect(0, yEnd - 1, xEnd, 1)\n data.context.fillRect(0, yStart, 1, lineHeight)\n data.context.fillRect(xEnd, yStart, 1, lineHeight)\n } else {\n data.context.fillRect(0, yStart, 1, lineHeight)\n data.context.fillRect(canvasWidth - 1, yStart, 1, lineHeight)\n if (screenRow === range.start.row + 1) {\n data.context.fillRect(0, yStart, xStart, 1)\n }\n if (screenRow === range.end.row - 1) {\n data.context.fillRect(xEnd, yEnd - 1, canvasWidth - xEnd, 1)\n }\n }\n }\n}\n\n/**\n * Draws a custom decoration.\n *\n * It renders only the part of the highlight corresponding to the specified\n * row.\n *\n * @param {Decoration} decoration the decoration to render\n * @param {Object} data the data need to perform the render\n * @param {string} decorationColor decoration color\n * @param {TextEditorElement} editorElement\n * @access private\n */\nfunction drawCustomDecoration (decoration, data, decorationColor, editorElement) {\n const renderRoutine = decoration.getProperties().render\n\n if (renderRoutine) {\n data.color = decorationColor\n renderRoutine(decoration, data, editorElement)\n }\n}\n\n// ###### ####### ## ####### ######## ######\n// ## ## ## ## ## ## ## ## ## ## ##\n// ## ## ## ## ## ## ## ## ##\n// ## ## ## ## ## ## ######## ######\n// ## ## ## ## ## ## ## ## ##\n// ## ## ## ## ## ## ## ## ## ## ##\n// ###### ####### ######## ####### ## ## ######\n\n/**\n * Converts a `rgb(...)` color into a `rgba(...)` color with the specified\n * opacity.\n *\n * @param {string} color the CSS RGB color to transparentize\n * @param {number} [opacity=1] the opacity amount\n * @return {string} the transparentized CSS color\n * @access private\n */\nfunction transparentize (color, opacity = 1) {\n return color.replace('rgb(', 'rgba(').replace(')', `, ${opacity})`)\n}\n\n// ######## ### ## ## ###### ######## ######\n// ## ## ## ## ### ## ## ## ## ## ##\n// ## ## ## ## #### ## ## ## ##\n// ######## ## ## ## ## ## ## #### ###### ######\n// ## ## ######### ## #### ## ## ## ##\n// ## ## ## ## ## ### ## ## ## ## ##\n// ## ## ## ## ## ## ###### ######## ######\n\n/**\n * Computes the ranges that are not affected by the current pending changes.\n *\n * @param {number} firstRow the first row of the rendered region\n * @param {number} lastRow the last row of the rendered region\n * @param {number | null} offscreenFirstRow CanvasDrawer.offscreenLastRow\n * @param {number | null} offscreenLastRow CanvasDrawer.offscreenLastRow\n * @return {Array} the intact ranges in the rendered region\n * @access private\n */\nfunction computeIntactRanges (firstRow, lastRow, changes, offscreenFirstRow, offscreenLastRow) {\n // TODO when do they get null?\n if ((offscreenFirstRow == null) && (offscreenLastRow == null)) {\n return []\n }\n\n // At first, the whole range is considered intact\n let intactRanges = [\n {\n start: offscreenFirstRow,\n end: offscreenLastRow,\n offscreenRow: 0\n }\n ]\n\n for (let i = 0, len = changes.length; i < len; i++) {\n const change = changes[i]\n const newIntactRanges = []\n\n for (let j = 0, intactLen = intactRanges.length; j < intactLen; j++) {\n const range = intactRanges[j]\n\n if (change.end < range.start && change.screenDelta !== 0) {\n // The change is above of the range and lines are either\n // added or removed\n newIntactRanges.push({\n start: range.start + change.screenDelta,\n end: range.end + change.screenDelta,\n offscreenRow: range.offscreenRow\n })\n } else if (change.end < range.start || change.start > range.end) {\n // The change is outside the range but didn't add\n // or remove lines\n newIntactRanges.push(range)\n } else {\n // The change is within the range, there's one intact range\n // from the range start to the change start\n if (change.start > range.start) {\n newIntactRanges.push({\n start: range.start,\n end: change.start - 1,\n offscreenRow: range.offscreenRow\n })\n }\n if (change.end < range.end) {\n // The change ends within the range\n if (change.bufferDelta !== 0) {\n // Lines are added or removed, the intact range starts in the\n // next line after the change end plus the screen delta\n newIntactRanges.push({\n start: change.end + change.screenDelta + 1,\n end: range.end + change.screenDelta,\n offscreenRow: range.offscreenRow + change.end + 1 - range.start\n })\n } else if (change.screenDelta !== 0) {\n // Lines are added or removed in the display buffer, the intact\n // range starts in the next line after the change end plus the\n // screen delta\n newIntactRanges.push({\n start: change.end + change.screenDelta + 1,\n end: range.end + change.screenDelta,\n offscreenRow: range.offscreenRow + change.end + 1 - range.start\n })\n } else {\n // No lines are added, the intact range starts on the line after\n // the change end\n newIntactRanges.push({\n start: change.end + 1,\n end: range.end,\n offscreenRow: range.offscreenRow + change.end + 1 - range.start\n })\n }\n }\n }\n }\n intactRanges = newIntactRanges\n }\n\n return truncateIntactRanges(intactRanges, firstRow, lastRow)\n}\n\n/**\n * Truncates the intact ranges so that they doesn't expand past the visible\n * area of the minimap.\n *\n * @param {Array} intactRanges the initial array of ranges\n * @param {number} firstRow the first row of the rendered region\n * @param {number} lastRow the last row of the rendered region\n * @return {Array} the array of truncated ranges\n * @access private\n */\nfunction truncateIntactRanges (intactRanges, firstRow, lastRow) {\n let i = 0\n while (i < intactRanges.length) {\n const range = intactRanges[i]\n\n if (range.start < firstRow) {\n range.offscreenRow += firstRow - range.start\n range.start = firstRow\n }\n\n if (range.end > lastRow) { range.end = lastRow }\n\n if (range.start >= range.end) { intactRanges.splice(i--, 1) }\n\n i++\n }\n\n return intactRanges.sort((a, b) => {\n return a.offscreenRow - b.offscreenRow\n })\n}\n","'use strict'\n\n/**\n * Generates a decorator function to includes many `mixto` mixins into a class.\n *\n * @param {...Mixin} mixins the mixins to include in the class\n * @return {function(cls:Function):Function} the decorator function that will\n * include the specified mixins\n * @example\n * @include(SomeMixin)\n * export default class SomeClass {\n * // ...\n * }\n */\nexport default function include (cls, ...mixins) {\n mixins.forEach((mixin) => { includeMixin(cls, mixin) })\n}\n\nfunction includeMixin (target, source) {\n Object.getOwnPropertyNames(source).forEach((k) => {\n if (['length', 'name', 'arguments', 'caller', 'prototype', 'includeInto'].indexOf(k) >= 0) { return }\n\n const descriptor = Object.getOwnPropertyDescriptor(source, k)\n Object.defineProperty(target, k, descriptor)\n })\n\n Object.getOwnPropertyNames(source.prototype).forEach((k) => {\n if (k === 'constructor') { return }\n\n const descriptor = Object.getOwnPropertyDescriptor(source.prototype, k)\n Object.defineProperty(target.prototype, k, descriptor)\n })\n}\n","'use strict'\n\nimport { registerOrUpdateElement } from 'atom-utils-plus'\n\n/**\n * Generates a decorator function to convert a class into a custom element\n * through the `registerOrUpdateElement` method from `atom-utils-plus`.\n *\n * The decorator will take care to return the generated element class so that\n * you can just export it directly as demonstrated below.\n *\n * As supported by the `registerOrUpdateElement` method, static member will\n * be available on the new class.\n *\n * **Note: As there's some limitations when modifying the prototype\n * of a custom element, if you need to inject element callbacks (like\n * `createdCallback`) through a mixin, the mixins should be included before\n * converting the class as a custom element. You'll be able to achieve that by\n * placing the `include` decorator after the `element` one as shown in the\n * second example.**\n *\n * @param {string} elementName the node name of the element to register\n * @return {Function} the element class as returned by\n * `document.registerElement`\n * @example\n * @element('dummy-element-name')\n * export default class SomeClass {\n * // ...\n * }\n *\n * @element('dummy-element-with-mixin')\n * @include(SomeMixin)\n * export default class SomeClass {\n * // ...\n * }\n */\nexport default function element (cls, elementName) {\n return registerOrUpdateElement(elementName, { class: cls })\n}\n","'use strict'\n\nimport { CompositeDisposable, Disposable } from 'atom'\nimport { EventsDelegation, AncestorsMethods } from 'atom-utils-plus'\nimport elementResizeDetectorImport from 'element-resize-detector'\n\nimport * as Main from './main'\nimport CanvasDrawer from './mixins/canvas-drawer'\nimport include from './decorators/include'\nimport element from './decorators/element'\n\nimport MinimapQuickSettingsElement from './minimap-quick-settings-element'\nconst elementResizeDetector = elementResizeDetectorImport({ strategy: 'scroll' })\n\nlet overlayStyle\n\nfunction ensureOverlayStyle () {\n if (!overlayStyle) {\n overlayStyle = document.createElement('style')\n overlayStyle.setAttribute('context', 'atom-text-editor-minimap')\n document.head.appendChild(overlayStyle)\n }\n}\n\nfunction removeOverlayStyle () {\n if (overlayStyle) {\n overlayStyle.parentNode.removeChild(overlayStyle)\n overlayStyle = null\n }\n}\n\nfunction updateOverlayStyle (basis) {\n if (overlayStyle) {\n overlayStyle.textContent = `\n atom-text-editor[with-minimap].editor > div,\n atom-text-editor[with-minimap] > div {\n margin-left: ${basis}px;\n }\n `\n }\n}\n\nconst SPEC_MODE = atom.inSpecMode()\n\n/**\n * Public: The MinimapElement is the view meant to render a {@link Minimap}\n * instance in the DOM.\n *\n * You can retrieve the MinimapElement associated to a Minimap\n * using the `atom.views.getView` method.\n *\n * Note that most interactions with the Minimap package is done through the\n * Minimap model so you should never have to access MinimapElement\n * instances.\n *\n * @example\n * let minimapElement = atom.views.getView(minimap)\n */\nclass MinimapElement {\n static initClass () {\n include(this, CanvasDrawer, EventsDelegation, AncestorsMethods)\n return element(this, 'atom-text-editor-minimap')\n }\n\n // ## ## ####### ####### ## ## ######\n // ## ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ##\n // ######### ## ## ## ## ##### ######\n // ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ## ##\n // ## ## ####### ####### ## ## ######\n\n /**\n * DOM callback invoked when a new MinimapElement is created.\n *\n * @access private\n */\n createdCallback () {\n // Core properties\n\n /**\n * @access private\n */\n this.minimap = undefined\n\n /**\n * @access private\n */\n this.width = undefined\n /**\n * @access private\n */\n this.height = undefined\n\n // Subscriptions\n\n /**\n * @access private\n */\n this.subscriptions = new CompositeDisposable()\n /**\n * @access private\n */\n this.visibleAreaSubscription = undefined\n /**\n * @access private\n */\n this.quickSettingsSubscription = undefined\n /**\n * @access private\n */\n this.dragSubscription = undefined\n /**\n * @access private\n */\n this.openQuickSettingSubscription = undefined\n\n // Configs\n\n /**\n * @access private\n */\n this.displayMinimapOnLeft = false\n /**\n * @access private\n */\n this.minimapScrollIndicator = undefined\n /**\n * @access private\n */\n this.displayMinimapOnLeft = undefined\n /**\n * @access private\n */\n this.displayPluginsControls = undefined\n /**\n * @access private\n */\n this.textOpacity = undefined\n /**\n * @access private\n */\n this.displayCodeHighlights = undefined\n /**\n * @access private\n */\n this.adjustToSoftWrap = undefined\n /**\n * @access private\n */\n this.useHardwareAcceleration = undefined\n /**\n * @access private\n */\n this.absoluteMode = undefined\n\n // Elements\n\n /**\n * @access private\n */\n this.visibleArea = undefined\n /**\n * @access private\n */\n this.controls = undefined\n /**\n * @access private\n */\n this.scrollIndicator = undefined\n /**\n * @access private\n */\n this.openQuickSettings = undefined\n /**\n * @access private\n */\n this.quickSettingsElement = undefined\n\n // States\n\n /**\n * @access private\n */\n this.attached = undefined\n /**\n * @access private\n */\n this.attachedToTextEditor = undefined\n /**\n * @access private\n */\n this.standAlone = undefined\n /**\n * @access private\n */\n this.wasVisible = undefined\n\n // Other\n\n /**\n * @access private\n */\n this.offscreenFirstRow = undefined\n /**\n * @access private\n */\n this.offscreenLastRow = undefined\n /**\n * @access private\n */\n this.frameRequested = undefined\n /**\n * @access private\n */\n this.flexBasis = undefined\n\n this.initializeContent()\n\n this.subscriptions.add(\n atom.config.observe('minimap.displayMinimapOnLeft', (displayMinimapOnLeft) => {\n this.displayMinimapOnLeft = displayMinimapOnLeft\n\n displayMinimapOnLeft\n ? ensureOverlayStyle()\n : removeOverlayStyle()\n this.updateMinimapFlexPosition()\n this.measureHeightAndWidth(true, true)\n }),\n\n atom.config.observe('minimap.minimapScrollIndicator', (minimapScrollIndicator) => {\n this.minimapScrollIndicator = minimapScrollIndicator\n\n if (this.minimapScrollIndicator && !(this.scrollIndicator != null) && !this.standAlone) {\n this.initializeScrollIndicator()\n } else if ((this.scrollIndicator != null)) {\n this.disposeScrollIndicator()\n }\n\n if (this.attached) { this.requestUpdate() }\n }),\n\n atom.config.observe('minimap.displayPluginsControls', (displayPluginsControls) => {\n this.displayPluginsControls = displayPluginsControls\n\n if (this.displayPluginsControls && !(this.openQuickSettings != null) && !this.standAlone) {\n this.initializeOpenQuickSettings()\n } else if ((this.openQuickSettings != null)) {\n this.disposeOpenQuickSettings()\n }\n }),\n\n atom.config.observe('minimap.textOpacity', (textOpacity) => {\n this.textOpacity = textOpacity\n\n if (this.attached) { this.requestForcedUpdate() }\n }),\n\n atom.config.observe('minimap.displayCodeHighlights', (displayCodeHighlights) => {\n this.displayCodeHighlights = displayCodeHighlights\n\n if (this.attached) { this.requestForcedUpdate() }\n }),\n\n atom.config.observe('minimap.smoothScrolling', (smoothScrolling) => {\n this.smoothScrolling = smoothScrolling\n\n if (this.attached) {\n if (!this.smoothScrolling) {\n this.backLayer.canvas.style.cssText = ''\n this.tokensLayer.canvas.style.cssText = ''\n this.frontLayer.canvas.style.cssText = ''\n } else {\n this.requestUpdate()\n }\n }\n }),\n\n atom.config.observe('minimap.adjustMinimapWidthToSoftWrap', (adjustToSoftWrap) => {\n this.adjustToSoftWrap = adjustToSoftWrap\n\n if (this.attached) { this.measureHeightAndWidth() }\n }),\n\n atom.config.observe('minimap.adjustMinimapWidthOnlyIfSmaller', (adjustOnlyIfSmaller) => {\n this.adjustOnlyIfSmaller = adjustOnlyIfSmaller\n\n if (this.attached) { this.measureHeightAndWidth() }\n }),\n\n atom.config.observe('minimap.useHardwareAcceleration', (useHardwareAcceleration) => {\n this.useHardwareAcceleration = useHardwareAcceleration\n\n if (this.attached) { this.requestUpdate() }\n }),\n\n atom.config.observe('minimap.absoluteMode', (absoluteMode) => {\n this.absoluteMode = absoluteMode\n\n this.classList.toggle('absolute', this.absoluteMode)\n }),\n\n atom.config.observe('minimap.adjustAbsoluteModeHeight', (adjustAbsoluteModeHeight) => {\n this.adjustAbsoluteModeHeight = adjustAbsoluteModeHeight\n\n this.classList.toggle('adjust-absolute-height', this.adjustAbsoluteModeHeight)\n\n if (this.attached) { this.measureHeightAndWidth() }\n }),\n\n atom.config.observe('minimap.ignoreWhitespacesInTokens', (ignoreWhitespacesInTokens) => {\n this.ignoreWhitespacesInTokens = ignoreWhitespacesInTokens\n\n if (this.attached) { this.requestForcedUpdate() }\n }),\n\n atom.config.observe('editor.preferredLineLength', () => {\n if (this.attached) { this.measureHeightAndWidth() }\n }),\n\n atom.config.observe('editor.softWrap', () => {\n if (this.attached) { this.requestUpdate() }\n }),\n\n atom.config.observe('editor.showInvisibles', () => {\n if (this.attached) { this.requestUpdate() }\n }),\n\n atom.config.observe('editor.invisibles', () => {\n if (this.attached) { this.requestUpdate() }\n }),\n\n atom.config.observe('editor.softWrapAtPreferredLineLength', () => {\n if (this.attached) { this.requestUpdate() }\n })\n )\n }\n\n /**\n * DOM callback invoked when a new MinimapElement is attached to the DOM.\n *\n * @access private\n */\n attachedCallback () {\n if (typeof atom.views.pollDocument === 'function') {\n this.subscriptions.add(atom.views.pollDocument(() => { this.pollDOM() }))\n } else {\n this.intersectionObserver = new IntersectionObserver((entries) => {\n const { intersectionRect } = entries[entries.length - 1]\n if (intersectionRect.width > 0 || intersectionRect.height > 0) {\n this.measureHeightAndWidth(true, true)\n }\n })\n\n this.intersectionObserver.observe(this)\n if (this.isVisible()) {\n this.measureHeightAndWidth(true, true)\n }\n\n const measureDimensions = () => { this.measureHeightAndWidth(false, false) }\n elementResizeDetector.listenTo(this, measureDimensions)\n window.addEventListener('resize', measureDimensions, { passive: true })\n\n this.subscriptions.add(\n new Disposable(() => { elementResizeDetector.removeListener(this, measureDimensions) }),\n new Disposable(() => { window.removeEventListener('resize', measureDimensions) })\n )\n }\n\n this.measureHeightAndWidth()\n this.updateMinimapFlexPosition()\n this.attached = true\n this.attachedToTextEditor = this.queryParentSelector('atom-text-editor') === this.minimap.getTextEditorElement()\n\n if (this.attachedToTextEditor) {\n this.minimap.getTextEditorElement().setAttribute('with-minimap', '')\n }\n\n this.subscriptions.add(\n\n /*\n We use `atom.styles.onDidAddStyleElement` instead of\n `atom.themes.onDidChangeActiveThemes`.\n Why? Currently, The style element will be removed first, and then re-added\n and the `change` event has not be triggered in the process.\n */\n atom.styles.onDidAddStyleElement(() => {\n this.DOMStylesReader.invalidateDOMStylesCache()\n this.requestForcedUpdate()\n }),\n\n this.subscribeToMediaQuery()\n )\n }\n\n /**\n * DOM callback invoked when a new MinimapElement is detached from the DOM.\n *\n * @access private\n */\n detachedCallback () {\n this.minimap.getTextEditorElement().removeAttribute('with-minimap')\n this.attached = false\n }\n\n // ### ######## ######## ### ###### ## ##\n // ## ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## #########\n // ######### ## ## ######### ## ## ##\n // ## ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ###### ## ##\n\n /**\n * Returns whether the MinimapElement is currently visible on screen or not.\n *\n * The visibility of the minimap is defined by testing the size of the offset\n * width and height of the element.\n *\n * @return {boolean} whether the MinimapElement is currently visible or not\n */\n isVisible () { return this.offsetWidth > 0 || this.offsetHeight > 0 }\n\n /**\n * Attaches the MinimapElement to the DOM.\n *\n * The position at which the element is attached is defined by the\n * `displayMinimapOnLeft` setting.\n *\n * @param {HTMLElement} [parent] the DOM node where attaching the minimap\n * element\n */\n attach (parent) {\n if (this.attached) { return }\n\n const container = parent || this.minimap.getTextEditorElement()\n const minimaps = container.querySelectorAll('atom-text-editor-minimap')\n if (minimaps.length) {\n Array.prototype.forEach.call(minimaps, (el) => { el.destroy() })\n }\n container.appendChild(this)\n }\n\n /**\n * Detaches the MinimapElement from the DOM.\n */\n detach () {\n if (!this.attached || this.parentNode == null) { return }\n this.parentNode.removeChild(this)\n }\n\n /**\n * Toggles the minimap left/right position based on the value of the\n * `displayMinimapOnLeft` setting.\n *\n * @access private\n */\n updateMinimapFlexPosition () {\n this.classList.toggle('left', this.displayMinimapOnLeft)\n }\n\n /**\n * Destroys this MinimapElement\n */\n destroy () {\n this.subscriptions.dispose()\n this.detach()\n this.minimap = null\n }\n\n // ###### ####### ## ## ######## ######## ## ## ########\n // ## ## ## ## ### ## ## ## ### ## ##\n // ## ## ## #### ## ## ## #### ## ##\n // ## ## ## ## ## ## ## ###### ## ## ## ##\n // ## ## ## ## #### ## ## ## #### ##\n // ## ## ## ## ## ### ## ## ## ### ##\n // ###### ####### ## ## ## ######## ## ## ##\n\n /**\n * Creates the content of the MinimapElement and attaches the mouse control\n * event listeners.\n *\n * @access private\n */\n initializeContent () {\n this.initializeCanvas()\n\n this.attachCanvases(this)\n\n this.createVisibleArea()\n this.createControls()\n\n this.subscriptions.add(\n\n this.subscribeTo(\n this,\n {\n mousewheel: (e) => {\n if (!this.standAlone && this.minimap.onMouseWheel) {\n this.minimap.onMouseWheel(e)\n }\n }\n },\n { passive: true }\n ),\n\n this.subscribeTo(\n this.getFrontCanvas(),\n {\n mousedown: (e) => { this.canvasPressed(extractMouseEventData(e)) },\n touchstart: (e) => { this.canvasPressed(extractTouchEventData(e)) }\n },\n { passive: true }\n )\n\n )\n }\n\n /**\n * Initializes the visible area div.\n *\n * @access private\n */\n createVisibleArea () {\n if (this.visibleArea) { return }\n\n this.visibleArea = document.createElement('div')\n this.visibleArea.classList.add('minimap-visible-area')\n this.appendChild(this.visibleArea)\n this.visibleAreaSubscription = this.subscribeTo(this.visibleArea, {\n mousedown: (e) => { this.startDrag(extractMouseEventData(e)) },\n touchstart: (e) => { this.startDrag(extractTouchEventData(e)) }\n }, { passive: true })\n\n this.subscriptions.add(this.visibleAreaSubscription)\n }\n\n /**\n * Removes the visible area div.\n *\n * @access private\n */\n removeVisibleArea () {\n if (!this.visibleArea) { return }\n\n this.subscriptions.remove(this.visibleAreaSubscription)\n this.visibleAreaSubscription.dispose()\n this.removeChild(this.visibleArea)\n delete this.visibleArea\n }\n\n /**\n * Creates the controls container div.\n *\n * @access private\n */\n createControls () {\n if (this.controls || this.standAlone) { return }\n\n this.controls = document.createElement('div')\n this.controls.classList.add('minimap-controls')\n this.appendChild(this.controls)\n }\n\n /**\n * Removes the controls container div.\n *\n * @access private\n */\n removeControls () {\n if (!this.controls) { return }\n\n this.removeChild(this.controls)\n delete this.controls\n }\n\n /**\n * Initializes the scroll indicator div when the `minimapScrollIndicator`\n * settings is enabled.\n *\n * @access private\n */\n initializeScrollIndicator () {\n if (this.scrollIndicator || this.standAlone) { return }\n\n this.scrollIndicator = document.createElement('div')\n this.scrollIndicator.classList.add('minimap-scroll-indicator')\n this.controls.appendChild(this.scrollIndicator)\n }\n\n /**\n * Disposes the scroll indicator div when the `minimapScrollIndicator`\n * settings is disabled.\n *\n * @access private\n */\n disposeScrollIndicator () {\n if (!this.scrollIndicator) { return }\n\n this.controls.removeChild(this.scrollIndicator)\n delete this.scrollIndicator\n }\n\n /**\n * Initializes the quick settings openener div when the\n * `displayPluginsControls` setting is enabled.\n *\n * @access private\n */\n initializeOpenQuickSettings () {\n if (this.openQuickSettings || this.standAlone) { return }\n\n this.openQuickSettings = document.createElement('div')\n this.openQuickSettings.classList.add('open-minimap-quick-settings')\n this.controls.appendChild(this.openQuickSettings)\n\n this.openQuickSettingSubscription = this.subscribeTo(this.openQuickSettings, {\n mousedown: (e) => {\n e.preventDefault()\n e.stopPropagation()\n\n if ((this.quickSettingsElement != null)) {\n this.quickSettingsElement.destroy()\n this.quickSettingsSubscription.dispose()\n } else {\n this.quickSettingsElement = new MinimapQuickSettingsElement()\n this.quickSettingsElement.setModel(this)\n this.quickSettingsSubscription = this.quickSettingsElement.onDidDestroy(() => {\n this.quickSettingsElement = null\n })\n\n const { top, left, right } = this.getFrontCanvas().getBoundingClientRect()\n this.quickSettingsElement.style.top = `${top}px`\n this.quickSettingsElement.attach()\n\n if (this.displayMinimapOnLeft) {\n this.quickSettingsElement.style.left = `${right}px`\n } else {\n this.quickSettingsElement.style.left = `${left - this.quickSettingsElement.clientWidth}px`\n }\n }\n }\n })\n }\n\n /**\n * Disposes the quick settings openener div when the `displayPluginsControls`\n * setting is disabled.\n *\n * @access private\n */\n disposeOpenQuickSettings () {\n if (!this.openQuickSettings) { return }\n\n this.controls.removeChild(this.openQuickSettings)\n this.openQuickSettingSubscription.dispose()\n delete this.openQuickSettings\n }\n\n // ## ## ####### ######## ######## ##\n // ### ### ## ## ## ## ## ##\n // #### #### ## ## ## ## ## ##\n // ## ### ## ## ## ## ## ###### ##\n // ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ##\n // ## ## ####### ######## ######## ########\n\n /**\n * Returns the Minimap for which this MinimapElement was created.\n *\n * @return {Minimap} this element's Minimap\n */\n getModel () { return this.minimap }\n\n /**\n * Defines the Minimap model for this MinimapElement instance.\n *\n * @param {Minimap} minimap the Minimap model for this instance.\n * @return {Minimap} this element's Minimap\n */\n setModel (minimap) {\n this.minimap = minimap\n\n this.subscriptions.add(\n\n this.minimap.onDidChangeScrollTop(() => {\n this.requestUpdate()\n }),\n\n this.minimap.onDidChangeScrollLeft(() => {\n this.requestUpdate()\n }),\n\n this.minimap.onDidDestroy(() => {\n this.destroy()\n }),\n\n this.minimap.onDidChangeConfig(() => {\n if (this.attached) { return this.requestForcedUpdate() }\n }),\n\n this.minimap.onDidChangeStandAlone(() => {\n this.setStandAlone(this.minimap.isStandAlone())\n this.requestUpdate()\n }),\n\n this.minimap.onDidChange((change) => {\n this.pendingChanges.push(change)\n this.requestUpdate()\n }),\n\n this.minimap.onDidChangeDecorationRange((change) => {\n const { type } = change\n if (type === 'line' ||\n type === 'highlight-under' ||\n type === 'background-custom') {\n this.pendingBackDecorationChanges.push(change)\n } else {\n this.pendingFrontDecorationChanges.push(change)\n }\n this.requestUpdate()\n }),\n\n Main.onDidChangePluginOrder(() => {\n this.requestForcedUpdate()\n })\n )\n\n this.setStandAlone(this.minimap.isStandAlone())\n\n if (this.width != null && this.height != null) {\n this.minimap.setScreenHeightAndWidth(this.height, this.width)\n }\n\n return this.minimap\n }\n\n /**\n * Sets the stand-alone mode for this MinimapElement.\n *\n * @param {boolean} standAlone the new mode for this MinimapElement\n */\n setStandAlone (standAlone) {\n this.standAlone = standAlone\n\n if (this.standAlone) {\n this.setAttribute('stand-alone', true)\n this.disposeScrollIndicator()\n this.disposeOpenQuickSettings()\n this.removeControls()\n this.removeVisibleArea()\n } else {\n this.removeAttribute('stand-alone')\n this.createVisibleArea()\n this.createControls()\n if (this.minimapScrollIndicator) { this.initializeScrollIndicator() }\n if (this.displayPluginsControls) { this.initializeOpenQuickSettings() }\n }\n }\n\n // ## ## ######## ######## ### ######## ########\n // ## ## ## ## ## ## ## ## ## ##\n // ## ## ## ## ## ## ## ## ## ##\n // ## ## ######## ## ## ## ## ## ######\n // ## ## ## ## ## ######### ## ##\n // ## ## ## ## ## ## ## ## ##\n // ####### ## ######## ## ## ## ########\n\n /**\n * Requests an update to be performed on the next frame.\n */\n requestUpdate () {\n if (this.frameRequested) { return }\n\n this.frameRequested = true\n requestAnimationFrame(() => {\n this.update()\n this.frameRequested = false\n })\n }\n\n /**\n * Requests an update to be performed on the next frame that will completely\n * redraw the minimap.\n */\n requestForcedUpdate () {\n this.offscreenFirstRow = null\n this.offscreenLastRow = null\n this.requestUpdate()\n }\n\n /**\n * Performs the actual MinimapElement update.\n *\n * @access private\n */\n update () {\n if (!(this.attached && this.isVisible() && this.minimap)) { return }\n const minimap = this.minimap\n minimap.enableCache()\n const canvas = this.getFrontCanvas()\n\n const devicePixelRatio = this.minimap.getDevicePixelRatio()\n const visibleAreaLeft = minimap.getTextEditorScaledScrollLeft()\n const visibleAreaTop = minimap.getTextEditorScaledScrollTop() - minimap.getScrollTop()\n const width = Math.min(canvas.width / devicePixelRatio, this.width)\n const visibleWidth = width + visibleAreaLeft\n\n if (this.adjustToSoftWrap && this.flexBasis) {\n this.style.flexBasis = `${this.flexBasis}px`\n this.style.width = `${this.flexBasis}px`\n } else {\n this.style.flexBasis = null\n this.style.width = null\n }\n\n if (SPEC_MODE) {\n applyStyles(this.visibleArea, {\n width: `${Math.round(visibleWidth)}px`,\n height: `${Math.round(minimap.getTextEditorScaledHeight())}px`,\n top: `${Math.round(visibleAreaTop)}px`,\n 'border-left-width': `${Math.round(visibleAreaLeft)}px`\n })\n } else {\n applyStyles(this.visibleArea, {\n width: `${Math.round(visibleWidth)}px`,\n height: `${Math.round(minimap.getTextEditorScaledHeight())}px`,\n transform: makeTranslate(0, visibleAreaTop, this.useHardwareAcceleration),\n 'border-left-width': `${Math.round(visibleAreaLeft)}px`\n })\n }\n\n applyStyles(this.controls, { width: `${Math.round(width)}px` })\n\n const canvasTop = minimap.getFirstVisibleScreenRow() * minimap.getLineHeight() - minimap.getScrollTop()\n\n if (this.smoothScrolling) {\n if (SPEC_MODE) {\n applyStyles(this.backLayer.canvas, { top: `${canvasTop}px` })\n applyStyles(this.tokensLayer.canvas, { top: `${canvasTop}px` })\n applyStyles(this.frontLayer.canvas, { top: `${canvasTop}px` })\n } else {\n let canvasTransform = makeTranslate(0, canvasTop, this.useHardwareAcceleration)\n if (devicePixelRatio !== 1) {\n const scale = 1 / devicePixelRatio\n canvasTransform += ` ${makeScale(scale, scale, this.useHardwareAcceleration)}`\n }\n applyStyles(this.backLayer.canvas, { transform: canvasTransform })\n applyStyles(this.tokensLayer.canvas, { transform: canvasTransform })\n applyStyles(this.frontLayer.canvas, { transform: canvasTransform })\n }\n } else {\n const scale = 1 / devicePixelRatio\n const canvasTransform = makeScale(scale, scale, this.useHardwareAcceleration)\n applyStyles(this.backLayer.canvas, { transform: canvasTransform })\n applyStyles(this.tokensLayer.canvas, { transform: canvasTransform })\n applyStyles(this.frontLayer.canvas, { transform: canvasTransform })\n }\n\n if (this.minimapScrollIndicator && !this.scrollIndicator && minimap.canScroll()) {\n this.initializeScrollIndicator()\n }\n\n if (this.scrollIndicator != null) {\n const minimapScreenHeight = minimap.getScreenHeight()\n const indicatorHeight = minimapScreenHeight * (minimapScreenHeight / minimap.getHeight())\n const indicatorScroll = (minimapScreenHeight - indicatorHeight) * minimap.getScrollRatio()\n\n if (SPEC_MODE) {\n applyStyles(this.scrollIndicator, {\n height: `${indicatorHeight}px`,\n top: `${indicatorScroll}px`\n })\n } else {\n applyStyles(this.scrollIndicator, {\n height: `${indicatorHeight}px`,\n transform: makeTranslate(0, indicatorScroll, this.useHardwareAcceleration)\n })\n }\n\n if (!minimap.canScroll()) { this.disposeScrollIndicator() }\n }\n\n if (this.absoluteMode && this.adjustAbsoluteModeHeight) { this.updateCanvasesSize() }\n\n this.updateCanvas()\n minimap.clearCache()\n }\n\n /**\n * Defines whether to render the code highlights or not.\n *\n * @param {Boolean} displayCodeHighlights whether to render the code\n * highlights or not\n */\n setDisplayCodeHighlights (displayCodeHighlights) {\n this.displayCodeHighlights = displayCodeHighlights\n if (this.attached) { this.requestForcedUpdate() }\n }\n\n /**\n * Polling callback used to detect visibility and size changes.\n *\n * @access private\n */\n pollDOM () {\n const visibilityChanged = this.checkForVisibilityChange()\n if (this.isVisible()) {\n if (!this.wasVisible) { this.requestForcedUpdate() }\n\n this.measureHeightAndWidth(visibilityChanged, false)\n }\n }\n\n /**\n * A method that checks for visibility changes in the MinimapElement.\n * The method returns `true` when the visibility changed from visible to\n * hidden or from hidden to visible.\n *\n * @return {boolean} whether the visibility changed or not since the last call\n * @access private\n */\n checkForVisibilityChange () {\n if (this.isVisible()) {\n if (this.wasVisible) {\n return false\n } else {\n this.wasVisible = true\n return this.wasVisible\n }\n } else {\n if (this.wasVisible) {\n this.wasVisible = false\n return true\n } else {\n this.wasVisible = false\n return this.wasVisible\n }\n }\n }\n\n /**\n * A method used to measure the size of the MinimapElement and update internal\n * components based on the new size.\n *\n * @param {boolean} visibilityChanged did the visibility changed since last\n * measurement\n * @param {[type]} [forceUpdate=true] forces the update even when no changes\n * were detected\n * @access private\n */\n measureHeightAndWidth (visibilityChanged, forceUpdate = true) {\n if (!this.minimap) { return }\n\n const safeFlexBasis = this.style.flexBasis\n this.style.flexBasis = ''\n\n const wasResized = this.width !== this.clientWidth || this.height !== this.clientHeight\n\n this.height = this.clientHeight\n this.width = this.clientWidth\n let canvasWidth = this.width\n\n if ((this.minimap != null)) {\n this.minimap.setScreenHeightAndWidth(this.height, this.width)\n }\n\n if (wasResized || visibilityChanged || forceUpdate) {\n this.requestForcedUpdate()\n }\n\n if (!this.isVisible()) { return }\n\n if (wasResized || forceUpdate) {\n if (this.adjustToSoftWrap) {\n const lineLength = atom.config.get('editor.preferredLineLength')\n const softWrap = atom.config.get('editor.softWrap')\n const softWrapAtPreferredLineLength = atom.config.get('editor.softWrapAtPreferredLineLength')\n const width = lineLength * this.minimap.getCharWidth()\n\n if (softWrap && softWrapAtPreferredLineLength && lineLength && (width <= this.width || !this.adjustOnlyIfSmaller)) {\n this.flexBasis = width\n canvasWidth = width\n updateOverlayStyle(width)\n } else {\n updateOverlayStyle(canvasWidth)\n delete this.flexBasis\n }\n } else {\n updateOverlayStyle(canvasWidth)\n delete this.flexBasis\n }\n\n this.updateCanvasesSize(canvasWidth)\n } else {\n this.style.flexBasis = safeFlexBasis\n }\n }\n\n updateCanvasesSize (canvasWidth) {\n const devicePixelRatio = this.minimap.getDevicePixelRatio()\n const maxCanvasHeight = this.height + this.minimap.getLineHeight()\n const newHeight = this.absoluteMode && this.adjustAbsoluteModeHeight ? Math.min(this.minimap.getHeight(), maxCanvasHeight) : maxCanvasHeight\n const canvas = this.getFrontCanvas()\n\n if (canvasWidth == null) {\n canvasWidth = canvas.width / devicePixelRatio\n }\n\n if (canvasWidth !== canvas.width || newHeight !== canvas.height) {\n this.setCanvasesSize(\n canvasWidth * devicePixelRatio,\n newHeight * devicePixelRatio\n )\n if (this.absoluteMode && this.adjustAbsoluteModeHeight) {\n this.offscreenFirstRow = null\n this.offscreenLastRow = null\n }\n }\n }\n\n // ######## ## ## ######## ## ## ######## ######\n // ## ## ## ## ### ## ## ## ##\n // ## ## ## ## #### ## ## ##\n // ###### ## ## ###### ## ## ## ## ######\n // ## ## ## ## ## #### ## ##\n // ## ## ## ## ## ### ## ## ##\n // ######## ### ######## ## ## ## ######\n\n /**\n * Callback triggered when the mouse is pressed on the MinimapElement canvas.\n *\n * @param {number} y the vertical coordinate of the event\n * @param {boolean} isLeftMouse was the left mouse button pressed?\n * @param {boolean} isMiddleMouse was the middle mouse button pressed?\n * @access private\n */\n canvasPressed ({ y, isLeftMouse, isMiddleMouse }) {\n if (this.minimap.isStandAlone()) { return }\n if (isLeftMouse) {\n this.canvasLeftMousePressed(y)\n } else if (isMiddleMouse) {\n this.canvasMiddleMousePressed(y)\n const { top, height } = this.visibleArea.getBoundingClientRect()\n this.startDrag({ y: top + height / 2, isLeftMouse: false, isMiddleMouse: true })\n }\n }\n\n /**\n * Callback triggered when the mouse left button is pressed on the\n * MinimapElement canvas.\n *\n * @param {MouseEvent} e the mouse event object\n * @param {number} e.pageY the mouse y position in page\n * @param {HTMLElement} e.target the source of the event\n * @access private\n */\n canvasLeftMousePressed (y) {\n const deltaY = y - this.getBoundingClientRect().top\n const row = Math.floor(deltaY / this.minimap.getLineHeight()) + this.minimap.getFirstVisibleScreenRow()\n\n const textEditor = this.minimap.getTextEditor()\n const textEditorElement = this.minimap.getTextEditorElement()\n\n const scrollTop = row * textEditor.getLineHeightInPixels() - this.minimap.getTextEditorHeight() / 2\n const textEditorScrollTop = textEditorElement.pixelPositionForScreenPosition([row, 0]).top - this.minimap.getTextEditorHeight() / 2\n\n if (atom.config.get('minimap.moveCursorOnMinimapClick')) {\n textEditor.setCursorScreenPosition([row, 0])\n }\n\n if (atom.config.get('minimap.scrollAnimation')) {\n const duration = atom.config.get('minimap.scrollAnimationDuration')\n const independentScroll = this.minimap.scrollIndependentlyOnMouseWheel()\n\n const from = this.minimap.getTextEditorScrollTop()\n const to = textEditorScrollTop\n let step\n\n if (independentScroll) {\n const minimapFrom = this.minimap.getScrollTop()\n const minimapTo = Math.min(1, scrollTop / (this.minimap.getTextEditorMaxScrollTop() || 1)) * this.minimap.getMaxScrollTop()\n\n step = (now, t) => {\n if (this.minimap === null) return // TODO why this happens in the tests?\n this.minimap.setTextEditorScrollTop(now, true)\n this.minimap.setScrollTop(minimapFrom + (minimapTo - minimapFrom) * t)\n }\n animate({ from, to, duration, step })\n } else {\n step = (now) => {\n if (this.minimap === null) return // TODO why this happens in the tests?\n this.minimap.setTextEditorScrollTop(now)\n }\n animate({ from, to, duration, step })\n }\n } else {\n this.minimap.setTextEditorScrollTop(textEditorScrollTop)\n }\n }\n\n /**\n * Callback triggered when the mouse middle button is pressed on the\n * MinimapElement canvas.\n *\n * @param {MouseEvent} e the mouse event object\n * @param {number} e.pageY the mouse y position in page\n * @access private\n */\n canvasMiddleMousePressed (y) {\n const { top: offsetTop } = this.getBoundingClientRect()\n const deltaY = y - offsetTop - this.minimap.getTextEditorScaledHeight() / 2\n\n const ratio = deltaY / (this.minimap.getVisibleHeight() - this.minimap.getTextEditorScaledHeight())\n\n this.minimap.setTextEditorScrollTop(ratio * this.minimap.getTextEditorMaxScrollTop())\n }\n\n /**\n * Subscribes to a media query for device pixel ratio changes and forces\n * a repaint when it occurs.\n *\n * @return {Disposable} a disposable to remove the media query listener\n * @access private\n */\n subscribeToMediaQuery () {\n const mediaQuery = window.matchMedia('screen and (-webkit-min-device-pixel-ratio: 1.5)')\n const mediaListener = () => { this.requestForcedUpdate() }\n mediaQuery.addEventListener('change', mediaListener)\n\n return new Disposable(() => {\n mediaQuery.removeEventListener('change', mediaListener)\n })\n }\n\n // ######## #### ########\n // ## ## ## ## ## ##\n // ## ## #### ## ##\n // ## ## #### ## ##\n // ## ## ## ## ## ## ##\n // ## ## ## ## ## ##\n // ######## #### ## ########\n\n /**\n * A method triggered when the mouse is pressed over the visible area that\n * starts the dragging gesture.\n *\n * @param {number} y the vertical coordinate of the event\n * @param {boolean} isLeftMouse was the left mouse button pressed?\n * @param {boolean} isMiddleMouse was the middle mouse button pressed?\n * @access private\n */\n startDrag ({ y, isLeftMouse, isMiddleMouse }) {\n if (!this.minimap) { return }\n if (!isLeftMouse && !isMiddleMouse) { return }\n\n const initial = {\n dragOffset: y - this.visibleArea.getBoundingClientRect().top,\n offsetTop: this.getBoundingClientRect().top\n }\n\n // TODO can we avoid adding and removing the listeners every time?\n\n const mousemoveHandler = (e) => this.drag(extractMouseEventData(e), initial)\n const dragendHandler = () => this.endDrag()\n\n const touchmoveHandler = (e) => this.drag(extractTouchEventData(e), initial)\n\n document.body.addEventListener('mousemove', mousemoveHandler, { passive: true })\n document.body.addEventListener('mouseup', dragendHandler, { passive: true })\n document.body.addEventListener('mouseleave', dragendHandler, { passive: true })\n\n document.body.addEventListener('touchmove', touchmoveHandler, { passive: true })\n document.body.addEventListener('touchend', dragendHandler, { passive: true })\n document.body.addEventListener('touchcancel', dragendHandler, { passive: true })\n\n this.dragSubscription = new Disposable(function () {\n document.body.removeEventListener('mousemove', mousemoveHandler)\n document.body.removeEventListener('mouseup', dragendHandler)\n document.body.removeEventListener('mouseleave', dragendHandler)\n\n document.body.removeEventListener('touchmove', touchmoveHandler)\n document.body.removeEventListener('touchend', dragendHandler)\n document.body.removeEventListener('touchcancel', dragendHandler)\n })\n }\n\n /**\n * The method called during the drag gesture.\n *\n * @param {number} y the vertical coordinate of the event\n * @param {boolean} isLeftMouse was the left mouse button pressed?\n * @param {boolean} isMiddleMouse was the middle mouse button pressed?\n * @param {number} initial.dragOffset the mouse offset within the visible\n * area\n * @param {number} initial.offsetTop the MinimapElement offset at the moment\n * of the drag start\n * @access private\n */\n drag ({ y, isLeftMouse, isMiddleMouse }, initial) {\n if (!this.minimap) { return }\n if (!isLeftMouse && !isMiddleMouse) { return }\n const deltaY = y - initial.offsetTop - initial.dragOffset\n\n const ratio = deltaY / (this.minimap.getVisibleHeight() - this.minimap.getTextEditorScaledHeight())\n\n this.minimap.setTextEditorScrollTop(ratio * this.minimap.getTextEditorMaxScrollTop())\n }\n\n /**\n * The method that ends the drag gesture.\n *\n * @access private\n */\n endDrag () {\n if (!this.minimap) { return }\n this.dragSubscription.dispose()\n }\n}\n\nconst minimapElement = MinimapElement.initClass()\nexport default minimapElement\n\n// ######## ## ## ######## ## ## ######## ######\n// ## ## ## ## ### ## ## ## ##\n// ## ## ## ## #### ## ## ##\n// ###### ## ## ###### ## ## ## ## ######\n// ## ## ## ## ## #### ## ##\n// ## ## ## ## ## ### ## ## ##\n// ######## ### ######## ## ## ## ######\n\n/**\n * A method that extracts data from a `MouseEvent` which can then be used to\n * process clicks and drags of the minimap.\n *\n * Used together with `extractTouchEventData` to provide a unified interface\n * for `MouseEvent`s and `TouchEvent`s.\n *\n * @param {MouseEvent} mouseEvent the mouse event object\n * @access private\n */\nfunction extractMouseEventData (mouseEvent) {\n return {\n x: mouseEvent.pageX,\n y: mouseEvent.pageY,\n isLeftMouse: mouseEvent.button === 0,\n isMiddleMouse: mouseEvent.button === 1\n }\n}\n\n/**\n * A method that extracts data from a `TouchEvent` which can then be used to\n * process clicks and drags of the minimap.\n *\n * Used together with `extractMouseEventData` to provide a unified interface\n * for `MouseEvent`s and `TouchEvent`s.\n *\n * @param {TouchEvent} touchEvent the touch event object\n * @access private\n */\nfunction extractTouchEventData (touchEvent) {\n // Use the first touch on the target area. Other touches will be ignored in\n // case of multi-touch.\n const touch = touchEvent.changedTouches[0]\n\n return {\n x: touch.pageX,\n y: touch.pageY,\n isLeftMouse: true, // Touch is treated like a left mouse button click\n isMiddleMouse: false\n }\n}\n\n// ###### ###### ######\n// ## ## ## ## ## ##\n// ## ## ##\n// ## ###### ######\n// ## ## ##\n// ## ## ## ## ## ##\n// ###### ###### ######\n\n/**\n * Applies the passed-in styles properties to the specified element\n *\n * @param {HTMLElement} element the element onto which apply the styles\n * @param {Object} styles the styles to apply\n * @access private\n */\nfunction applyStyles (element, styles) {\n if (!element) { return }\n\n let cssText = ''\n for (const property in styles) {\n cssText += `${property}: ${styles[property]}; `\n }\n\n element.style.cssText = cssText\n}\n\n/**\n * Returns a string with a CSS translation tranform value.\n *\n * @param {number} [x = 0] the x offset of the translation\n * @param {number} [y = 0] the y offset of the translation\n * @param {boolean} [useHardwareAcceleration = false] use hardware acceleration\n * @return {string} the CSS translation string\n * @access private\n */\nfunction makeTranslate (x = 0, y = 0, useHardwareAcceleration = false) {\n if (useHardwareAcceleration) {\n return `translate3d(${x}px, ${y}px, 0)`\n } else {\n return `translate(${x}px, ${y}px)`\n }\n}\n\n/**\n * Returns a string with a CSS scaling tranform value.\n *\n * @param {number} [x = 0] the x scaling factor\n * @param {number} [y = 0] the y scaling factor\n * @param {boolean} [useHardwareAcceleration = false] use hardware acceleration\n * @return {string} the CSS scaling string\n * @access private\n */\nfunction makeScale (x = 0, y = x, useHardwareAcceleration = false) {\n if (useHardwareAcceleration) {\n return `scale3d(${x}, ${y}, 1)`\n } else {\n return `scale(${x}, ${y})`\n }\n}\n\n/**\n * A method that mimic the jQuery `animate` method and used to animate the\n * scroll when clicking on the MinimapElement canvas.\n *\n * @param {Object} param the animation data object\n * @param {[type]} param.from the start value\n * @param {[type]} param.to the end value\n * @param {[type]} param.duration the animation duration\n * @param {[type]} param.step the easing function for the animation\n * @access private\n */\nfunction animate ({ from, to, duration, step }) {\n const start = getTime()\n let progress\n\n const update = () => {\n const passed = getTime() - start\n if (duration === 0) {\n progress = 1\n } else {\n progress = passed / duration\n }\n if (progress > 1) { progress = 1 }\n const delta = swing(progress)\n const value = from + (to - from) * delta\n step(value, delta)\n\n if (progress < 1) { requestAnimationFrame(update) }\n }\n\n update()\n}\n\nfunction swing (progress) {\n return 0.5 - Math.cos(progress * Math.PI) / 2\n}\n\n/**\n * A method that return the current time as a Date.\n *\n * That method exist so that we can mock it in tests.\n *\n * @return {Date} the current time as Date\n * @access private\n */\nfunction getTime () { return new Date() }\n","'use strict'\n\nimport { CompositeDisposable } from 'atom'\nimport { emitter, getConfigSchema } from './main'\n\n/**\n * Provides methods to manage minimap plugins.\n * Minimap plugins are Atom packages that will augment the minimap.\n * They have a secondary activation cycle going on constrained by the minimap\n * package activation. A minimap plugin life cycle will generally look\n * like this:\n *\n * 1. The plugin module is activated by Atom through the `activate` method\n * 2. The plugin then register itself as a minimap plugin using `registerPlugin`\n * 3. The plugin is activated/deactivated according to the minimap settings.\n * 4. On the plugin module deactivation, the plugin must unregisters itself\n * from the minimap using the `unregisterPlugin`.\n *\n * @access public\n */\n\n// Initialize the properties for plugin management.\n\n/**\n * The registered Minimap plugins stored using their name as key.\n *\n * @type {Object}\n * @access private\n */\nexport const plugins = {}\n/**\n * The plugins' subscriptions stored using the plugin names as keys.\n *\n * @type {Object}\n * @access private\n */\nconst pluginsSubscriptions = {}\n\n/**\n * A map that stores the display order for each plugin\n *\n * @type {Object}\n * @access private\n */\nconst pluginsOrderMap = {}\n\n/**\n * Registers a minimap `plugin` with the given `name`.\n *\n * @param {string} name The identifying name of the plugin.\n * It will be used as activation settings name\n * as well as the key to unregister the module.\n * @param {MinimapPlugin} plugin The plugin to register.\n * @emits {did-add-plugin} with the name and a reference to the added plugin.\n * @emits {did-activate-plugin} if the plugin was activated during\n * the registration.\n */\nexport function registerPlugin (name, plugin) {\n plugins[name] = plugin\n pluginsSubscriptions[name] = new CompositeDisposable()\n\n const event = { name, plugin }\n emitter.emit('did-add-plugin', event)\n\n if (atom.config.get('minimap.displayPluginsControls')) {\n registerPluginControls(name, plugin)\n }\n\n updatesPluginActivationState(name)\n}\n\n/**\n * Unregisters a plugin from the minimap.\n *\n * @param {string} name The identifying name of the plugin to unregister.\n * @emits {did-remove-plugin} with the name and a reference\n * to the added plugin.\n */\nexport function unregisterPlugin (name) {\n const plugin = plugins[name]\n\n if (atom.config.get('minimap.displayPluginsControls')) {\n unregisterPluginControls(name)\n }\n\n delete plugins[name]\n\n const event = { name, plugin }\n emitter.emit('did-remove-plugin', event)\n}\n\n/**\n * Toggles the specified plugin activation state.\n *\n * @param {string} name The name of the plugin.\n * @param {boolean} boolean An optional boolean to set the activation\n * state of the plugin. If ommitted the new plugin\n * state will be the the inverse of its current\n * state.\n * @emits {did-activate-plugin} if the plugin was activated by the call.\n * @emits {did-deactivate-plugin} if the plugin was deactivated by the call.\n */\nexport function togglePluginActivation (name, boolean) {\n const settingsKey = `minimap.plugins.${name}`\n\n if (boolean !== undefined && boolean !== null) {\n atom.config.set(settingsKey, boolean)\n } else {\n atom.config.set(settingsKey, !atom.config.get(settingsKey))\n }\n\n updatesPluginActivationState(name)\n}\n\n/**\n * Deactivates all the plugins registered in the minimap package so far.\n *\n * @emits {did-deactivate-plugin} for each plugin deactivated by the call.\n */\nexport function deactivateAllPlugins () {\n for (const [name, plugin] of eachPlugin()) {\n plugin.deactivatePlugin()\n emitter.emit('did-deactivate-plugin', { name, plugin })\n }\n}\n\n/**\n * A generator function to iterate over registered plugins.\n *\n * @return An iterable that yield the name and reference to every plugin\n * as an array in each iteration.\n */\nfunction * eachPlugin () {\n for (const name in plugins) {\n yield [name, plugins[name]]\n }\n}\n\n/**\n * Updates the plugin activation state according to the current config.\n *\n * @param {string} name The identifying name of the plugin to update.\n * @emits {did-activate-plugin} if the plugin was activated by the call.\n * @emits {did-deactivate-plugin} if the plugin was deactivated by the call.\n * @access private\n */\nfunction updatesPluginActivationState (name) {\n const plugin = plugins[name]\n const pluginActive = plugin.isActive()\n const settingActive = atom.config.get(`minimap.plugins.${name}`)\n\n if (atom.config.get('minimap.displayPluginsControls')) {\n if (settingActive && !pluginActive) {\n activatePlugin(name, plugin)\n } else if (pluginActive && !settingActive) {\n deactivatePlugin(name, plugin)\n }\n } else {\n if (!pluginActive) {\n activatePlugin(name, plugin)\n } else if (pluginActive) {\n deactivatePlugin(name, plugin)\n }\n }\n}\n\nexport function activatePlugin (name, plugin) {\n const event = { name, plugin }\n\n plugin.activatePlugin()\n emitter.emit('did-activate-plugin', event)\n}\n\nexport function deactivatePlugin (name, plugin) {\n const event = { name, plugin }\n\n plugin.deactivatePlugin()\n emitter.emit('did-deactivate-plugin', event)\n}\n\n/**\n * When the `minimap.displayPluginsControls` setting is toggled,\n * this function will register the commands and setting to manage the plugin\n * activation from the minimap settings.\n *\n * @param {string} name The identifying name of the plugin.\n * @param {MinimapPlugin} plugin The plugin instance to register\n * controls for.\n * @listens {minimap.plugins.${name}} listen to the setting to update\n * the plugin state accordingly.\n * @listens {minimap:toggle-${name}} listen to the command on `atom-workspace`\n * to toggle the plugin state.\n * @access private\n */\nfunction registerPluginControls (name, plugin) {\n const settingsKey = `minimap.plugins.${name}`\n const orderSettingsKey = `minimap.plugins.${name}DecorationsZIndex`\n\n const config = getConfigSchema()\n\n config.plugins.properties[name] = {\n type: 'boolean',\n title: name,\n description: `Whether the ${name} plugin is activated and displayed in the Minimap.`,\n default: true\n }\n\n config.plugins.properties[`${name}DecorationsZIndex`] = {\n type: 'integer',\n title: `${name} decorations order`,\n description: `The relative order of the ${name} plugin's decorations in the layer into which they are drawn. Note that this order only apply inside a layer, so highlight-over decorations will always be displayed above line decorations as they are rendered in different layers.`,\n default: 0\n }\n\n if (atom.config.get(settingsKey) === undefined) {\n atom.config.set(settingsKey, true)\n }\n\n if (atom.config.get(orderSettingsKey) === undefined) {\n atom.config.set(orderSettingsKey, 0)\n }\n\n pluginsSubscriptions[name].add(atom.config.observe(settingsKey, () => {\n updatesPluginActivationState(name)\n }))\n\n pluginsSubscriptions[name].add(atom.config.observe(orderSettingsKey, (order) => {\n updatePluginsOrderMap(name)\n const event = { name, plugin, order }\n emitter.emit('did-change-plugin-order', event)\n }))\n\n pluginsSubscriptions[name].add(atom.commands.add('atom-workspace', {\n [`minimap:toggle-${name}`]: () => {\n togglePluginActivation(name)\n }\n }))\n\n updatePluginsOrderMap(name)\n}\n\n/**\n * Updates the display order in the map for the passed-in plugin name.\n *\n * @param {string} name the name of the plugin to update\n * @access private\n */\nfunction updatePluginsOrderMap (name) {\n const orderSettingsKey = `minimap.plugins.${name}DecorationsZIndex`\n\n pluginsOrderMap[name] = atom.config.get(orderSettingsKey)\n}\n\n/**\n * Returns the plugins display order mapped by name.\n *\n * @return {Object} The plugins order by name\n */\nexport function getPluginsOrder () { return pluginsOrderMap }\n\n/**\n * When the `minimap.displayPluginsControls` setting is toggled,\n * this function will unregister the commands and setting that\n * was created previously.\n *\n * @param {string} name The identifying name of the plugin.\n * @access private\n */\nfunction unregisterPluginControls (name) {\n pluginsSubscriptions[name].dispose()\n delete pluginsSubscriptions[name]\n delete getConfigSchema().plugins.properties[name]\n}\n","'use strict'\n\nimport { Emitter, CompositeDisposable } from 'atom'\nimport MinimapElement from './minimap-element'\nimport Minimap from './minimap'\nimport config from './config.json'\nimport * as PluginManagement from './plugin-management'\n\nexport * as config from './config.json'\nexport * from './plugin-management'\nexport { default as Minimap } from './minimap'\n\n/**\n * The `Minimap` package provides an eagle-eye view of text buffers.\n *\n * It also provides API for plugin packages that want to interact with the\n * minimap and be available to the user through the minimap settings.\n */\n\n/**\n * The activation state of the package.\n *\n * @type {boolean}\n * @access private\n */\nlet active = false\n/**\n * The toggle state of the package.\n *\n * @type {boolean}\n * @access private\n */\nlet toggled = false\n/**\n * The `Map` where Minimap instances are stored with the text editor they\n * target as key.\n *\n * @type {Map}\n * @access private\n */\nlet editorsMinimaps = null\n/**\n * The composite disposable that stores the package's subscriptions.\n *\n * @type {CompositeDisposable}\n * @access private\n */\nlet subscriptions = null\n/**\n * The disposable that stores the package's commands subscription.\n *\n * @type {Disposable}\n * @access private\n */\nlet subscriptionsOfCommands = null\n\n/**\n * The package's events emitter.\n *\n * @type {Emitter}\n * @access private\n */\nexport const emitter = new Emitter()\n\n/**\n * Activates the minimap package.\n */\nexport function activate () {\n if (active) { return }\n\n subscriptionsOfCommands = atom.commands.add('atom-workspace', {\n 'minimap:toggle': () => {\n toggle()\n },\n 'minimap:generate-coffee-plugin': async () => {\n await generatePlugin('coffee')\n },\n 'minimap:generate-javascript-plugin': async () => {\n await generatePlugin('javascript')\n },\n 'minimap:generate-babel-plugin': async () => {\n await generatePlugin('babel')\n }\n })\n\n editorsMinimaps = new Map()\n subscriptions = new CompositeDisposable()\n active = true\n\n if (atom.config.get('minimap.autoToggle')) { toggle() }\n}\n\n/**\n * Returns a {MinimapElement} for the passed-in model if it's a {Minimap}.\n *\n * @param {*} model the model for which returning a view\n * @return {MinimapElement}\n */\nexport function minimapViewProvider (model) {\n if (model instanceof Minimap) {\n const element = new MinimapElement()\n element.setModel(model)\n return element\n }\n}\n\n/**\n * Deactivates the minimap package.\n */\nexport function deactivate () {\n if (!active) { return }\n\n PluginManagement.deactivateAllPlugins()\n\n if (editorsMinimaps) {\n editorsMinimaps.forEach((value, key) => {\n value.destroy()\n editorsMinimaps.delete(key)\n })\n }\n\n subscriptions.dispose()\n subscriptions = null\n subscriptionsOfCommands.dispose()\n subscriptionsOfCommands = null\n editorsMinimaps = undefined\n toggled = false\n active = false\n}\n\nexport function getConfigSchema () {\n return config || atom.packages.getLoadedPackage('minimap').metadata.configSchema\n}\n\n/**\n * Toggles the minimap display.\n */\nexport function toggle () {\n if (!active) { return }\n\n if (toggled) {\n toggled = false\n\n if (editorsMinimaps) {\n editorsMinimaps.forEach((value, key) => {\n value.destroy()\n editorsMinimaps.delete(key)\n })\n }\n subscriptions.dispose()\n } else {\n toggled = true\n initSubscriptions()\n }\n}\n\n/**\n * Opens the plugin generation view.\n *\n * @param {string} template the name of the template to use\n */\nasync function generatePlugin (template) {\n const { default: MinimapPluginGeneratorElement } = await import('./minimap-plugin-generator-element')\n const view = new MinimapPluginGeneratorElement()\n view.template = template\n view.attach()\n}\n\n/**\n * Registers a callback to listen to the `did-activate` event of the package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidActivate (callback) {\n return emitter.on('did-activate', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-deactivate` event of the\n * package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidDeactivate (callback) {\n return emitter.on('did-deactivate', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-create-minimap` event of the\n * package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidCreateMinimap (callback) {\n return emitter.on('did-create-minimap', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-add-plugin` event of the\n * package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidAddPlugin (callback) {\n return emitter.on('did-add-plugin', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-remove-plugin` event of the\n * package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidRemovePlugin (callback) {\n return emitter.on('did-remove-plugin', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-activate-plugin` event of the\n * package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidActivatePlugin (callback) {\n return emitter.on('did-activate-plugin', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-deactivate-plugin` event of the\n * package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidDeactivatePlugin (callback) {\n return emitter.on('did-deactivate-plugin', callback)\n}\n\n/**\n * Registers a callback to listen to the `did-change-plugin-order` event of\n * the package.\n *\n * @param {function(event:Object):void} callback the callback function\n * @return {Disposable} a disposable to stop listening to the event\n */\nexport function onDidChangePluginOrder (callback) {\n return emitter.on('did-change-plugin-order', callback)\n}\n\n/**\n * Returns the `Minimap` class\n *\n * @return {Function} the `Minimap` class constructor\n */\nexport function minimapClass () {\n return Minimap\n}\n\n/**\n * Returns the `Minimap` object associated to the passed-in\n * `TextEditorElement`.\n *\n * @param {TextEditorElement} editorElement a text editor element\n * @return {Minimap} the associated minimap\n */\nexport function minimapForEditorElement (editorElement) {\n if (!editorElement) { return }\n return minimapForEditor(editorElement.getModel())\n}\n\n/**\n * Returns the `Minimap` object associated to the passed-in\n * `TextEditor`.\n *\n * @param {TextEditor} textEditor a text editor\n * @return {Minimap} the associated minimap\n */\nexport function minimapForEditor (textEditor) {\n if (!textEditor) { return }\n if (!editorsMinimaps) { return }\n\n let minimap = editorsMinimaps.get(textEditor)\n\n if (!minimap) {\n minimap = new Minimap({ textEditor })\n editorsMinimaps.set(textEditor, minimap)\n\n const editorSubscription = textEditor.onDidDestroy(() => {\n const minimaps = editorsMinimaps\n if (minimaps) { minimaps.delete(textEditor) }\n editorSubscription.dispose()\n })\n }\n\n return minimap\n}\n\n/**\n * Returns a new stand-alone {Minimap} for the passed-in `TextEditor`.\n *\n * @param {TextEditor} textEditor a text editor instance to create\n * a minimap for\n * @return {Minimap} a new stand-alone Minimap for the passed-in editor\n */\nexport function standAloneMinimapForEditor (textEditor) {\n if (!textEditor) { return }\n\n return new Minimap({\n textEditor,\n standAlone: true\n })\n}\n\n/**\n * Returns the `Minimap` associated to the active `TextEditor`.\n *\n * @return {Minimap} the active Minimap\n */\nexport function getActiveMinimap () {\n return minimapForEditor(atom.workspace.getActiveTextEditor())\n}\n\n/**\n * Calls a function for each present and future minimaps.\n *\n * @param {function(minimap:Minimap):void} iterator a function to call with\n * the existing and future\n * minimaps\n * @return {Disposable} a disposable to unregister the observer\n */\nexport function observeMinimaps (iterator) {\n if (!iterator) { return }\n\n if (editorsMinimaps) {\n editorsMinimaps.forEach((minimap) => { iterator(minimap) })\n }\n return onDidCreateMinimap((minimap) => { iterator(minimap) })\n}\n\n/**\n * Registers to the `observeTextEditors` method.\n *\n * @access private\n */\nfunction initSubscriptions () {\n subscriptions.add(atom.workspace.observeTextEditors((textEditor) => {\n const minimap = minimapForEditor(textEditor)\n const minimapElement = atom.views.getView(minimap)\n\n emitter.emit('did-create-minimap', minimap)\n minimapElement.attach()\n }))\n}\n\n// The public exports included in the service:\nconst MinimapServiceV1 = {\n minimapViewProvider,\n getConfigSchema,\n onDidActivate,\n onDidDeactivate,\n onDidCreateMinimap,\n onDidAddPlugin,\n onDidRemovePlugin,\n onDidActivatePlugin,\n onDidDeactivatePlugin,\n onDidChangePluginOrder,\n minimapClass,\n minimapForEditorElement,\n minimapForEditor,\n standAloneMinimapForEditor,\n getActiveMinimap,\n observeMinimaps,\n registerPlugin: PluginManagement.registerPlugin,\n unregisterPlugin: PluginManagement.unregisterPlugin,\n togglePluginActivation: PluginManagement.togglePluginActivation,\n deactivateAllPlugins: PluginManagement.deactivateAllPlugins,\n activatePlugin: PluginManagement.activatePlugin,\n deactivatePlugin: PluginManagement.deactivatePlugin,\n getPluginsOrder: PluginManagement.getPluginsOrder\n}\n\n/**\n * Returns the Minimap main module instance.\n *\n * @return {Main} The Minimap main module instance.\n */\nexport function provideMinimapServiceV1 () { return MinimapServiceV1 }\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction _plugin() {\n const data = require(\"@parcel/plugin\");\n\n _plugin = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _utils() {\n const data = require(\"@parcel/utils\");\n\n _utils = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _path() {\n const data = _interopRequireDefault(require(\"path\"));\n\n _path = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _nullthrows() {\n const data = _interopRequireDefault(require(\"nullthrows\"));\n\n _nullthrows = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// List of browsers that support dynamic import natively\n// https://caniuse.com/#feat=es6-module-dynamic-import\nconst DYNAMIC_IMPORT_BROWSERS = {\n edge: '76',\n firefox: '67',\n chrome: '63',\n safari: '11.1',\n opera: '50'\n}; // Used for as=\"\" in preload/prefetch\n\nconst TYPE_TO_RESOURCE_PRIORITY = {\n css: 'style',\n js: 'script'\n};\nconst BROWSER_PRELOAD_LOADER = './loaders/browser/preload-loader';\nconst BROWSER_PREFETCH_LOADER = './loaders/browser/prefetch-loader';\nconst LOADERS = {\n browser: {\n css: './loaders/browser/css-loader',\n html: './loaders/browser/html-loader',\n js: './loaders/browser/js-loader',\n wasm: './loaders/browser/wasm-loader',\n IMPORT_POLYFILL: './loaders/browser/import-polyfill'\n },\n worker: {\n js: './loaders/worker/js-loader',\n wasm: './loaders/worker/wasm-loader',\n IMPORT_POLYFILL: false\n },\n node: {\n css: './loaders/node/css-loader',\n html: './loaders/node/html-loader',\n js: './loaders/node/js-loader',\n wasm: './loaders/node/wasm-loader',\n IMPORT_POLYFILL: null\n }\n};\n\nfunction getLoaders(ctx) {\n if (ctx.isWorker()) return LOADERS.worker;\n if (ctx.isBrowser()) return LOADERS.browser;\n if (ctx.isNode()) return LOADERS.node;\n return null;\n}\n\nvar _default = new (_plugin().Runtime)({\n apply({\n bundle,\n bundleGraph\n }) {\n // Dependency ids in code replaced with referenced bundle names\n // Loader runtime added for bundle groups that don't have a native loader (e.g. HTML/CSS/Worker - isURL?),\n // and which are not loaded by a parent bundle.\n // Loaders also added for modules that were moved to a separate bundle because they are a different type\n // (e.g. WASM, HTML). These should be preloaded prior to the bundle being executed. Replace the entry asset(s)\n // with the preload module.\n if (bundle.type !== 'js') {\n return;\n }\n\n let asyncDependencies = [];\n let otherDependencies = [];\n bundle.traverse(node => {\n if (node.type !== 'dependency') {\n return;\n }\n\n let dependency = node.value;\n\n if (dependency.isAsync && !dependency.isURL) {\n asyncDependencies.push(dependency);\n } else {\n otherDependencies.push(dependency);\n }\n });\n let assets = [];\n\n for (let dependency of asyncDependencies) {\n let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle);\n\n if (resolved == null) {\n continue;\n }\n\n if (resolved.type === 'asset') {\n if (!bundle.env.scopeHoist) {\n // If this bundle already has the asset this dependency references,\n // return a simple runtime of `Promise.resolve(internalRequire(assetId))`.\n // The linker handles this for scope-hoisting.\n assets.push({\n filePath: __filename,\n code: `module.exports = Promise.resolve(module.bundle.root(${JSON.stringify(bundleGraph.getAssetPublicId(resolved.value))}))`,\n dependency\n });\n }\n } else {\n let loaderRuntime = getLoaderRuntime({\n bundle,\n dependency,\n bundleGraph,\n bundleGroup: resolved.value\n });\n\n if (loaderRuntime != null) {\n assets.push(loaderRuntime);\n }\n }\n }\n\n for (let dependency of otherDependencies) {\n // Resolve the dependency to a bundle. If inline, export the dependency id,\n // which will be replaced with the contents of that bundle later.\n let referencedBundle = bundleGraph.getReferencedBundle(dependency, bundle);\n\n if (referencedBundle === null || referencedBundle === void 0 ? void 0 : referencedBundle.isInline) {\n assets.push({\n filePath: _path().default.join(__dirname, `/bundles/${referencedBundle.id}.js`),\n code: `module.exports = ${JSON.stringify(dependency.id)};`,\n dependency\n });\n continue;\n } // Otherwise, try to resolve the dependency to an external bundle group\n // and insert a URL to that bundle.\n\n\n let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle);\n\n if (dependency.isURL && resolved == null) {\n // If a URL dependency was not able to be resolved, add a runtime that\n // exports the original moduleSpecifier.\n assets.push({\n filePath: __filename,\n code: `module.exports = ${JSON.stringify(dependency.moduleSpecifier)}`,\n dependency\n });\n continue;\n }\n\n if (resolved == null || resolved.type !== 'bundle_group') {\n continue;\n }\n\n let bundleGroup = resolved.value;\n let mainBundle = (0, _nullthrows().default)(bundleGraph.getBundlesInBundleGroup(bundleGroup).find(b => {\n let entries = b.getEntryAssets();\n return entries.some(e => bundleGroup.entryAssetId === e.id);\n }));\n\n if (bundle.env.outputFormat === 'commonjs' && mainBundle.type === 'js') {\n assets.push({\n filePath: __filename,\n dependency,\n code: `module.exports = require(\"./\" + ${getRelativePathExpr(bundle, mainBundle)})`\n });\n continue;\n } // URL dependency or not, fall back to including a runtime that exports the url\n\n\n assets.push(getURLRuntime(dependency, bundle, mainBundle));\n }\n\n if (shouldUseRuntimeManifest(bundle) && bundleGraph.getChildBundles(bundle).length > 0 && isNewContext(bundle, bundleGraph)) {\n assets.push({\n filePath: __filename,\n code: getRegisterCode(bundle, bundleGraph),\n isEntry: true\n });\n }\n\n return assets;\n }\n\n});\n\nexports.default = _default;\n\nfunction getLoaderRuntime({\n bundle,\n dependency,\n bundleGroup,\n bundleGraph\n}) {\n let loaders = getLoaders(bundle.env);\n\n if (loaders == null) {\n return;\n }\n\n let externalBundles = bundleGraph.getBundlesInBundleGroup(bundleGroup).filter(bundle => !bundle.isInline);\n let mainBundle = (0, _nullthrows().default)(externalBundles.find(bundle => {\n var _bundle$getMainEntry;\n\n return ((_bundle$getMainEntry = bundle.getMainEntry()) === null || _bundle$getMainEntry === void 0 ? void 0 : _bundle$getMainEntry.id) === bundleGroup.entryAssetId;\n })); // CommonJS is a synchronous module system, so there is no need to load bundles in parallel.\n // Importing of the other bundles will be handled by the bundle group entry.\n // Do the same thing in library mode for ES modules, as we are building for another bundler\n // and the imports for sibling bundles will be in the target bundle.\n\n if (bundle.env.outputFormat === 'commonjs' || bundle.env.isLibrary) {\n externalBundles = [mainBundle];\n } else {\n // Otherwise, load the bundle group entry after the others.\n externalBundles.splice(externalBundles.indexOf(mainBundle), 1);\n externalBundles.reverse().push(mainBundle);\n } // Determine if we need to add a dynamic import() polyfill, or if all target browsers support it natively.\n\n\n let needsDynamicImportPolyfill = false;\n\n if (bundle.env.isBrowser() && bundle.env.outputFormat === 'esmodule') {\n needsDynamicImportPolyfill = !bundle.env.matchesEngines(DYNAMIC_IMPORT_BROWSERS);\n }\n\n let loaderModules = externalBundles.map(to => {\n let loader = loaders[to.type];\n\n if (!loader) {\n return;\n }\n\n let relativePathExpr = getRelativePathExpr(bundle, to); // Use esmodule loader if possible\n\n if (to.type === 'js' && to.env.outputFormat === 'esmodule') {\n if (!needsDynamicImportPolyfill) {\n return `import(\"./\" + ${relativePathExpr})`;\n }\n\n loader = (0, _nullthrows().default)(loaders.IMPORT_POLYFILL, `No import() polyfill available for context '${bundle.env.context}'`);\n } else if (to.type === 'js' && to.env.outputFormat === 'commonjs') {\n return `Promise.resolve(require(\"./\" + ${relativePathExpr}))`;\n }\n\n return `require(${JSON.stringify(loader)})(require('./bundle-url').getBundleURL() + ${relativePathExpr})`;\n }).filter(Boolean);\n\n if (bundle.env.context === 'browser') {\n loaderModules.push(...(0, _utils().flatMap)( // TODO: Allow css to preload resources as well\n externalBundles.filter(to => to.type === 'js'), from => {\n let {\n preload,\n prefetch\n } = getHintedBundleGroups(bundleGraph, from);\n return [...getHintLoaders(bundleGraph, bundle, preload, BROWSER_PRELOAD_LOADER), ...getHintLoaders(bundleGraph, bundle, prefetch, BROWSER_PREFETCH_LOADER)];\n }));\n }\n\n if (loaderModules.length === 0) {\n return;\n }\n\n let loaderCode = loaderModules.join(', ');\n\n if (loaderModules.length > 1 && (bundle.env.outputFormat === 'global' || !externalBundles.every(b => b.type === 'js'))) {\n loaderCode = `Promise.all([${loaderCode}])`;\n\n if (bundle.env.outputFormat !== 'global') {\n loaderCode += `.then(r => r[r.length - 1])`;\n }\n } else {\n loaderCode = `(${loaderCode})`;\n }\n\n if (bundle.env.outputFormat === 'global') {\n loaderCode += `.then(() => module.bundle.root('${bundleGraph.getAssetPublicId(bundleGraph.getAssetById(bundleGroup.entryAssetId))}')${// In global output with scope hoisting, functions return exports are\n // always returned. Otherwise, the exports are returned.\n bundle.env.scopeHoist ? '()' : ''})`;\n }\n\n return {\n filePath: __filename,\n code: `module.exports = ${loaderCode};`,\n dependency\n };\n}\n\nfunction getHintedBundleGroups(bundleGraph, bundle) {\n let preload = [];\n let prefetch = [];\n bundle.traverse(node => {\n var _dependency$meta;\n\n if (node.type !== 'dependency') {\n return;\n }\n\n let dependency = node.value; // $FlowFixMe\n\n let attributes = (_dependency$meta = dependency.meta) === null || _dependency$meta === void 0 ? void 0 : _dependency$meta.importAttributes;\n\n if (dependency.isAsync && !dependency.isURL && typeof attributes === 'object' && attributes != null && ( // $FlowFixMe\n attributes.preload || attributes.prefetch)) {\n let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle);\n\n if ((resolved === null || resolved === void 0 ? void 0 : resolved.type) === 'bundle_group') {\n // === true for flow\n if (attributes.preload === true) {\n preload.push(resolved.value);\n }\n\n if (attributes.prefetch === true) {\n prefetch.push(resolved.value);\n }\n }\n }\n });\n return {\n preload,\n prefetch\n };\n}\n\nfunction getHintLoaders(bundleGraph, from, bundleGroups, loader) {\n let hintLoaders = [];\n\n for (let bundleGroupToPreload of bundleGroups) {\n let bundlesToPreload = bundleGraph.getBundlesInBundleGroup(bundleGroupToPreload);\n\n for (let bundleToPreload of bundlesToPreload) {\n let relativePathExpr = getRelativePathExpr(from, bundleToPreload);\n let priority = TYPE_TO_RESOURCE_PRIORITY[bundleToPreload.type];\n hintLoaders.push(`require(${JSON.stringify(loader)})(require('./bundle-url').getBundleURL() + ${relativePathExpr}, ${priority ? JSON.stringify(priority) : 'null'}, ${JSON.stringify(bundleToPreload.target.env.outputFormat === 'esmodule')})`);\n }\n }\n\n return hintLoaders;\n}\n\nfunction isNewContext(bundle, bundleGraph) {\n let parents = bundleGraph.getParentBundles(bundle);\n return bundle.isEntry || parents.length === 0 || parents.some(parent => parent.env.context !== bundle.env.context || parent.type !== 'js');\n}\n\nfunction getURLRuntime(dependency, from, to) {\n let relativePathExpr = getRelativePathExpr(from, to);\n\n if (dependency.meta.webworker === true) {\n return {\n filePath: __filename,\n code: `module.exports = require('./get-worker-url')(${relativePathExpr});`,\n dependency\n };\n }\n\n return {\n filePath: __filename,\n code: `module.exports = require('./bundle-url').getBundleURL() + ${relativePathExpr}`,\n dependency\n };\n}\n\nfunction getRegisterCode(entryBundle, bundleGraph) {\n let idToName = {};\n bundleGraph.traverseBundles((bundle, _, actions) => {\n if (bundle.isInline) {\n return;\n }\n\n idToName[bundle.publicId] = (0, _nullthrows().default)(bundle.name);\n\n if (bundle !== entryBundle && isNewContext(bundle, bundleGraph)) {\n // New contexts have their own manifests, so there's no need to continue.\n actions.skipChildren();\n }\n }, entryBundle);\n return \"require('./bundle-manifest').register(JSON.parse(\" + JSON.stringify(JSON.stringify(idToName)) + '));';\n}\n\nfunction getRelativePathExpr(from, to) {\n if (shouldUseRuntimeManifest(from)) {\n return `require('./relative-path')(${JSON.stringify(from.publicId)}, ${JSON.stringify(to.publicId)})`;\n }\n\n return JSON.stringify((0, _utils().relativeBundlePath)(from, to, {\n leadingDotSlash: false\n }));\n}\n\nfunction shouldUseRuntimeManifest(bundle) {\n let env = bundle.env;\n return !env.isLibrary && env.outputFormat === 'global' && env.isBrowser();\n}","// Generated by CoffeeScript 2.5.1\n(function() {\n var CompositeDisposable, Disposable, DisposableEvents, EventsDelegation, Mixin, NO_SELECTOR, eachPair;\n\n Mixin = require('mixto');\n\n DisposableEvents = require('./disposable-events');\n\n ({Disposable, CompositeDisposable} = require('atom'));\n\n eachPair = function(object, callback) {\n var k, results, v;\n results = [];\n for (k in object) {\n v = object[k];\n results.push(callback(k, v));\n }\n return results;\n };\n\n NO_SELECTOR = '__NONE__';\n\n module.exports = EventsDelegation = (function() {\n class EventsDelegation extends Mixin {\n subscribeTo(object, selector, events, options) {\n var disposablesForObject, eventsForObject;\n if (!(object instanceof HTMLElement)) {\n [object, selector, events, options] = [this, object, selector, events];\n }\n if (typeof selector === 'object') {\n [events, selector, options] = [selector, NO_SELECTOR, events];\n }\n if (this.eventsMap == null) {\n this.eventsMap = new WeakMap();\n }\n if (this.disposablesMap == null) {\n this.disposablesMap = new WeakMap();\n }\n if (this.eventsMap.get(object) == null) {\n this.eventsMap.set(object, {});\n }\n if (this.disposablesMap.get(object) == null) {\n this.disposablesMap.set(object, {});\n }\n eventsForObject = this.eventsMap.get(object);\n disposablesForObject = this.disposablesMap.get(object);\n eachPair(events, (event, callback) => {\n if (eventsForObject[event] == null) {\n eventsForObject[event] = {};\n disposablesForObject[event] = this.createEventListener(object, event, options);\n }\n return eventsForObject[event][selector] = callback;\n });\n return new Disposable(() => {\n return this.unsubscribeFrom(object, selector, events);\n });\n }\n\n unsubscribeFrom(object, selector, events) {\n var disposablesForObject, event, eventsForObject;\n if (!(object instanceof HTMLElement)) {\n [object, selector, events] = [this, object, selector];\n }\n if (typeof selector === 'object') {\n [events, selector] = [selector, NO_SELECTOR];\n }\n if (!(eventsForObject = this.eventsMap.get(object))) {\n return;\n }\n for (event in events) {\n delete eventsForObject[event][selector];\n if (Object.keys(eventsForObject[event]).length === 0) {\n disposablesForObject = this.disposablesMap.get(object);\n disposablesForObject[event].dispose();\n delete disposablesForObject[event];\n delete eventsForObject[event];\n }\n }\n if (Object.keys(eventsForObject).length === 0) {\n this.eventsMap.delete(object);\n return this.disposablesMap.delete(object);\n }\n }\n\n createEventListener(object, event, options) {\n var listener;\n listener = (e) => {\n var eventsForObject, ref, target;\n if (!(eventsForObject = (ref = this.eventsMap.get(object)) != null ? ref[event] : void 0)) {\n return;\n }\n ({target} = e);\n this.decorateEvent(e);\n this.eachSelectorFromTarget(e, target, eventsForObject);\n if (!e.isPropagationStopped) {\n if (typeof eventsForObject[NO_SELECTOR] === \"function\") {\n eventsForObject[NO_SELECTOR](e);\n }\n }\n return true;\n };\n return this.addDisposableEventListener(object, event, listener, options);\n }\n\n eachSelectorFromTarget(event, target, eventsForObject) {\n return this.nodeAndItsAncestors(target, (node) => {\n if (event.isPropagationStopped) {\n return;\n }\n return this.eachSelector(eventsForObject, (selector, callback) => {\n var matched;\n matched = this.targetMatch(node, selector);\n if (event.isImmediatePropagationStopped || !matched) {\n return;\n }\n return callback(event);\n });\n });\n }\n\n eachSelector(eventsForObject, callback) {\n var i, key, keys, len;\n keys = Object.keys(eventsForObject);\n if (keys.indexOf(NO_SELECTOR) !== -1) {\n keys.splice(keys.indexOf(NO_SELECTOR), 1);\n }\n keys.sort(function(a, b) {\n return b.split(' ').length - a.split(' ').length;\n });\n for (i = 0, len = keys.length; i < len; i++) {\n key = keys[i];\n if (callback(key, eventsForObject[key])) {\n return true;\n }\n }\n return false;\n }\n\n targetMatch(target, selector) {\n var parent;\n if (target.matches(selector)) {\n return true;\n }\n parent = target.parentNode;\n while ((parent != null) && (parent.matches != null)) {\n if (parent.matches(selector)) {\n return true;\n }\n parent = parent.parentNode;\n }\n return false;\n }\n\n nodeAndItsAncestors(node, callback) {\n var parent, results;\n parent = node.parentNode;\n callback(node);\n results = [];\n while ((parent != null) && (parent.matches != null)) {\n callback(parent);\n results.push(parent = parent.parentNode);\n }\n return results;\n }\n\n decorateEvent(e) {\n var overriddenStop, overriddenStopImmediate;\n overriddenStop = Event.prototype.stopPropagation;\n e.stopPropagation = function() {\n this.isPropagationStopped = true;\n return overriddenStop.apply(this, arguments);\n };\n overriddenStopImmediate = Event.prototype.stopImmediatePropagation;\n return e.stopImmediatePropagation = function() {\n this.isImmediatePropagationStopped = true;\n return overriddenStopImmediate.apply(this, arguments);\n };\n }\n\n };\n\n DisposableEvents.includeInto(EventsDelegation);\n\n return EventsDelegation;\n\n }).call(this);\n\n}).call(this);\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWRlbGVnYXRpb24uanMiLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9taXhpbnMvZXZlbnRzLWRlbGVnYXRpb24uY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBLE1BQUEsbUJBQUEsRUFBQSxVQUFBLEVBQUEsZ0JBQUEsRUFBQSxnQkFBQSxFQUFBLEtBQUEsRUFBQSxXQUFBLEVBQUE7O0VBQUEsS0FBQSxHQUFRLE9BQUEsQ0FBUSxPQUFSOztFQUNSLGdCQUFBLEdBQW1CLE9BQUEsQ0FBUSxxQkFBUjs7RUFDbkIsQ0FBQSxDQUFDLFVBQUQsRUFBYSxtQkFBYixDQUFBLEdBQW9DLE9BQUEsQ0FBUSxNQUFSLENBQXBDOztFQUNBLFFBQUEsR0FBVyxRQUFBLENBQUMsTUFBRCxFQUFTLFFBQVQsQ0FBQTtBQUFxQixRQUFBLENBQUEsRUFBQSxPQUFBLEVBQUE7QUFBQztJQUFBLEtBQUEsV0FBQTs7bUJBQUEsUUFBQSxDQUFTLENBQVQsRUFBVyxDQUFYO0lBQUEsQ0FBQTs7RUFBdEI7O0VBRVgsV0FBQSxHQUFjOztFQUVkLE1BQU0sQ0FBQyxPQUFQLEdBQ007SUFBTixNQUFBLGlCQUFBLFFBQStCLE1BQS9CO01BR0UsV0FBYSxDQUFDLE1BQUQsRUFBUyxRQUFULEVBQW1CLE1BQW5CLEVBQTJCLE9BQTNCLENBQUE7QUFDZixZQUFBLG9CQUFBLEVBQUE7UUFBSSxNQUFPLE1BQUEsWUFBa0IsWUFBekI7VUFDRSxDQUFDLE1BQUQsRUFBUyxRQUFULEVBQW1CLE1BQW5CLEVBQTJCLE9BQTNCLENBQUEsR0FBc0MsQ0FBQyxJQUFELEVBQU8sTUFBUCxFQUFlLFFBQWYsRUFBeUIsTUFBekIsRUFEeEM7O1FBR0EsSUFBaUUsT0FBTyxRQUFQLEtBQW1CLFFBQXBGO1VBQUEsQ0FBQyxNQUFELEVBQVMsUUFBVCxFQUFtQixPQUFuQixDQUFBLEdBQThCLENBQUMsUUFBRCxFQUFXLFdBQVgsRUFBd0IsTUFBeEIsRUFBOUI7OztV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QSxTQUFFLENBQUE7ZUFDbEMsQ0FBQyxDQUFDLHdCQUFGLEdBQTZCLFFBQUEsQ0FBQSxDQUFBO1VBQzNCLElBQUMsQ0FBQSw2QkFBRCxHQUFpQztpQkFDakMsdUJBQXVCLENBQUMsS0FBeEIsQ0FBOEIsSUFBOUIsRUFBb0MsU0FBcEM7UUFGMkI7TUFQaEI7O0lBaEdqQjs7SUFDRSxnQkFBZ0IsQ0FBQyxXQUFqQixDQUE2QixnQkFBN0I7Ozs7O0FBVEYiLCJzb3VyY2VzQ29udGVudCI6WyJNaXhpbiA9IHJlcXVpcmUgJ21peHRvJ1xuRGlzcG9zYWJsZUV2ZW50cyA9IHJlcXVpcmUgJy4vZGlzcG9zYWJsZS1ldmVudHMnXG57RGlzcG9zYWJsZSwgQ29tcG9zaXRlRGlzcG9zYWJsZX0gPSByZXF1aXJlICdhdG9tJ1xuZWFjaFBhaXIgPSAob2JqZWN0LCBjYWxsYmFjaykgLT4gY2FsbGJhY2soayx2KSBmb3Igayx2IG9mIG9iamVjdFxuXG5OT19TRUxFQ1RPUiA9ICdfX05PTkVfXydcblxubW9kdWxlLmV4cG9ydHMgPVxuY2xhc3MgRXZlbnRzRGVsZWdhdGlvbiBleHRlbmRzIE1peGluXG4gIERpc3Bvc2FibGVFdmVudHMuaW5jbHVkZUludG8odGhpcylcblxuICBzdWJzY3JpYmVUbzogKG9iamVjdCwgc2VsZWN0b3IsIGV2ZW50cywgb3B0aW9ucykgLT5cbiAgICB1bmxlc3Mgb2JqZWN0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcbiAgICAgIFtvYmplY3QsIHNlbGVjdG9yLCBldmVudHMsIG9wdGlvbnNdID0gW3RoaXMsIG9iamVjdCwgc2VsZWN0b3IsIGV2ZW50c11cblxuICAgIFtldmVudHMsIHNlbGVjdG9yLCBvcHRpb25zXSA9IFtzZWxlY3RvciwgTk9fU0VMRUNUT1IsIGV2ZW50c10gaWYgdHlwZW9mIHNlbGVjdG9yIGlzICdvYmplY3QnXG5cbiAgICBAZXZlbnRzTWFwID89IG5ldyBXZWFrTWFwXG4gICAgQGRpc3Bvc2FibGVzTWFwID89IG5ldyBXZWFrTWFwXG4gICAgQGV2ZW50c01hcC5zZXQob2JqZWN0LCB7fSkgdW5sZXNzIEBldmVudHNNYXAuZ2V0KG9iamVjdCk/XG4gICAgQGRpc3Bvc2FibGVzTWFwLnNldChvYmplY3QsIHt9KSB1bmxlc3MgQGRpc3Bvc2FibGVzTWFwLmdldChvYmplY3QpP1xuXG4gICAgZXZlbnRzRm9yT2JqZWN0ID0gQGV2ZW50c01hcC5nZXQob2JqZWN0KVxuICAgIGRpc3Bvc2FibGVzRm9yT2JqZWN0ID0gQGRpc3Bvc2FibGVzTWFwLmdldChvYmplY3QpXG5cbiAgICBlYWNoUGFpciBldmVudHMsIChldmVudCwgY2FsbGJhY2spID0+XG4gICAgICB1bmxlc3MgZXZlbnRzRm9yT2JqZWN0W2V2ZW50XT9cbiAgICAgICAgZXZlbnRzRm9yT2JqZWN0W2V2ZW50XSA9IHt9XG4gICAgICAgIGRpc3Bvc2FibGVzRm9yT2JqZWN0W2V2ZW50XSA9IEBjcmVhdGVFdmVudExpc3RlbmVyKG9iamVjdCwgZXZlbnQsIG9wdGlvbnMpXG5cbiAgICAgIGV2ZW50c0Zvck9iamVjdFtldmVudF1bc2VsZWN0b3JdID0gY2FsbGJhY2tcblxuICAgIG5ldyBEaXNwb3NhYmxlID0+IEB1bnN1YnNjcmliZUZyb20gb2JqZWN0LCBzZWxlY3RvciwgZXZlbnRzXG5cbiAgdW5zdWJzY3JpYmVGcm9tOiAob2JqZWN0LCBzZWxlY3RvciwgZXZlbnRzKSAtPlxuICAgIHVubGVzcyBvYmplY3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuICAgICAgW29iamVjdCwgc2VsZWN0b3IsIGV2ZW50c10gPSBbdGhpcywgb2JqZWN0LCBzZWxlY3Rvcl1cblxuICAgIFtldmVudHMsIHNlbGVjdG9yXSA9IFtzZWxlY3RvciwgTk9fU0VMRUNUT1JdIGlmIHR5cGVvZiBzZWxlY3RvciBpcyAnb2JqZWN0J1xuXG4gICAgcmV0dXJuIHVubGVzcyBldmVudHNGb3JPYmplY3QgPSBAZXZlbnRzTWFwLmdldChvYmplY3QpXG5cbiAgICBmb3IgZXZlbnQgb2YgZXZlbnRzXG4gICAgICBkZWxldGUgZXZlbnRzRm9yT2JqZWN0W2V2ZW50XVtzZWxlY3Rvcl1cblxuICAgICAgaWYgT2JqZWN0LmtleXMoZXZlbnRzRm9yT2JqZWN0W2V2ZW50XSkubGVuZ3RoIGlzIDBcbiAgICAgICAgZGlzcG9zYWJsZXNGb3JPYmplY3QgPSBAZGlzcG9zYWJsZXNNYXAuZ2V0KG9iamVjdClcbiAgICAgICAgZGlzcG9zYWJsZXNGb3JPYmplY3RbZXZlbnRdLmRpc3Bvc2UoKVxuICAgICAgICBkZWxldGUgZGlzcG9zYWJsZXNGb3JPYmplY3RbZXZlbnRdXG4gICAgICAgIGRlbGV0ZSBldmVudHNGb3JPYmplY3RbZXZlbnRdXG5cbiAgICBpZiBPYmplY3Qua2V5cyhldmVudHNGb3JPYmplY3QpLmxlbmd0aCBpcyAwXG4gICAgICBAZXZlbnRzTWFwLmRlbGV0ZShvYmplY3QpXG4gICAgICBAZGlzcG9zYWJsZXNNYXAuZGVsZXRlKG9iamVjdClcblxuICBjcmVhdGVFdmVudExpc3RlbmVyOiAob2JqZWN0LCBldmVudCwgb3B0aW9ucykgLT5cbiAgICBsaXN0ZW5lciA9IChlKSA9PlxuICAgICAgcmV0dXJuIHVubGVzcyBldmVudHNGb3JPYmplY3QgPSBAZXZlbnRzTWFwLmdldChvYmplY3QpP1tldmVudF1cblxuICAgICAge3RhcmdldH0gPSBlXG4gICAgICBAZGVjb3JhdGVFdmVudChlKVxuXG4gICAgICBAZWFjaFNlbGVjdG9yRnJvbVRhcmdldChlLCB0YXJnZXQsIGV2ZW50c0Zvck9iamVjdClcbiAgICAgIGV2ZW50c0Zvck9iamVjdFtOT19TRUxFQ1RPUl0/KGUpIHVubGVzcyBlLmlzUHJvcGFnYXRpb25TdG9wcGVkXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgQGFkZERpc3Bvc2FibGVFdmVudExpc3RlbmVyIG9iamVjdCwgZXZlbnQsIGxpc3RlbmVyLCBvcHRpb25zXG5cbiAgZWFjaFNlbGVjdG9yRnJvbVRhcmdldDogKGV2ZW50LCB0YXJnZXQsIGV2ZW50c0Zvck9iamVjdCkgLT5cbiAgICBAbm9kZUFuZEl0c0FuY2VzdG9ycyB0YXJnZXQsIChub2RlKSA9PlxuICAgICAgcmV0dXJuIGlmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkXG4gICAgICBAZWFjaFNlbGVjdG9yIGV2ZW50c0Zvck9iamVjdCwgKHNlbGVjdG9yLGNhbGxiYWNrKSA9PlxuICAgICAgICBtYXRjaGVkID0gQHRhcmdldE1hdGNoKG5vZGUsIHNlbGVjdG9yKVxuICAgICAgICByZXR1cm4gaWYgZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgb3Igbm90IG1hdGNoZWRcbiAgICAgICAgY2FsbGJhY2soZXZlbnQpXG5cbiAgZWFjaFNlbGVjdG9yOiAoZXZlbnRzRm9yT2JqZWN0LCBjYWxsYmFjaykgLT5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzRm9yT2JqZWN0KVxuICAgIGlmIGtleXMuaW5kZXhPZihOT19TRUxFQ1RPUikgaXNudCAtIDFcbiAgICAgIGtleXMuc3BsaWNlKGtleXMuaW5kZXhPZihOT19TRUxFQ1RPUiksIDEpXG4gICAga2V5cy5zb3J0IChhLGIpIC0+IGIuc3BsaXQoJyAnKS5sZW5ndGggLSBhLnNwbGl0KCcgJykubGVuZ3RoXG5cbiAgICBmb3Iga2V5IGluIGtleXNcbiAgICAgIHJldHVybiB0cnVlIGlmIGNhbGxiYWNrKGtleSwgZXZlbnRzRm9yT2JqZWN0W2tleV0pXG4gICAgcmV0dXJuIGZhbHNlXG5cbiAgdGFyZ2V0TWF0Y2g6ICh0YXJnZXQsIHNlbGVjdG9yKSAtPlxuICAgIHJldHVybiB0cnVlIGlmIHRhcmdldC5tYXRjaGVzKHNlbGVjdG9yKVxuXG4gICAgcGFyZW50ID0gdGFyZ2V0LnBhcmVudE5vZGVcbiAgICB3aGlsZSBwYXJlbnQ/IGFuZCBwYXJlbnQubWF0Y2hlcz9cbiAgICAgIHJldHVybiB0cnVlIGlmIHBhcmVudC5tYXRjaGVzKHNlbGVjdG9yKVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGVcblxuICAgIGZhbHNlXG5cbiAgbm9kZUFuZEl0c0FuY2VzdG9yczogKG5vZGUsIGNhbGxiYWNrKSAtPlxuICAgIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZVxuXG4gICAgY2FsbGJhY2sobm9kZSlcbiAgICB3aGlsZSBwYXJlbnQ/IGFuZCBwYXJlbnQubWF0Y2hlcz9cbiAgICAgIGNhbGxiYWNrKHBhcmVudClcbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlXG5cbiAgZGVjb3JhdGVFdmVudDogKGUpIC0+XG4gICAgb3ZlcnJpZGRlblN0b3AgPSAgRXZlbnQ6OnN0b3BQcm9wYWdhdGlvblxuICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gLT5cbiAgICAgIEBpc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWVcbiAgICAgIG92ZXJyaWRkZW5TdG9wLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblxuICAgIG92ZXJyaWRkZW5TdG9wSW1tZWRpYXRlID0gIEV2ZW50OjpzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25cbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IC0+XG4gICAgICBAaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlXG4gICAgICBvdmVycmlkZGVuU3RvcEltbWVkaWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4iXX0=\n//# sourceURL=/home/runner/work/atom-utils-plus/atom-utils-plus/lib/mixins/events-delegation.coffee","// Generated by CoffeeScript 2.5.1\n(function() {\n var callbackProperties, decorateElementClass, decorateElementPrototype, deprecate;\n\n ({deprecate} = require('grim'));\n\n if (global.__CUSTOM_HTML_ELEMENTS_CLASSES__ != null) {\n global.__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__ = global.__CUSTOM_HTML_ELEMENTS_CLASSES__;\n delete global.__CUSTOM_HTML_ELEMENTS_CLASSES__;\n } else {\n if (global.__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__ == null) {\n global.__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__ = {};\n }\n }\n\n callbackProperties = ['createdCallback', 'attachedCallback', 'detachedCallback', 'attributeChangedCallback'];\n\n decorateElementPrototype = function(target, source) {\n callbackProperties.forEach(function(k) {\n return Object.defineProperty(target, k, {\n value: function() {\n var ref;\n return (ref = this[`__${k}`]) != null ? ref.apply(this, arguments) : void 0;\n },\n writable: true,\n enumerable: true,\n configurable: true\n });\n });\n return Object.getOwnPropertyNames(source).forEach(function(k) {\n var descriptor;\n if (k === 'constructor') {\n return;\n }\n descriptor = Object.getOwnPropertyDescriptor(source, k);\n if (callbackProperties.indexOf(k) > -1) {\n return Object.defineProperty(target, `__${k}`, descriptor);\n } else {\n return Object.defineProperty(target, k, descriptor);\n }\n });\n };\n\n decorateElementClass = function(target, source) {\n return Object.getOwnPropertyNames(source).forEach(function(k) {\n var descriptor;\n if (k === 'length' || k === 'name' || k === 'arguments' || k === 'caller' || k === 'prototype') {\n return;\n }\n descriptor = Object.getOwnPropertyDescriptor(source, k);\n return Object.defineProperty(target, k, descriptor);\n });\n };\n\n module.exports = function(nodeName, options) {\n var elementClass, elementPrototype, klass, proto, ref;\n ({\n class: klass\n } = options);\n if (klass != null) {\n proto = klass.prototype;\n } else {\n proto = (ref = options.prototype) != null ? ref : options;\n }\n if (proto === options) {\n deprecate('Using the prototype as the second argument is deprecated, use the prototype option instead');\n }\n if (__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__[nodeName]) {\n elementClass = __ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__[nodeName];\n decorateElementPrototype(elementClass.prototype, proto);\n if (klass != null) {\n decorateElementClass(elementClass, klass);\n }\n return elementClass;\n } else {\n elementPrototype = Object.create(HTMLElement.prototype);\n decorateElementPrototype(elementPrototype, proto);\n elementClass = document.registerElement(nodeName, {\n prototype: Object.create(elementPrototype)\n });\n if (klass != null) {\n decorateElementClass(elementClass, klass);\n }\n return __ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__[nodeName] = elementClass;\n }\n };\n\n}).call(this);\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItb3ItdXBkYXRlLWVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiLi4iLCJzb3VyY2VzIjpbImxpYi9yZWdpc3Rlci1vci11cGRhdGUtZWxlbWVudC5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUEsTUFBQSxrQkFBQSxFQUFBLG9CQUFBLEVBQUEsd0JBQUEsRUFBQTs7RUFBQSxDQUFBLENBQUMsU0FBRCxDQUFBLEdBQWMsT0FBQSxDQUFRLE1BQVIsQ0FBZDs7RUFFQSxJQUFHLCtDQUFIO0lBQ0UsTUFBTSxDQUFDLHFDQUFQLEdBQStDLE1BQU0sQ0FBQztJQUN0RCxPQUFPLE1BQU0sQ0FBQyxpQ0FGaEI7R0FBQSxNQUFBOztNQUlFLE1BQU0sQ0FBQyx3Q0FBeUMsQ0FBQTtLQUpsRDs7O0VBTUEsa0JBQUEsR0FBcUIsQ0FDbkIsaUJBRG1CLEVBRW5CLGtCQUZtQixFQUduQixrQkFIbUIsRUFJbkIsMEJBSm1COztFQU9yQix3QkFBQSxHQUEyQixRQUFBLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FBQTtJQUN6QixrQkFBa0IsQ0FBQyxPQUFuQixDQUEyQixRQUFBLENBQUMsQ0FBRCxDQUFBO2FBQ3pCLE1BQU0sQ0FBQyxjQUFQLENBQXNCLE1BQXRCLEVBQThCLENBQTlCLEVBQWlDO1FBQy9CLEtBQUEsRUFBTyxRQUFBLENBQUEsQ0FBQTtBQUFFLGNBQUE7cURBQVksQ0FBRSxLQUFiLENBQW1CLElBQW5CLEVBQXlCLFNBQXpCO1FBQUgsQ0FEd0I7UUFFL0IsUUFBQSxFQUFVLElBRnFCO1FBRy9CLFVBQUEsRUFBWSxJQUhtQjtRQUkvQixZQUFBLEVBQWM7TUFKaUIsQ0FBakM7SUFEeUIsQ0FBM0I7V0FRQSxNQUFNLENBQUMsbUJBQVAsQ0FBMkIsTUFBM0IsQ0FBa0MsQ0FBQyxPQUFuQyxDQUEyQyxRQUFBLENBQUMsQ0FBRCxDQUFBO0FBQzdDLFVBQUE7TUFBSSxJQUFVLE1BQU0sYUFBaEI7QUFBQSxlQUFBOztNQUVBLFVBQUEsR0FBYSxNQUFNLENBQUMsd0JBQVAsQ0FBZ0MsTUFBaEMsRUFBd0MsQ0FBeEM7TUFDYixJQUFHLGtCQUFrQixDQUFDLE9BQW5CLENBQTJCLENBQTNCLENBQUEsR0FBZ0MsQ0FBQyxDQUFwQztlQUNFLE1BQU0sQ0FBQyxjQUFQLENBQXNCLE1BQXRCLEVBQThCLENBQUEsRUFBQSxDQUFBLENBQUssQ0FBTCxDQUFBLENBQTlCLEVBQXdDLFVBQXhDLEVBREY7T0FBQSxNQUFBO2VBR0UsTUFBTSxDQUFDLGNBQVAsQ0FBc0IsTUFBdEIsRUFBOEIsQ0FBOUIsRUFBaUMsVUFBakMsRUFIRjs7SUFKeUMsQ0FBM0M7RUFUeUI7O0VBa0IzQixvQkFBQSxHQUF1QixRQUFBLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FBQTtXQUNyQixNQUFNLENBQUMsbUJBQVAsQ0FBMkIsTUFBM0IsQ0FBa0MsQ0FBQyxPQUFuQyxDQUEyQyxRQUFBLENBQUMsQ0FBRCxDQUFBO0FBQzdDLFVBQUE7TUFBSSxJQUFVLE1BQU0sWUFBTixNQUFnQixVQUFoQixNQUF3QixlQUF4QixNQUFxQyxZQUFyQyxNQUErQyxXQUF6RDtBQUFBLGVBQUE7O01BRUEsVUFBQSxHQUFhLE1BQU0sQ0FBQyx3QkFBUCxDQUFnQyxNQUFoQyxFQUF3QyxDQUF4QzthQUNiLE1BQU0sQ0FBQyxjQUFQLENBQXNCLE1BQXRCLEVBQThCLENBQTlCLEVBQWlDLFVBQWpDO0lBSnlDLENBQTNDO0VBRHFCOztFQU92QixNQUFNLENBQUMsT0FBUCxHQUFpQixRQUFBLENBQUMsUUFBRCxFQUFXLE9BQVgsQ0FBQTtBQUNqQixRQUFBLFlBQUEsRUFBQSxnQkFBQSxFQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUE7SUFBRSxDQUFBO01BQUMsS0FBQSxFQUFPO0lBQVIsQ0FBQSxHQUFpQixPQUFqQjtJQUNBLElBQUcsYUFBSDtNQUNFLEtBQUEsR0FBUSxLQUFLLENBQUMsVUFEaEI7S0FBQSxNQUFBO01BR0UsS0FBQSw2Q0FBNEIsUUFIOUI7O0lBS0EsSUFBRyxLQUFBLEtBQVMsT0FBWjtNQUNFLFNBQUEsQ0FBVSw0RkFBVixFQURGOztJQUlBLElBQUcscUNBQXFDLENBQUMsUUFBRCxDQUF4QztNQUNFLFlBQUEsR0FBZSxxQ0FBcUMsQ0FBQyxRQUFEO01BRXBELHdCQUFBLENBQXlCLFlBQVksQ0FBQyxTQUF0QyxFQUFpRCxLQUFqRDtNQUNBLElBQTZDLGFBQTdDO1FBQUEsb0JBQUEsQ0FBcUIsWUFBckIsRUFBbUMsS0FBbkMsRUFBQTs7YUFFQSxhQU5GO0tBQUEsTUFBQTtNQVFFLGdCQUFBLEdBQW1CLE1BQU0sQ0FBQyxNQUFQLENBQWMsV0FBVyxDQUFDLFNBQTFCO01BQ25CLHdCQUFBLENBQXlCLGdCQUF6QixFQUEyQyxLQUEzQztNQUVBLFlBQUEsR0FBZSxRQUFRLENBQUMsZUFBVCxDQUF5QixRQUF6QixFQUFtQztRQUFBLFNBQUEsRUFBVyxNQUFNLENBQUMsTUFBUCxDQUFjLGdCQUFkO01BQVgsQ0FBbkM7TUFFZixJQUE2QyxhQUE3QztRQUFBLG9CQUFBLENBQXFCLFlBQXJCLEVBQW1DLEtBQW5DLEVBQUE7O2FBRUEscUNBQXFDLENBQUMsUUFBRCxDQUFyQyxHQUFrRCxhQWZwRDs7RUFYZTtBQXhDakIiLCJzb3VyY2VzQ29udGVudCI6WyJ7ZGVwcmVjYXRlfSA9IHJlcXVpcmUgJ2dyaW0nXG5cbmlmIGdsb2JhbC5fX0NVU1RPTV9IVE1MX0VMRU1FTlRTX0NMQVNTRVNfXz9cbiAgZ2xvYmFsLl9fQVRPTV9VVElMU19DVVNUT01fRUxFTUVOVF9DTEFTU0VTX18gPSBnbG9iYWwuX19DVVNUT01fSFRNTF9FTEVNRU5UU19DTEFTU0VTX19cbiAgZGVsZXRlIGdsb2JhbC5fX0NVU1RPTV9IVE1MX0VMRU1FTlRTX0NMQVNTRVNfX1xuZWxzZVxuICBnbG9iYWwuX19BVE9NX1VUSUxTX0NVU1RPTV9FTEVNRU5UX0NMQVNTRVNfXyA/PSB7fVxuXG5jYWxsYmFja1Byb3BlcnRpZXMgPSBbXG4gICdjcmVhdGVkQ2FsbGJhY2snXG4gICdhdHRhY2hlZENhbGxiYWNrJ1xuICAnZGV0YWNoZWRDYWxsYmFjaydcbiAgJ2F0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaydcbl1cblxuZGVjb3JhdGVFbGVtZW50UHJvdG90eXBlID0gKHRhcmdldCwgc291cmNlKSAtPlxuICBjYWxsYmFja1Byb3BlcnRpZXMuZm9yRWFjaCAoaykgLT5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkgdGFyZ2V0LCBrLCB7XG4gICAgICB2YWx1ZTogLT4gQFtcIl9fI3trfVwiXT8uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cblxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UpLmZvckVhY2ggKGspIC0+XG4gICAgcmV0dXJuIGlmIGsgaW4gWydjb25zdHJ1Y3RvciddXG5cbiAgICBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGspXG4gICAgaWYgY2FsbGJhY2tQcm9wZXJ0aWVzLmluZGV4T2YoaykgPiAtMVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgXCJfXyN7a31cIiwgZGVzY3JpcHRvcilcbiAgICBlbHNlXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrLCBkZXNjcmlwdG9yKVxuXG5kZWNvcmF0ZUVsZW1lbnRDbGFzcyA9ICh0YXJnZXQsIHNvdXJjZSkgLT5cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlKS5mb3JFYWNoIChrKSAtPlxuICAgIHJldHVybiBpZiBrIGluIFsnbGVuZ3RoJywgJ25hbWUnLCAnYXJndW1lbnRzJywgJ2NhbGxlcicsICdwcm90b3R5cGUnXVxuXG4gICAgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrKVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGssIGRlc2NyaXB0b3IpXG5cbm1vZHVsZS5leHBvcnRzID0gKG5vZGVOYW1lLCBvcHRpb25zKSAtPlxuICB7Y2xhc3M6IGtsYXNzfSA9IG9wdGlvbnNcbiAgaWYga2xhc3M/XG4gICAgcHJvdG8gPSBrbGFzcy5wcm90b3R5cGVcbiAgZWxzZVxuICAgIHByb3RvID0gb3B0aW9ucy5wcm90b3R5cGUgPyBvcHRpb25zXG5cbiAgaWYgcHJvdG8gaXMgb3B0aW9uc1xuICAgIGRlcHJlY2F0ZSgnVXNpbmcgdGhlIHByb3RvdHlwZSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQsIHVzZSB0aGUgcHJvdG90eXBlIG9wdGlvbiBpbnN0ZWFkJylcblxuXG4gIGlmIF9fQVRPTV9VVElMU19DVVNUT01fRUxFTUVOVF9DTEFTU0VTX19bbm9kZU5hbWVdXG4gICAgZWxlbWVudENsYXNzID0gX19BVE9NX1VUSUxTX0NVU1RPTV9FTEVNRU5UX0NMQVNTRVNfX1tub2RlTmFtZV1cblxuICAgIGRlY29yYXRlRWxlbWVudFByb3RvdHlwZShlbGVtZW50Q2xhc3MucHJvdG90eXBlLCBwcm90bylcbiAgICBkZWNvcmF0ZUVsZW1lbnRDbGFzcyhlbGVtZW50Q2xhc3MsIGtsYXNzKSBpZiBrbGFzcz9cblxuICAgIGVsZW1lbnRDbGFzc1xuICBlbHNlXG4gICAgZWxlbWVudFByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSFRNTEVsZW1lbnQucHJvdG90eXBlKVxuICAgIGRlY29yYXRlRWxlbWVudFByb3RvdHlwZShlbGVtZW50UHJvdG90eXBlLCBwcm90bylcblxuICAgIGVsZW1lbnRDbGFzcyA9IGRvY3VtZW50LnJlZ2lzdGVyRWxlbWVudCBub2RlTmFtZSwgcHJvdG90eXBlOiBPYmplY3QuY3JlYXRlKGVsZW1lbnRQcm90b3R5cGUpXG5cbiAgICBkZWNvcmF0ZUVsZW1lbnRDbGFzcyhlbGVtZW50Q2xhc3MsIGtsYXNzKSBpZiBrbGFzcz9cblxuICAgIF9fQVRPTV9VVElMU19DVVNUT01fRUxFTUVOVF9DTEFTU0VTX19bbm9kZU5hbWVdID0gZWxlbWVudENsYXNzXG4iXX0=\n//# sourceURL=/home/runner/work/atom-utils-plus/atom-utils-plus/lib/register-or-update-element.coffee","// Generated by CoffeeScript 2.5.1\n(function() {\n module.exports = {\n requirePackages: function(...packages) {\n return new Promise(function(resolve, reject) {\n var failures, remains, required, solved;\n required = [];\n failures = [];\n remains = packages.length;\n solved = function() {\n remains--;\n if (remains !== 0) {\n return;\n }\n if (failures.length > 0) {\n return reject(failures);\n }\n return resolve(required);\n };\n return packages.forEach(function(pkg, i) {\n var failHandler, promise;\n failHandler = function(reason) {\n failures[i] = reason;\n return solved();\n };\n promise = atom.packages.activatePackage(pkg).then(function(activatedPackage) {\n required[i] = activatedPackage.mainModule;\n return solved();\n });\n if (promise.fail != null) {\n return promise.fail(failHandler);\n } else if (promise.catch != null) {\n return promise.catch(failHandler);\n }\n });\n });\n },\n registerOrUpdateElement: require('./register-or-update-element'),\n Ancestors: require('./mixins/ancestors'),\n AncestorsMethods: require('./mixins/ancestors'),\n DisposableEvents: require('./mixins/disposable-events'),\n EventsDelegation: require('./mixins/events-delegation'),\n SpacePenDSL: require('./mixins/space-pen-dsl')\n };\n\n}).call(this);\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIuLiIsInNvdXJjZXMiOlsibGliL2F0b20tdXRpbHMuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQTtFQUFBLE1BQU0sQ0FBQyxPQUFQLEdBQ0U7SUFBQSxlQUFBLEVBQWlCLFFBQUEsQ0FBQSxHQUFDLFFBQUQsQ0FBQTthQUNmLElBQUksT0FBSixDQUFZLFFBQUEsQ0FBQyxPQUFELEVBQVUsTUFBVixDQUFBO0FBQ2hCLFlBQUEsUUFBQSxFQUFBLE9BQUEsRUFBQSxRQUFBLEVBQUE7UUFBTSxRQUFBLEdBQVc7UUFDWCxRQUFBLEdBQVc7UUFDWCxPQUFBLEdBQVUsUUFBUSxDQUFDO1FBRW5CLE1BQUEsR0FBUyxRQUFBLENBQUEsQ0FBQTtVQUNQLE9BQUE7VUFDQSxJQUFjLE9BQUEsS0FBVyxDQUF6QjtBQUFBLG1CQUFBOztVQUNBLElBQTJCLFFBQVEsQ0FBQyxNQUFULEdBQWtCLENBQTdDO0FBQUEsbUJBQU8sTUFBQSxDQUFPLFFBQVAsRUFBUDs7aUJBQ0EsT0FBQSxDQUFRLFFBQVI7UUFKTztlQU1ULFFBQVEsQ0FBQyxPQUFULENBQWlCLFFBQUEsQ0FBQyxHQUFELEVBQU0sQ0FBTixDQUFBO0FBQ3ZCLGNBQUEsV0FBQSxFQUFBO1VBQVEsV0FBQSxHQUFjLFFBQUEsQ0FBQyxNQUFELENBQUE7WUFDWixRQUFRLENBQUMsQ0FBRCxDQUFSLEdBQWM7bUJBQ2QsTUFBQSxDQUFBO1VBRlk7VUFJZCxPQUFBLEdBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFkLENBQThCLEdBQTlCLENBQ1YsQ0FBQyxJQURTLENBQ0osUUFBQSxDQUFDLGdCQUFELENBQUE7WUFDSixRQUFRLENBQUMsQ0FBRCxDQUFSLEdBQWMsZ0JBQWdCLENBQUM7bUJBQy9CLE1BQUEsQ0FBQTtVQUZJLENBREk7VUFLVixJQUFHLG9CQUFIO21CQUNFLE9BQU8sQ0FBQyxJQUFSLENBQWEsV0FBYixFQURGO1dBQUEsTUFFSyxJQUFHLHFCQUFIO21CQUNILE9BQU8sQ0FBQyxLQUFSLENBQWMsV0FBZCxFQURHOztRQVpVLENBQWpCO01BWFUsQ0FBWjtJQURlLENBQWpCO0lBMkJBLHVCQUFBLEVBQXlCLE9BQUEsQ0FBUSw4QkFBUixDQTNCekI7SUE0QkEsU0FBQSxFQUFXLE9BQUEsQ0FBUSxvQkFBUixDQTVCWDtJQTZCQSxnQkFBQSxFQUFrQixPQUFBLENBQVEsb0JBQVIsQ0E3QmxCO0lBOEJBLGdCQUFBLEVBQWtCLE9BQUEsQ0FBUSw0QkFBUixDQTlCbEI7SUErQkEsZ0JBQUEsRUFBa0IsT0FBQSxDQUFRLDRCQUFSLENBL0JsQjtJQWdDQSxXQUFBLEVBQWEsT0FBQSxDQUFRLHdCQUFSO0VBaENiO0FBREYiLCJzb3VyY2VzQ29udGVudCI6WyJcbm1vZHVsZS5leHBvcnRzID1cbiAgcmVxdWlyZVBhY2thZ2VzOiAocGFja2FnZXMuLi4pIC0+XG4gICAgbmV3IFByb21pc2UgKHJlc29sdmUsIHJlamVjdCkgLT5cbiAgICAgIHJlcXVpcmVkID0gW11cbiAgICAgIGZhaWx1cmVzID0gW11cbiAgICAgIHJlbWFpbnMgPSBwYWNrYWdlcy5sZW5ndGhcblxuICAgICAgc29sdmVkID0gLT5cbiAgICAgICAgcmVtYWlucy0tXG4gICAgICAgIHJldHVybiB1bmxlc3MgcmVtYWlucyBpcyAwXG4gICAgICAgIHJldHVybiByZWplY3QoZmFpbHVyZXMpIGlmIGZhaWx1cmVzLmxlbmd0aCA+IDBcbiAgICAgICAgcmVzb2x2ZShyZXF1aXJlZClcblxuICAgICAgcGFja2FnZXMuZm9yRWFjaCAocGtnLCBpKSAtPlxuICAgICAgICBmYWlsSGFuZGxlciA9IChyZWFzb24pIC0+XG4gICAgICAgICAgZmFpbHVyZXNbaV0gPSByZWFzb25cbiAgICAgICAgICBzb2x2ZWQoKVxuXG4gICAgICAgIHByb21pc2UgPSBhdG9tLnBhY2thZ2VzLmFjdGl2YXRlUGFja2FnZShwa2cpXG4gICAgICAgIC50aGVuIChhY3RpdmF0ZWRQYWNrYWdlKSAtPlxuICAgICAgICAgIHJlcXVpcmVkW2ldID0gYWN0aXZhdGVkUGFja2FnZS5tYWluTW9kdWxlXG4gICAgICAgICAgc29sdmVkKClcblxuICAgICAgICBpZiBwcm9taXNlLmZhaWw/XG4gICAgICAgICAgcHJvbWlzZS5mYWlsKGZhaWxIYW5kbGVyKVxuICAgICAgICBlbHNlIGlmIHByb21pc2UuY2F0Y2g/XG4gICAgICAgICAgcHJvbWlzZS5jYXRjaChmYWlsSGFuZGxlcilcblxuICByZWdpc3Rlck9yVXBkYXRlRWxlbWVudDogcmVxdWlyZSAnLi9yZWdpc3Rlci1vci11cGRhdGUtZWxlbWVudCdcbiAgQW5jZXN0b3JzOiByZXF1aXJlICcuL21peGlucy9hbmNlc3RvcnMnXG4gIEFuY2VzdG9yc01ldGhvZHM6IHJlcXVpcmUgJy4vbWl4aW5zL2FuY2VzdG9ycydcbiAgRGlzcG9zYWJsZUV2ZW50czogcmVxdWlyZSAnLi9taXhpbnMvZGlzcG9zYWJsZS1ldmVudHMnXG4gIEV2ZW50c0RlbGVnYXRpb246IHJlcXVpcmUgJy4vbWl4aW5zL2V2ZW50cy1kZWxlZ2F0aW9uJ1xuICBTcGFjZVBlbkRTTDogcmVxdWlyZSAnLi9taXhpbnMvc3BhY2UtcGVuLWRzbCdcbiJdfQ==\n//# sourceURL=/home/runner/work/atom-utils-plus/atom-utils-plus/lib/atom-utils.coffee","// Generated by CoffeeScript 2.5.1\n(function() {\n var BabelSpacePenDSL, Builder, Events, Mixin, SelfClosingTags, SpacePenDSL, Tags, Template;\n\n Mixin = require('mixto');\n\n Tags = 'a abbr address article aside audio b bdi bdo blockquote body button canvas caption cite code colgroup datalist dd del details dfn dialog div dl dt em fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 head header html i iframe ins kbd label legend li main map mark menu meter nav noscript object ol optgroup option output p pre progress q rp rt ruby s samp script section select small span strong style sub summary sup table tbody td textarea tfoot th thead time title tr u ul var video area base br col command embed hr img input keygen link meta param source track wbr'.split(/\\s+/);\n\n SelfClosingTags = {};\n\n 'area base br col command embed hr img input keygen link meta param source track wbr'.split(/\\s+/).forEach(function(tag) {\n return SelfClosingTags[tag] = true;\n });\n\n Events = 'blur change click dblclick error focus input keydown keypress keyup load mousedown mousemove mouseout mouseover mouseup resize scroll select submit unload'.split(/\\s+/);\n\n BabelSpacePenDSL = class BabelSpacePenDSL extends Mixin {\n buildContent() {\n if (this.constructor.content != null) {\n return SpacePenDSL.buildContent(this, this.constructor.content);\n }\n }\n\n };\n\n module.exports = SpacePenDSL = (function() {\n class SpacePenDSL extends Mixin {\n static includeInto(klass) {\n super.includeInto(klass);\n Object.defineProperty(klass, 'content', {\n enumerable: false,\n get: function() {\n return this.prototype.__content__;\n },\n set: function(value) {\n return this.prototype.__content__ = value;\n }\n });\n Object.defineProperty(klass.prototype, 'createdCallback', {\n enumerable: true,\n get: function() {\n return this.__create__;\n },\n set: function(value) {\n return this.__createdCallback__ = value;\n }\n });\n Object.defineProperty(klass.prototype, '__create__', {\n enumerable: true,\n value: function() {\n if (this.__content__ != null) {\n SpacePenDSL.buildContent(this, this.__content__);\n }\n if (this.__createdCallback__ != null) {\n return this.__createdCallback__();\n }\n }\n });\n return klass.useShadowRoot = function() {\n return klass.prototype.__useShadowRoot__ = true;\n };\n }\n\n static buildContent(element, content) {\n var html, root, template;\n template = new Template();\n content.call(template);\n [html] = template.buildHtml();\n root = element.__useShadowRoot__ ? root = element.shadowRoot = element.createShadowRoot() : root = element;\n root.innerHTML = html;\n return this.wireOutlets(element, root);\n }\n\n static wireOutlets(view, root) {\n var element, i, len, outlet, ref;\n ref = root.querySelectorAll('[outlet]');\n for (i = 0, len = ref.length; i < len; i++) {\n element = ref[i];\n outlet = element.getAttribute('outlet');\n view[outlet] = element;\n element.removeAttribute('outlet');\n }\n return void 0;\n }\n\n };\n\n SpacePenDSL.Babel = BabelSpacePenDSL;\n\n return SpacePenDSL;\n\n }).call(this);\n\n Template = (function() {\n class Template {\n constructor() {\n this.currentBuilder = new Builder();\n }\n\n subview(name, view) {\n return this.currentBuilder.subview(name, view);\n }\n\n text(string) {\n return this.currentBuilder.text(string);\n }\n\n tag(tagName, ...args) {\n return this.currentBuilder.tag(tagName, ...args);\n }\n\n raw(string) {\n return this.currentBuilder.raw(string);\n }\n\n buildHtml() {\n return this.currentBuilder.buildHtml();\n }\n\n };\n\n Tags.forEach(function(tagName) {\n return Template.prototype[tagName] = function(...args) {\n return this.currentBuilder.tag(tagName, ...args);\n };\n });\n\n return Template;\n\n }).call(this);\n\n Builder = class Builder {\n constructor() {\n this.document = [];\n this.postProcessingSteps = [];\n }\n\n buildHtml() {\n return [this.document.join(''), this.postProcessingSteps];\n }\n\n tag(name, ...args) {\n var options;\n options = this.extractOptions(args);\n this.openTag(name, options.attributes);\n if (SelfClosingTags.hasOwnProperty(name)) {\n if ((options.text != null) || (options.content != null)) {\n throw new Error(`Self-closing tag ${name} cannot have text or content`);\n }\n } else {\n if (typeof options.content === \"function\") {\n options.content();\n }\n if (options.text) {\n this.text(options.text);\n }\n return this.closeTag(name);\n }\n }\n\n openTag(name, attributes) {\n var attributeName, attributePairs, attributesString, value;\n if (this.document.length === 0) {\n if (attributes == null) {\n attributes = {};\n }\n }\n attributePairs = (function() {\n var results;\n results = [];\n for (attributeName in attributes) {\n value = attributes[attributeName];\n results.push(`${attributeName}=\\\"${value}\\\"`);\n }\n return results;\n })();\n attributesString = attributePairs.length ? \" \" + attributePairs.join(\" \") : \"\";\n return this.document.push(`<${name}${attributesString}>`);\n }\n\n closeTag(name) {\n return this.document.push(``);\n }\n\n text(string) {\n var escapedString;\n escapedString = string.replace(/&/g, '&').replace(/\"/g, '"').replace(/'/g, ''').replace(//g, '>');\n return this.document.push(escapedString);\n }\n\n raw(string) {\n return this.document.push(string);\n }\n\n subview(outletName, subview) {\n var subviewId;\n subviewId = `subview-${++idCounter}`;\n this.tag('div', {\n id: subviewId\n });\n return this.postProcessingSteps.push(function(view) {\n view[outletName] = subview;\n subview.parentView = view;\n return view.find(`div#${subviewId}`).replaceWith(subview);\n });\n }\n\n extractOptions(args) {\n var arg, i, len, options;\n options = {};\n for (i = 0, len = args.length; i < len; i++) {\n arg = args[i];\n switch (typeof arg) {\n case 'function':\n options.content = arg;\n break;\n case 'string':\n case 'number':\n options.text = arg.toString();\n break;\n default:\n options.attributes = arg;\n }\n }\n return options;\n }\n\n };\n\n}).call(this);\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2UtcGVuLWRzbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL21peGlucy9zcGFjZS1wZW4tZHNsLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQSxNQUFBLGdCQUFBLEVBQUEsT0FBQSxFQUFBLE1BQUEsRUFBQSxLQUFBLEVBQUEsZUFBQSxFQUFBLFdBQUEsRUFBQSxJQUFBLEVBQUE7O0VBQUEsS0FBQSxHQUFRLE9BQUEsQ0FBUSxPQUFSOztFQUVSLElBQUEsR0FDRSxra0JBTytDLENBQUMsS0FQaEQsQ0FPc0QsS0FQdEQ7O0VBU0YsZUFBQSxHQUFrQixDQUFBOztFQUNsQixxRkFDa0IsQ0FBQyxLQURuQixDQUN5QixLQUR6QixDQUMrQixDQUFDLE9BRGhDLENBQ3dDLFFBQUEsQ0FBQyxHQUFELENBQUE7V0FBUyxlQUFlLENBQUMsR0FBRCxDQUFmLEdBQXVCO0VBQWhDLENBRHhDOztFQUdBLE1BQUEsR0FDRSw0SkFFNEMsQ0FBQyxLQUY3QyxDQUVtRCxLQUZuRDs7RUFJSSxtQkFBTixNQUFBLGlCQUFBLFFBQStCLE1BQS9CO0lBQ0UsWUFBYyxDQUFBLENBQUE7TUFDWixJQUF3RCxnQ0FBeEQ7ZUFBQSxXQUFXLENBQUMsWUFBWixDQUF5QixJQUF6QixFQUErQixJQUFDLENBQUEsV0FBVyxDQUFDLE9BQTVDLEVBQUE7O0lBRFk7O0VBRGhCOztFQUlBLE1BQU0sQ0FBQyxPQUFQLEdBQ007SUFBTixNQUFBLFlBQUEsUUFBMEIsTUFBMUI7TUFHZ0IsT0FBYixXQUFhLENBQUMsS0FBRCxDQUFBO2FBQWIsQ0FBQSxXQUNDLENBQU0sS0FBTjtRQUVBLE1BQU0sQ0FBQyxjQUFQLENBQXNCLEtBQXRCLEVBQTZCLFNBQTdCLEVBQ0U7VUFBQSxVQUFBLEVBQVksS0FBWjtVQUNBLEdBQUEsRUFBSyxRQUFBLENBQUEsQ0FBQTttQkFBRyxJQUFDLENBQUEsU0FBUyxDQUFDO1VBQWQsQ0FETDtVQUVBLEdBQUEsRUFBSyxR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S0FBTCxFQUFZO1FBQUEsRUFBQSxFQUFJO01BQUosQ0FBWjthQUNBLElBQUMsQ0FBQSxtQkFBbUIsQ0FBQyxJQUFyQixDQUEwQixRQUFBLENBQUMsSUFBRCxDQUFBO1FBQ3hCLElBQUksQ0FBQyxVQUFELENBQUosR0FBbUI7UUFDbkIsT0FBTyxDQUFDLFVBQVIsR0FBcUI7ZUFDckIsSUFBSSxDQUFDLElBQUwsQ0FBVSxDQUFBLElBQUEsQ0FBQSxDQUFPLFNBQVAsQ0FBQSxDQUFWLENBQTZCLENBQUMsV0FBOUIsQ0FBMEMsT0FBMUM7TUFId0IsQ0FBMUI7SUFITzs7SUFRVCxjQUFnQixDQUFDLElBQUQsQ0FBQTtBQUNsQixVQUFBLEdBQUEsRUFBQSxDQUFBLEVBQUEsR0FBQSxFQUFBO01BQUksT0FBQSxHQUFVLENBQUE7TUFDVixLQUFBLHNDQUFBOztBQUNFLGdCQUFPLE9BQU8sR0FBZDtBQUFBLGVBQ08sVUFEUDtZQUVJLE9BQU8sQ0FBQyxPQUFSLEdBQWtCO0FBRGY7QUFEUCxlQUdPLFFBSFA7QUFBQSxlQUdpQixRQUhqQjtZQUlJLE9BQU8sQ0FBQyxJQUFSLEdBQWUsR0FBRyxDQUFDLFFBQUosQ0FBQTtBQURGO0FBSGpCO1lBTUksT0FBTyxDQUFDLFVBQVIsR0FBcUI7QUFOekI7TUFERjthQVFBO0lBVmM7O0VBN0RsQjtBQTNGQSIsInNvdXJjZXNDb250ZW50IjpbIk1peGluID0gcmVxdWlyZSAnbWl4dG8nXG5cblRhZ3MgPVxuICAnYSBhYmJyIGFkZHJlc3MgYXJ0aWNsZSBhc2lkZSBhdWRpbyBiIGJkaSBiZG8gYmxvY2txdW90ZSBib2R5IGJ1dHRvbiBjYW52YXNcbiAgIGNhcHRpb24gY2l0ZSBjb2RlIGNvbGdyb3VwIGRhdGFsaXN0IGRkIGRlbCBkZXRhaWxzIGRmbiBkaWFsb2cgZGl2IGRsIGR0IGVtXG4gICBmaWVsZHNldCBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgZm9ybSBoMSBoMiBoMyBoNCBoNSBoNiBoZWFkIGhlYWRlciBodG1sIGlcbiAgIGlmcmFtZSBpbnMga2JkIGxhYmVsIGxlZ2VuZCBsaSBtYWluIG1hcCBtYXJrIG1lbnUgbWV0ZXIgbmF2IG5vc2NyaXB0IG9iamVjdFxuICAgb2wgb3B0Z3JvdXAgb3B0aW9uIG91dHB1dCBwIHByZSBwcm9ncmVzcyBxIHJwIHJ0IHJ1YnkgcyBzYW1wIHNjcmlwdCBzZWN0aW9uXG4gICBzZWxlY3Qgc21hbGwgc3BhbiBzdHJvbmcgc3R5bGUgc3ViIHN1bW1hcnkgc3VwIHRhYmxlIHRib2R5IHRkIHRleHRhcmVhIHRmb290XG4gICB0aCB0aGVhZCB0aW1lIHRpdGxlIHRyIHUgdWwgdmFyIHZpZGVvIGFyZWEgYmFzZSBiciBjb2wgY29tbWFuZCBlbWJlZCBociBpbWdcbiAgIGlucHV0IGtleWdlbiBsaW5rIG1ldGEgcGFyYW0gc291cmNlIHRyYWNrIHdicicuc3BsaXQgL1xccysvXG5cblNlbGZDbG9zaW5nVGFncyA9IHt9XG4nYXJlYSBiYXNlIGJyIGNvbCBjb21tYW5kIGVtYmVkIGhyIGltZyBpbnB1dCBrZXlnZW4gbGluayBtZXRhIHBhcmFtXG4gc291cmNlIHRyYWNrIHdicicuc3BsaXQoL1xccysvKS5mb3JFYWNoICh0YWcpIC0+IFNlbGZDbG9zaW5nVGFnc1t0YWddID0gdHJ1ZVxuXG5FdmVudHMgPVxuICAnYmx1ciBjaGFuZ2UgY2xpY2sgZGJsY2xpY2sgZXJyb3IgZm9jdXMgaW5wdXQga2V5ZG93blxuICAga2V5cHJlc3Mga2V5dXAgbG9hZCBtb3VzZWRvd24gbW91c2Vtb3ZlIG1vdXNlb3V0IG1vdXNlb3ZlclxuICAgbW91c2V1cCByZXNpemUgc2Nyb2xsIHNlbGVjdCBzdWJtaXQgdW5sb2FkJy5zcGxpdCAvXFxzKy9cblxuY2xhc3MgQmFiZWxTcGFjZVBlbkRTTCBleHRlbmRzIE1peGluXG4gIGJ1aWxkQ29udGVudDogLT5cbiAgICBTcGFjZVBlbkRTTC5idWlsZENvbnRlbnQodGhpcywgQGNvbnN0cnVjdG9yLmNvbnRlbnQpIGlmIEBjb25zdHJ1Y3Rvci5jb250ZW50P1xuXG5tb2R1bGUuZXhwb3J0cyA9XG5jbGFzcyBTcGFjZVBlbkRTTCBleHRlbmRzIE1peGluXG4gIEBCYWJlbDogQmFiZWxTcGFjZVBlbkRTTFxuXG4gIEBpbmNsdWRlSW50bzogKGtsYXNzKSAtPlxuICAgIHN1cGVyKGtsYXNzKVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5IGtsYXNzLCAnY29udGVudCcsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgZ2V0OiAtPiBAcHJvdG90eXBlLl9fY29udGVudF9fXG4gICAgICBzZXQ6ICh2YWx1ZSkgLT4gQHByb3RvdHlwZS5fX2NvbnRlbnRfXyA9IHZhbHVlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkga2xhc3M6OiwgJ2NyZWF0ZWRDYWxsYmFjaycsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICBnZXQ6IC0+IEBfX2NyZWF0ZV9fXG4gICAgICBzZXQ6ICh2YWx1ZSkgLT4gQF9fY3JlYXRlZENhbGxiYWNrX18gPSB2YWx1ZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5IGtsYXNzOjosICdfX2NyZWF0ZV9fJyxcbiAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIHZhbHVlOiAtPlxuICAgICAgICBTcGFjZVBlbkRTTC5idWlsZENvbnRlbnQodGhpcywgQF9fY29udGVudF9fKSBpZiBAX19jb250ZW50X18/XG5cbiAgICAgICAgZG8gQF9fY3JlYXRlZENhbGxiYWNrX18gaWYgQF9fY3JlYXRlZENhbGxiYWNrX18/XG5cbiAgICBrbGFzcy51c2VTaGFkb3dSb290ID0gLT5cbiAgICAgIGtsYXNzOjpfX3VzZVNoYWRvd1Jvb3RfXyA9IHRydWVcblxuICBAYnVpbGRDb250ZW50OiAoZWxlbWVudCwgY29udGVudCkgLT5cbiAgICB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZVxuXG4gICAgY29udGVudC5jYWxsKHRlbXBsYXRlKVxuXG4gICAgW2h0bWxdID0gdGVtcGxhdGUuYnVpbGRIdG1sKClcbiAgICByb290ID1cbiAgICBpZiBlbGVtZW50Ll9fdXNlU2hhZG93Um9vdF9fXG4gICAgICByb290ID0gZWxlbWVudC5zaGFkb3dSb290ID0gZWxlbWVudC5jcmVhdGVTaGFkb3dSb290KClcbiAgICBlbHNlXG4gICAgICByb290ID0gZWxlbWVudFxuICAgIHJvb3QuaW5uZXJIVE1MID0gaHRtbFxuXG4gICAgQHdpcmVPdXRsZXRzKGVsZW1lbnQsIHJvb3QpXG5cbiAgQHdpcmVPdXRsZXRzOiAodmlldywgcm9vdCkgLT5cbiAgICBmb3IgZWxlbWVudCBpbiByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tvdXRsZXRdJylcbiAgICAgIG91dGxldCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdvdXRsZXQnKVxuICAgICAgdmlld1tvdXRsZXRdID0gZWxlbWVudFxuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ291dGxldCcpXG5cbiAgICB1bmRlZmluZWRcblxuY2xhc3MgVGVtcGxhdGVcbiAgY29uc3RydWN0b3I6IC0+IEBjdXJyZW50QnVpbGRlciA9IG5ldyBCdWlsZGVyXG5cbiAgVGFncy5mb3JFYWNoICh0YWdOYW1lKSAtPlxuICAgIFRlbXBsYXRlOjpbdGFnTmFtZV0gPSAoYXJncy4uLikgLT4gQGN1cnJlbnRCdWlsZGVyLnRhZyh0YWdOYW1lLCBhcmdzLi4uKVxuXG4gIHN1YnZpZXc6IChuYW1lLCB2aWV3KSAtPiBAY3VycmVudEJ1aWxkZXIuc3VidmlldyhuYW1lLCB2aWV3KVxuXG4gIHRleHQ6IChzdHJpbmcpIC0+IEBjdXJyZW50QnVpbGRlci50ZXh0KHN0cmluZylcblxuICB0YWc6ICh0YWdOYW1lLCBhcmdzLi4uKSAtPiBAY3VycmVudEJ1aWxkZXIudGFnKHRhZ05hbWUsIGFyZ3MuLi4pXG5cbiAgcmF3OiAoc3RyaW5nKSAtPiBAY3VycmVudEJ1aWxkZXIucmF3KHN0cmluZylcblxuICBidWlsZEh0bWw6IC0+IEBjdXJyZW50QnVpbGRlci5idWlsZEh0bWwoKVxuXG5jbGFzcyBCdWlsZGVyXG4gIGNvbnN0cnVjdG9yOiAtPlxuICAgIEBkb2N1bWVudCA9IFtdXG4gICAgQHBvc3RQcm9jZXNzaW5nU3RlcHMgPSBbXVxuXG4gIGJ1aWxkSHRtbDogLT5cbiAgICBbQGRvY3VtZW50LmpvaW4oJycpLCBAcG9zdFByb2Nlc3NpbmdTdGVwc11cblxuICB0YWc6IChuYW1lLCBhcmdzLi4uKSAtPlxuICAgIG9wdGlvbnMgPSBAZXh0cmFjdE9wdGlvbnMoYXJncylcblxuICAgIEBvcGVuVGFnKG5hbWUsIG9wdGlvbnMuYXR0cmlidXRlcylcblxuICAgIGlmIFNlbGZDbG9zaW5nVGFncy5oYXNPd25Qcm9wZXJ0eShuYW1lKVxuICAgICAgaWYgb3B0aW9ucy50ZXh0PyBvciBvcHRpb25zLmNvbnRlbnQ/XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGYtY2xvc2luZyB0YWcgI3tuYW1lfSBjYW5ub3QgaGF2ZSB0ZXh0IG9yIGNvbnRlbnRcIilcbiAgICBlbHNlXG4gICAgICBvcHRpb25zLmNvbnRlbnQ/KClcbiAgICAgIEB0ZXh0KG9wdGlvbnMudGV4dCkgaWYgb3B0aW9ucy50ZXh0XG4gICAgICBAY2xvc2VUYWcobmFtZSlcblxuICBvcGVuVGFnOiAobmFtZSwgYXR0cmlidXRlcykgLT5cbiAgICBpZiBAZG9jdW1lbnQubGVuZ3RoIGlzIDBcbiAgICAgIGF0dHJpYnV0ZXMgPz0ge31cblxuICAgIGF0dHJpYnV0ZVBhaXJzID1cbiAgICAgIGZvciBhdHRyaWJ1dGVOYW1lLCB2YWx1ZSBvZiBhdHRyaWJ1dGVzXG4gICAgICAgIFwiI3thdHRyaWJ1dGVOYW1lfT1cXFwiI3t2YWx1ZX1cXFwiXCJcblxuICAgIGF0dHJpYnV0ZXNTdHJpbmcgPVxuICAgICAgaWYgYXR0cmlidXRlUGFpcnMubGVuZ3RoXG4gICAgICAgIFwiIFwiICsgYXR0cmlidXRlUGFpcnMuam9pbihcIiBcIilcbiAgICAgIGVsc2VcbiAgICAgICAgXCJcIlxuXG4gICAgQGRvY3VtZW50LnB1c2ggXCI8I3tuYW1lfSN7YXR0cmlidXRlc1N0cmluZ30+XCJcblxuICBjbG9zZVRhZzogKG5hbWUpIC0+XG4gICAgQGRvY3VtZW50LnB1c2ggXCI8LyN7bmFtZX0+XCJcblxuICB0ZXh0OiAoc3RyaW5nKSAtPlxuICAgIGVzY2FwZWRTdHJpbmcgPSBzdHJpbmdcbiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpXG4gICAgICAucmVwbGFjZSgvJy9nLCAnJiMzOTsnKVxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuXG4gICAgQGRvY3VtZW50LnB1c2ggZXNjYXBlZFN0cmluZ1xuXG4gIHJhdzogKHN0cmluZykgLT5cbiAgICBAZG9jdW1lbnQucHVzaCBzdHJpbmdcblxuICBzdWJ2aWV3OiAob3V0bGV0TmFtZSwgc3VidmlldykgLT5cbiAgICBzdWJ2aWV3SWQgPSBcInN1YnZpZXctI3srK2lkQ291bnRlcn1cIlxuICAgIEB0YWcgJ2RpdicsIGlkOiBzdWJ2aWV3SWRcbiAgICBAcG9zdFByb2Nlc3NpbmdTdGVwcy5wdXNoICh2aWV3KSAtPlxuICAgICAgdmlld1tvdXRsZXROYW1lXSA9IHN1YnZpZXdcbiAgICAgIHN1YnZpZXcucGFyZW50VmlldyA9IHZpZXdcbiAgICAgIHZpZXcuZmluZChcImRpdiMje3N1YnZpZXdJZH1cIikucmVwbGFjZVdpdGgoc3VidmlldylcblxuICBleHRyYWN0T3B0aW9uczogKGFyZ3MpIC0+XG4gICAgb3B0aW9ucyA9IHt9XG4gICAgZm9yIGFyZyBpbiBhcmdzXG4gICAgICBzd2l0Y2ggdHlwZW9mKGFyZylcbiAgICAgICAgd2hlbiAnZnVuY3Rpb24nXG4gICAgICAgICAgb3B0aW9ucy5jb250ZW50ID0gYXJnXG4gICAgICAgIHdoZW4gJ3N0cmluZycsICdudW1iZXInXG4gICAgICAgICAgb3B0aW9ucy50ZXh0ID0gYXJnLnRvU3RyaW5nKClcbiAgICAgICAgZWxzZVxuICAgICAgICAgIG9wdGlvbnMuYXR0cmlidXRlcyA9IGFyZ1xuICAgIG9wdGlvbnNcbiJdfQ==\n//# sourceURL=/home/runner/work/atom-utils-plus/atom-utils-plus/lib/mixins/space-pen-dsl.coffee","\"use strict\";\n\nvar utils = module.exports = {};\n\n/**\n * Loops through the collection and calls the callback for each element. if the callback returns truthy, the loop is broken and returns the same value.\n * @public\n * @param {*} collection The collection to loop through. Needs to have a length property set and have indices set from 0 to length - 1.\n * @param {function} callback The callback to be called for each element. The element will be given as a parameter to the callback. If this callback returns truthy, the loop is broken and the same value is returned.\n * @returns {*} The value that a callback has returned (if truthy). Otherwise nothing.\n */\nutils.forEach = function(collection, callback) {\n for(var i = 0; i < collection.length; i++) {\n var result = callback(collection[i]);\n if(result) {\n return result;\n }\n }\n};\n","\"use strict\";\n\nmodule.exports = function(options) {\n var getState = options.stateHandler.getState;\n\n /**\n * Tells if the element has been made detectable and ready to be listened for resize events.\n * @public\n * @param {element} The element to check.\n * @returns {boolean} True or false depending on if the element is detectable or not.\n */\n function isDetectable(element) {\n var state = getState(element);\n return state && !!state.isDetectable;\n }\n\n /**\n * Marks the element that it has been made detectable and ready to be listened for resize events.\n * @public\n * @param {element} The element to mark.\n */\n function markAsDetectable(element) {\n getState(element).isDetectable = true;\n }\n\n /**\n * Tells if the element is busy or not.\n * @public\n * @param {element} The element to check.\n * @returns {boolean} True or false depending on if the element is busy or not.\n */\n function isBusy(element) {\n return !!getState(element).busy;\n }\n\n /**\n * Marks the object is busy and should not be made detectable.\n * @public\n * @param {element} element The element to mark.\n * @param {boolean} busy If the element is busy or not.\n */\n function markBusy(element, busy) {\n getState(element).busy = !!busy;\n }\n\n return {\n isDetectable: isDetectable,\n markAsDetectable: markAsDetectable,\n isBusy: isBusy,\n markBusy: markBusy\n };\n};\n","\"use strict\";\n\nmodule.exports = function(idHandler) {\n var eventListeners = {};\n\n /**\n * Gets all listeners for the given element.\n * @public\n * @param {element} element The element to get all listeners for.\n * @returns All listeners for the given element.\n */\n function getListeners(element) {\n var id = idHandler.get(element);\n\n if (id === undefined) {\n return [];\n }\n\n return eventListeners[id] || [];\n }\n\n /**\n * Stores the given listener for the given element. Will not actually add the listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The callback that the element has added.\n */\n function addListener(element, listener) {\n var id = idHandler.get(element);\n\n if(!eventListeners[id]) {\n eventListeners[id] = [];\n }\n\n eventListeners[id].push(listener);\n }\n\n function removeListener(element, listener) {\n var listeners = getListeners(element);\n for (var i = 0, len = listeners.length; i < len; ++i) {\n if (listeners[i] === listener) {\n listeners.splice(i, 1);\n break;\n }\n }\n }\n\n function removeAllListeners(element) {\n var listeners = getListeners(element);\n if (!listeners) { return; }\n listeners.length = 0;\n }\n\n return {\n get: getListeners,\n add: addListener,\n removeListener: removeListener,\n removeAllListeners: removeAllListeners\n };\n};\n","\"use strict\";\n\nmodule.exports = function() {\n var idCount = 1;\n\n /**\n * Generates a new unique id in the context.\n * @public\n * @returns {number} A unique id in the context.\n */\n function generate() {\n return idCount++;\n }\n\n return {\n generate: generate\n };\n};\n","\"use strict\";\n\nmodule.exports = function(options) {\n var idGenerator = options.idGenerator;\n var getState = options.stateHandler.getState;\n\n /**\n * Gets the resize detector id of the element.\n * @public\n * @param {element} element The target element to get the id of.\n * @returns {string|number|null} The id of the element. Null if it has no id.\n */\n function getId(element) {\n var state = getState(element);\n\n if (state && state.id !== undefined) {\n return state.id;\n }\n\n return null;\n }\n\n /**\n * Sets the resize detector id of the element. Requires the element to have a resize detector state initialized.\n * @public\n * @param {element} element The target element to set the id of.\n * @returns {string|number|null} The id of the element.\n */\n function setId(element) {\n var state = getState(element);\n\n if (!state) {\n throw new Error(\"setId required the element to have a resize detection state.\");\n }\n\n var id = idGenerator.generate();\n\n state.id = id;\n\n return id;\n }\n\n return {\n get: getId,\n set: setId\n };\n};\n","\"use strict\";\n\n/* global console: false */\n\n/**\n * Reporter that handles the reporting of logs, warnings and errors.\n * @public\n * @param {boolean} quiet Tells if the reporter should be quiet or not.\n */\nmodule.exports = function(quiet) {\n function noop() {\n //Does nothing.\n }\n\n var reporter = {\n log: noop,\n warn: noop,\n error: noop\n };\n\n if(!quiet && window.console) {\n var attachFunction = function(reporter, name) {\n //The proxy is needed to be able to call the method with the console context,\n //since we cannot use bind.\n reporter[name] = function reporterProxy() {\n var f = console[name];\n if (f.apply) { //IE9 does not support console.log.apply :)\n f.apply(console, arguments);\n } else {\n for (var i = 0; i < arguments.length; i++) {\n f(arguments[i]);\n }\n }\n };\n };\n\n attachFunction(reporter, \"log\");\n attachFunction(reporter, \"warn\");\n attachFunction(reporter, \"error\");\n }\n\n return reporter;\n};","\"use strict\";\n\nvar detector = module.exports = {};\n\ndetector.isIE = function(version) {\n function isAnyIeVersion() {\n var agent = navigator.userAgent.toLowerCase();\n return agent.indexOf(\"msie\") !== -1 || agent.indexOf(\"trident\") !== -1 || agent.indexOf(\" edge/\") !== -1;\n }\n\n if(!isAnyIeVersion()) {\n return false;\n }\n\n if(!version) {\n return true;\n }\n\n //Shamelessly stolen from https://gist.github.com/padolsey/527683\n var ieVersion = (function(){\n var undef,\n v = 3,\n div = document.createElement(\"div\"),\n all = div.getElementsByTagName(\"i\");\n\n do {\n div.innerHTML = \"\";\n }\n while (all[0]);\n\n return v > 4 ? v : undef;\n }());\n\n return version === ieVersion;\n};\n\ndetector.isLegacyOpera = function() {\n return !!window.opera;\n};\n","\"use strict\";\n\nvar utils = module.exports = {};\n\nutils.getOption = getOption;\n\nfunction getOption(options, name, defaultValue) {\n var value = options[name];\n\n if((value === undefined || value === null) && defaultValue !== undefined) {\n return defaultValue;\n }\n\n return value;\n}\n","/**\n * Resize detection strategy that injects objects to elements in order to detect resize events.\n * Heavily inspired by: http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/\n */\n\n\"use strict\";\n\nvar browserDetector = require(\"../browser-detector\");\n\nmodule.exports = function(options) {\n options = options || {};\n var reporter = options.reporter;\n var batchProcessor = options.batchProcessor;\n var getState = options.stateHandler.getState;\n\n if(!reporter) {\n throw new Error(\"Missing required dependency: reporter.\");\n }\n\n /**\n * Adds a resize event listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.\n */\n function addListener(element, listener) {\n function listenerProxy() {\n listener(element);\n }\n\n if(browserDetector.isIE(8)) {\n //IE 8 does not support object, but supports the resize event directly on elements.\n getState(element).object = {\n proxy: listenerProxy\n };\n element.attachEvent(\"onresize\", listenerProxy);\n } else {\n var object = getObject(element);\n\n if(!object) {\n throw new Error(\"Element is not detectable by this strategy.\");\n }\n\n object.contentDocument.defaultView.addEventListener(\"resize\", listenerProxy);\n }\n }\n\n function buildCssTextString(rules) {\n var seperator = options.important ? \" !important; \" : \"; \";\n\n return (rules.join(seperator) + seperator).trim();\n }\n\n /**\n * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.\n * @private\n * @param {object} options Optional options object.\n * @param {element} element The element to make detectable\n * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.\n */\n function makeDetectable(options, element, callback) {\n if (!callback) {\n callback = element;\n element = options;\n options = null;\n }\n\n options = options || {};\n var debug = options.debug;\n\n function injectObject(element, callback) {\n var OBJECT_STYLE = buildCssTextString([\"display: block\", \"position: absolute\", \"top: 0\", \"left: 0\", \"width: 100%\", \"height: 100%\", \"border: none\", \"padding: 0\", \"margin: 0\", \"opacity: 0\", \"z-index: -1000\", \"pointer-events: none\"]);\n\n //The target element needs to be positioned (everything except static) so the absolute positioned object will be positioned relative to the target element.\n\n // Position altering may be performed directly or on object load, depending on if style resolution is possible directly or not.\n var positionCheckPerformed = false;\n\n // The element may not yet be attached to the DOM, and therefore the style object may be empty in some browsers.\n // Since the style object is a reference, it will be updated as soon as the element is attached to the DOM.\n var style = window.getComputedStyle(element);\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n getState(element).startSize = {\n width: width,\n height: height\n };\n\n function mutateDom() {\n function alterPositionStyles() {\n if(style.position === \"static\") {\n element.style.setProperty(\"position\", \"relative\", options.important ? \"important\" : \"\");\n\n var removeRelativeStyles = function(reporter, element, style, property) {\n function getNumericalValue(value) {\n return value.replace(/[^-\\d\\.]/g, \"\");\n }\n\n var value = style[property];\n\n if(value !== \"auto\" && getNumericalValue(value) !== \"0\") {\n reporter.warn(\"An element that is positioned static has style.\" + property + \"=\" + value + \" which is ignored due to the static positioning. The element will need to be positioned relative, so the style.\" + property + \" will be set to 0. Element: \", element);\n element.style.setProperty(property, \"0\", options.important ? \"important\" : \"\");\n }\n };\n\n //Check so that there are no accidental styles that will make the element styled differently now that is is relative.\n //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).\n removeRelativeStyles(reporter, element, style, \"top\");\n removeRelativeStyles(reporter, element, style, \"right\");\n removeRelativeStyles(reporter, element, style, \"bottom\");\n removeRelativeStyles(reporter, element, style, \"left\");\n }\n }\n\n function onObjectLoad() {\n // The object has been loaded, which means that the element now is guaranteed to be attached to the DOM.\n if (!positionCheckPerformed) {\n alterPositionStyles();\n }\n\n /*jshint validthis: true */\n\n function getDocument(element, callback) {\n //Opera 12 seem to call the object.onload before the actual document has been created.\n //So if it is not present, poll it with an timeout until it is present.\n //TODO: Could maybe be handled better with object.onreadystatechange or similar.\n if(!element.contentDocument) {\n var state = getState(element);\n if (state.checkForObjectDocumentTimeoutId) {\n window.clearTimeout(state.checkForObjectDocumentTimeoutId);\n }\n state.checkForObjectDocumentTimeoutId = setTimeout(function checkForObjectDocument() {\n state.checkForObjectDocumentTimeoutId = 0;\n getDocument(element, callback);\n }, 100);\n\n return;\n }\n\n callback(element.contentDocument);\n }\n\n //Mutating the object element here seems to fire another load event.\n //Mutating the inner document of the object element is fine though.\n var objectElement = this;\n\n //Create the style element to be added to the object.\n getDocument(objectElement, function onObjectDocumentReady(objectDocument) {\n //Notify that the element is ready to be listened to.\n callback(element);\n });\n }\n\n // The element may be detached from the DOM, and some browsers does not support style resolving of detached elements.\n // The alterPositionStyles needs to be delayed until we know the element has been attached to the DOM (which we are sure of when the onObjectLoad has been fired), if style resolution is not possible.\n if (style.position !== \"\") {\n alterPositionStyles(style);\n positionCheckPerformed = true;\n }\n\n //Add an object element as a child to the target element that will be listened to for resize events.\n var object = document.createElement(\"object\");\n object.style.cssText = OBJECT_STYLE;\n object.tabIndex = -1;\n object.type = \"text/html\";\n object.setAttribute(\"aria-hidden\", \"true\");\n object.onload = onObjectLoad;\n\n //Safari: This must occur before adding the object to the DOM.\n //IE: Does not like that this happens before, even if it is also added after.\n if(!browserDetector.isIE()) {\n object.data = \"about:blank\";\n }\n\n if (!getState(element)) {\n // The element has been uninstalled before the actual loading happened.\n return;\n }\n\n element.appendChild(object);\n getState(element).object = object;\n\n //IE: This must occur after adding the object to the DOM.\n if(browserDetector.isIE()) {\n object.data = \"about:blank\";\n }\n }\n\n if(batchProcessor) {\n batchProcessor.add(mutateDom);\n } else {\n mutateDom();\n }\n }\n\n if(browserDetector.isIE(8)) {\n //IE 8 does not support objects properly. Luckily they do support the resize event.\n //So do not inject the object and notify that the element is already ready to be listened to.\n //The event handler for the resize event is attached in the utils.addListener instead.\n callback(element);\n } else {\n injectObject(element, callback);\n }\n }\n\n /**\n * Returns the child object of the target element.\n * @private\n * @param {element} element The target element.\n * @returns The object element of the target.\n */\n function getObject(element) {\n return getState(element).object;\n }\n\n function uninstall(element) {\n if (!getState(element)) {\n return;\n }\n\n var object = getObject(element);\n\n if (!object) {\n return;\n }\n\n if (browserDetector.isIE(8)) {\n element.detachEvent(\"onresize\", object.proxy);\n } else {\n element.removeChild(object);\n }\n\n if (getState(element).checkForObjectDocumentTimeoutId) {\n window.clearTimeout(getState(element).checkForObjectDocumentTimeoutId);\n }\n\n delete getState(element).object;\n }\n\n return {\n makeDetectable: makeDetectable,\n addListener: addListener,\n uninstall: uninstall\n };\n};\n","/**\n * Resize detection strategy that injects divs to elements in order to detect resize events on scroll events.\n * Heavily inspired by: https://github.com/marcj/css-element-queries/blob/master/src/ResizeSensor.js\n */\n\n\"use strict\";\n\nvar forEach = require(\"../collection-utils\").forEach;\n\nmodule.exports = function(options) {\n options = options || {};\n var reporter = options.reporter;\n var batchProcessor = options.batchProcessor;\n var getState = options.stateHandler.getState;\n var hasState = options.stateHandler.hasState;\n var idHandler = options.idHandler;\n\n if (!batchProcessor) {\n throw new Error(\"Missing required dependency: batchProcessor\");\n }\n\n if (!reporter) {\n throw new Error(\"Missing required dependency: reporter.\");\n }\n\n //TODO: Could this perhaps be done at installation time?\n var scrollbarSizes = getScrollbarSizes();\n\n var styleId = \"erd_scroll_detection_scrollbar_style\";\n var detectionContainerClass = \"erd_scroll_detection_container\";\n\n function initDocument(targetDocument) {\n // Inject the scrollbar styling that prevents them from appearing sometimes in Chrome.\n // The injected container needs to have a class, so that it may be styled with CSS (pseudo elements).\n injectScrollStyle(targetDocument, styleId, detectionContainerClass);\n }\n\n initDocument(window.document);\n\n function buildCssTextString(rules) {\n var seperator = options.important ? \" !important; \" : \"; \";\n\n return (rules.join(seperator) + seperator).trim();\n }\n\n function getScrollbarSizes() {\n var width = 500;\n var height = 500;\n\n var child = document.createElement(\"div\");\n child.style.cssText = buildCssTextString([\"position: absolute\", \"width: \" + width*2 + \"px\", \"height: \" + height*2 + \"px\", \"visibility: hidden\", \"margin: 0\", \"padding: 0\"]);\n\n var container = document.createElement(\"div\");\n container.style.cssText = buildCssTextString([\"position: absolute\", \"width: \" + width + \"px\", \"height: \" + height + \"px\", \"overflow: scroll\", \"visibility: none\", \"top: \" + -width*3 + \"px\", \"left: \" + -height*3 + \"px\", \"visibility: hidden\", \"margin: 0\", \"padding: 0\"]);\n\n container.appendChild(child);\n\n document.body.insertBefore(container, document.body.firstChild);\n\n var widthSize = width - container.clientWidth;\n var heightSize = height - container.clientHeight;\n\n document.body.removeChild(container);\n\n return {\n width: widthSize,\n height: heightSize\n };\n }\n\n function injectScrollStyle(targetDocument, styleId, containerClass) {\n function injectStyle(style, method) {\n method = method || function (element) {\n targetDocument.head.appendChild(element);\n };\n\n var styleElement = targetDocument.createElement(\"style\");\n styleElement.innerHTML = style;\n styleElement.id = styleId;\n method(styleElement);\n return styleElement;\n }\n\n if (!targetDocument.getElementById(styleId)) {\n var containerAnimationClass = containerClass + \"_animation\";\n var containerAnimationActiveClass = containerClass + \"_animation_active\";\n var style = \"/* Created by the element-resize-detector library. */\\n\";\n style += \".\" + containerClass + \" > div::-webkit-scrollbar { \" + buildCssTextString([\"display: none\"]) + \" }\\n\\n\";\n style += \".\" + containerAnimationActiveClass + \" { \" + buildCssTextString([\"-webkit-animation-duration: 0.1s\", \"animation-duration: 0.1s\", \"-webkit-animation-name: \" + containerAnimationClass, \"animation-name: \" + containerAnimationClass]) + \" }\\n\";\n style += \"@-webkit-keyframes \" + containerAnimationClass + \" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\\n\";\n style += \"@keyframes \" + containerAnimationClass + \" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\";\n injectStyle(style);\n }\n }\n\n function addAnimationClass(element) {\n element.className += \" \" + detectionContainerClass + \"_animation_active\";\n }\n\n function addEvent(el, name, cb) {\n if (el.addEventListener) {\n el.addEventListener(name, cb);\n } else if(el.attachEvent) {\n el.attachEvent(\"on\" + name, cb);\n } else {\n return reporter.error(\"[scroll] Don't know how to add event listeners.\");\n }\n }\n\n function removeEvent(el, name, cb) {\n if (el.removeEventListener) {\n el.removeEventListener(name, cb);\n } else if(el.detachEvent) {\n el.detachEvent(\"on\" + name, cb);\n } else {\n return reporter.error(\"[scroll] Don't know how to remove event listeners.\");\n }\n }\n\n function getExpandElement(element) {\n return getState(element).container.childNodes[0].childNodes[0].childNodes[0];\n }\n\n function getShrinkElement(element) {\n return getState(element).container.childNodes[0].childNodes[0].childNodes[1];\n }\n\n /**\n * Adds a resize event listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.\n */\n function addListener(element, listener) {\n var listeners = getState(element).listeners;\n\n if (!listeners.push) {\n throw new Error(\"Cannot add listener to an element that is not detectable.\");\n }\n\n getState(element).listeners.push(listener);\n }\n\n /**\n * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.\n * @private\n * @param {object} options Optional options object.\n * @param {element} element The element to make detectable\n * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.\n */\n function makeDetectable(options, element, callback) {\n if (!callback) {\n callback = element;\n element = options;\n options = null;\n }\n\n options = options || {};\n\n function debug() {\n if (options.debug) {\n var args = Array.prototype.slice.call(arguments);\n args.unshift(idHandler.get(element), \"Scroll: \");\n if (reporter.log.apply) {\n reporter.log.apply(null, args);\n } else {\n for (var i = 0; i < args.length; i++) {\n reporter.log(args[i]);\n }\n }\n }\n }\n\n function isDetached(element) {\n function isInDocument(element) {\n return element === element.ownerDocument.body || element.ownerDocument.body.contains(element);\n }\n\n if (!isInDocument(element)) {\n return true;\n }\n\n // FireFox returns null style in hidden iframes. See https://github.com/wnr/element-resize-detector/issues/68 and https://bugzilla.mozilla.org/show_bug.cgi?id=795520\n if (window.getComputedStyle(element) === null) {\n return true;\n }\n\n return false;\n }\n\n function isUnrendered(element) {\n // Check the absolute positioned container since the top level container is display: inline.\n var container = getState(element).container.childNodes[0];\n var style = window.getComputedStyle(container);\n return !style.width || style.width.indexOf(\"px\") === -1; //Can only compute pixel value when rendered.\n }\n\n function getStyle() {\n // Some browsers only force layouts when actually reading the style properties of the style object, so make sure that they are all read here,\n // so that the user of the function can be sure that it will perform the layout here, instead of later (important for batching).\n var elementStyle = window.getComputedStyle(element);\n var style = {};\n style.position = elementStyle.position;\n style.width = element.offsetWidth;\n style.height = element.offsetHeight;\n style.top = elementStyle.top;\n style.right = elementStyle.right;\n style.bottom = elementStyle.bottom;\n style.left = elementStyle.left;\n style.widthCSS = elementStyle.width;\n style.heightCSS = elementStyle.height;\n return style;\n }\n\n function storeStartSize() {\n var style = getStyle();\n getState(element).startSize = {\n width: style.width,\n height: style.height\n };\n debug(\"Element start size\", getState(element).startSize);\n }\n\n function initListeners() {\n getState(element).listeners = [];\n }\n\n function storeStyle() {\n debug(\"storeStyle invoked.\");\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n var style = getStyle();\n getState(element).style = style;\n }\n\n function storeCurrentSize(element, width, height) {\n getState(element).lastWidth = width;\n getState(element).lastHeight = height;\n }\n\n function getExpandChildElement(element) {\n return getExpandElement(element).childNodes[0];\n }\n\n function getWidthOffset() {\n return 2 * scrollbarSizes.width + 1;\n }\n\n function getHeightOffset() {\n return 2 * scrollbarSizes.height + 1;\n }\n\n function getExpandWidth(width) {\n return width + 10 + getWidthOffset();\n }\n\n function getExpandHeight(height) {\n return height + 10 + getHeightOffset();\n }\n\n function getShrinkWidth(width) {\n return width * 2 + getWidthOffset();\n }\n\n function getShrinkHeight(height) {\n return height * 2 + getHeightOffset();\n }\n\n function positionScrollbars(element, width, height) {\n var expand = getExpandElement(element);\n var shrink = getShrinkElement(element);\n var expandWidth = getExpandWidth(width);\n var expandHeight = getExpandHeight(height);\n var shrinkWidth = getShrinkWidth(width);\n var shrinkHeight = getShrinkHeight(height);\n expand.scrollLeft = expandWidth;\n expand.scrollTop = expandHeight;\n shrink.scrollLeft = shrinkWidth;\n shrink.scrollTop = shrinkHeight;\n }\n\n function injectContainerElement() {\n var container = getState(element).container;\n\n if (!container) {\n container = document.createElement(\"div\");\n container.className = detectionContainerClass;\n container.style.cssText = buildCssTextString([\"visibility: hidden\", \"display: inline\", \"width: 0px\", \"height: 0px\", \"z-index: -1\", \"overflow: hidden\", \"margin: 0\", \"padding: 0\"]);\n getState(element).container = container;\n addAnimationClass(container);\n element.appendChild(container);\n\n var onAnimationStart = function () {\n getState(element).onRendered && getState(element).onRendered();\n };\n\n addEvent(container, \"animationstart\", onAnimationStart);\n\n // Store the event handler here so that they may be removed when uninstall is called.\n // See uninstall function for an explanation why it is needed.\n getState(element).onAnimationStart = onAnimationStart;\n }\n\n return container;\n }\n\n function injectScrollElements() {\n function alterPositionStyles() {\n var style = getState(element).style;\n\n if(style.position === \"static\") {\n element.style.setProperty(\"position\", \"relative\",options.important ? \"important\" : \"\");\n\n var removeRelativeStyles = function(reporter, element, style, property) {\n function getNumericalValue(value) {\n return value.replace(/[^-\\d\\.]/g, \"\");\n }\n\n var value = style[property];\n\n if(value !== \"auto\" && getNumericalValue(value) !== \"0\") {\n reporter.warn(\"An element that is positioned static has style.\" + property + \"=\" + value + \" which is ignored due to the static positioning. The element will need to be positioned relative, so the style.\" + property + \" will be set to 0. Element: \", element);\n element.style[property] = 0;\n }\n };\n\n //Check so that there are no accidental styles that will make the element styled differently now that is is relative.\n //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).\n removeRelativeStyles(reporter, element, style, \"top\");\n removeRelativeStyles(reporter, element, style, \"right\");\n removeRelativeStyles(reporter, element, style, \"bottom\");\n removeRelativeStyles(reporter, element, style, \"left\");\n }\n }\n\n function getLeftTopBottomRightCssText(left, top, bottom, right) {\n left = (!left ? \"0\" : (left + \"px\"));\n top = (!top ? \"0\" : (top + \"px\"));\n bottom = (!bottom ? \"0\" : (bottom + \"px\"));\n right = (!right ? \"0\" : (right + \"px\"));\n\n return [\"left: \" + left, \"top: \" + top, \"right: \" + right, \"bottom: \" + bottom];\n }\n\n debug(\"Injecting elements\");\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n alterPositionStyles();\n\n var rootContainer = getState(element).container;\n\n if (!rootContainer) {\n rootContainer = injectContainerElement();\n }\n\n // Due to this WebKit bug https://bugs.webkit.org/show_bug.cgi?id=80808 (currently fixed in Blink, but still present in WebKit browsers such as Safari),\n // we need to inject two containers, one that is width/height 100% and another that is left/top -1px so that the final container always is 1x1 pixels bigger than\n // the targeted element.\n // When the bug is resolved, \"containerContainer\" may be removed.\n\n // The outer container can occasionally be less wide than the targeted when inside inline elements element in WebKit (see https://bugs.webkit.org/show_bug.cgi?id=152980).\n // This should be no problem since the inner container either way makes sure the injected scroll elements are at least 1x1 px.\n\n var scrollbarWidth = scrollbarSizes.width;\n var scrollbarHeight = scrollbarSizes.height;\n var containerContainerStyle = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: hidden\", \"z-index: -1\", \"visibility: hidden\", \"width: 100%\", \"height: 100%\", \"left: 0px\", \"top: 0px\"]);\n var containerStyle = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: hidden\", \"z-index: -1\", \"visibility: hidden\"].concat(getLeftTopBottomRightCssText(-(1 + scrollbarWidth), -(1 + scrollbarHeight), -scrollbarHeight, -scrollbarWidth)));\n var expandStyle = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: scroll\", \"z-index: -1\", \"visibility: hidden\", \"width: 100%\", \"height: 100%\"]);\n var shrinkStyle = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: scroll\", \"z-index: -1\", \"visibility: hidden\", \"width: 100%\", \"height: 100%\"]);\n var expandChildStyle = buildCssTextString([\"position: absolute\", \"left: 0\", \"top: 0\"]);\n var shrinkChildStyle = buildCssTextString([\"position: absolute\", \"width: 200%\", \"height: 200%\"]);\n\n var containerContainer = document.createElement(\"div\");\n var container = document.createElement(\"div\");\n var expand = document.createElement(\"div\");\n var expandChild = document.createElement(\"div\");\n var shrink = document.createElement(\"div\");\n var shrinkChild = document.createElement(\"div\");\n\n // Some browsers choke on the resize system being rtl, so force it to ltr. https://github.com/wnr/element-resize-detector/issues/56\n // However, dir should not be set on the top level container as it alters the dimensions of the target element in some browsers.\n containerContainer.dir = \"ltr\";\n\n containerContainer.style.cssText = containerContainerStyle;\n containerContainer.className = detectionContainerClass;\n container.className = detectionContainerClass;\n container.style.cssText = containerStyle;\n expand.style.cssText = expandStyle;\n expandChild.style.cssText = expandChildStyle;\n shrink.style.cssText = shrinkStyle;\n shrinkChild.style.cssText = shrinkChildStyle;\n\n expand.appendChild(expandChild);\n shrink.appendChild(shrinkChild);\n container.appendChild(expand);\n container.appendChild(shrink);\n containerContainer.appendChild(container);\n rootContainer.appendChild(containerContainer);\n\n function onExpandScroll() {\n getState(element).onExpand && getState(element).onExpand();\n }\n\n function onShrinkScroll() {\n getState(element).onShrink && getState(element).onShrink();\n }\n\n addEvent(expand, \"scroll\", onExpandScroll);\n addEvent(shrink, \"scroll\", onShrinkScroll);\n\n // Store the event handlers here so that they may be removed when uninstall is called.\n // See uninstall function for an explanation why it is needed.\n getState(element).onExpandScroll = onExpandScroll;\n getState(element).onShrinkScroll = onShrinkScroll;\n }\n\n function registerListenersAndPositionElements() {\n function updateChildSizes(element, width, height) {\n var expandChild = getExpandChildElement(element);\n var expandWidth = getExpandWidth(width);\n var expandHeight = getExpandHeight(height);\n expandChild.style.setProperty(\"width\", expandWidth + \"px\", options.important ? \"important\" : \"\");\n expandChild.style.setProperty(\"height\", expandHeight + \"px\", options.important ? \"important\" : \"\");\n }\n\n function updateDetectorElements(done) {\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n // Check whether the size has actually changed since last time the algorithm ran. If not, some steps may be skipped.\n var sizeChanged = width !== getState(element).lastWidth || height !== getState(element).lastHeight;\n\n debug(\"Storing current size\", width, height);\n\n // Store the size of the element sync here, so that multiple scroll events may be ignored in the event listeners.\n // Otherwise the if-check in handleScroll is useless.\n storeCurrentSize(element, width, height);\n\n // Since we delay the processing of the batch, there is a risk that uninstall has been called before the batch gets to execute.\n // Since there is no way to cancel the fn executions, we need to add an uninstall guard to all fns of the batch.\n\n batchProcessor.add(0, function performUpdateChildSizes() {\n if (!sizeChanged) {\n return;\n }\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n if (!areElementsInjected()) {\n debug(\"Aborting because element container has not been initialized\");\n return;\n }\n\n if (options.debug) {\n var w = element.offsetWidth;\n var h = element.offsetHeight;\n\n if (w !== width || h !== height) {\n reporter.warn(idHandler.get(element), \"Scroll: Size changed before updating detector elements.\");\n }\n }\n\n updateChildSizes(element, width, height);\n });\n\n batchProcessor.add(1, function updateScrollbars() {\n // This function needs to be invoked event though the size is unchanged. The element could have been resized very quickly and then\n // been restored to the original size, which will have changed the scrollbar positions.\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n if (!areElementsInjected()) {\n debug(\"Aborting because element container has not been initialized\");\n return;\n }\n\n positionScrollbars(element, width, height);\n });\n\n if (sizeChanged && done) {\n batchProcessor.add(2, function () {\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n if (!areElementsInjected()) {\n debug(\"Aborting because element container has not been initialized\");\n return;\n }\n\n done();\n });\n }\n }\n\n function areElementsInjected() {\n return !!getState(element).container;\n }\n\n function notifyListenersIfNeeded() {\n function isFirstNotify() {\n return getState(element).lastNotifiedWidth === undefined;\n }\n\n debug(\"notifyListenersIfNeeded invoked\");\n\n var state = getState(element);\n\n // Don't notify if the current size is the start size, and this is the first notification.\n if (isFirstNotify() && state.lastWidth === state.startSize.width && state.lastHeight === state.startSize.height) {\n return debug(\"Not notifying: Size is the same as the start size, and there has been no notification yet.\");\n }\n\n // Don't notify if the size already has been notified.\n if (state.lastWidth === state.lastNotifiedWidth && state.lastHeight === state.lastNotifiedHeight) {\n return debug(\"Not notifying: Size already notified\");\n }\n\n\n debug(\"Current size not notified, notifying...\");\n state.lastNotifiedWidth = state.lastWidth;\n state.lastNotifiedHeight = state.lastHeight;\n forEach(getState(element).listeners, function (listener) {\n listener(element);\n });\n }\n\n function handleRender() {\n debug(\"startanimation triggered.\");\n\n if (isUnrendered(element)) {\n debug(\"Ignoring since element is still unrendered...\");\n return;\n }\n\n debug(\"Element rendered.\");\n var expand = getExpandElement(element);\n var shrink = getShrinkElement(element);\n if (expand.scrollLeft === 0 || expand.scrollTop === 0 || shrink.scrollLeft === 0 || shrink.scrollTop === 0) {\n debug(\"Scrollbars out of sync. Updating detector elements...\");\n updateDetectorElements(notifyListenersIfNeeded);\n }\n }\n\n function handleScroll() {\n debug(\"Scroll detected.\");\n\n if (isUnrendered(element)) {\n // Element is still unrendered. Skip this scroll event.\n debug(\"Scroll event fired while unrendered. Ignoring...\");\n return;\n }\n\n updateDetectorElements(notifyListenersIfNeeded);\n }\n\n debug(\"registerListenersAndPositionElements invoked.\");\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n getState(element).onRendered = handleRender;\n getState(element).onExpand = handleScroll;\n getState(element).onShrink = handleScroll;\n\n var style = getState(element).style;\n updateChildSizes(element, style.width, style.height);\n }\n\n function finalizeDomMutation() {\n debug(\"finalizeDomMutation invoked.\");\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n var style = getState(element).style;\n storeCurrentSize(element, style.width, style.height);\n positionScrollbars(element, style.width, style.height);\n }\n\n function ready() {\n callback(element);\n }\n\n function install() {\n debug(\"Installing...\");\n initListeners();\n storeStartSize();\n\n batchProcessor.add(0, storeStyle);\n batchProcessor.add(1, injectScrollElements);\n batchProcessor.add(2, registerListenersAndPositionElements);\n batchProcessor.add(3, finalizeDomMutation);\n batchProcessor.add(4, ready);\n }\n\n debug(\"Making detectable...\");\n\n if (isDetached(element)) {\n debug(\"Element is detached\");\n\n injectContainerElement();\n\n debug(\"Waiting until element is attached...\");\n\n getState(element).onRendered = function () {\n debug(\"Element is now attached\");\n install();\n };\n } else {\n install();\n }\n }\n\n function uninstall(element) {\n var state = getState(element);\n\n if (!state) {\n // Uninstall has been called on a non-erd element.\n return;\n }\n\n // Uninstall may have been called in the following scenarios:\n // (1) Right between the sync code and async batch (here state.busy = true, but nothing have been registered or injected).\n // (2) In the ready callback of the last level of the batch by another element (here, state.busy = true, but all the stuff has been injected).\n // (3) After the installation process (here, state.busy = false and all the stuff has been injected).\n // So to be on the safe side, let's check for each thing before removing.\n\n // We need to remove the event listeners, because otherwise the event might fire on an uninstall element which results in an error when trying to get the state of the element.\n state.onExpandScroll && removeEvent(getExpandElement(element), \"scroll\", state.onExpandScroll);\n state.onShrinkScroll && removeEvent(getShrinkElement(element), \"scroll\", state.onShrinkScroll);\n state.onAnimationStart && removeEvent(state.container, \"animationstart\", state.onAnimationStart);\n\n state.container && element.removeChild(state.container);\n }\n\n return {\n makeDetectable: makeDetectable,\n addListener: addListener,\n uninstall: uninstall,\n initDocument: initDocument\n };\n};\n","// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\n","(function() {\n var isEqual, isPlainObject, macModifierKeyMap, nonMacModifierKeyMap, plus, shiftKeyMap, splitKeyPath, _,\n __slice = [].slice;\n\n _ = require('underscore');\n\n macModifierKeyMap = {\n cmd: '\\u2318',\n ctrl: '\\u2303',\n alt: '\\u2325',\n option: '\\u2325',\n shift: '\\u21e7',\n enter: '\\u23ce',\n left: '\\u2190',\n right: '\\u2192',\n up: '\\u2191',\n down: '\\u2193'\n };\n\n nonMacModifierKeyMap = {\n cmd: 'Cmd',\n ctrl: 'Ctrl',\n alt: 'Alt',\n option: 'Alt',\n shift: 'Shift',\n enter: 'Enter',\n left: 'Left',\n right: 'Right',\n up: 'Up',\n down: 'Down'\n };\n\n shiftKeyMap = {\n '~': '`',\n '_': '-',\n '+': '=',\n '|': '\\\\',\n '{': '[',\n '}': ']',\n ':': ';',\n '\"': '\\'',\n '<': ',',\n '>': '.',\n '?': '/'\n };\n\n splitKeyPath = function(keyPath) {\n var char, i, keyPathArray, startIndex, _i, _len;\n startIndex = 0;\n keyPathArray = [];\n if (keyPath == null) {\n return keyPathArray;\n }\n for (i = _i = 0, _len = keyPath.length; _i < _len; i = ++_i) {\n char = keyPath[i];\n if (char === '.' && (i === 0 || keyPath[i - 1] !== '\\\\')) {\n keyPathArray.push(keyPath.substring(startIndex, i));\n startIndex = i + 1;\n }\n }\n keyPathArray.push(keyPath.substr(startIndex, keyPath.length));\n return keyPathArray;\n };\n\n isPlainObject = function(value) {\n return _.isObject(value) && !_.isArray(value);\n };\n\n plus = {\n adviseBefore: function(object, methodName, advice) {\n var original;\n original = object[methodName];\n return object[methodName] = function() {\n var args;\n args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n if (advice.apply(this, args) !== false) {\n return original.apply(this, args);\n }\n };\n },\n camelize: function(string) {\n if (string) {\n return string.replace(/[_-]+(\\w)/g, function(m) {\n return m[1].toUpperCase();\n });\n } else {\n return '';\n }\n },\n capitalize: function(word) {\n if (!word) {\n return '';\n }\n if (word.toLowerCase() === 'github') {\n return 'GitHub';\n } else {\n return word[0].toUpperCase() + word.slice(1);\n }\n },\n compactObject: function(object) {\n var key, newObject, value;\n newObject = {};\n for (key in object) {\n value = object[key];\n if (value != null) {\n newObject[key] = value;\n }\n }\n return newObject;\n },\n dasherize: function(string) {\n if (!string) {\n return '';\n }\n string = string[0].toLowerCase() + string.slice(1);\n return string.replace(/([A-Z])|(_)/g, function(m, letter) {\n if (letter) {\n return \"-\" + letter.toLowerCase();\n } else {\n return \"-\";\n }\n });\n },\n deepClone: function(object) {\n if (_.isArray(object)) {\n return object.map(function(value) {\n return plus.deepClone(value);\n });\n } else if (_.isObject(object) && !_.isFunction(object)) {\n return plus.mapObject(object, (function(_this) {\n return function(key, value) {\n return [key, plus.deepClone(value)];\n };\n })(this));\n } else {\n return object;\n }\n },\n deepExtend: function(target) {\n var i, key, object, result, _i, _len, _ref;\n result = target;\n i = 0;\n while (++i < arguments.length) {\n object = arguments[i];\n if (isPlainObject(result) && isPlainObject(object)) {\n _ref = Object.keys(object);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n key = _ref[_i];\n result[key] = plus.deepExtend(result[key], object[key]);\n }\n } else {\n result = plus.deepClone(object);\n }\n }\n return result;\n },\n deepContains: function(array, target) {\n var object, _i, _len;\n if (array == null) {\n return false;\n }\n for (_i = 0, _len = array.length; _i < _len; _i++) {\n object = array[_i];\n if (_.isEqual(object, target)) {\n return true;\n }\n }\n return false;\n },\n endsWith: function(string, suffix) {\n if (suffix == null) {\n suffix = '';\n }\n if (string) {\n return string.indexOf(suffix, string.length - suffix.length) !== -1;\n } else {\n return false;\n }\n },\n escapeAttribute: function(string) {\n if (string) {\n return string.replace(/\"/g, '"').replace(/\\n/g, '').replace(/\\\\/g, '-');\n } else {\n return '';\n }\n },\n escapeRegExp: function(string) {\n if (string) {\n return string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n } else {\n return '';\n }\n },\n humanizeEventName: function(eventName, eventDoc) {\n var event, namespace, namespaceDoc, _ref;\n _ref = eventName.split(':'), namespace = _ref[0], event = _ref[1];\n if (event == null) {\n return plus.undasherize(namespace);\n }\n namespaceDoc = plus.undasherize(namespace);\n if (eventDoc == null) {\n eventDoc = plus.undasherize(event);\n }\n return \"\" + namespaceDoc + \": \" + eventDoc;\n },\n humanizeKey: function(key, platform) {\n var modifierKeyMap;\n if (platform == null) {\n platform = process.platform;\n }\n if (!key) {\n return key;\n }\n modifierKeyMap = platform === 'darwin' ? macModifierKeyMap : nonMacModifierKeyMap;\n if (modifierKeyMap[key]) {\n return modifierKeyMap[key];\n } else if (key.length === 1 && (shiftKeyMap[key] != null)) {\n return [modifierKeyMap.shift, shiftKeyMap[key]];\n } else if (key.length === 1 && key === key.toUpperCase() && key.toUpperCase() !== key.toLowerCase()) {\n return [modifierKeyMap.shift, key.toUpperCase()];\n } else if (key.length === 1 || /f[0-9]{1,2}/.test(key)) {\n return key.toUpperCase();\n } else {\n if (platform === 'darwin') {\n return key;\n } else {\n return plus.capitalize(key);\n }\n }\n },\n humanizeKeystroke: function(keystroke, platform) {\n var humanizedKeystrokes, index, key, keys, keystrokes, splitKeystroke, _i, _j, _len, _len1;\n if (platform == null) {\n platform = process.platform;\n }\n if (!keystroke) {\n return keystroke;\n }\n keystrokes = keystroke.split(' ');\n humanizedKeystrokes = [];\n for (_i = 0, _len = keystrokes.length; _i < _len; _i++) {\n keystroke = keystrokes[_i];\n keys = [];\n splitKeystroke = keystroke.split('-');\n for (index = _j = 0, _len1 = splitKeystroke.length; _j < _len1; index = ++_j) {\n key = splitKeystroke[index];\n if (key === '' && splitKeystroke[index - 1] === '') {\n key = '-';\n }\n if (key) {\n keys.push(plus.humanizeKey(key, platform));\n }\n }\n keys = _.uniq(_.flatten(keys));\n if (platform === 'darwin') {\n keys = keys.join('');\n } else {\n keys = keys.join('+');\n }\n humanizedKeystrokes.push(keys);\n }\n return humanizedKeystrokes.join(' ');\n },\n isSubset: function(potentialSubset, potentialSuperset) {\n return _.every(potentialSubset, function(element) {\n return _.include(potentialSuperset, element);\n });\n },\n losslessInvert: function(hash) {\n var inverted, key, value;\n inverted = {};\n for (key in hash) {\n value = hash[key];\n if (inverted[value] == null) {\n inverted[value] = [];\n }\n inverted[value].push(key);\n }\n return inverted;\n },\n mapObject: function(object, iterator) {\n var key, newObject, value, _i, _len, _ref, _ref1;\n newObject = {};\n _ref = Object.keys(object);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n key = _ref[_i];\n _ref1 = iterator(key, object[key]), key = _ref1[0], value = _ref1[1];\n newObject[key] = value;\n }\n return newObject;\n },\n multiplyString: function(string, n) {\n var finalString, i;\n finalString = \"\";\n i = 0;\n while (i < n) {\n finalString += string;\n i++;\n }\n return finalString;\n },\n pluralize: function(count, singular, plural) {\n if (count == null) {\n count = 0;\n }\n if (plural == null) {\n plural = singular + 's';\n }\n if (count === 1) {\n return \"\" + count + \" \" + singular;\n } else {\n return \"\" + count + \" \" + plural;\n }\n },\n remove: function(array, element) {\n var index;\n index = array.indexOf(element);\n if (index >= 0) {\n array.splice(index, 1);\n }\n return array;\n },\n setValueForKeyPath: function(object, keyPath, value) {\n var key, keys;\n keys = splitKeyPath(keyPath);\n while (keys.length > 1) {\n key = keys.shift();\n if (object[key] == null) {\n object[key] = {};\n }\n object = object[key];\n }\n if (value != null) {\n return object[keys.shift()] = value;\n } else {\n return delete object[keys.shift()];\n }\n },\n hasKeyPath: function(object, keyPath) {\n var key, keys, _i, _len;\n keys = splitKeyPath(keyPath);\n for (_i = 0, _len = keys.length; _i < _len; _i++) {\n key = keys[_i];\n if (!object.hasOwnProperty(key)) {\n return false;\n }\n object = object[key];\n }\n return true;\n },\n spliceWithArray: function(originalArray, start, length, insertedArray, chunkSize) {\n var chunkStart, _i, _ref, _results;\n if (chunkSize == null) {\n chunkSize = 100000;\n }\n if (insertedArray.length < chunkSize) {\n return originalArray.splice.apply(originalArray, [start, length].concat(__slice.call(insertedArray)));\n } else {\n originalArray.splice(start, length);\n _results = [];\n for (chunkStart = _i = 0, _ref = insertedArray.length; chunkSize > 0 ? _i <= _ref : _i >= _ref; chunkStart = _i += chunkSize) {\n _results.push(originalArray.splice.apply(originalArray, [start + chunkStart, 0].concat(__slice.call(insertedArray.slice(chunkStart, chunkStart + chunkSize)))));\n }\n return _results;\n }\n },\n sum: function(array) {\n var elt, sum, _i, _len;\n sum = 0;\n for (_i = 0, _len = array.length; _i < _len; _i++) {\n elt = array[_i];\n sum += elt;\n }\n return sum;\n },\n uncamelcase: function(string) {\n var result;\n if (!string) {\n return '';\n }\n result = string.replace(/([A-Z])|_+/g, function(match, letter) {\n if (letter == null) {\n letter = '';\n }\n return \" \" + letter;\n });\n return plus.capitalize(result.trim());\n },\n undasherize: function(string) {\n if (string) {\n return string.split('-').map(plus.capitalize).join(' ');\n } else {\n return '';\n }\n },\n underscore: function(string) {\n if (!string) {\n return '';\n }\n string = string[0].toLowerCase() + string.slice(1);\n return string.replace(/([A-Z])|-+/g, function(match, letter) {\n if (letter == null) {\n letter = '';\n }\n return \"_\" + (letter.toLowerCase());\n });\n },\n valueForKeyPath: function(object, keyPath) {\n var key, keys, _i, _len;\n keys = splitKeyPath(keyPath);\n for (_i = 0, _len = keys.length; _i < _len; _i++) {\n key = keys[_i];\n object = object[key];\n if (object == null) {\n return;\n }\n }\n return object;\n },\n isEqual: function(a, b, aStack, bStack) {\n if (_.isArray(aStack) && _.isArray(bStack)) {\n return isEqual(a, b, aStack, bStack);\n } else {\n return isEqual(a, b);\n }\n },\n isEqualForProperties: function() {\n var a, b, properties, property, _i, _len;\n a = arguments[0], b = arguments[1], properties = 3 <= arguments.length ? __slice.call(arguments, 2) : [];\n for (_i = 0, _len = properties.length; _i < _len; _i++) {\n property = properties[_i];\n if (!_.isEqual(a[property], b[property])) {\n return false;\n }\n }\n return true;\n }\n };\n\n isEqual = function(a, b, aStack, bStack) {\n var aCtor, aCtorValid, aElement, aKeyCount, aValue, bCtor, bCtorValid, bKeyCount, bValue, equal, i, key, stackIndex, _i, _len;\n if (aStack == null) {\n aStack = [];\n }\n if (bStack == null) {\n bStack = [];\n }\n if (a === b) {\n return _.isEqual(a, b);\n }\n if (_.isFunction(a) || _.isFunction(b)) {\n return _.isEqual(a, b);\n }\n stackIndex = aStack.length;\n while (stackIndex--) {\n if (aStack[stackIndex] === a) {\n return bStack[stackIndex] === b;\n }\n }\n aStack.push(a);\n bStack.push(b);\n equal = false;\n if (_.isFunction(a != null ? a.isEqual : void 0)) {\n equal = a.isEqual(b, aStack, bStack);\n } else if (_.isFunction(b != null ? b.isEqual : void 0)) {\n equal = b.isEqual(a, bStack, aStack);\n } else if (_.isArray(a) && _.isArray(b) && a.length === b.length) {\n equal = true;\n for (i = _i = 0, _len = a.length; _i < _len; i = ++_i) {\n aElement = a[i];\n if (!isEqual(aElement, b[i], aStack, bStack)) {\n equal = false;\n break;\n }\n }\n } else if (_.isRegExp(a) && _.isRegExp(b)) {\n equal = _.isEqual(a, b);\n } else if (_.isElement(a) && _.isElement(b)) {\n equal = a === b;\n } else if (_.isObject(a) && _.isObject(b)) {\n aCtor = a.constructor;\n bCtor = b.constructor;\n aCtorValid = _.isFunction(aCtor) && aCtor instanceof aCtor;\n bCtorValid = _.isFunction(bCtor) && bCtor instanceof bCtor;\n if (aCtor !== bCtor && !(aCtorValid && bCtorValid)) {\n equal = false;\n } else {\n aKeyCount = 0;\n equal = true;\n for (key in a) {\n aValue = a[key];\n if (!_.has(a, key)) {\n continue;\n }\n aKeyCount++;\n if (!(_.has(b, key) && isEqual(aValue, b[key], aStack, bStack))) {\n equal = false;\n break;\n }\n }\n if (equal) {\n bKeyCount = 0;\n for (key in b) {\n bValue = b[key];\n if (_.has(b, key)) {\n bKeyCount++;\n }\n }\n equal = aKeyCount === bKeyCount;\n }\n }\n } else {\n equal = _.isEqual(a, b);\n }\n aStack.pop();\n bStack.pop();\n return equal;\n };\n\n module.exports = _.extend({}, _, plus);\n\n}).call(this);\n","'use babel'\n'use strict'\n\n/**\n * @access private\n */\nexport default class CanvasLayer {\n constructor () {\n /**\n * The onscreen canvas.\n * @type {HTMLCanvasElement}\n */\n this.canvas = document.createElement('canvas')\n\n const desynchronized = process.platform !== 'linux'\n\n /**\n * The onscreen canvas context.\n * @type {CanvasRenderingContext2D}\n */\n this.context = this.canvas.getContext('2d', { desynchronized })\n this.canvas.webkitImageSmoothingEnabled = false\n this.context.imageSmoothingEnabled = false\n\n /**\n * The offscreen canvas.\n * @type {HTMLCanvasElement}\n * @access private\n */\n this.offscreenCanvas = document.createElement('canvas')\n /**\n * The offscreen canvas context.\n * @type {CanvasRenderingContext2D}\n * @access private\n */\n this.offscreenContext = this.offscreenCanvas.getContext('2d', { desynchronized })\n this.offscreenCanvas.webkitImageSmoothingEnabled = false\n this.offscreenContext.imageSmoothingEnabled = false\n }\n\n attach (parent) {\n if (this.canvas.parentNode) { return }\n\n parent.appendChild(this.canvas)\n }\n\n setSize (width = 0, height = 0) {\n this.canvas.width = width\n this.canvas.height = height\n this.context.imageSmoothingEnabled = false\n this.resetOffscreenSize()\n }\n\n getSize () {\n return {\n width: this.canvas.width,\n height: this.canvas.height\n }\n }\n\n resetOffscreenSize () {\n this.offscreenCanvas.width = this.canvas.width\n this.offscreenCanvas.height = this.canvas.height\n this.offscreenContext.imageSmoothingEnabled = false\n }\n\n copyToOffscreen () {\n if (this.canvas.width > 0 && this.canvas.height > 0) {\n this.offscreenContext.drawImage(this.canvas, 0, 0)\n }\n }\n\n copyFromOffscreen () {\n if (this.offscreenCanvas.width > 0 && this.offscreenCanvas.height > 0) {\n this.context.drawImage(this.offscreenCanvas, 0, 0)\n }\n }\n\n copyPartFromOffscreen (srcY, destY, height) {\n if (this.offscreenCanvas.width > 0 && this.offscreenCanvas.height > 0) {\n this.context.drawImage(\n this.offscreenCanvas,\n 0, srcY, this.offscreenCanvas.width, height,\n 0, destY, this.offscreenCanvas.width, height\n )\n }\n }\n\n clearCanvas () {\n this.context.clearRect(0, 0, this.canvas.width, this.canvas.height)\n }\n}\n","'use strict'\n\n/**\n * This class is used by the `CanvasDrawer` in `MinimapElement` to\n * read the styles informations from the DOM to use when rendering\n * the `Minimap`.\n */\nexport default class DOMStylesReader {\n constructor () {\n /**\n * The cache object\n * @access private\n */\n this.domStylesCache = new Map()\n\n /**\n * Set to true once tokenized\n * @access private\n * unused\n */\n // this.hasTokenizedOnce = false\n }\n\n /**\n * Returns the computed values for the given property and scope in the DOM.\n *\n * This function insert a dummy element in the DOM to compute\n * its style, return the specified property, and clear the content of the\n * dummy element.\n *\n * @param {Array} scopes a list of classes reprensenting the scope\n * to build\n * @param {string} property the name of the style property to compute\n * @param {Node} targetNode\n * @param {boolean} [cache=true] whether to cache the computed value or not\n * @return {string} the computed property's value\n * used in CanvasDrawer\n */\n retrieveStyleFromDom (scopes, property, targetNode, cache = true) {\n const key = scopes.join(' ')\n let cachedData = this.domStylesCache.get(key)\n\n if (cache && cachedData !== undefined) {\n const value = cachedData[property]\n if (value != null) {\n return value\n }\n }\n\n this.ensureDummyNodeExistence(targetNode)\n\n if (cachedData === undefined) {\n cachedData = {}\n this.domStylesCache.set(key, cachedData)\n }\n\n let parent = this.dummyNode\n for (let i = 0, len = scopes.length; i < len; i++) {\n const scope = scopes[i]\n const node = document.createElement('span')\n node.className = scope.replace(/\\.+/g, ' ')\n\n if (parent != null) { parent.appendChild(node) }\n\n parent = node\n }\n\n const style = window.getComputedStyle(parent)\n const filter = style.getPropertyValue('-webkit-filter')\n let value = style.getPropertyValue(property)\n\n if (filter.indexOf('hue-rotate') > -1) {\n value = rotateHue(value, filter)\n }\n\n if (value !== '') {\n cachedData[property] = value\n this.domStylesCache.set(key, cachedData)\n }\n\n this.dummyNode.innerHTML = ''\n return value\n }\n\n /**\n * Creates a DOM node container for all the operations that need to read\n * styles properties from DOM.\n * @param {Node} targetNode\n *\n * @access private\n */\n ensureDummyNodeExistence (targetNode) {\n if (this.dummyNode == null) {\n /**\n * @access private\n */\n this.dummyNode = document.createElement('span')\n this.dummyNode.style.visibility = 'hidden'\n }\n\n targetNode.appendChild(this.dummyNode)\n }\n\n /**\n * Invalidates the cache by emptying the cache object.\n * used in MinimapElement\n */\n invalidateDOMStylesCache () {\n this.domStylesCache.clear()\n }\n\n /**\n * Invalidates the cache only for the first tokenization event.\n *\n * @access private\n * unused\n */\n /*\n invalidateIfFirstTokenization () {\n if (this.hasTokenizedOnce) { return }\n this.invalidateDOMStylesCache()\n this.hasTokenizedOnce = true\n }\n */\n}\n\n// ## ## ######## ## ######## ######## ######## ######\n// ## ## ## ## ## ## ## ## ## ## ##\n// ## ## ## ## ## ## ## ## ## ##\n// ######### ###### ## ######## ###### ######## ######\n// ## ## ## ## ## ## ## ## ##\n// ## ## ## ## ## ## ## ## ## ##\n// ## ## ######## ######## ## ######## ## ## ######\n\n/**\n * Computes the output color of `value` with a rotated hue defined\n * in `filter`.\n *\n * @param {string} value the CSS color to apply the rotation on\n * @param {string} filter the CSS hue rotate filter declaration\n * @return {string} the rotated CSS color\n * @access private\n */\nfunction rotateHue (value, filter) {\n const match = value.match(/rgb(a?)\\((\\d+), (\\d+), (\\d+)(, (\\d+(\\.\\d+)?))?\\)/)\n let [, , r, g, b, , a] = match\n\n let [, hue] = filter.match(/hue-rotate\\((\\d+)deg\\)/)\n\n ;[r, g, b, a, hue] = [r, g, b, a, hue].map(Number)\n ;[r, g, b] = rotate(r, g, b, hue)\n\n if (isNaN(a)) {\n return `rgb(${r}, ${g}, ${b})`\n } else {\n return `rgba(${r}, ${g}, ${b}, ${a})`\n }\n}\n\n/**\n * Computes the hue rotation on the provided `r`, `g` and `b` channels\n * by the amount of `angle`.\n *\n * @param {number} r the red channel of the color to rotate\n * @param {number} g the green channel of the color to rotate\n * @param {number} b the blue channel of the color to rotate\n * @param {number} angle the angle to rotate the hue with\n * @return {Array} the rotated color channels\n * @access private\n */\nfunction rotate (r, g, b, angle) {\n const matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]\n const lumR = 0.2126\n const lumG = 0.7152\n const lumB = 0.0722\n const hueRotateR = 0.143\n const hueRotateG = 0.140\n const hueRotateB = 0.283\n const cos = Math.cos(angle * Math.PI / 180)\n const sin = Math.sin(angle * Math.PI / 180)\n\n matrix[0] = lumR + (1 - lumR) * cos - (lumR * sin)\n matrix[1] = lumG - (lumG * cos) - (lumG * sin)\n matrix[2] = lumB - (lumB * cos) + (1 - lumB) * sin\n matrix[3] = lumR - (lumR * cos) + hueRotateR * sin\n matrix[4] = lumG + (1 - lumG) * cos + hueRotateG * sin\n matrix[5] = lumB - (lumB * cos) - (hueRotateB * sin)\n matrix[6] = lumR - (lumR * cos) - ((1 - lumR) * sin)\n matrix[7] = lumG - (lumG * cos) + lumG * sin\n matrix[8] = lumB + (1 - lumB) * cos + lumB * sin\n\n return [\n clamp(matrix[0] * r + matrix[1] * g + matrix[2] * b),\n clamp(matrix[3] * r + matrix[4] * g + matrix[5] * b),\n clamp(matrix[6] * r + matrix[7] * g + matrix[8] * b)\n ]\n\n function clamp (num) {\n return Math.ceil(Math.max(0, Math.min(255, num)))\n }\n}\n","'use strict'\n\nimport { CompositeDisposable, Emitter } from 'atom'\nimport { EventsDelegation, SpacePenDSL } from 'atom-utils-plus'\n\nimport * as Main from './main'\nimport element from './decorators/element'\nimport include from './decorators/include'\n\n/**\n * @access private\n */\nclass MinimapQuickSettingsElement {\n static initClass () {\n include(this, EventsDelegation, SpacePenDSL.Babel)\n return element(this, 'minimap-quick-settings')\n }\n\n static content () {\n this.div({ class: 'select-list popover-list minimap-quick-settings' }, () => {\n this.input({ type: 'text', class: 'hidden-input', outlet: 'hiddenInput' })\n this.ol({ class: 'list-group mark-active', outlet: 'list' }, () => {\n this.li({ class: 'separator', outlet: 'separator' })\n this.li({ class: 'code-highlights', outlet: 'codeHighlights' }, 'code-highlights')\n this.li({ class: 'absolute-mode', outlet: 'absoluteMode' }, 'absolute-mode')\n this.li({ class: 'adjust-absolute-mode-height', outlet: 'adjustAbsoluteModeHeight' }, 'adjust-absolute-mode-height')\n })\n this.div({ class: 'btn-group' }, () => {\n this.button({ class: 'btn btn-default', outlet: 'onLeftButton' }, 'On Left')\n this.button({ class: 'btn btn-default', outlet: 'onRightButton' }, 'On Right')\n })\n })\n }\n\n createdCallback () {\n this.buildContent()\n }\n\n setModel (minimap) {\n this.selectedItem = null\n this.minimap = minimap\n this.emitter = new Emitter()\n this.subscriptions = new CompositeDisposable()\n this.plugins = {}\n this.itemsActions = new WeakMap()\n\n const subs = this.subscriptions\n\n subs.add(Main.onDidAddPlugin(({ name, plugin }) => {\n return this.addItemFor(name, plugin)\n }))\n subs.add(Main.onDidRemovePlugin(({ name, plugin }) => {\n return this.removeItemFor(name, plugin)\n }))\n subs.add(Main.onDidActivatePlugin(({ name, plugin }) => {\n return this.activateItem(name, plugin)\n }))\n subs.add(Main.onDidDeactivatePlugin(({ name, plugin }) => {\n return this.deactivateItem(name, plugin)\n }))\n\n subs.add(atom.commands.add('minimap-quick-settings', {\n 'core:move-up': () => {\n this.selectPreviousItem()\n },\n 'core:move-down': () => {\n this.selectNextItem()\n },\n 'core:move-left': () => {\n atom.config.set('minimap.displayMinimapOnLeft', true)\n },\n 'core:move-right': () => {\n atom.config.set('minimap.displayMinimapOnLeft', false)\n },\n 'core:cancel': () => {\n this.destroy()\n },\n 'core:confirm': () => {\n this.toggleSelectedItem()\n }\n }))\n\n this.codeHighlights.classList.toggle('active', this.minimap.displayCodeHighlights)\n\n subs.add(this.subscribeTo(this.codeHighlights, {\n mousedown: (e) => {\n e.preventDefault()\n atom.config.set('minimap.displayCodeHighlights', !this.minimap.displayCodeHighlights)\n }\n }))\n\n this.itemsActions.set(this.codeHighlights, () => {\n atom.config.set('minimap.displayCodeHighlights', !this.minimap.displayCodeHighlights)\n })\n\n subs.add(this.subscribeTo(this.absoluteMode, {\n mousedown: (e) => {\n e.preventDefault()\n atom.config.set('minimap.absoluteMode', !atom.config.get('minimap.absoluteMode'))\n }\n }))\n\n this.itemsActions.set(this.absoluteMode, () => {\n atom.config.set('minimap.absoluteMode', !atom.config.get('minimap.absoluteMode'))\n })\n\n subs.add(this.subscribeTo(this.adjustAbsoluteModeHeight, {\n mousedown: (e) => {\n e.preventDefault()\n atom.config.set('minimap.adjustAbsoluteModeHeight', !atom.config.get('minimap.adjustAbsoluteModeHeight'))\n }\n }))\n\n this.itemsActions.set(this.adjustAbsoluteModeHeight, () => {\n atom.config.set('minimap.adjustAbsoluteModeHeight', !atom.config.get('minimap.adjustAbsoluteModeHeight'))\n })\n\n subs.add(this.subscribeTo(this.hiddenInput, {\n focusout: (e) => { this.destroy() }\n }, { passive: true }))\n\n subs.add(this.subscribeTo(this.onLeftButton, {\n mousedown: (e) => {\n e.preventDefault()\n atom.config.set('minimap.displayMinimapOnLeft', true)\n }\n }))\n\n subs.add(this.subscribeTo(this.onRightButton, {\n mousedown: (e) => {\n e.preventDefault()\n atom.config.set('minimap.displayMinimapOnLeft', false)\n }\n }))\n\n subs.add(atom.config.observe('minimap.displayCodeHighlights', (bool) => {\n this.codeHighlights.classList.toggle('active', bool)\n }))\n\n subs.add(atom.config.observe('minimap.absoluteMode', (bool) => {\n this.absoluteMode.classList.toggle('active', bool)\n }))\n\n subs.add(atom.config.observe('minimap.adjustAbsoluteModeHeight', (bool) => {\n this.adjustAbsoluteModeHeight.classList.toggle('active', bool)\n }))\n\n subs.add(atom.config.observe('minimap.displayMinimapOnLeft', (bool) => {\n this.onLeftButton.classList.toggle('selected', bool)\n this.onRightButton.classList.toggle('selected', !bool)\n }))\n\n this.initList()\n }\n\n onDidDestroy (callback) {\n return this.emitter.on('did-destroy', callback)\n }\n\n attach () {\n const workspaceElement = atom.views.getView(atom.workspace)\n workspaceElement.appendChild(this)\n this.hiddenInput.focus()\n }\n\n destroy () {\n this.emitter.emit('did-destroy')\n this.subscriptions.dispose()\n this.parentNode.removeChild(this)\n }\n\n initList () {\n this.itemsDisposables = new WeakMap()\n for (const name in Main.plugins) {\n this.addItemFor(name, Main.plugins[name])\n }\n }\n\n toggleSelectedItem () {\n const fn = this.itemsActions.get(this.selectedItem)\n if (typeof fn === 'function') { fn() }\n }\n\n selectNextItem () {\n this.selectedItem.classList.remove('selected')\n if ((this.selectedItem.nextSibling != null)) {\n this.selectedItem = this.selectedItem.nextSibling\n if (this.selectedItem.matches('.separator')) {\n this.selectedItem = this.selectedItem.nextSibling\n }\n } else {\n this.selectedItem = this.list.firstChild\n }\n this.selectedItem.classList.add('selected')\n }\n\n selectPreviousItem () {\n this.selectedItem.classList.remove('selected')\n if ((this.selectedItem.previousSibling != null)) {\n this.selectedItem = this.selectedItem.previousSibling\n if (this.selectedItem.matches('.separator')) {\n this.selectedItem = this.selectedItem.previousSibling\n }\n } else {\n this.selectedItem = this.list.lastChild\n }\n this.selectedItem.classList.add('selected')\n }\n\n addItemFor (name, plugin) {\n const item = document.createElement('li')\n const action = () => { Main.togglePluginActivation(name) }\n\n if (plugin.isActive()) { item.classList.add('active') }\n\n item.textContent = name\n\n this.itemsActions.set(item, action)\n this.itemsDisposables.set(item, this.addDisposableEventListener(item, 'mousedown', (e) => {\n e.preventDefault()\n action()\n }))\n\n this.plugins[name] = item\n this.list.insertBefore(item, this.separator)\n\n if (!(this.selectedItem != null)) {\n this.selectedItem = item\n this.selectedItem.classList.add('selected')\n }\n }\n\n removeItemFor (name, plugin) {\n try {\n this.list.removeChild(this.plugins[name])\n } catch (error) {}\n\n delete this.plugins[name]\n }\n\n activateItem (name, plugin) {\n this.plugins[name].classList.add('active')\n }\n\n deactivateItem (name, plugin) {\n this.plugins[name].classList.remove('active')\n }\n}\n\nconst minimapQuickSettingsElement = MinimapQuickSettingsElement.initClass()\nexport default minimapQuickSettingsElement\n","'use strict'\n\n/**\n * @access private\n */\nexport default class LegacyAdapter {\n constructor (textEditor) { this.textEditor = textEditor }\n\n enableCache () { this.useCache = true }\n\n clearCache () {\n this.useCache = false\n delete this.heightCache\n delete this.scrollTopCache\n delete this.scrollLeftCache\n delete this.maxScrollTopCache\n }\n\n onDidChangeScrollTop (callback) {\n return this.textEditor.onDidChangeScrollTop(callback)\n }\n\n onDidChangeScrollLeft (callback) {\n return this.textEditor.onDidChangeScrollLeft(callback)\n }\n\n getHeight () {\n if (this.useCache) {\n if (!this.heightCache) {\n this.heightCache = this.textEditor.getHeight()\n }\n return this.heightCache\n }\n return this.textEditor.getHeight()\n }\n\n getScrollTop () {\n if (this.useCache) {\n if (!this.scrollTopCache) {\n this.scrollTopCache = this.textEditor.getScrollTop()\n }\n return this.scrollTopCache\n }\n return this.textEditor.getScrollTop()\n }\n\n setScrollTop (scrollTop) {\n return this.textEditor.setScrollTop(scrollTop)\n }\n\n getScrollLeft () {\n if (this.useCache) {\n if (!this.scrollLeftCache) {\n this.scrollLeftCache = this.textEditor.getScrollLeft()\n }\n return this.scrollLeftCache\n }\n\n return this.textEditor.getScrollLeft()\n }\n\n getMaxScrollTop () {\n if (this.maxScrollTopCache != null && this.useCache) {\n return this.maxScrollTopCache\n }\n let maxScrollTop = this.textEditor.displayBuffer.getMaxScrollTop()\n const lineHeight = this.textEditor.getLineHeightInPixels()\n\n if (this.scrollPastEnd) {\n maxScrollTop -= this.getHeight() - 3 * lineHeight\n }\n if (this.useCache) { this.maxScrollTopCache = maxScrollTop }\n return maxScrollTop\n }\n\n editorDestroyed () {\n return !this.textEditor || this.textEditor.isDestroyed()\n }\n}\n","'use strict'\n\nimport { Emitter } from 'atom'\n\nlet idCounter = 0\nconst nextId = function () { return idCounter++ }\n\n/**\n * The `Decoration` class represents a decoration in the Minimap.\n *\n * It has the same API than the `Decoration` class of a text editor.\n */\nexport default class Decoration {\n /**\n * Returns `true` if the passed-in decoration properties matches the\n * specified type.\n *\n * @param {Object} decorationProperties the decoration properties to match\n * @param {string} type the decoration type to match\n * @return {boolean} whether the decoration properties match the type\n */\n static isType (decorationProperties, type) {\n if (Array.isArray(decorationProperties.type)) {\n if (decorationProperties.type.indexOf(type) >= 0) { return true }\n return false\n } else {\n return type === decorationProperties.type\n }\n }\n\n /**\n * Creates a new decoration.\n *\n * @param {Marker} marker the target marker for the decoration\n * @param {Minimap} minimap the Minimap where the decoration will\n * be displayed\n * @param {Object} properties the decoration's properties\n */\n constructor (marker, minimap, properties) {\n /**\n * @access private\n */\n this.marker = marker\n /**\n * @access private\n */\n this.minimap = minimap\n /**\n * @access private\n */\n this.emitter = new Emitter()\n /**\n * @access private\n */\n this.id = nextId()\n /**\n * @access private\n */\n this.properties = null\n this.setProperties(properties)\n this.properties.id = this.id\n /**\n * @access private\n */\n this.destroyed = false\n /**\n * @access private\n */\n this.markerDestroyDisposable = this.marker.onDidDestroy(() => {\n this.destroy()\n })\n\n this.screenRange = marker.getScreenRange()\n }\n\n /**\n * Destroy this marker.\n *\n * If you own the marker, you should use `Marker#destroy` which will destroy\n * this decoration.\n */\n destroy () {\n if (this.destroyed) { return }\n\n this.markerDestroyDisposable.dispose()\n this.markerDestroyDisposable = null\n this.destroyed = true\n this.emitter.emit('did-destroy')\n this.emitter.dispose()\n }\n\n /**\n * Returns whether this decoration is destroyed or not.\n *\n * @return {boolean} whether this decoration is destroyed or not\n */\n isDestroyed () { return this.destroyed }\n\n /**\n * Registers an event listener to the `did-change-properties` event.\n *\n * This event is triggered when the decoration update method is called.\n *\n * @param {function(change:Object):void} callback a function to call\n * when the event is triggered\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeProperties (callback) {\n return this.emitter.on('did-change-properties', callback)\n }\n\n /**\n * Registers an event listener to the `did-destroy` event.\n *\n * @param {function():void} callback a function to call when the event\n * is triggered\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidDestroy (callback) {\n return this.emitter.on('did-destroy', callback)\n }\n\n /**\n * An id unique across all Decoration objects.\n *\n * @return {number} the decoration id\n */\n getId () { return this.id }\n\n /**\n * Returns the marker associated with this Decoration.\n *\n * @return {Marker} the decoration's marker\n */\n getMarker () { return this.marker }\n\n /**\n * Check if this decoration is of type `type`.\n *\n * @param {string|Array} type a type like `'line-number'`, `'line'`, etc.\n * `type` can also be an Array of Strings, where\n * it will return true if the decoration's type\n * matches any in the array.\n * @return {boolean} whether this decoration match the passed-in type\n */\n isType (type) {\n return Decoration.isType(this.properties, type)\n }\n\n /**\n * Returns the Decoration's properties.\n *\n * @return {Object} the decoration's properties\n */\n getProperties () {\n return this.properties\n }\n\n /**\n * Update the marker with new properties. Allows you to change the\n * decoration's class.\n *\n * @param {Object} newProperties the new properties for the decoration\n */\n setProperties (newProperties) {\n if (this.destroyed) { return }\n\n const oldProperties = this.properties\n this.properties = newProperties\n this.properties.id = this.id\n\n this.emitter.emit('did-change-properties', { oldProperties, newProperties })\n }\n}\n","'use strict'\n\nimport { Emitter } from 'atom'\nimport { escapeRegExp } from 'underscore-plus'\nimport path from 'path'\nimport Decoration from './decoration'\n\n/**\n * The mixin that provides the decorations API to the minimap editor\n * view.\n *\n * This mixin is injected into the `Minimap` prototype, so every methods defined\n * in this file will be available on any `Minimap` instance.\n */\nexport default class DecorationManagement {\n /**\n * Initializes the decorations related properties.\n */\n initializeDecorations () {\n if (this.emitter == null) {\n /**\n * The minimap emitter, lazily created if not created yet.\n * @type {Emitter}\n * @access private\n */\n this.emitter = new Emitter()\n }\n\n /**\n * A map with the decoration id as key and the decoration as value.\n * @type {Object}\n * @access private\n */\n this.decorationsById = new Map()\n /**\n * The decorations stored in an array indexed with their marker id.\n * @type {Object}\n * @access private\n */\n this.decorationsByMarkerId = new Map()\n /**\n * The subscriptions to the markers `did-change` event indexed using the\n * marker id.\n * @type {Object}\n * @access private\n */\n this.decorationMarkerChangedSubscriptions = new Map()\n /**\n * The subscriptions to the markers `did-destroy` event indexed using the\n * marker id.\n * @type {Object}\n * @access private\n */\n this.decorationMarkerDestroyedSubscriptions = new Map()\n /**\n * The subscriptions to the decorations `did-change-properties` event\n * indexed using the decoration id.\n * @type {Object}\n * @access private\n */\n this.decorationUpdatedSubscriptions = new Map()\n /**\n * The subscriptions to the decorations `did-destroy` event indexed using\n * the decoration id.\n * @type {Object}\n * @access private\n */\n this.decorationDestroyedSubscriptions = new Map()\n }\n\n /**\n * Returns all the decorations registered in the current `Minimap`.\n *\n * @return {Array} all the decorations in this `Minimap`\n */\n getDecorations () {\n return this.decorationsById.values()\n }\n\n /**\n * Registers an event listener to the `did-add-decoration` event.\n *\n * @param {function(event:Object):void} callback a function to call when the\n * event is triggered.\n * the callback will be called\n * with an event object with\n * the following properties:\n * - marker: the marker object that was decorated\n * - decoration: the decoration object that was created\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidAddDecoration (callback) {\n return this.emitter.on('did-add-decoration', callback)\n }\n\n /**\n * Registers an event listener to the `did-remove-decoration` event.\n *\n * @param {function(event:Object):void} callback a function to call when the\n * event is triggered.\n * the callback will be called\n * with an event object with\n * the following properties:\n * - marker: the marker object that was decorated\n * - decoration: the decoration object that was created\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidRemoveDecoration (callback) {\n return this.emitter.on('did-remove-decoration', callback)\n }\n\n /**\n * Registers an event listener to the `did-change-decoration` event.\n *\n * This event is triggered when the marker targeted by the decoration\n * was changed.\n *\n * @param {function(event:Object):void} callback a function to call when the\n * event is triggered.\n * the callback will be called\n * with an event object with\n * the following properties:\n * - marker: the marker object that was decorated\n * - decoration: the decoration object that was created\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeDecoration (callback) {\n return this.emitter.on('did-change-decoration', callback)\n }\n\n /**\n * Registers an event listener to the `did-change-decoration-range` event.\n *\n * This event is triggered when the marker range targeted by the decoration\n * was changed.\n *\n * @param {function(event:Object):void} callback a function to call when the\n * event is triggered.\n * the callback will be called\n * with an event object with\n * the following properties:\n * - marker: the marker object that was decorated\n * - decoration: the decoration object that was created\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeDecorationRange (callback) {\n return this.emitter.on('did-change-decoration-range', callback)\n }\n\n /**\n * Registers an event listener to the `did-update-decoration` event.\n *\n * This event is triggered when the decoration itself is modified.\n *\n * @param {function(decoration:Decoration):void} callback a function to call\n * when the event is\n * triggered\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidUpdateDecoration (callback) {\n return this.emitter.on('did-update-decoration', callback)\n }\n\n /**\n * Returns the decoration with the passed-in id.\n *\n * @param {number} id the decoration id\n * @return {Decoration} the decoration with the given id\n */\n decorationForId (id) {\n return this.decorationsById.get(id)\n }\n\n /**\n * Returns all the decorations that intersect the passed-in row range.\n *\n * @param {number} startScreenRow the first row of the range\n * @param {number} endScreenRow the last row of the range\n * @return {Array} the decorations that intersect the passed-in\n * range\n */\n decorationsForScreenRowRange (startScreenRow, endScreenRow) {\n const decorationsByMarkerId = {}\n const markers = this.findMarkers({\n intersectsScreenRowRange: [startScreenRow, endScreenRow]\n })\n\n for (let i = 0, len = markers.length; i < len; i++) {\n const marker = markers[i]\n const decorations = this.decorationsByMarkerId.get(marker.id)\n\n if (decorations !== undefined) {\n decorationsByMarkerId[marker.id] = decorations\n }\n }\n\n return decorationsByMarkerId\n }\n\n /**\n * Returns the decorations that intersects the passed-in row range\n * in a structured way.\n *\n * At the first level, the keys are the available decoration types.\n * At the second level, the keys are the row index for which there\n * are decorations available. The value is an array containing the\n * decorations that intersects with the corresponding row.\n *\n * @return {Object} the decorations grouped by type and then rows\n * @property {Object} line all the line decorations by row\n * @property {Array} line[row] all the line decorations\n * at a given row\n * @property {Object} highlight-under all the highlight-under decorations\n * by row\n * @property {Array} highlight-under[row] all the highlight-under\n * decorations at a given row\n * @property {Object} highlight-over all the highlight-over decorations\n * by row\n * @property {Array} highlight-over[row] all the highlight-over\n * decorations at a given row\n * @property {Object} highlight-outine all the highlight-outine decorations\n * by row\n * @property {Array} highlight-outine[row] all the\n * highlight-outine decorations at a given\n * row\n */\n decorationsByTypeThenRows () {\n if (this.decorationsByTypeThenRowsCache != null) {\n return this.decorationsByTypeThenRowsCache\n }\n\n const cache = {}\n\n const decorations = this.decorationsById.values()\n for (const decoration of decorations) {\n const range = decoration.marker.getScreenRange()\n const type = decoration.getProperties().type\n\n if (cache[type] == null) { cache[type] = {} }\n\n for (let row = range.start.row, len = range.end.row; row <= len; row++) {\n if (cache[type][row] == null) { cache[type][row] = [] }\n\n cache[type][row].push(decoration)\n }\n }\n\n /**\n * The grouped decorations cache.\n * @type {Object}\n * @access private\n */\n this.decorationsByTypeThenRowsCache = cache\n return cache\n }\n\n /**\n * Invalidates the decoration by screen rows cache.\n */\n invalidateDecorationForScreenRowsCache () {\n this.decorationsByTypeThenRowsCache = null\n }\n\n /**\n * Adds a decoration that tracks a `Marker`. When the marker moves,\n * is invalidated, or is destroyed, the decoration will be updated to reflect\n * the marker's state.\n *\n * @param {Marker} marker the marker you want this decoration to follow\n * @param {Object} decorationParams the decoration properties\n * @param {string} decorationParams.type the decoration type in the following\n * list:\n * - __line__: Fills the line background with the decoration color.\n * - __highlight__: Renders a colored rectangle on the minimap. The highlight\n * is rendered above the line's text.\n * - __highlight-over__: Same as __highlight__.\n * - __highlight-under__: Renders a colored rectangle on the minimap. The\n * highlight is rendered below the line's text.\n * - __highlight-outline__: Renders a colored outline on the minimap. The\n * highlight box is rendered above the line's text.\n * - __foreground-custom__: A decoration type for which you have the control\n * over the render routine. Note that your routine should implement a render\n * on a per-line basis to avoid any side-effect with the offset bitmap cache\n * mechanism. These decorations are rendred on the foreground decorations\n * layer.\n * - __background-custom__: A decoration type for which you have the control\n * over the render routine. Note that your routine should implement a render\n * on a per-line basis to avoid any side-effect with the offset bitmap cache\n * mechanism. These decorations are rendred on the background decorations\n * layer.\n * @param {string} [decorationParams.class] the CSS class to use to retrieve\n * the background color of the\n * decoration by building a scop\n * corresponding to\n * `.minimap .editor `\n * @param {string} [decorationParams.scope] the scope to use to retrieve the\n * decoration background. Note that if\n * the `scope` property is set, the\n * `class` won't be used.\n * @param {string} [decorationParams.color] the CSS color to use to render\n * the decoration. When set, neither\n * `scope` nor `class` are used.\n * @param {string} [decorationParams.plugin] the name of the plugin that\n * created this decoration. It'll\n * be used to order the decorations\n * on the same layer and that are\n * overlapping. If the parameter is\n * omitted the Minimap will attempt\n * to infer the plugin origin from\n * the path of the caller function.\n * @param {function} [decorationParams.render] the render routine for custom\n * decorations. The function\n * receives the decoration and\n * the render data for the\n * current render pass.\n * @return {Decoration} the created decoration\n * @emits {did-add-decoration} when the decoration is created successfully\n * @emits {did-change} when the decoration is created successfully\n */\n decorateMarker (marker, decorationParams) {\n if (this.destroyed || marker == null) { return }\n\n const { id } = marker\n\n if (decorationParams.type === 'highlight') {\n decorationParams.type = 'highlight-over'\n }\n\n const { type, plugin } = decorationParams\n\n if (plugin == null) {\n decorationParams.plugin = getOriginatorPackageName()\n }\n\n if (decorationParams.scope == null && decorationParams.class != null) {\n const cls = decorationParams.class.split(' ').join('.')\n decorationParams.scope = `.minimap .${cls}`\n }\n\n if (!this.decorationMarkerDestroyedSubscriptions.has(id)) {\n this.decorationMarkerDestroyedSubscriptions.set(id,\n marker.onDidDestroy(() => {\n this.removeAllDecorationsForMarker(marker)\n }))\n }\n\n if (!this.decorationMarkerChangedSubscriptions.has(id)) {\n this.decorationMarkerChangedSubscriptions.set(id,\n marker.onDidChange((event) => {\n const decorations = this.decorationsByMarkerId.get(id)\n const screenRange = marker.getScreenRange()\n\n this.invalidateDecorationForScreenRowsCache()\n\n if (decorations !== undefined) {\n for (let i = 0, len = decorations.length; i < len; i++) {\n const decoration = decorations[i]\n this.emitter.emit('did-change-decoration', {\n marker,\n decoration,\n event\n })\n this.emitDecorationChanges(decoration.type, decoration)\n\n decoration.screenRange = screenRange\n }\n }\n let oldStart = event.oldTailScreenPosition\n let oldEnd = event.oldHeadScreenPosition\n let newStart = event.newTailScreenPosition\n let newEnd = event.newHeadScreenPosition\n\n if (oldStart.row > oldEnd.row) {\n [oldStart, oldEnd] = [oldEnd, oldStart]\n }\n if (newStart.row > newEnd.row) {\n [newStart, newEnd] = [newEnd, newStart]\n }\n\n const rangesDiffs = computeRangesDiffs(\n oldStart, oldEnd,\n newStart, newEnd\n )\n\n for (let i = 0, len = rangesDiffs.length; i < len; i++) {\n const [start, end] = rangesDiffs[i]\n this.emitRangeChanges(type, {\n start,\n end\n }, 0)\n }\n }))\n }\n\n const decoration = new Decoration(marker, this, decorationParams)\n\n if (!this.decorationsByMarkerId.has(id)) {\n this.decorationsByMarkerId.set(id, [])\n }\n\n this.decorationsByMarkerId.get(id).push(decoration)\n this.decorationsById.set(decoration.id, decoration)\n\n if (!this.decorationUpdatedSubscriptions.has(decoration.id)) {\n this.decorationUpdatedSubscriptions.set(decoration.id,\n decoration.onDidChangeProperties((event) => {\n this.emitDecorationChanges(type, decoration)\n }))\n }\n\n this.decorationDestroyedSubscriptions.set(decoration.id,\n decoration.onDidDestroy(() => {\n this.removeDecoration(decoration)\n }))\n\n this.emitDecorationChanges(type, decoration)\n this.emitter.emit('did-add-decoration', {\n marker,\n decoration\n })\n\n return decoration\n }\n\n /**\n * Emits a change in the `Minimap` corresponding to the\n * passed-in decoration.\n *\n * @param {string} type the type of decoration that changed\n * @param {Decoration} decoration the decoration for which emitting an event\n * @access private\n */\n emitDecorationChanges (type, decoration) {\n if (this.editorDestroyed()) { return }\n\n this.invalidateDecorationForScreenRowsCache()\n\n const range = decoration.screenRange\n if (!range.start || !range.end) { return }\n\n this.emitRangeChanges(type, range, 0)\n }\n\n /**\n * Emits a change for the specified range.\n *\n * @param {string} type the type of decoration that changed\n * @param {Object} range the range where changes occured\n * @param {number} [screenDelta] an optional screen delta for the\n * change object\n * @access private\n */\n emitRangeChanges (type, range, screenDelta) {\n const startScreenRow = range.start.row\n const endScreenRow = range.end.row\n const lastRenderedScreenRow = this.getLastVisibleScreenRow()\n const firstRenderedScreenRow = this.getFirstVisibleScreenRow()\n\n if (screenDelta == null) {\n screenDelta = (lastRenderedScreenRow - firstRenderedScreenRow) -\n (endScreenRow - startScreenRow)\n }\n\n const changeEvent = {\n start: startScreenRow,\n end: endScreenRow,\n screenDelta,\n type\n }\n\n this.emitter.emit('did-change-decoration-range', changeEvent)\n }\n\n /**\n * Removes a `Decoration` from this minimap.\n *\n * @param {Decoration} decoration the decoration to remove\n * @emits {did-change} when the decoration is removed\n * @emits {did-remove-decoration} when the decoration is removed\n */\n removeDecoration (decoration) {\n if (decoration == null) { return }\n\n const marker = decoration.marker\n let subscription\n\n this.decorationsById.delete(decoration.id)\n\n subscription = this.decorationUpdatedSubscriptions.get(decoration.id)\n if (subscription !== undefined) { subscription.dispose() }\n\n subscription = this.decorationDestroyedSubscriptions.get(decoration.id)\n if (subscription !== undefined) { subscription.dispose() }\n\n this.decorationUpdatedSubscriptions.delete(decoration.id)\n this.decorationDestroyedSubscriptions.delete(decoration.id)\n\n const decorations = this.decorationsByMarkerId.get(marker.id)\n if (decorations === undefined) { return }\n\n this.emitDecorationChanges(decoration.getProperties().type, decoration)\n\n const index = decorations.indexOf(decoration)\n if (index > -1) {\n decorations.splice(index, 1)\n\n this.emitter.emit('did-remove-decoration', {\n marker,\n decoration\n })\n\n if (decorations.length === 0) {\n this.removedAllMarkerDecorations(marker)\n }\n }\n }\n\n /**\n * Removes all the decorations registered for the passed-in marker.\n *\n * @param {Marker} marker the marker for which removing its decorations\n * @emits {did-change} when a decoration have been removed\n * @emits {did-remove-decoration} when a decoration have been removed\n */\n removeAllDecorationsForMarker (marker) {\n if (marker == null) { return }\n\n const decorations = this.decorationsByMarkerId.get(marker.id)\n if (decorations === undefined) { return }\n\n for (let i = 0, len = decorations.length; i < len; i++) {\n const decoration = decorations[i]\n\n if (!this.adapter.editorDestroyed()) {\n this.emitDecorationChanges(decoration.getProperties().type, decoration)\n }\n this.emitter.emit('did-remove-decoration', {\n marker,\n decoration\n })\n }\n\n this.removedAllMarkerDecorations(marker)\n }\n\n /**\n * Performs the removal of a decoration for a given marker.\n *\n * @param {Marker} marker the marker for which removing decorations\n * @access private\n */\n removedAllMarkerDecorations (marker) {\n if (marker == null) { return }\n\n this.decorationMarkerChangedSubscriptions.get(marker.id).dispose()\n this.decorationMarkerDestroyedSubscriptions.get(marker.id).dispose()\n\n this.decorationsByMarkerId.delete(marker.id)\n this.decorationMarkerChangedSubscriptions.delete(marker.id)\n this.decorationMarkerDestroyedSubscriptions.delete(marker.id)\n }\n\n /**\n * Removes all the decorations that was created in the current `Minimap`.\n */\n removeAllDecorations () {\n const decorationMarkerChangedSubscriptionsValues = this.decorationMarkerChangedSubscriptions.values()\n for (const decoration of decorationMarkerChangedSubscriptionsValues) {\n decoration.dispose()\n }\n\n const decorationMarkerDestroyedSubscriptionsValues = this.decorationMarkerDestroyedSubscriptions.values()\n for (const decoration of decorationMarkerDestroyedSubscriptionsValues) {\n decoration.dispose()\n }\n\n const decorationUpdatedSubscriptionsValues = this.decorationUpdatedSubscriptions.values()\n for (const decoration of decorationUpdatedSubscriptionsValues) {\n decoration.dispose()\n }\n\n const decorationDestroyedSubscriptionsValues = this.decorationDestroyedSubscriptions.values()\n for (const decoration of decorationDestroyedSubscriptionsValues) {\n decoration.dispose()\n }\n\n const decorationsByIdValues = this.decorationsById.values()\n for (const decoration of decorationsByIdValues) {\n decoration.destroy()\n }\n\n this.decorationsById.clear()\n this.decorationsByMarkerId.clear()\n this.decorationMarkerChangedSubscriptions.clear()\n this.decorationMarkerDestroyedSubscriptions.clear()\n this.decorationUpdatedSubscriptions.clear()\n this.decorationDestroyedSubscriptions.clear()\n }\n}\n\nfunction getOriginatorPackageName () {\n const line = new Error().stack.split('\\n')[3]\n const filePath = line.split('(')[1].replace(')', '')\n const re = new RegExp(\n atom.packages.getPackageDirPaths().join('|') + escapeRegExp(path.sep)\n )\n const plugin = filePath.replace(re, '').split(path.sep)[0].replace(/minimap-|-minimap/, '')\n return plugin.indexOf(path.sep) < 0 ? plugin : undefined\n}\n\n/**\n * Given two ranges, it returns an array of ranges representing the\n * differences between them.\n *\n * @param {number} oldStart the row index of the first range start\n * @param {number} oldEnd the row index of the first range end\n * @param {number} newStart the row index of the second range start\n * @param {number} newEnd the row index of the second range end\n * @return {Array} the array of diff ranges\n * @access private\n */\nfunction computeRangesDiffs (oldStart, oldEnd, newStart, newEnd) {\n const diffs = []\n\n if (oldStart.isLessThan(newStart)) {\n diffs.push([oldStart, newStart])\n } else if (newStart.isLessThan(oldStart)) {\n diffs.push([newStart, oldStart])\n }\n\n if (oldEnd.isLessThan(newEnd)) {\n diffs.push([oldEnd, newEnd])\n } else if (newEnd.isLessThan(oldEnd)) {\n diffs.push([newEnd, oldEnd])\n }\n\n return diffs\n}\n","'use strict'\n\n/**\n * @access private\n */\nexport default class StableAdapter {\n constructor (textEditor) {\n this.textEditor = textEditor\n this.textEditorElement = atom.views.getView(this.textEditor)\n }\n\n enableCache () { this.useCache = true }\n\n clearCache () {\n this.useCache = false\n delete this.heightCache\n delete this.scrollTopCache\n delete this.scrollLeftCache\n delete this.maxScrollTopCache\n }\n\n onDidChangeScrollTop (callback) {\n return this.textEditorElement.onDidChangeScrollTop(callback)\n }\n\n onDidChangeScrollLeft (callback) {\n return this.textEditorElement.onDidChangeScrollLeft(callback)\n }\n\n getHeight () {\n if (this.editorDestroyed()) { return 0 }\n\n if (this.useCache) {\n if (!this.heightCache) {\n this.heightCache = this.textEditorElement.getHeight()\n }\n return this.heightCache\n }\n return this.textEditorElement.getHeight()\n }\n\n getScrollTop () {\n if (this.editorDestroyed()) { return 0 }\n\n if (this.useCache) {\n if (!this.scrollTopCache) {\n this.scrollTopCache = this.computeScrollTop()\n }\n return this.scrollTopCache\n }\n return this.computeScrollTop()\n }\n\n computeScrollTop () {\n if (this.editorDestroyed()) { return 0 }\n\n const scrollTop = this.textEditorElement.getScrollTop()\n const lineHeight = this.textEditor.getLineHeightInPixels()\n let firstRow = this.textEditorElement.getFirstVisibleScreenRow()\n\n if (Number.isNaN(firstRow)) {\n // Guard against their being no visible screen row\n return 0\n }\n\n let lineTop = this.textEditorElement.pixelPositionForScreenPosition([firstRow, 0]).top\n\n if (lineTop > scrollTop) {\n firstRow -= 1\n lineTop = this.textEditorElement.pixelPositionForScreenPosition([firstRow, 0]).top\n }\n\n const lineY = firstRow * lineHeight\n const offset = Math.min(scrollTop - lineTop, lineHeight)\n return lineY + offset\n }\n\n setScrollTop (scrollTop) {\n if (this.editorDestroyed()) { return }\n\n this.textEditorElement.setScrollTop(scrollTop)\n }\n\n getScrollLeft () {\n if (this.editorDestroyed()) { return 0 }\n\n if (this.useCache) {\n if (!this.scrollLeftCache) {\n this.scrollLeftCache = this.textEditorElement.getScrollLeft()\n }\n return this.scrollLeftCache\n }\n return this.textEditorElement.getScrollLeft()\n }\n\n getMaxScrollTop () {\n if (this.editorDestroyed()) { return 0 }\n\n if (this.maxScrollTopCache != null && this.useCache) {\n return this.maxScrollTopCache\n }\n\n let maxScrollTop\n if (this.textEditorElement.getMaxScrollTop) {\n maxScrollTop = this.textEditorElement.getMaxScrollTop()\n\n if (parseFloat(atom.getVersion()) >= 1.13) {\n if (this.scrollPastEnd) {\n const lineHeight = this.textEditor.getLineHeightInPixels()\n maxScrollTop -= this.getHeight() - 3 * lineHeight\n }\n }\n } else {\n maxScrollTop = this.textEditorElement.getScrollHeight() - this.getHeight()\n\n if (this.scrollPastEnd) {\n const lineHeight = this.textEditor.getLineHeightInPixels()\n maxScrollTop -= this.getHeight() - 3 * lineHeight\n }\n }\n\n if (this.useCache) {\n this.maxScrollTopCache = maxScrollTop\n }\n\n return maxScrollTop\n }\n\n editorDestroyed () {\n return !this.textEditor ||\n this.textEditor.isDestroyed() ||\n !this.textEditorElement.component ||\n !this.textEditorElement.getModel() ||\n !this.textEditorElement.parentNode\n }\n}\n","'use strict'\n\nimport include from './decorators/include'\nimport DecorationManagement from './decoration-management'\n\nimport { Emitter, CompositeDisposable } from 'atom'\nimport StableAdapter from './adapters/stable-adapter'\n\nlet nextModelId = 1\n\n/**\n * The Minimap class is the underlying model of a .\n * Most manipulations of the minimap is done through the model.\n *\n * Any Minimap instance is tied to a `TextEditor`.\n * Their lifecycle follow the one of their target `TextEditor`, so they are\n * destroyed whenever their `TextEditor` is destroyed.\n */\nexport default class Minimap {\n static initClass () {\n include(this, DecorationManagement)\n return this\n }\n\n /**\n * Creates a new Minimap instance for the given `TextEditor`.\n *\n * @param {Object} options an object with the new Minimap properties\n * @param {TextEditor} options.textEditor the target text editor for\n * the minimap\n * @param {boolean} [options.standAlone] whether this minimap is in\n * stand-alone mode or not\n * @param {number} [options.width] the minimap width in pixels\n * @param {number} [options.height] the minimap height in pixels\n * @throws {Error} Cannot create a minimap without an editor\n */\n constructor (options = {}) {\n if (!options.textEditor) {\n throw new Error('Cannot create a minimap without an editor')\n }\n\n /**\n * The Minimap's text editor.\n *\n * @type {TextEditor}\n * @access private\n */\n this.textEditor = options.textEditor\n\n /**\n * The Minimap's text editor element.\n * @access private\n */\n this.editorElement = undefined\n\n /**\n * The stand-alone state of the current Minimap.\n *\n * @type {boolean}\n * @access private\n */\n this.standAlone = options.standAlone\n /**\n * The width of the current Minimap.\n *\n * @type {number}\n * @access private\n */\n this.width = options.width\n /**\n * The height of the current Minimap.\n *\n * @type {number}\n * @access private\n */\n this.height = options.height\n /**\n * The id of the current Minimap.\n *\n * @type {Number}\n * @access private\n */\n this.id = nextModelId++\n /**\n * The events emitter of the current Minimap.\n *\n * @type {Emitter}\n * @access private\n */\n this.emitter = new Emitter()\n /**\n * The Minimap's subscriptions.\n *\n * @type {CompositeDisposable}\n * @access private\n */\n this.subscriptions = new CompositeDisposable()\n /**\n * The adapter object leverage the access to several properties from\n * the `TextEditor`/`TextEditorElement` to support the different APIs\n * between different version of Atom.\n *\n * @type {Object}\n * @access private\n */\n this.adapter = null\n /**\n * The char height of the current Minimap, will be `undefined` unless\n * `setCharWidth` is called.\n *\n * @type {number}\n * @access private\n */\n this.charHeight = null\n /**\n * The char height from the package's configuration. Will be overriden\n * by the instance value.\n *\n * @type {number}\n * @access private\n */\n this.configCharHeight = null\n /**\n * The char width of the current Minimap, will be `undefined` unless\n * `setCharWidth` is called.\n *\n * @type {number}\n * @access private\n */\n this.charWidth = null\n /**\n * The char width from the package's configuration. Will be overriden\n * by the instance value.\n *\n * @type {number}\n * @access private\n */\n this.configCharWidth = null\n /**\n * The interline of the current Minimap, will be `undefined` unless\n * `setCharWidth` is called.\n *\n * @type {number}\n * @access private\n */\n this.interline = null\n /**\n * The interline from the package's configuration. Will be overriden\n * by the instance value.\n *\n * @type {number}\n * @access private\n */\n this.configInterline = null\n /**\n * The devicePixelRatioRounding of the current Minimap, will be\n * `undefined` unless `setDevicePixelRatioRounding` is called.\n *\n * @type {boolean}\n * @access private\n */\n this.devicePixelRatioRounding = null\n /**\n * The devicePixelRatioRounding from the package's configuration.\n * Will be overriden by the instance value.\n *\n * @type {boolean}\n * @access private\n */\n this.configDevicePixelRatioRounding = null\n /**\n * A number of milliseconds which determines how often the minimap should redraw itself after\n * detecting changes in the text editor. A value of 0 will cause the minimap to redraw\n * immediately.\n *\n * @type {number}\n * @access private\n */\n this.redrawDelay = 0\n /**\n * A boolean value to store whether this Minimap have been destroyed or not.\n *\n * @type {boolean}\n * @access private\n */\n this.destroyed = false\n /**\n * A boolean value to store whether the `scrollPastEnd` setting is enabled\n * or not.\n *\n * @type {boolean}\n * @access private\n */\n this.scrollPastEnd = false\n\n /**\n * An array of changes registered with textEditor.onDidChange() which have not yet been handled\n *\n * @type {Array}\n * @access private\n */\n this.pendingChangeEvents = []\n\n /**\n * Timer reference which, once fired, will flush all the pending changes stored in\n * this.pendingChangeEvents array.\n *\n * @type {Timer?}\n * @access private\n */\n this.flushChangesTimer = null\n\n this.initializeDecorations()\n\n if (atom.views.getView(this.textEditor).getScrollTop != null) {\n this.adapter = new StableAdapter(this.textEditor)\n } else {\n // TODO remove LegacyAdapter in the next major version\n atom.notifications.addWarning('LegacyAdapter of Minimap is deprecated and will be removed in the next major version. Please upgrade Atom to the latest version.')\n const LegacyAdapter = require('./adapters/legacy-adapter')\n this.adapter = new LegacyAdapter(this.textEditor)\n }\n\n /**\n * When in stand-alone or independent scrolling mode, this value can be used\n * instead of the computed scroll.\n *\n * @type {number}\n * @access private\n */\n this.scrollTop = 0\n\n const subs = this.subscriptions\n let configSubscription = this.subscribeToConfig()\n\n subs.add(configSubscription)\n\n subs.add(this.textEditor.onDidChangeGrammar(() => {\n subs.remove(configSubscription)\n configSubscription.dispose()\n\n configSubscription = this.subscribeToConfig()\n subs.add(configSubscription)\n }))\n\n subs.add(this.adapter.onDidChangeScrollTop(() => {\n if (!this.standAlone && !this.ignoreTextEditorScroll && !this.inChangeScrollTop) {\n this.inChangeScrollTop = true\n this.updateScrollTop()\n this.emitter.emit('did-change-scroll-top', this)\n this.inChangeScrollTop = false\n }\n\n if (this.ignoreTextEditorScroll) {\n this.ignoreTextEditorScroll = false\n }\n }))\n subs.add(this.adapter.onDidChangeScrollLeft(() => {\n if (!this.standAlone) {\n this.emitter.emit('did-change-scroll-left', this)\n }\n }))\n\n subs.add(this.textEditor.onDidChange((changes) => {\n this.scheduleChanges(changes)\n }))\n subs.add(this.textEditor.onDidDestroy(() => { this.destroy() }))\n\n /*\n FIXME Some changes occuring during the tokenization produces\n ranges that deceive the canvas rendering by making some\n lines at the end of the buffer intact while they are in fact not,\n resulting in extra lines appearing at the end of the minimap.\n Forcing a whole repaint to fix that bug is suboptimal but works.\n */\n subs.add(this.textEditor.onDidTokenize(() => {\n this.emitter.emit('did-change-config')\n }))\n }\n\n /**\n * Destroys the model.\n */\n destroy () {\n if (this.destroyed) { return }\n\n clearTimeout(this.flushChangesTimer)\n this.flushChangesTimer = null\n this.pendingChangeEvents = []\n this.removeAllDecorations()\n this.subscriptions.dispose()\n this.subscriptions = null\n this.textEditor = null\n this.emitter.emit('did-destroy')\n this.emitter.dispose()\n this.destroyed = true\n }\n\n /**\n * Returns `true` when this `Minimap` has benn destroyed.\n *\n * @return {boolean} whether this Minimap has been destroyed or not\n */\n isDestroyed () { return this.destroyed }\n\n /**\n * Schedule changes from textEditor.onDidChange() to be handled at a later time\n *\n * @param {Array} changes The changes to be scheduled\n * @return void\n * @access private\n */\n scheduleChanges (changes) {\n this.pendingChangeEvents = this.pendingChangeEvents.concat(changes)\n\n // Optimisation: If the redraw delay is set to 0, do not even schedule a timer\n if (!this.redrawDelay) {\n this.requestFlushChanges()\n }\n\n if (!this.flushChangesTimer) {\n // If any changes happened within the timeout's delay, a timeout will already have been\n // scheduled -> no need to schedule again\n this.flushChangesTimer = setTimeout(() => { this.requestFlushChanges() }, this.redrawDelay)\n }\n }\n\n /**\n * Flush all changes which have been scheduled for later processing by this.scheduleChanges()\n *\n * @return void\n * @access private\n */\n flushChanges () {\n clearTimeout(this.flushChangesTimer)\n this.flushChangesTimer = null\n this.emitChanges(this.pendingChangeEvents)\n this.pendingChangeEvents = []\n }\n\n /**\n * Requests flush changes if not already requested\n *\n * @return void\n * @access private\n */\n requestFlushChanges () {\n if (!this.requestedFlushChanges) {\n this.requestedFlushChanges = requestAnimationFrame(() => {\n this.flushChanges()\n if (this.requestedFlushChanges) {\n cancelAnimationFrame(this.requestedFlushChanges)\n this.requestedFlushChanges = null\n }\n })\n }\n }\n\n /**\n * Registers an event listener to the `did-change` event.\n *\n * @param {function(event:Object):void} callback a function to call when the\n * event is triggered.\n * the callback will be called\n * with an event object with\n * the following properties:\n * - start: The change's start row number\n * - end: The change's end row number\n * - screenDelta: the delta in buffer rows between the versions before and\n * after the change\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChange (callback) {\n return this.emitter.on('did-change', callback)\n }\n\n /**\n * Registers an event listener to the `did-change-config` event.\n *\n * @param {function():void} callback a function to call when the event\n * is triggered.\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeConfig (callback) {\n return this.emitter.on('did-change-config', callback)\n }\n\n /**\n * Registers an event listener to the `did-change-scroll-top` event.\n *\n * The event is dispatched when the text editor `scrollTop` value have been\n * changed or when the minimap scroll top have been changed in stand-alone\n * mode.\n *\n * @param {function(minimap:Minimap):void} callback a function to call when\n * the event is triggered.\n * The current Minimap is\n * passed as argument to\n * the callback.\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeScrollTop (callback) {\n return this.emitter.on('did-change-scroll-top', callback)\n }\n\n /**\n * Registers an event listener to the `did-change-scroll-left` event.\n *\n * @param {function(minimap:Minimap):void} callback a function to call when\n * the event is triggered.\n * The current Minimap is\n * passed as argument to\n * the callback.\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeScrollLeft (callback) {\n return this.emitter.on('did-change-scroll-left', callback)\n }\n\n /**\n * Registers an event listener to the `did-change-stand-alone` event.\n *\n * This event is dispatched when the stand-alone of the current Minimap\n * is either enabled or disabled.\n *\n * @param {function(minimap:Minimap):void} callback a function to call when\n * the event is triggered.\n * The current Minimap is\n * passed as argument to\n * the callback.\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidChangeStandAlone (callback) {\n return this.emitter.on('did-change-stand-alone', callback)\n }\n\n /**\n * Registers an event listener to the `did-destroy` event.\n *\n * This event is dispatched when this Minimap have been destroyed. It can\n * occurs either because the {@link destroy} method have been called on the\n * Minimap or because the target text editor have been destroyed.\n *\n * @param {function():void} callback a function to call when the event\n * is triggered.\n * @return {Disposable} a disposable to stop listening to the event\n */\n onDidDestroy (callback) {\n return this.emitter.on('did-destroy', callback)\n }\n\n /**\n * Registers to the config changes for the current editor scope.\n *\n * @return {Disposable} the disposable to dispose all the registered events\n * @access private\n */\n subscribeToConfig () {\n const subs = new CompositeDisposable()\n const opts = { scope: this.textEditor.getRootScopeDescriptor() }\n\n subs.add(atom.config.observe('editor.scrollPastEnd', opts, (scrollPastEnd) => {\n this.scrollPastEnd = scrollPastEnd\n this.adapter.scrollPastEnd = this.scrollPastEnd\n this.emitter.emit('did-change-config')\n }))\n subs.add(atom.config.observe('minimap.charHeight', opts, (configCharHeight) => {\n this.configCharHeight = configCharHeight\n this.updateScrollTop()\n this.emitter.emit('did-change-config')\n }))\n subs.add(atom.config.observe('minimap.charWidth', opts, (configCharWidth) => {\n this.configCharWidth = configCharWidth\n this.updateScrollTop()\n this.emitter.emit('did-change-config')\n }))\n subs.add(atom.config.observe('minimap.interline', opts, (configInterline) => {\n this.configInterline = configInterline\n this.updateScrollTop()\n this.emitter.emit('did-change-config')\n }))\n subs.add(atom.config.observe('minimap.independentMinimapScroll', opts, (independentMinimapScroll) => {\n this.independentMinimapScroll = independentMinimapScroll\n this.updateScrollTop()\n }))\n subs.add(atom.config.observe('minimap.scrollSensitivity', opts, (scrollSensitivity) => {\n this.scrollSensitivity = scrollSensitivity\n }))\n subs.add(atom.config.observe('minimap.redrawDelay', opts, (redrawDelay) => {\n this.redrawDelay = redrawDelay\n }))\n // cdprr is shorthand for configDevicePixelRatioRounding\n subs.add(atom.config.observe(\n 'minimap.devicePixelRatioRounding',\n opts,\n (cdprr) => {\n this.configDevicePixelRatioRounding = cdprr\n this.updateScrollTop()\n this.emitter.emit('did-change-config')\n }\n ))\n\n return subs\n }\n\n /**\n * Returns `true` when the current Minimap is a stand-alone minimap.\n *\n * @return {boolean} whether this Minimap is in stand-alone mode or not.\n */\n isStandAlone () { return this.standAlone }\n\n /**\n * Sets the stand-alone mode for this minimap.\n *\n * @param {boolean} standAlone the new state of the stand-alone mode for this\n * Minimap\n * @emits {did-change-stand-alone} if the stand-alone mode have been toggled\n * on or off by the call\n */\n setStandAlone (standAlone) {\n if (standAlone !== this.standAlone) {\n this.standAlone = standAlone\n this.emitter.emit('did-change-stand-alone', this)\n }\n }\n\n /**\n * Returns the `TextEditor` that this minimap represents.\n *\n * @return {TextEditor} this Minimap's text editor\n */\n getTextEditor () { return this.textEditor }\n\n /**\n * Returns the `TextEditorElement` for the Minimap's `TextEditor`.\n *\n * @return {TextEditorElement} the minimap's text editor element\n */\n getTextEditorElement () {\n if (this.editorElement) { return this.editorElement }\n\n this.editorElement = atom.views.getView(this.getTextEditor())\n return this.editorElement\n }\n\n /**\n * Returns the height of the `TextEditor` at the Minimap scale.\n *\n * @return {number} the scaled height of the text editor\n */\n getTextEditorScaledHeight () {\n return this.adapter.getHeight() * this.getVerticalScaleFactor()\n }\n\n /**\n * Returns the `TextEditor` scroll top value at the Minimap scale.\n *\n * @return {number} the scaled scroll top of the text editor\n */\n getTextEditorScaledScrollTop () {\n return this.adapter.getScrollTop() * this.getVerticalScaleFactor()\n }\n\n /**\n * Returns the `TextEditor` scroll left value at the Minimap scale.\n *\n * @return {number} the scaled scroll left of the text editor\n */\n getTextEditorScaledScrollLeft () {\n return this.adapter.getScrollLeft() * this.getHorizontalScaleFactor()\n }\n\n /**\n * Returns the `TextEditor` maximum scroll top value.\n *\n * When the `scrollPastEnd` setting is enabled, the method compensate the\n * extra scroll by removing the same height as added by the editor from the\n * final value.\n *\n * @return {number} the maximum scroll top of the text editor\n */\n getTextEditorMaxScrollTop () { return this.adapter.getMaxScrollTop() }\n\n /**\n * Returns the `TextEditor` scroll top value.\n *\n * @return {number} the scroll top of the text editor\n */\n getTextEditorScrollTop () { return this.adapter.getScrollTop() }\n\n /**\n * Sets the scroll top of the `TextEditor`.\n *\n * @param {number} scrollTop the new scroll top value\n */\n setTextEditorScrollTop (scrollTop, ignoreTextEditorScroll = false) {\n this.ignoreTextEditorScroll = ignoreTextEditorScroll\n this.adapter.setScrollTop(scrollTop)\n }\n\n /**\n * Returns the `TextEditor` scroll left value.\n *\n * @return {number} the scroll left of the text editor\n */\n getTextEditorScrollLeft () { return this.adapter.getScrollLeft() }\n\n /**\n * Returns the height of the `TextEditor`.\n *\n * @return {number} the height of the text editor\n */\n getTextEditorHeight () { return this.adapter.getHeight() }\n\n /**\n * Returns the `TextEditor` scroll as a value normalized between `0` and `1`.\n *\n * When the `scrollPastEnd` setting is enabled the value may exceed `1` as the\n * maximum scroll value used to compute this ratio compensate for the extra\n * height in the editor. **Use {@link getCapedTextEditorScrollRatio} when\n * you need a value that is strictly between `0` and `1`.**\n *\n * @return {number} the scroll ratio of the text editor\n */\n getTextEditorScrollRatio () {\n return this.adapter.getScrollTop() / (this.getTextEditorMaxScrollTop() || 1)\n }\n\n /**\n * Returns the `TextEditor` scroll as a value normalized between `0` and `1`.\n *\n * The returned value will always be strictly between `0` and `1`.\n *\n * @return {number} the scroll ratio of the text editor strictly between\n * 0 and 1\n */\n getCapedTextEditorScrollRatio () {\n return Math.min(1, this.getTextEditorScrollRatio())\n }\n\n /**\n * Returns the height of the whole minimap in pixels based on the `minimap`\n * settings.\n *\n * @return {number} the height of the minimap\n */\n getHeight () {\n return this.textEditor.getScreenLineCount() * this.getLineHeight()\n }\n\n /**\n * Returns the width of the whole minimap in pixels based on the `minimap`\n * settings.\n *\n * @return {number} the width of the minimap\n */\n getWidth () {\n return this.textEditor.getMaxScreenLineLength() * this.getCharWidth()\n }\n\n /**\n * Returns the height the Minimap content will take on screen.\n *\n * When the Minimap height is greater than the `TextEditor` height, the\n * `TextEditor` height is returned instead.\n *\n * @return {number} the visible height of the Minimap\n */\n getVisibleHeight () {\n return Math.min(this.getScreenHeight(), this.getHeight())\n }\n\n /**\n * Returns the height the minimap should take once displayed, it's either\n * the height of the `TextEditor` or the provided `height` when in stand-alone\n * mode.\n *\n * @return {number} the total height of the Minimap\n */\n getScreenHeight () {\n if (this.isStandAlone()) {\n if (this.height != null) {\n return this.height\n } else {\n return this.getHeight()\n }\n } else {\n return this.adapter.getHeight()\n }\n }\n\n /**\n * Returns the width the whole Minimap will take on screen.\n *\n * @return {number} the width of the Minimap when displayed\n */\n getVisibleWidth () {\n return Math.min(this.getScreenWidth(), this.getWidth())\n }\n\n /**\n * Returns the width the Minimap should take once displayed, it's either the\n * width of the Minimap content or the provided `width` when in standAlone\n * mode.\n *\n * @return {number} the Minimap screen width\n */\n getScreenWidth () {\n if (this.isStandAlone() && this.width != null) {\n return this.width\n } else {\n return this.getWidth()\n }\n }\n\n /**\n * Sets the preferred height and width when in stand-alone mode.\n *\n * This method is called by the for this Minimap so that\n * the model is kept in sync with the view.\n *\n * @param {number} height the new height of the Minimap\n * @param {number} width the new width of the Minimap\n */\n setScreenHeightAndWidth (height, width) {\n if (this.width !== width || this.height !== height) {\n this.height = height\n this.width = width\n this.updateScrollTop()\n }\n }\n\n /**\n * Returns the vertical scaling factor when converting coordinates from the\n * `TextEditor` to the Minimap.\n *\n * @return {number} the Minimap vertical scaling factor\n */\n getVerticalScaleFactor () {\n return this.getLineHeight() / this.textEditor.getLineHeightInPixels()\n }\n\n /**\n * Returns the horizontal scaling factor when converting coordinates from the\n * `TextEditor` to the Minimap.\n *\n * @return {number} the Minimap horizontal scaling factor\n */\n getHorizontalScaleFactor () {\n return this.getCharWidth() / this.textEditor.getDefaultCharWidth()\n }\n\n /**\n * Returns the height of a line in the Minimap in pixels.\n *\n * @return {number} a line's height in the Minimap\n */\n getLineHeight () { return this.getCharHeight() + this.getInterline() }\n\n /**\n * Returns the width of a character in the Minimap in pixels.\n *\n * @return {number} a character's width in the Minimap\n */\n getCharWidth () {\n if (this.charWidth != null) {\n return this.charWidth\n } else {\n return this.configCharWidth\n }\n }\n\n /**\n * Sets the char width for this Minimap. This value will override the\n * value from the config for this instance only. A `did-change-config`\n * event is dispatched.\n *\n * @param {number} charWidth the new width of a char in the Minimap\n * @emits {did-change-config} when the value is changed\n */\n setCharWidth (charWidth) {\n this.charWidth = Math.floor(charWidth)\n this.emitter.emit('did-change-config')\n }\n\n /**\n * Returns the height of a character in the Minimap in pixels.\n *\n * @return {number} a character's height in the Minimap\n */\n getCharHeight () {\n if (this.charHeight != null) {\n return this.charHeight\n } else {\n return this.configCharHeight\n }\n }\n\n /**\n * Sets the char height for this Minimap. This value will override the\n * value from the config for this instance only. A `did-change-config`\n * event is dispatched.\n *\n * @param {number} charHeight the new height of a char in the Minimap\n * @emits {did-change-config} when the value is changed\n */\n setCharHeight (charHeight) {\n this.charHeight = Math.floor(charHeight)\n this.emitter.emit('did-change-config')\n }\n\n /**\n * Returns the height of an interline in the Minimap in pixels.\n *\n * @return {number} the interline's height in the Minimap\n */\n getInterline () {\n if (this.interline != null) {\n return this.interline\n } else {\n return this.configInterline\n }\n }\n\n /**\n * Sets the interline height for this Minimap. This value will override the\n * value from the config for this instance only. A `did-change-config`\n * event is dispatched.\n *\n * @param {number} interline the new height of an interline in the Minimap\n * @emits {did-change-config} when the value is changed\n */\n setInterline (interline) {\n this.interline = Math.floor(interline)\n this.emitter.emit('did-change-config')\n }\n\n /**\n * Returns the status of devicePixelRatioRounding in the Minimap.\n *\n * @return {boolean} the devicePixelRatioRounding status in the Minimap\n */\n getDevicePixelRatioRounding () {\n if (this.devicePixelRatioRounding != null) {\n return this.devicePixelRatioRounding\n } else {\n return this.configDevicePixelRatioRounding\n }\n }\n\n /**\n * Sets the devicePixelRatioRounding status for this Minimap.\n * This value will override the value from the config for this instance only.\n * A `did-change-config` event is dispatched.\n *\n * @param {boolean} devicePixelRatioRounding the new status of\n * devicePixelRatioRounding\n * in the Minimap\n * @emits {did-change-config} when the value is changed\n */\n setDevicePixelRatioRounding (devicePixelRatioRounding) {\n this.devicePixelRatioRounding = devicePixelRatioRounding\n this.emitter.emit('did-change-config')\n }\n\n /**\n * Returns the devicePixelRatio in the Minimap in pixels.\n *\n * @return {number} the devicePixelRatio in the Minimap\n */\n getDevicePixelRatio () {\n return this.getDevicePixelRatioRounding()\n ? Math.floor(devicePixelRatio)\n : devicePixelRatio\n }\n\n /**\n * Returns the index of the first visible row in the Minimap.\n *\n * @return {number} the index of the first visible row\n */\n getFirstVisibleScreenRow () {\n return Math.floor(this.getScrollTop() / this.getLineHeight())\n }\n\n /**\n * Returns the index of the last visible row in the Minimap.\n *\n * @return {number} the index of the last visible row\n */\n getLastVisibleScreenRow () {\n return Math.ceil(\n (this.getScrollTop() + this.getScreenHeight()) / this.getLineHeight()\n )\n }\n\n /**\n * Returns true when the `independentMinimapScroll` setting have been enabled.\n *\n * @return {boolean} whether the minimap can scroll independently\n */\n scrollIndependentlyOnMouseWheel () { return this.independentMinimapScroll }\n\n /**\n * Returns the current scroll of the Minimap.\n *\n * The Minimap can scroll only when its height is greater that the height\n * of its `TextEditor`.\n *\n * @return {number} the scroll top of the Minimap\n */\n getScrollTop () {\n return this.standAlone || this.independentMinimapScroll\n ? this.scrollTop\n : this.getScrollTopFromEditor()\n }\n\n /**\n * Sets the minimap scroll top value when in stand-alone mode.\n *\n * @param {number} scrollTop the new scroll top for the Minimap\n * @emits {did-change-scroll-top} if the Minimap's stand-alone mode is enabled\n */\n setScrollTop (scrollTop) {\n this.scrollTop = Math.max(0, Math.min(this.getMaxScrollTop(), scrollTop))\n\n if (this.standAlone || this.independentMinimapScroll) {\n this.emitter.emit('did-change-scroll-top', this)\n }\n }\n\n /**\n * Returns the minimap scroll as a ration between 0 and 1.\n *\n * @return {number} the minimap scroll ratio\n */\n getScrollRatio () {\n return this.getScrollTop() / this.getMaxScrollTop()\n }\n\n /**\n * Updates the scroll top value with the one computed from the text editor\n * when the minimap is in the independent scrolling mode.\n *\n * @access private\n */\n updateScrollTop () {\n if (this.independentMinimapScroll) {\n try {\n this.setScrollTop(this.getScrollTopFromEditor())\n } catch (err) {\n\n }\n this.emitter.emit('did-change-scroll-top', this)\n }\n }\n\n /**\n * Returns the scroll top as computed from the text editor scroll top.\n *\n * @return {number} the computed scroll top value\n */\n getScrollTopFromEditor () {\n return Math.abs(\n this.getCapedTextEditorScrollRatio() * this.getMaxScrollTop()\n )\n }\n\n /**\n * Returns the maximum scroll value of the Minimap.\n *\n * @return {number} the maximum scroll top for the Minimap\n */\n getMaxScrollTop () {\n return Math.max(0, this.getHeight() - this.getScreenHeight())\n }\n\n /**\n * Returns `true` when the Minimap can scroll.\n *\n * @return {boolean} whether this Minimap can scroll or not\n */\n canScroll () { return this.getMaxScrollTop() > 0 }\n\n /**\n * Updates the minimap scroll top value using a mouse event when the\n * independent scrolling mode is enabled\n *\n * @param {MouseEvent} event the mouse wheel event\n * @access private\n */\n onMouseWheel (event) {\n if (this.scrollIndependentlyOnMouseWheel()) {\n event.stopPropagation()\n\n if (!this.canScroll()) { return }\n\n const { wheelDeltaY } = event\n const previousScrollTop = this.getScrollTop()\n const updatedScrollTop = previousScrollTop - Math.round(wheelDeltaY * this.scrollSensitivity)\n\n event.preventDefault()\n this.setScrollTop(updatedScrollTop)\n }\n }\n\n /**\n * Delegates to `TextEditor#getMarker`.\n *\n * @access private\n */\n getMarker (id) { return this.textEditor.getMarker(id) }\n\n /**\n * Delegates to `TextEditor#findMarkers`.\n *\n * @access private\n */\n findMarkers (o) {\n try {\n return this.textEditor.findMarkers(o)\n } catch (error) {\n return []\n }\n }\n\n /**\n * Delegates to `TextEditor#markBufferRange`.\n *\n * @access private\n */\n markBufferRange (range) { return this.textEditor.markBufferRange(range) }\n\n /**\n * Emits a change events with the passed-in changes as data.\n *\n * @param {Object} changes a change to dispatch\n * @access private\n */\n emitChanges (changes) { this.emitter.emit('did-change', changes) }\n\n /**\n * Enables the cache at the adapter level to avoid consecutive access to the\n * text editor API during a render phase.\n *\n * @access private\n */\n enableCache () { this.adapter.enableCache() }\n\n /**\n * Disable the adapter cache.\n *\n * @access private\n */\n clearCache () { this.adapter.clearCache() }\n\n editorDestroyed () { this.adapter.editorDestroyed() }\n}\n\nMinimap.initClass()\n","{\n \"plugins\": {\n \"type\": \"object\",\n \"properties\": {}\n },\n \"autoToggle\": {\n \"title\": \"Show Minimap On Atom Start\",\n \"type\": \"boolean\",\n \"default\": true,\n \"order\": 1\n },\n \"displayMinimapOnLeft\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"order\": 2\n },\n \"displayCodeHighlights\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"Toggles the render of the buffer tokens in the minimap.\",\n \"order\": 3\n },\n \"displayPluginsControls\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"You need to restart Atom for this setting to be effective.\",\n \"order\": 4\n },\n \"minimapScrollIndicator\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"Toggles the display of a side line showing which part of the buffer is currently displayed by the minimap. This side line will only appear if the minimap is taller than the editor view height.\",\n \"order\": 5\n },\n \"adjustMinimapWidthToSoftWrap\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"If this option is enabled and Soft Wrap is checked then the Minimap max width is set to the Preferred Line Length value.\",\n \"order\": 6\n },\n \"adjustMinimapWidthOnlyIfSmaller\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"If this option and `adjustMinimapWidthToSoftWrap` are enabled the minimap width will never go past the limit sets by CSS. On the other hand, when disabled the minimap will expand to honor the preferred line width.\",\n \"order\": 7\n },\n \"ignoreWhitespacesInTokens\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"When enabled, text editor tokens are rendered as plain blocks, with no regards to the whitespaces they contains.\",\n \"order\": 8\n },\n \"charWidth\": {\n \"type\": \"number\",\n \"default\": 1,\n \"minimum\": 0.5,\n \"order\": 9\n },\n \"charHeight\": {\n \"type\": \"number\",\n \"default\": 2,\n \"minimum\": 0.5,\n \"order\": 10\n },\n \"interline\": {\n \"type\": \"number\",\n \"default\": 1,\n \"minimum\": 0,\n \"description\": \"The space between lines in the minimap in pixels.\",\n \"order\": 11\n },\n \"textOpacity\": {\n \"type\": \"number\",\n \"default\": 0.6,\n \"minimum\": 0,\n \"maximum\": 1,\n \"description\": \"The opacity used to render the line's text in the minimap.\",\n \"order\": 12\n },\n \"moveCursorOnMinimapClick\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Moves the cursor to the beginning of the target line when clicking on the minimap\",\n \"order\": 13\n },\n \"independentMinimapScroll\": {\n \"type\": \"boolean\",\n \"title\": \"Independent Minimap Scroll On Mouse Wheel Events\",\n \"default\": false,\n \"description\": \"When enabled, using the mouse wheel over the Minimap will make it scroll independently of the text editor. The Minimap will still sync with the editor whenever the editor is scrolled, but it will no longer relay the mouse wheel events to the editor.\",\n \"order\": 14\n },\n \"scrollSensitivity\": {\n \"type\": \"number\",\n \"default\": 0.5,\n \"description\": \"The scrolling speed when the `Independent Minimap Scroll On Mouse Wheel Events` setting is enabled.\",\n \"order\": 15\n },\n \"smoothScrolling\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Whether to offset the minimap canvas when scrolling to keep the scroll smooth. When `true` the minimap canvas will be offseted, resulting in a smoother scroll, but with the side-effect of a blurry minimap when the canvas is placed between pixels. When `false` the canvas will always stay at the same position, and will never look blurry, but the scroll will appear more jagged.\",\n \"order\": 16\n },\n \"createPluginInDevMode\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"order\": 17\n },\n \"absoluteMode\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"When enabled the text editor content will be able to flow below the minimap.\",\n \"order\": 18\n },\n \"adjustAbsoluteModeHeight\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"When enabled and `Absolute Mode` is also enabled, the minimap height will be adjusted to only take the space required by the text editor content, leaving the space below triggering mouse events on the text editor. **Be aware this can have some impact on performances as the minimap canvases will be resized every time a change in the editor make its height change.**\",\n \"order\": 19\n },\n \"redrawDelay\": {\n \"type\": \"number\",\n \"default\": 400,\n \"minimum\": 0,\n \"maximum\": 2000,\n \"description\": \"Controls how often (in ms) the minimap should redraw itself after changing the text editor's contents. Setting this to 100ms or higher could dramatically improve editor responsiveness when working with large files. A value of 0 will cause the minimap to redraw itself immediately on each change.\",\n \"order\": 20\n },\n \"devicePixelRatioRounding\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"description\": \"Toggles the rounding of the devicePixelRatio in the minimap.\",\n \"order\": 21\n },\n \"useHardwareAcceleration\": {\n \"type\": \"boolean\",\n \"default\": true,\n \"order\": 22\n },\n \"scrollAnimation\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Enables animations when scrolling by clicking on the minimap.\",\n \"order\": 23\n },\n \"scrollAnimationDuration\": {\n \"type\": \"integer\",\n \"default\": 300,\n \"description\": \"The duration of scrolling animations when clicking on the minimap.\",\n \"order\": 24\n },\n \"maxTokensInOneLine\": {\n \"type\": \"integer\",\n \"default\": 160,\n \"description\": \"The maximum number of tokens that are rendered for each line.\",\n \"order\": 25\n }\n}\n"],"names":["$parcel$interopDefault","a","__esModule","default","$parcel$defineInteropFlag","Object","defineProperty","value","$parcel$export","e","n","v","get","enumerable","$parcel$exportWildcard","dest","source","keys","forEach","key","_defineProperties","target","props","i","length","descriptor","configurable","writable","_createClass","Constructor","protoProps","staticProps","prototype","$b3508082ccc94ac5632836bea625b504$exports","Disposable","disposalAction","instance","this","TypeError","_classCallCheck","disposed","object","dispose","undefined","assertDisposable","disposable","$b3508082ccc94ac5632836bea625b504$init","isDisposable","$af49f9500b071793f41183c3fc968f0a$exports","CompositeDisposable","disposables","Set","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","arguments","Symbol","iterator","next","done","add","err","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","delete","remove","clear","Emitter","exceptionHandler","_this","exceptionHandlers","dispatch","exceptionHandlingDispatch","push","splice","indexOf","simpleDispatch","handler","exception","map","subscriptions","handlersByEventName","eventName","unshift","_this2","Error","cleanup","off","on","handlerToRemove","handlers","handlerIndex","handlersCopy","slice","constructor","_this3","promises","Promise","all","then","resolve","result","_arr","_i","$fd6b7bc94644b0899385e1f27c8552ee$exports","$9dce6407d6c20f090b719e685f463558$exports","$9dce6407d6c20f090b719e685f463558$export$Disposable","$9dce6407d6c20f090b719e685f463558$export$CompositeDisposable","Deprecation","getRawStack","grim","$55ca347d8fd6b60a0596d30a3398bf05$exports","message","fileName","lineNumber","callCount","stackCount","stacks","stackCallCounts","getFunctionNameFromCallsite","callsite","deserialize","_arg","deprecation","stack","_len","addStack","metadata","_ref","_ref1","_ref2","functionName","isToplevel","getFunctionName","isConstructor","getMethodName","getTypeName","getLocationFromCallsite","location","isNative","isEval","getEvalOrigin","getFileName","getLineNumber","getColumnNumber","getFileNameFromCallSite","getOriginName","originName","getMessage","getStacks","parsedStack","parsedStacks","parseStack","getStackCount","getCallCount","callerLocation","_base","_base1","serialize","$parcel$global","__grim__","deprecations","emitter","includeDeprecatedAPIs","getDeprecations","deprecationsByLineNumber","deprecationsByPackage","packageName","getDeprecationsLength","clearDeprecations","logDeprecations","sort","b","console","warn","deprecate","deprecationSite","error","originalStackTraceLimit","_base2","stackTraceLimit","emit","addSerializedDeprecation","serializedDeprecation","callback","originalPrepareStackTrace","prepareStackTrace","captureStackTrace","$80d5aeff13b5e95dd4619c4d698db1a2$exports","ExcludedClassProperties","ExcludedPrototypeProperties","Mixin","name","$84a20617969a4e0be8ad9de594d71d32$exports","extended","includeInto","extend","hasOwnProperty","included","call","getOwnPropertyNames","$84a20617969a4e0be8ad9de594d71d32$init","$19edd3126c29b080bf570893ee7faab0$exports","Ancestors","[object Object]","node","selector","parents","eachParent","parent","matches","block","results","parentNode","queryParentSelectorAll","queryParentSelector","_atom","$5b96436dbc0d4206c11cec76d6a355c8$exports","addDisposableEventListener","event","listener","options","addEventListener","removeEventListener","Batch","batch","size","topLevel","bottomLevel","level","fn","process","fns","getState","element","isCollection","obj","Array","isArray","toArray","collection","array","isElement","nodeType","getOption","defaultValue","VERSION","root","self","global","Function","ArrayProto","ObjProto","SymbolProto","toString","supportsArrayBuffer","ArrayBuffer","nativeIsArray","nativeKeys","nativeCreate","create","nativeIsView","isView","_isNaN","isNaN","_isFinite","isFinite","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","MAX_ARRAY_INDEX","Math","restArguments","func","startIndex","max","rest","index","args","apply","isObject","type","isNull","isUndefined","isBoolean","$9fc98e209433ac2812e546610c2637dd$export$toString","tagTester","$a9b65e2b2c5b6b34003888032e2e223d$export$default","$9fc98e209433ac2812e546610c2637dd$export$nativeIsArray","isFunction","nodelist","$9fc98e209433ac2812e546610c2637dd$export$root","document","childNodes","Int8Array","has","$9fc98e209433ac2812e546610c2637dd$export$hasOwnProperty","isArguments","$7d72039ada400a78e9dd98e7ac775ceb$export$default","$35f8dcbb5c4506cdc1fef81f7b2390bd$export$default","$9fc98e209433ac2812e546610c2637dd$export$_isFinite","parseFloat","$cde99bd150d2a95eccef5cecb685e45e$export$default","$9fc98e209433ac2812e546610c2637dd$export$_isNaN","constant","createSizePropertyCheck","getSizeProperty","sizeProperty","$9fc98e209433ac2812e546610c2637dd$export$MAX_ARRAY_INDEX","shallowProperty","$3d79eecad9df89c6f214bb90b1b82f89$export$default","isTypedArray","$9fc98e209433ac2812e546610c2637dd$export$nativeIsView","$3cbb4544a0dfa2431bf51c0b6984e0d0$export$default","$24499c1fc94640d17833c1e369853250$export$default","typedArrayPattern","test","$3997a5e056cdb72f6fc7001aafc07dde$export$default","$4d88334fdfecaba5dc0c5ea08e3d6760$export$default","$9fc98e209433ac2812e546610c2637dd$export$supportsArrayBuffer","$901465c5f1947022cb944fbfeb0f665f$export$default","$b12b67ed6dc3e9bfa803ece8df2d3494$export$default","collectNonEnumProps","hash","l","contains","emulatedSet","nonEnumIdx","$9fc98e209433ac2812e546610c2637dd$export$nonEnumerableProps","proto","$e0b8c83e6ebbaf38f398e63e4ce55b3f$export$default","$9fc98e209433ac2812e546610c2637dd$export$ObjProto","prop","$4dbd58b737f57cecb18af24d3c9e3afa$export$default","$9fc98e209433ac2812e546610c2637dd$export$nativeKeys","$9fc98e209433ac2812e546610c2637dd$export$hasEnumBug","$cd583eeb44c61d449275b672fed8486a$export$default","isEmpty","$f016e8c987a9967d114688f575fc5e00$export$default","$f23e86db99050b1fca1fc8a752c4c246$export$default","$348dcb7d8d919c5683cf9c95fc453392$export$default","$63fadb644861edde6c3e936292bd6f93$export$default","$d6246ecc671fbc8d098d9823982714c6$export$default","isMatch","attrs","_keys","_","_wrapped","$9fc98e209433ac2812e546610c2637dd$export$VERSION","valueOf","toJSON","String","eq","aStack","bStack","deepEq","$b5117a6221a90ca615d83480bbc71e9d$export$default","className","$9fc98e209433ac2812e546610c2637dd$export$SymbolProto","DataView","byteLength","getUint8","$76689a96aeb2f2579b0857a7addc9bfc$export$default","buffer","areArrays","aCtor","bCtor","pop","isEqual","allKeys","values","pairs","invert","functions","names","createAssigner","keysFunc","defaults","$c391466339f791f97e34b450f508b291$export$default","$2a956c71211716d00e01778c558d081d$export$default","baseCreate","$9fc98e209433ac2812e546610c2637dd$export$nativeCreate","Ctor","$f3701e598e19692de43c22dd818f7415$export$default","$d9aae3a9c4b607e8b5d2f5e848da8777$export$default","clone","$6058d122b8eb41f4b2b6bf9795377d03$export$default","tap","interceptor","path","identity","matcher","$60d387edab5f035c465b8119cecd3838$export$default","deepGet","property","$5e70335596febcfeb7dc08e2d074ee45$export$default","optimizeCb","context","argCount","accumulator","baseIteratee","$d5277c8b5b8e82374b856fbda4af981a$export$default","$d2f3a4dec8e7c1c52a4d5725693cd19c$export$default","$ea6a2239e270f179c8d131ea406f64d2$export$default","$0e7da0cef898e7c6c0abbf452915347e$export$default","iteratee","$7bbec27c266626fdcbe4957d09a4ddb9$export$default","Infinity","cb","$884aee35d983d6adb169a7bdff9cbe52$export$default","mapObject","$b8dee4d6b9e1e61e4a7c78289aab2000$export$default","currentKey","noop","propertyOf","times","accum","random","min","floor","Date","now","getTime","createEscaper","escaper","match","join","testRegexp","RegExp","replaceRegexp","string","replace","&","<",">","\"","'","`","$06d9cd557178713dd87901a702694ad0$export$default","$310686b726f6dd6b9b4285977a9df538$export$default","$7ef3c71d7dc1a481487f017d0ffe7524$export$default","$15c57a793abc38c513c316178b79195d$export$default","templateSettings","evaluate","interpolate","escape","escapeChar","escapes","template","text","settings","oldSettings","$48e81fb22db6154713208cc30ac21c80$export$default","render","noMatch","offset","escapeRegExp","variable","data","fallback","uniqueId","prefix","id","idCounter","chain","_chain","executeBound","sourceFunc","boundFunc","callingContext","partial","$06a82467e0276d0eded815440f4757b1$export$default","boundArgs","placeholder","bound","position","$15939a41c115ea4f9b34f448b15ae537$export$default","callArgs","concat","flatten","input","depth","strict","output","idx","j","len","memoize","hasher","cache","address","wait","setTimeout","throttle","timeout","previous","later","leading","$b9e53753eacb13cd16e3daf35939feaa$export$default","throttled","_now","remaining","clearTimeout","trailing","cancel","debounce","immediate","debounced","callNow","$04d5cb308d5821a347575e7ccb079653$export$default","wrap","wrapper","$41e7b6e16e1e6df82f2616f4ce7635dc$export$default","negate","predicate","compose","start","after","before","memo","findKey","createPredicateIndexFinder","dir","$a717b990a6ee23385a268f4d3f57e14e$export$default","sortedIndex","low","high","mid","createIndexFinder","predicateFind","item","$9fc98e209433ac2812e546610c2637dd$export$slice","$034228496b8dc4926896543968de8b48$export$default","$7514a4a437ed42434cfaf54b25eb2ecb$export$default","$7556cf2b34044db2c55aa71d56593459$export$default","$8f2b0129aecd034f76ba2d49148160f4$export$default","find","$c52359a26f4e12c1c48c6b879819f6d7$export$default","findWhere","$ae38f25daf226194e7a4a008733f2b8c$export$default","each","createReduce","reducer","initial","filter","$bfe7f67b8f961db77765524ddd2d4226$export$default","list","reject","$3a6e55738d64fa413d41f55e32e79597$export$default","$55fa3203dcd545c4d681d8d429487b8d$export$default","every","some","fromIndex","guard","$918d6e04a7bb702035c5912b458e6622$export$default","$342a3fd593c95fd60c3ef0814c836638$export$default","pluck","$032212caa19fe89bb40de27c017a981e$export$default","where","computed","lastComputed","sample","$18d04281a7d83c460dcc3e2acd838fc3$export$default","$6f8789b4d804a609a4ef1d1864b8df15$export$default","last","rand","temp","shuffle","$5279219fa1a0e605e7340ced372e48bc$export$default","sortBy","$a30d54f47683c2aa2c3889f2811d1d48$export$default","criteria","left","right","group","behavior","partition","reStrSymbol","keyInObj","$5a8a2e2cecaaa01a1479ad72a7d63e21$export$default","$5bbf92ff484a3d884ba025f5dbbc31a6$export$default","first","$7e1e866980a1da4ff32cb9561925742e$export$default","$26a0033a6d0ce8604476c74dbcba3b0c$export$default","compact","Boolean","$60b90ec160a9c2ca9491dd4b76a4aa0a$export$default","uniq","isSorted","$f6ca052f51400e0ca199107db0c75c53$export$default","seen","intersection","argsLength","unzip","$f9153aced76ea534fa99f8a079317110$export$default","range","stop","step","ceil","chunk","count","chainResult","mixin","$52a52e066fb094fcfbaae0dc0692e70d$export$default","$9fc98e209433ac2812e546610c2637dd$export$push","$e76fd469f887abbd8ccc42b7c842b761$export$default","\\","\r","\n","
","
","$155aa8985af2db9d508a5e644d8f0d92$export$default","$14aded0641889420e1f289287da59ac5$export$default","$2ab19f985cb2087dfd2cffa114d99b38$export$default","$c9c715fed72676cfe4933c7819db366a$export$default","contextPath","method","$b5c701d764c65c06a97a0e6bd4284c64$export$default","pass","$9606dc9e72bcb851708023ec5af74bcc$export$default","otherArrays","$13764b773ce1dc831e67388200627ec7$export$default","arrays","$469f153267836b6467a4db37c1c57000$export$default","$9c37e334972a0861a9add3a6b0c00f9e$export$default","$9fc98e209433ac2812e546610c2637dd$export$ArrayProto","drawHighlightDecoration","decoration","decorationColor","getMarker","getScreenRange","rowSpan","end","row","fillStyle","fillRect","column","charWidth","yRow","lineHeight","screenRow","x","canvasWidth","drawCustomDecoration","editorElement","renderRoutine","getProperties","color","transparentize","opacity","computeIntactRanges","firstRow","lastRow","changes","offscreenFirstRow","offscreenLastRow","intactRanges","offscreenRow","change","newIntactRanges","intactLen","screenDelta","bufferDelta","truncateIntactRanges","include","cls","mixins","k","getOwnPropertyDescriptor","elementName","$34748a7cbc634b40e145cdae3623d7e8$exports","registerOrUpdateElement","class","updateOverlayStyle","basis","overlayStyle","textContent","extractMouseEventData","mouseEvent","pageX","y","pageY","isLeftMouse","button","isMiddleMouse","extractTouchEventData","touchEvent","touch","changedTouches","applyStyles","styles","cssText","style","makeTranslate","useHardwareAcceleration","makeScale","animate","from","to","duration","progress","update","passed","delta","cos","PI","swing","requestAnimationFrame","registerPlugin","plugin","plugins","pluginsSubscriptions","atom","config","settingsKey","orderSettingsKey","getConfigSchema","properties","title","description","set","observe","updatesPluginActivationState","order","updatePluginsOrderMap","commands","togglePluginActivation","registerPluginControls","unregisterPlugin","unregisterPluginControls","boolean","deactivateAllPlugins","eachPlugin","deactivatePlugin","pluginActive","isActive","settingActive","activatePlugin","pluginsOrderMap","getPluginsOrder","minimapViewProvider","model","Minimap","$debb34270446c1206b399aa33765d50d$export$default","setModel","$6353a4c6004c406435aadc8bd855d8b2$$interop$default","packages","getLoadedPackage","configSchema","toggle","active","toggled","editorsMinimaps","destroy","workspace","observeTextEditors","textEditor","minimap","minimapForEditor","minimapElement","views","getView","attach","async","generatePlugin","MinimapPluginGeneratorElement","$e72530f962e68d8c81126e9fd210cd32$exports","require","view","onDidActivate","onDidDeactivate","onDidCreateMinimap","onDidAddPlugin","onDidRemovePlugin","onDidActivatePlugin","onDidDeactivatePlugin","onDidChangePluginOrder","minimapClass","minimapForEditorElement","getModel","editorSubscription","onDidDestroy","standAloneMinimapForEditor","standAlone","getActiveMinimap","getActiveTextEditor","observeMinimaps","DisposableEvents","NO_SELECTOR","eachPair","callbackProperties","decorateElementClass","decorateElementPrototype","globalThis","window","requirePackages","failures","remains","required","solved","pkg","failHandler","promise","reason","activatePackage","activatedPackage","mainModule","fail","catch","__CUSTOM_HTML_ELEMENTS_CLASSES__","__ATOM_UTILS_CUSTOM_ELEMENT_CLASSES__","ref","$b9dde26a6a947d47d80f4f84ebbe0c09$exports","nodeName","elementClass","elementPrototype","klass","HTMLElement","registerElement","$19edd3126c29b080bf570893ee7faab0$init","AncestorsMethods","$5b96436dbc0d4206c11cec76d6a355c8$init","EventsDelegation","$8986ead82370460f6f70f1bdf5a78483$exports","subscribeTo","events","disposablesForObject","eventsForObject","eventsMap","WeakMap","disposablesMap","createEventListener","unsubscribeFrom","decorateEvent","eachSelectorFromTarget","isPropagationStopped","nodeAndItsAncestors","eachSelector","matched","targetMatch","isImmediatePropagationStopped","split","overriddenStop","overriddenStopImmediate","Event","stopPropagation","stopImmediatePropagation","SpacePenDSL","BabelSpacePenDSL","Builder","SelfClosingTags","Tags","Template","tag","buildContent","content","$3ed32c12f72f0425c25152175eaf1ca9$exports","super","__content__","__create__","__createdCallback__","useShadowRoot","__useShadowRoot__","html","buildHtml","shadowRoot","createShadowRoot","innerHTML","wireOutlets","querySelectorAll","getAttribute","removeAttribute","Babel","currentBuilder","subview","tagName","raw","postProcessingSteps","extractOptions","openTag","attributes","closeTag","attributeName","attributePairs","attributesString","escapedString","outletName","subviewId","parentView","replaceWith","arg","$3ed32c12f72f0425c25152175eaf1ca9$init","$c139e7eff7ad63b8ef719478a7110893$exports","$944a832fe4bdae8ba9b729d6dd38def3$exports","stateHandler","isDetectable","state","markAsDetectable","isBusy","busy","markBusy","$2fd64cde67a354959885ca4cb5a55258$exports","idHandler","getListeners","eventListeners","removeListener","listeners","removeAllListeners","$0610affe2bd8d58567b675db9dd430a0$exports","idCount","generate","$d2c1e4b1fcb9ae37531751edaa87dee2$exports","idGenerator","$4a43573f59591a3d302987555bbffb6f$exports","quiet","reporter","log","attachFunction","f","detector","$44345ad28f1f44bce8808c63fff1df78$exports","isIE","version","agent","navigator","userAgent","toLowerCase","div","createElement","getElementsByTagName","undef","isLegacyOpera","opera","$d41b1795243785d2b4fb83045d8a9dde$exports","$57abeb119e956f5fa61c43d2d825c6c3$exports","processBatch","isProcessing","processingBatch","processBatchAsync","asyncFrameHandler","asyncProcess","autoProcess","force","localAsyncProcess","$31b74d61d0ec6a144b09a75c2bbc872c$exports","initState","cleanState","$bab776c2a10b8603241800727ab15d84$exports","buildCssTextString","rules","seperator","important","trim","getObject","batchProcessor","makeDetectable","mutateDom","alterPositionStyles","setProperty","removeRelativeStyles","getNumericalValue","positionCheckPerformed","OBJECT_STYLE","tabIndex","setAttribute","onload","getDocument","contentDocument","checkForObjectDocumentTimeoutId","objectDocument","appendChild","getComputedStyle","width","offsetWidth","height","offsetHeight","startSize","injectObject","addListener","listenerProxy","proxy","attachEvent","defaultView","uninstall","detachEvent","removeChild","$dd97c8cc568463fe64416c9556814fbf$exports","initDocument","targetDocument","styleId","containerClass","getElementById","containerAnimationClass","containerAnimationActiveClass","head","styleElement","injectStyle","injectScrollStyle","detectionContainerClass","addEvent","el","removeEvent","getExpandElement","container","getShrinkElement","scrollbarSizes","child","body","insertBefore","firstChild","widthSize","clientWidth","heightSize","clientHeight","getScrollbarSizes","debug","isUnrendered","getStyle","elementStyle","top","bottom","widthCSS","heightCSS","storeStyle","storeCurrentSize","lastWidth","lastHeight","getWidthOffset","getHeightOffset","getExpandWidth","getExpandHeight","positionScrollbars","expand","shrink","expandWidth","expandHeight","shrinkWidth","getShrinkWidth","shrinkHeight","getShrinkHeight","scrollLeft","scrollTop","injectContainerElement","addAnimationClass","onAnimationStart","onRendered","injectScrollElements","onExpandScroll","onExpand","onShrinkScroll","onShrink","rootContainer","scrollbarWidth","scrollbarHeight","containerContainerStyle","containerStyle","expandStyle","shrinkStyle","expandChildStyle","shrinkChildStyle","containerContainer","expandChild","shrinkChild","registerListenersAndPositionElements","updateChildSizes","getExpandChildElement","updateDetectorElements","sizeChanged","areElementsInjected","notifyListenersIfNeeded","lastNotifiedWidth","lastNotifiedHeight","handleScroll","finalizeDomMutation","ready","install","ownerDocument","isInDocument","isDetached","$f587f14a8facf4cc8ef1f41ca9a1ded5$exports","defaultIdHandler","globalOptions","callOnAdd","detectionStrategy","eventListenerHandler","elementUtils","desiredStrategy","importantCssRules","strategyOptions","onReadyCallbacks","listenTo","elements","onResizeCallback","elementsReady","onReadyCallback","isPlainObject","macModifierKeyMap","nonMacModifierKeyMap","plus","shiftKeyMap","splitKeyPath","__slice","$895375a7c29b7c56860aa3038611cf34$export$default","$33a2a2ed40f62219293b5fc15f2cac90$exports","cmd","ctrl","alt","option","shift","enter","up","down","~","+","|","{","}",":","?","keyPath","keyPathArray","substring","substr","adviseBefore","methodName","advice","original","camelize","m","toUpperCase","capitalize","word","compactObject","newObject","dasherize","letter","deepClone","deepExtend","deepContains","endsWith","suffix","escapeAttribute","humanizeEventName","eventDoc","namespace","namespaceDoc","undasherize","humanizeKey","platform","modifierKeyMap","humanizeKeystroke","keystroke","humanizedKeystrokes","keystrokes","splitKeystroke","_j","_len1","isSubset","potentialSubset","potentialSuperset","losslessInvert","inverted","multiplyString","finalString","pluralize","singular","plural","setValueForKeyPath","hasKeyPath","spliceWithArray","originalArray","insertedArray","chunkSize","chunkStart","_results","sum","uncamelcase","underscore","valueForKeyPath","isEqualForProperties","aCtorValid","aKeyCount","aValue","bCtorValid","bKeyCount","equal","stackIndex","isRegExp","$a7d4afabad3ac01364c7629a89eaa9d8$exports","CanvasLayer","canvas","desynchronized","getContext","webkitImageSmoothingEnabled","imageSmoothingEnabled","offscreenCanvas","offscreenContext","setSize","resetOffscreenSize","getSize","copyToOffscreen","drawImage","copyFromOffscreen","copyPartFromOffscreen","srcY","destY","clearCanvas","clearRect","DOMStylesReader","domStylesCache","Map","retrieveStyleFromDom","scopes","targetNode","cachedData","ensureDummyNodeExistence","dummyNode","scope","getPropertyValue","r","g","hue","Number","angle","clamp","num","matrix","lumR","lumG","lumB","sin","rotate","rotateHue","visibility","invalidateDOMStylesCache","CanvasDrawer","$84a20617969a4e0be8ad9de594d71d32$$interop$default","initializeCanvas","tokensLayer","$2a5b6563d747c2be4acb1e82885bc6f7$export$default","backLayer","frontLayer","pendingChanges","pendingBackDecorationChanges","pendingFrontDecorationChanges","maxTokensInOneLine","$3c592bd390ebd248ded065c23d62e662$export$default","getFrontCanvas","attachCanvases","setCanvasesSize","updateCanvas","getFirstVisibleScreenRow","getLastVisibleScreenRow","updateTokensLayer","updateBackDecorationsLayer","updateFrontDecorationsLayer","redrawRangesOnLayer","drawLines","drawBackDecorationsForLines","drawFrontDecorationsForLines","getTextOpacity","textOpacity","getDefaultColor","getTokenColor","token","scopeDescriptor","getDecorationColor","scopeString","layer","devicePixelRatio","getDevicePixelRatio","getLineHeight","intact","drawLinesForRanges","ranges","currentRow","offsetRow","charHeight","getCharHeight","getCharWidth","decorations","decorationsByTypeThenRows","canvasHeight","renderData","orders","getTextEditorElement","backgroundDecorationDispatcher","drawDecorations","fill","frontDecorationDispatcher","displayCodeHighlights","editor","getTextEditor","lastLine","startRow","endRow","invisibleRegExp","invisibles","getInvisibles","regexp","cr","eol","space","tab","s","getInvisibleRegExp","getScreenLineCount","editorTokensForScreenRow","tokensForScreenRow","numTokenToRender","iToken","eachTokenForScreenRows","line","ignoreWhitespacesInTokens","chars","drawToken","types","decorationsToRender","decorationDrawer","highlight-under","gutter","highlight-over","bottomWidth","colSpan","xBottomStart","xEnd","xStart","yStart","yEnd","minimapQuickSettingsElement","$346eedfd2280b61094ff36834414960f$export$default","$4a2375bcc1817d0a9f962e73140919e0$export$default","outlet","ol","li","createdCallback","selectedItem","itemsActions","subs","addItemFor","removeItemFor","activateItem","deactivateItem","core:move-up","selectPreviousItem","core:move-down","selectNextItem","core:cancel","core:confirm","toggleSelectedItem","codeHighlights","classList","mousedown","preventDefault","absoluteMode","adjustAbsoluteModeHeight","hiddenInput","focusout","passive","onLeftButton","onRightButton","bool","initList","focus","itemsDisposables","nextSibling","previousSibling","lastChild","action","separator","initClass","elementResizeDetector","$f587f14a8facf4cc8ef1f41ca9a1ded5$$interop$default","strategy","$34efbe603bf9c69c564095b34c55c63e$export$default","visibleAreaSubscription","quickSettingsSubscription","dragSubscription","openQuickSettingSubscription","displayMinimapOnLeft","minimapScrollIndicator","displayPluginsControls","adjustToSoftWrap","visibleArea","controls","scrollIndicator","openQuickSettings","quickSettingsElement","attached","attachedToTextEditor","wasVisible","frameRequested","flexBasis","initializeContent","updateMinimapFlexPosition","measureHeightAndWidth","initializeScrollIndicator","disposeScrollIndicator","requestUpdate","initializeOpenQuickSettings","disposeOpenQuickSettings","requestForcedUpdate","smoothScrolling","adjustOnlyIfSmaller","attachedCallback","pollDocument","pollDOM","intersectionObserver","IntersectionObserver","entries","intersectionRect","isVisible","measureDimensions","onDidAddStyleElement","subscribeToMediaQuery","detachedCallback","minimaps","detach","createVisibleArea","createControls","mousewheel","onMouseWheel","canvasPressed","touchstart","startDrag","removeVisibleArea","removeControls","$a29ceb2f6322deaf5d073c96eab152d9$export$default","getBoundingClientRect","onDidChangeScrollTop","onDidChangeScrollLeft","onDidChangeConfig","onDidChangeStandAlone","setStandAlone","isStandAlone","onDidChange","onDidChangeDecorationRange","setScreenHeightAndWidth","enableCache","visibleAreaLeft","getTextEditorScaledScrollLeft","visibleAreaTop","getTextEditorScaledScrollTop","getScrollTop","visibleWidth","round","getTextEditorScaledHeight","transform","border-left-width","canvasTop","canvasTransform","scale","canScroll","minimapScreenHeight","getScreenHeight","indicatorHeight","getHeight","indicatorScroll","getScrollRatio","updateCanvasesSize","clearCache","setDisplayCodeHighlights","visibilityChanged","checkForVisibilityChange","forceUpdate","safeFlexBasis","wasResized","lineLength","softWrap","softWrapAtPreferredLineLength","maxCanvasHeight","newHeight","canvasLeftMousePressed","canvasMiddleMousePressed","deltaY","textEditorElement","getLineHeightInPixels","getTextEditorHeight","textEditorScrollTop","pixelPositionForScreenPosition","setCursorScreenPosition","independentScroll","scrollIndependentlyOnMouseWheel","getTextEditorScrollTop","minimapFrom","minimapTo","getTextEditorMaxScrollTop","getMaxScrollTop","t","setTextEditorScrollTop","setScrollTop","offsetTop","ratio","getVisibleHeight","mediaQuery","matchMedia","mediaListener","dragOffset","mousemoveHandler","drag","dragendHandler","endDrag","touchmoveHandler","LegacyAdapter","Decoration","decorationProperties","marker","setProperties","destroyed","markerDestroyDisposable","screenRange","isDestroyed","onDidChangeProperties","getId","isType","newProperties","oldProperties","DecorationManagement","initializeDecorations","decorationsById","decorationsByMarkerId","decorationMarkerChangedSubscriptions","decorationMarkerDestroyedSubscriptions","decorationUpdatedSubscriptions","decorationDestroyedSubscriptions","getDecorations","onDidAddDecoration","onDidRemoveDecoration","onDidChangeDecoration","onDidUpdateDecoration","decorationForId","decorationsForScreenRowRange","startScreenRow","endScreenRow","markers","findMarkers","intersectsScreenRowRange","decorationsByTypeThenRowsCache","invalidateDecorationForScreenRowsCache","decorateMarker","decorationParams","filePath","re","getPackageDirPaths","sep","getOriginatorPackageName","removeAllDecorationsForMarker","emitDecorationChanges","oldStart","oldTailScreenPosition","oldEnd","oldHeadScreenPosition","newStart","newTailScreenPosition","newEnd","newHeadScreenPosition","rangesDiffs","diffs","isLessThan","computeRangesDiffs","emitRangeChanges","$99f4a57658bcf5b25fdd3cd827e7e8f8$export$default","removeDecoration","editorDestroyed","lastRenderedScreenRow","firstRenderedScreenRow","subscription","removedAllMarkerDecorations","adapter","removeAllDecorations","decorationMarkerChangedSubscriptionsValues","decorationMarkerDestroyedSubscriptionsValues","decorationUpdatedSubscriptionsValues","decorationDestroyedSubscriptionsValues","decorationsByIdValues","StableAdapter","useCache","heightCache","scrollTopCache","scrollLeftCache","maxScrollTopCache","computeScrollTop","lineTop","getScrollLeft","maxScrollTop","getVersion","scrollPastEnd","getScrollHeight","component","nextModelId","$ebaeaefd5eb0577755be85f4130ef5b5$export$default","configCharHeight","configCharWidth","interline","configInterline","devicePixelRatioRounding","configDevicePixelRatioRounding","redrawDelay","pendingChangeEvents","flushChangesTimer","$7b609095f03a15b7dc9e072c6962cc6b$export$default","notifications","addWarning","displayBuffer","configSubscription","subscribeToConfig","onDidChangeGrammar","ignoreTextEditorScroll","inChangeScrollTop","updateScrollTop","scheduleChanges","onDidTokenize","requestFlushChanges","flushChanges","emitChanges","requestedFlushChanges","cancelAnimationFrame","opts","getRootScopeDescriptor","independentMinimapScroll","scrollSensitivity","cdprr","getVerticalScaleFactor","getHorizontalScaleFactor","getTextEditorScrollLeft","getTextEditorScrollRatio","getCapedTextEditorScrollRatio","getWidth","getMaxScreenLineLength","getVisibleWidth","getScreenWidth","getDefaultCharWidth","getInterline","setCharWidth","setCharHeight","setInterline","getDevicePixelRatioRounding","setDevicePixelRatioRounding","getScrollTopFromEditor","abs","wheelDeltaY","updatedScrollTop","o","markBufferRange","JSON","parse","subscriptionsOfCommands","MinimapServiceV1"],"version":3,"file":"main.js.map"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index af7acf16..e18cdd56 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "minimap", - "version": "4.36.7", + "version": "4.36.8", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 7564e029..e55926eb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "minimap", "main": "./dist/main.js", - "version": "4.36.7", + "version": "4.36.8", "description": "A preview of the full source code.", "author": "Fangdun Cai , Amin Yahyaabadi ", "keywords": [